API 参考
LibreFang 在守护进程运行时提供 REST API、WebSocket 端点和 SSE 流式传输。默认监听地址为 http://127.0.0.1:4200。
所有响应都包含安全头(CSP、X-Frame-Options、X-Content-Type-Options、HSTS),并受 GCRA 成本感知速率限制器保护,支持按 IP 的令牌桶追踪和自动过期条目清理。LibreFang 实现了 16 个安全系统,包括 Merkle 审计追踪、污点追踪、WASM 双重计量、Ed25519 清单签名、SSRF 防护、子进程沙箱和密钥归零等。
目录
- 认证
- Agent 端点
- 工作流端点
- 触发器端点
- 内存端点
- 通道端点
- 模板端点
- 系统端点
- 模型目录端点
- 提供商配置端点
- 技能与市场端点
- ClawHub 端点
- MCP 与 A2A 协议端点
- 审计与安全端点
- 使用量与分析端点
- 迁移端点
- 会话管理端点
- WebSocket 协议
- SSE 流式传输
- OpenAI 兼容 API
- 错误响应
认证
在 config.toml 中配置 API 密钥后,所有端点(除 /api/health 和 / 外)都需要 Bearer 令牌:
Authorization: Bearer <your-api-key>
设置 API 密钥
在 ~/.librefang/config.toml 中添加:
api_key = "your-secret-api-key"
无认证模式
如果 api_key 为空或未设置,API 可以无认证访问。此模式下 CORS 仅限于 localhost 来源。
公共端点(无需认证)
GET /api/healthGET /(WebChat UI)
Agent 端点
GET /api/agents
列出所有运行中的 Agent。
响应 200 OK:
[
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "hello-world",
"state": "Running",
"created_at": "2025-01-15T10:30:00Z",
"model_provider": "groq",
"model_name": "llama-3.3-70b-versatile"
}
]
GET /api/agents/{id}
获取单个 Agent 的详细信息。
响应 200 OK:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "hello-world",
"state": "Running",
"created_at": "2025-01-15T10:30:00Z",
"session_id": "s1b2c3d4-...",
"model": {
"provider": "groq",
"model": "llama-3.3-70b-versatile"
},
"capabilities": {
"tools": ["file_read", "file_list", "web_fetch"],
"network": []
},
"description": "A friendly greeting agent",
"tags": []
}
POST /api/agents
从 TOML 清单创建新 Agent。
请求体(JSON):
{
"manifest_toml": "name = \"my-agent\"\nversion = \"0.1.0\"\ndescription = \"Test agent\"\nauthor = \"me\"\nmodule = \"builtin:chat\"\n\n[model]\nprovider = \"groq\"\nmodel = \"llama-3.3-70b-versatile\"\n\n[capabilities]\ntools = [\"file_read\", \"web_fetch\"]\nmemory_read = [\"*\"]\nmemory_write = [\"self.*\"]\n"
}
响应 201 Created:
{
"agent_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "my-agent"
}
PUT /api/agents/{id}/update
在运行时更新 Agent 配置。
请求体:
{
"description": "Updated description",
"system_prompt": "You are a specialized assistant.",
"tags": ["updated", "v2"]
}
响应 200 OK:
{
"status": "updated",
"agent_id": "a1b2c3d4-..."
}
PUT /api/agents/{id}/mode
设置 Agent 运行模式。Stable 模式会固定当前模型并冻结技能注册表。Normal 模式恢复默认行为。
请求体:
{
"mode": "Stable"
}
响应 200 OK:
{
"status": "updated",
"mode": "Stable",
"agent_id": "a1b2c3d4-..."
}
POST /api/agents/{id}/message
向 Agent 发送消息并接收完整响应。
请求体:
{
"message": "What files are in the current directory?"
}
响应 200 OK:
{
"response": "Here are the files in the current directory:\n- Cargo.toml\n- README.md\n...",
"input_tokens": 142,
"output_tokens": 87,
"iterations": 1
}
GET /api/agents/{id}/session
获取 Agent 的对话历史。
响应 200 OK:
{
"session_id": "s1b2c3d4-...",
"agent_id": "a1b2c3d4-...",
"message_count": 4,
"context_window_tokens": 1250,
"messages": [
{
"role": "User",
"content": "Hello"
},
{
"role": "Assistant",
"content": "Hello! How can I help you?"
}
]
}
DELETE /api/agents/{id}
终止 Agent 并从注册表中移除。
响应 200 OK:
{
"status": "killed",
"agent_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
工作流端点
GET /api/workflows
列出所有已注册的工作流。
响应 200 OK:
[
{
"id": "w1b2c3d4-...",
"name": "code-review-pipeline",
"description": "Automated code review workflow",
"steps": 3,
"created_at": "2025-01-15T10:30:00Z"
}
]
POST /api/workflows
创建新的工作流定义。
请求体(JSON):
{
"name": "code-review-pipeline",
"description": "Review code changes with multiple agents",
"steps": [
{
"name": "analyze",
"agent_name": "coder",
"prompt": "Analyze this code for potential issues: {{input}}",
"mode": "sequential",
"timeout_secs": 120,
"error_mode": "fail",
"output_var": "analysis"
},
{
"name": "security-check",
"agent_name": "security-auditor",
"prompt": "Review this code analysis for security vulnerabilities: {{analysis}}",
"mode": "sequential",
"timeout_secs": 120,
"error_mode": "skip"
},
{
"name": "summarize",
"agent_name": "writer",
"prompt": "Write a concise code review summary based on: {{analysis}}",
"mode": "sequential",
"timeout_secs": 60,
"error_mode": "fail"
}
]
}
步骤配置选项:
| 字段 | 类型 | 描述 |
|---|---|---|
name | string | 步骤名称 |
agent_id | string | Agent UUID(与 agent_name 二选一) |
agent_name | string | Agent 名称(与 agent_id 二选一) |
prompt | string | 提示词模板,支持 {{input}} 和 {{output_var}} 占位符 |
mode | string | "sequential"、"fan_out"、"collect"、"conditional"、"loop" |
timeout_secs | integer | 每步超时时间(默认:120) |
error_mode | string | "fail"、"skip"、"retry" |
max_retries | integer | "retry" 错误模式的最大重试次数(默认:3) |
output_var | string | 存储输出的变量名,供后续步骤使用 |
condition | string | 用于 "conditional" 模式的条件表达式 |
max_iterations | integer | "loop" 模式的最大迭代次数(默认:5) |
until | string | "loop" 模式的停止条件 |
响应 201 Created:
{
"workflow_id": "w1b2c3d4-..."
}
POST /api/workflows/{id}/run
执行工作流。
请求体:
{
"input": "Review this pull request: ..."
}
响应 200 OK:
{
"run_id": "r1b2c3d4-...",
"output": "Code review summary:\n- No critical issues found\n...",
"status": "completed"
}
GET /api/workflows/{id}/runs
获取工作流的执行历史。
响应 200 OK:
[
{
"id": "r1b2c3d4-...",
"workflow_name": "code-review-pipeline",
"state": "Completed",
"steps_completed": 3,
"started_at": "2025-01-15T10:30:00Z",
"completed_at": "2025-01-15T10:32:15Z"
}
]
触发器端点
GET /api/triggers
列出所有触发器。可按 Agent 筛选。
查询参数:
agent_id(可选):按 Agent UUID 筛选
响应 200 OK:
[
{
"id": "t1b2c3d4-...",
"agent_id": "a1b2c3d4-...",
"pattern": {"lifecycle": {}},
"prompt_template": "Event: {{event}}",
"enabled": true,
"fire_count": 5,
"max_fires": 0,
"created_at": "2025-01-15T10:30:00Z"
}
]
POST /api/triggers
创建新的事件触发器。
请求体:
{
"agent_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"pattern": {
"agent_spawned": {
"name_pattern": "*"
}
},
"prompt_template": "A new agent was spawned: {{event}}. Review its capabilities.",
"max_fires": 0
}
支持的模式类型:
| 模式 | 描述 |
|---|---|
{"lifecycle": {}} | 所有生命周期事件 |
{"agent_spawned": {"name_pattern": "*"}} | Agent 创建事件 |
{"agent_terminated": {}} | Agent 终止事件 |
{"all": {}} | 所有事件 |
响应 201 Created:
{
"trigger_id": "t1b2c3d4-...",
"agent_id": "a1b2c3d4-..."
}
PUT /api/triggers/{id}
更新已有触发器的配置。
请求体:
{
"prompt_template": "Updated template: {{event}}",
"enabled": false,
"max_fires": 10
}
响应 200 OK:
{
"status": "updated",
"trigger_id": "t1b2c3d4-..."
}
DELETE /api/triggers/{id}
删除触发器。
响应 200 OK:
{
"status": "removed",
"trigger_id": "t1b2c3d4-..."
}
内存端点
GET /api/memory/agents/{id}/kv
列出 Agent 的所有键值对。
响应 200 OK:
{
"kv_pairs": [
{"key": "preferences", "value": {"theme": "dark"}},
{"key": "state", "value": {"step": 3}}
]
}
GET /api/memory/agents/{id}/kv/{key}
获取指定键值对。
响应 200 OK:
{
"key": "preferences",
"value": {"theme": "dark"}
}
响应 404 Not Found(键不存在):
{
"error": "Key 'preferences' not found"
}
PUT /api/memory/agents/{id}/kv/{key}
设置键值对。如果已存在则覆盖。
请求体:
{
"value": {"theme": "dark", "language": "en"}
}
响应 200 OK:
{
"status": "stored",
"key": "preferences"
}
DELETE /api/memory/agents/{id}/kv/{key}
删除键值对。
响应 200 OK:
{
"status": "deleted",
"key": "preferences"
}
通道端点
GET /api/channels
列出已配置的通道适配器及其状态。支持 40 种通道适配器,包括 Telegram、Discord、Slack、WhatsApp、Matrix、Email、Teams、Mattermost、IRC、Google Chat、Twitch、Rocket.Chat、Zulip、XMPP、LINE、Viber、Messenger、Reddit、Mastodon、Bluesky 等。
响应 200 OK:
{
"channels": [
{
"name": "telegram",
"enabled": true,
"has_token": true
},
{
"name": "discord",
"enabled": true,
"has_token": false
}
],
"total": 2
}
模板端点
GET /api/templates
列出可用的 Agent 模板。
响应 200 OK:
{
"templates": [
{
"name": "hello-world",
"description": "A friendly greeting agent",
"path": "/home/user/.librefang/agents/hello-world/agent.toml"
},
{
"name": "coder",
"description": "Expert coding assistant",
"path": "/home/user/.librefang/agents/coder/agent.toml"
}
],
"total": 30
}
GET /api/templates/{name}
获取指定模板的清单和原始 TOML 内容。
响应 200 OK:
{
"name": "hello-world",
"manifest": {
"name": "hello-world",
"description": "A friendly greeting agent",
"module": "builtin:chat",
"tags": [],
"model": {
"provider": "groq",
"model": "llama-3.3-70b-versatile"
},
"capabilities": {
"tools": ["file_read", "file_list", "web_fetch"],
"network": []
}
},
"manifest_toml": "name = \"hello-world\"\nversion = \"0.1.0\"\n..."
}
系统端点
GET /api/health
公共健康检查。无需认证。返回系统状态的简化版本(不包含数据库或 agent_count 详情)。
响应 200 OK:
{
"status": "ok",
"uptime_seconds": 3600,
"panic_count": 0,
"restart_count": 0
}
status 字段在所有系统正常时为 "ok",在数据库不可达时为 "degraded"。
GET /api/health/detail
完整健康检查,包含所有依赖状态。需要认证。与公共的 /api/health 不同,此端点包含数据库连接状态和 Agent 数量。
响应 200 OK:
{
"status": "ok",
"uptime_seconds": 3600,
"panic_count": 0,
"restart_count": 0,
"agent_count": 3,
"database": "connected",
"config_warnings": []
}
GET /api/status
详细的内核状态,包含所有 Agent 信息。
响应 200 OK:
{
"status": "running",
"agent_count": 2,
"data_dir": "/home/user/.librefang/data",
"default_provider": "groq",
"default_model": "llama-3.3-70b-versatile",
"uptime_seconds": 3600,
"agents": [
{
"id": "a1b2c3d4-...",
"name": "hello-world",
"state": "Running",
"created_at": "2025-01-15T10:30:00Z",
"model_provider": "groq",
"model_name": "llama-3.3-70b-versatile"
}
]
}
GET /api/version
构建和版本信息。
响应 200 OK:
{
"name": "librefang",
"version": "0.1.0",
"build_date": "2025-01-15",
"git_sha": "abc1234",
"rust_version": "1.82.0",
"platform": "linux",
"arch": "x86_64"
}
POST /api/shutdown
启动优雅关闭。Agent 状态会保存到 SQLite 以便下次启动时恢复。
响应 200 OK:
{
"status": "shutting_down"
}
GET /api/profiles
列出可用的 Agent 配置文件(常见用例的预定义配置)。
响应 200 OK:
{
"profiles": [
{
"name": "coder",
"tier": "smart",
"description": "Expert coding assistant"
},
{
"name": "researcher",
"tier": "frontier",
"description": "Deep research and analysis"
}
]
}
GET /api/tools
列出 Agent 可使用的所有工具。
响应 200 OK:
{
"tools": [
"file_read",
"file_write",
"file_list",
"web_fetch",
"web_search",
"shell_exec",
"kv_get",
"kv_set",
"agent_call"
],
"total": 23
}
GET /api/config
获取当前内核配置(密钥已脱敏)。
响应 200 OK:
{
"data_dir": "/home/user/.librefang/data",
"default_provider": "groq",
"default_model": "llama-3.3-70b-versatile",
"listen_addr": "127.0.0.1:4200",
"api_key_set": true,
"channels_configured": 2,
"mcp_servers": 1
}
GET /api/peers
列出 OFP(LibreFang 协议)节点及其连接状态。
响应 200 OK:
{
"peers": [
{
"node_id": "peer-1",
"address": "192.168.1.100:4000",
"state": "connected",
"authenticated": true,
"last_seen": "2025-01-15T10:30:00Z"
}
]
}
GET /api/sessions
列出所有 Agent 的活跃会话。
响应 200 OK:
{
"sessions": [
{
"id": "s1b2c3d4-...",
"agent_id": "a1b2c3d4-...",
"agent_name": "coder",
"message_count": 12,
"created_at": "2025-01-15T10:30:00Z"
}
]
}
DELETE /api/sessions/{id}
删除指定会话及其对话历史。
响应 200 OK:
{
"status": "deleted",
"session_id": "s1b2c3d4-..."
}
模型目录端点
LibreFang 维护一个包含 51+ 模型、覆盖 20 个提供商的内置目录。这些端点允许浏览可用模型、检查提供商认证状态和解析模型别名。
GET /api/models
列出完整的模型目录。返回所有已知模型及其提供商、层级、上下文窗口和定价信息。
响应 200 OK:
{
"models": [
{
"id": "claude-sonnet-4-20250514",
"provider": "anthropic",
"display_name": "Claude Sonnet 4",
"tier": "frontier",
"context_window": 200000,
"input_cost_per_1m": 3.0,
"output_cost_per_1m": 15.0,
"supports_tools": true,
"supports_vision": true,
"supports_streaming": true
},
{
"id": "gemini-2.5-flash",
"provider": "gemini",
"display_name": "Gemini 2.5 Flash",
"tier": "smart",
"context_window": 1048576,
"input_cost_per_1m": 0.15,
"output_cost_per_1m": 0.6,
"supports_tools": true,
"supports_vision": true,
"supports_streaming": true
}
],
"total": 51
}
GET /api/models/{id}
获取指定模型的详细信息。
响应 200 OK:
{
"id": "llama-3.3-70b-versatile",
"provider": "groq",
"display_name": "Llama 3.3 70B",
"tier": "fast",
"context_window": 131072,
"input_cost_per_1m": 0.59,
"output_cost_per_1m": 0.79,
"supports_tools": true,
"supports_vision": false,
"supports_streaming": true
}
响应 404 Not Found:
{
"error": "Model 'unknown-model' not found in catalog"
}
GET /api/models/aliases
列出所有模型别名。别名提供简短名称,可解析为完整的模型 ID(例如 sonnet 解析为 claude-sonnet-4-20250514)。
响应 200 OK:
{
"aliases": {
"sonnet": "claude-sonnet-4-20250514",
"opus": "claude-opus-4-20250514",
"haiku": "claude-3-5-haiku-20241022",
"flash": "gemini-2.5-flash",
"gpt4": "gpt-4o",
"llama": "llama-3.3-70b-versatile",
"deepseek": "deepseek-chat",
"grok": "grok-2",
"jamba": "jamba-1.5-large"
},
"total": 23
}
GET /api/providers
列出所有已知 LLM 提供商及其认证状态。认证状态通过检查环境变量是否存在来检测(不会读取密钥值)。
响应 200 OK:
{
"providers": [
{
"name": "anthropic",
"display_name": "Anthropic",
"auth_status": "configured",
"env_var": "ANTHROPIC_API_KEY",
"base_url": "https://api.anthropic.com",
"model_count": 3
},
{
"name": "groq",
"display_name": "Groq",
"auth_status": "configured",
"env_var": "GROQ_API_KEY",
"base_url": "https://api.groq.com/openai",
"model_count": 4
},
{
"name": "ollama",
"display_name": "Ollama",
"auth_status": "no_key_needed",
"base_url": "http://localhost:11434",
"model_count": 0
}
],
"total": 20
}
提供商配置端点
在运行时管理 LLM 提供商 API 密钥,无需编辑配置文件或重启守护进程。
POST /api/providers/{name}/key
设置提供商的 API 密钥。密钥安全存储并立即生效。
请求体:
{
"api_key": "sk-..."
}
响应 200 OK:
{
"status": "configured",
"provider": "anthropic"
}
DELETE /api/providers/{name}/key
移除提供商的 API 密钥。使用该提供商的 Agent 将回退到 FallbackDriver 或失败。
响应 200 OK:
{
"status": "removed",
"provider": "anthropic"
}
POST /api/providers/{name}/test
通过发起最小 API 调用来测试提供商连接。验证配置的 API 密钥是否有效以及提供商端点是否可达。
响应 200 OK:
{
"status": "ok",
"provider": "anthropic",
"latency_ms": 245,
"model_tested": "claude-sonnet-4-20250514"
}
响应 401 Unauthorized:
{
"status": "failed",
"provider": "anthropic",
"error": "Invalid API key"
}
技能与市场端点
管理技能注册表。技能通过 Python、Node.js、WASM 或纯提示词模块扩展 Agent 能力。所有技能安装都会经过 SHA256 验证和提示词注入扫描。
GET /api/skills
列出所有已安装的技能。
响应 200 OK:
{
"skills": [
{
"name": "github",
"version": "1.0.0",
"runtime": "prompt_only",
"description": "GitHub integration for issues, PRs, and repos",
"bundled": true
},
{
"name": "docker",
"version": "1.0.0",
"runtime": "prompt_only",
"description": "Docker container management",
"bundled": true
}
],
"total": 60
}
POST /api/skills/install
从本地路径或 URL 安装技能。技能清单会经过验证(SHA256 校验和)并在安装前扫描提示词注入。
请求体:
{
"source": "/path/to/skill",
"verify": true
}
响应 201 Created:
{
"status": "installed",
"skill": "my-custom-skill",
"version": "1.0.0"
}
POST /api/skills/uninstall
卸载已安装的技能。内置技能不能被卸载。
请求体:
{
"name": "my-custom-skill"
}
响应 200 OK:
{
"status": "uninstalled",
"skill": "my-custom-skill"
}
POST /api/skills/create
从模板创建新技能。
请求体:
{
"name": "my-skill",
"runtime": "python",
"description": "A custom skill"
}
响应 201 Created:
{
"status": "created",
"skill": "my-skill",
"path": "/home/user/.librefang/skills/my-skill"
}
GET /api/marketplace/search
搜索 FangHub 市场中的社区技能。
查询参数:
q(必填):搜索关键词page(可选):页码(默认:1)
响应 200 OK:
{
"results": [
{
"name": "weather-api",
"author": "community",
"description": "Real-time weather data integration",
"downloads": 1250,
"version": "2.1.0"
}
],
"total": 1,
"page": 1
}
ClawHub 端点
浏览和安装来自 ClawHub(OpenClaw 生态系统兼容)的技能。所有安装都经过完整的安全流水线:SHA256 验证、SKILL.md 安全扫描和信任边界执行。
GET /api/clawhub/search
在 ClawHub 中搜索兼容的技能。
查询参数:
q(必填):搜索关键词
响应 200 OK:
{
"results": [
{
"slug": "data-pipeline",
"name": "Data Pipeline",
"description": "ETL data pipeline automation",
"author": "clawhub-community",
"version": "1.2.0"
}
],
"total": 1
}
GET /api/clawhub/browse
浏览 ClawHub 分类。
查询参数:
category(可选):按分类筛选page(可选):页码(默认:1)
响应 200 OK:
{
"skills": [
{
"slug": "data-pipeline",
"name": "Data Pipeline",
"category": "data",
"description": "ETL data pipeline automation"
}
],
"total": 15,
"page": 1
}
GET /api/clawhub/skill/{slug}
获取指定 ClawHub 技能的详细信息。
响应 200 OK:
{
"slug": "data-pipeline",
"name": "Data Pipeline",
"description": "ETL data pipeline automation",
"author": "clawhub-community",
"version": "1.2.0",
"runtime": "python",
"readme": "# Data Pipeline\n\nAutomated ETL...",
"sha256": "a1b2c3d4..."
}
POST /api/clawhub/install
从 ClawHub 安装技能。下载后验证 SHA256 校验和、扫描提示词注入,并自动将 SKILL.md 格式转换为 LibreFang 的 skill.toml。
请求体:
{
"slug": "data-pipeline"
}
响应 201 Created:
{
"status": "installed",
"skill": "data-pipeline",
"version": "1.2.0",
"converted_from": "SKILL.md"
}
MCP 与 A2A 协议端点
LibreFang 支持 Model Context Protocol(MCP)用于工具互操作,以及 Agent-to-Agent(A2A)协议用于跨系统 Agent 通信。
GET /api/mcp/servers
列出已配置和已连接的 MCP 服务器及其可用工具。
响应 200 OK:
{
"servers": [
{
"name": "filesystem",
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"],
"connected": true,
"tools": [
{
"name": "mcp_filesystem_read_file",
"description": "Read a file from the filesystem"
},
{
"name": "mcp_filesystem_write_file",
"description": "Write content to a file"
}
]
}
],
"total": 1
}
POST /mcp
MCP HTTP 传输端点。接受 JSON-RPC 2.0 请求,并通过 MCP 协议向外部客户端公开 LibreFang 工具。
请求体(JSON-RPC 2.0):
{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}
响应 200 OK:
{
"jsonrpc": "2.0",
"result": {
"tools": [
{
"name": "file_read",
"description": "Read a file's contents",
"inputSchema": {
"type": "object",
"properties": {
"path": {"type": "string"}
}
}
}
]
},
"id": 1
}
GET /.well-known/agent.json
A2A Agent Card 发现端点。返回服务器的 A2A Agent Card,描述其能力、支持的协议和可用 Agent。
响应 200 OK:
{
"name": "LibreFang",
"description": "LibreFang Agent Operating System",
"url": "http://127.0.0.1:4200",
"version": "0.1.0",
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"skills": [
{
"id": "chat",
"name": "Chat",
"description": "General-purpose chat with any agent"
}
]
}
GET /a2a/agents
列出通过 A2A 协议可用的 Agent。
响应 200 OK:
{
"agents": [
{
"id": "a1b2c3d4-...",
"name": "coder",
"description": "Expert coding assistant",
"skills": ["code-review", "debugging", "refactoring"]
}
]
}
POST /a2a/tasks/send
通过 A2A 协议向 Agent 发送任务。遵循 Google A2A 规范进行跨 Agent 任务委派。
请求体:
{
"agent_id": "a1b2c3d4-...",
"message": {
"role": "user",
"parts": [
{"text": "Review this code for security issues"}
]
}
}
响应 200 OK:
{
"task_id": "task-1234-...",
"status": "completed",
"result": {
"role": "agent",
"parts": [
{"text": "I found 2 potential security issues..."}
]
}
}
GET /a2a/tasks/{id}
获取 A2A 任务的状态和结果。
响应 200 OK:
{
"task_id": "task-1234-...",
"status": "completed",
"created_at": "2025-01-15T10:30:00Z",
"completed_at": "2025-01-15T10:30:05Z",
"result": {
"role": "agent",
"parts": [
{"text": "Analysis complete..."}
]
}
}
POST /a2a/tasks/{id}/cancel
取消正在运行的 A2A 任务。
响应 200 OK:
{
"task_id": "task-1234-...",
"status": "cancelled"
}
审计与安全端点
LibreFang 为所有安全相关操作维护 Merkle 哈希链审计追踪。这些端点允许检查和验证审计日志的完整性。
GET /api/audit/recent
获取最近的审计日志条目。
查询参数:
limit(可选):返回的条目数量(默认:50,最大:500)
响应 200 OK:
{
"entries": [
{
"id": 1042,
"timestamp": "2025-01-15T10:30:00Z",
"event_type": "agent_spawned",
"agent_id": "a1b2c3d4-...",
"details": "Agent 'coder' spawned with model groq/llama-3.3-70b-versatile",
"hash": "a1b2c3d4e5f6...",
"prev_hash": "f6e5d4c3b2a1..."
}
],
"total": 1042
}
GET /api/audit/verify
验证 Merkle 哈希链审计追踪的完整性。遍历整个链并报告任何断裂的链接。
响应 200 OK:
{
"status": "valid",
"chain_length": 1042,
"first_entry": "2025-01-10T08:00:00Z",
"last_entry": "2025-01-15T10:30:00Z"
}
响应 200 OK(链断裂):
{
"status": "broken",
"chain_length": 1042,
"break_at": 847,
"error": "Hash mismatch at entry 847"
}
GET /api/security
安全状态概览,展示所有 16 个安全系统的状态。
响应 200 OK:
{
"security_systems": {
"merkle_audit_trail": "active",
"taint_tracking": "active",
"wasm_dual_metering": "active",
"security_headers": "active",
"health_redaction": "active",
"subprocess_sandbox": "active",
"manifest_signing": "active",
"gcra_rate_limiter": "active",
"secret_zeroization": "active",
"path_traversal_prevention": "active",
"ssrf_protection": "active",
"capability_inheritance_validation": "active",
"ofp_hmac_auth": "active",
"prompt_injection_scanning": "active",
"loop_guard": "active",
"session_repair": "active"
},
"total_systems": 16,
"all_active": true
}
使用量与分析端点
追踪所有 Agent 的令牌使用量、成本和模型利用率。由计量引擎驱动,使用模型目录中的成本估算。
GET /api/usage
获取整体使用统计。
查询参数:
period(可选):时间周期(hour、day、week、month;默认:day)
响应 200 OK:
{
"period": "day",
"total_input_tokens": 125000,
"total_output_tokens": 87000,
"total_cost_usd": 0.42,
"request_count": 156,
"active_agents": 5
}
GET /api/usage/summary
获取包含配额信息的使用量摘要。
响应 200 OK:
{
"today": {
"input_tokens": 125000,
"output_tokens": 87000,
"cost_usd": 0.42,
"requests": 156
},
"quota": {
"hourly_token_limit": 1000000,
"hourly_tokens_used": 45000,
"hourly_reset_at": "2025-01-15T11:00:00Z"
}
}
GET /api/usage/by-model
按模型获取使用量明细。
响应 200 OK:
{
"models": [
{
"model": "llama-3.3-70b-versatile",
"provider": "groq",
"input_tokens": 80000,
"output_tokens": 55000,
"cost_usd": 0.09,
"request_count": 120
},
{
"model": "gemini-2.5-flash",
"provider": "gemini",
"input_tokens": 45000,
"output_tokens": 32000,
"cost_usd": 0.33,
"request_count": 36
}
]
}
迁移端点
从 OpenClaw 或其他 Agent 框架导入数据。迁移引擎处理 YAML 到 TOML 的清单转换、SKILL.md 解析和会话历史导入。
GET /api/migrate/detect
自动检测系统上的迁移源。扫描常见位置以查找 OpenClaw 安装、配置文件和 Agent 数据。
响应 200 OK:
{
"sources": [
{
"type": "openclaw",
"path": "/home/user/.openclaw",
"version": "2.1.0",
"agents_found": 12,
"skills_found": 8
}
]
}
POST /api/migrate/scan
扫描指定路径以查找可导入的数据。
请求体:
{
"path": "/home/user/.openclaw"
}
响应 200 OK:
{
"agents": [
{
"name": "my-agent",
"format": "yaml",
"convertible": true
}
],
"skills": [
{
"name": "custom-skill",
"format": "SKILL.md",
"convertible": true
}
],
"sessions": 45
}
POST /api/migrate
执行迁移。转换清单、导入技能,并可选择导入会话历史。
请求体:
{
"source": "/home/user/.openclaw",
"import_agents": true,
"import_skills": true,
"import_sessions": false
}
响应 200 OK:
{
"status": "completed",
"agents_imported": 12,
"skills_imported": 8,
"sessions_imported": 0,
"warnings": [
"Skill 'legacy-plugin' uses unsupported runtime 'ruby', skipped"
]
}
会话管理端点
POST /api/agents/{id}/session/reset
重置 Agent 的会话,清除所有对话历史。
响应 200 OK:
{
"status": "reset",
"agent_id": "a1b2c3d4-...",
"new_session_id": "s5e6f7g8-..."
}
POST /api/agents/{id}/session/compact
触发基于 LLM 的会话压缩。Agent 的对话将由 LLM 进行总结,仅保留最近的消息和生成的摘要。
响应 200 OK:
{
"status": "compacted",
"message": "Session compacted: 80 messages summarized, 20 kept"
}
响应 200 OK(无需压缩):
{
"status": "ok",
"message": "Session does not need compaction (below threshold)"
}
POST /api/agents/{id}/stop
取消 Agent 当前的 LLM 运行。中止任何正在进行的生成。
响应 200 OK:
{
"status": "stopped",
"message": "Agent run cancelled"
}
PUT /api/agents/{id}/model
在运行时切换 Agent 的 LLM 模型。
请求体:
{
"model": "claude-sonnet-4-20250514"
}
响应 200 OK:
{
"status": "updated",
"model": "claude-sonnet-4-20250514"
}
WebSocket 协议
连接
GET /api/agents/{id}/ws
升级为 WebSocket 连接,实现与 Agent 的实时双向聊天。如果 Agent ID 无效返回 400,Agent 不存在返回 404。
消息格式
所有消息均为 JSON 编码字符串。
客户端到服务器
发送消息:
{
"type": "message",
"content": "What is the weather like?"
}
纯文本(非 JSON)也可接受,会被视为消息处理。
聊天命令(以 / 前缀作为消息发送):
| 命令 | 描述 |
|---|---|
/new | 开始新会话(清除历史) |
/compact | 触发 LLM 会话压缩 |
/model <name> | 切换 Agent 的模型 |
/stop | 取消当前 LLM 运行 |
/usage | 显示令牌使用量和成本 |
/think | 切换扩展思考模式 |
/models | 列出可用模型 |
/providers | 列出 LLM 提供商和认证状态 |
心跳:
{
"type": "ping"
}
服务器到客户端
连接确认(连接后立即发送):
{
"type": "connected",
"agent_id": "a1b2c3d4-..."
}
思考指示器(Agent 开始处理时发送):
{
"type": "thinking"
}
文本增量(LLM 生成输出时的流式令牌):
{
"type": "text_delta",
"content": "The weather"
}
工具调用开始(Agent 调用工具时发送):
{
"type": "tool_start",
"tool": "web_fetch"
}
完整响应(Agent 完成时发送,包含最终聚合响应):
{
"type": "response",
"content": "The weather today is sunny with a high of 72F.",
"input_tokens": 245,
"output_tokens": 32,
"iterations": 2,
"cost_usd": 0.0012
}
错误:
{
"type": "error",
"content": "Agent not found"
}
Agent 列表更新(每 5 秒发送当前 Agent 状态):
{
"type": "agents_updated",
"agents": [
{
"id": "a1b2c3d4-...",
"name": "hello-world",
"state": "Running",
"model_provider": "groq",
"model_name": "llama-3.3-70b-versatile"
}
]
}
心跳响应(对 ping 的回应):
{
"type": "pong"
}
连接生命周期
- 客户端连接到
ws://host:port/api/agents/{id}/ws。 - 服务器发送
{"type": "connected"}。 - 客户端发送
{"type": "message", "content": "..."}。 - 服务器发送
{"type": "thinking"},然后是零个或多个{"type": "text_delta"}事件,最后是{"type": "response"}。 - 服务器每 5 秒定期发送
{"type": "agents_updated"}。 - 客户端发送 Close 帧或断开连接来结束会话。
SSE 流式传输
POST /api/agents/{id}/message/stream
发送消息并以 Server-Sent Events 流的形式接收响应。支持实时逐令牌流式传输。
请求体(JSON):
{
"message": "Explain quantum computing"
}
SSE 事件流:
event: chunk
data: {"content":"Quantum","done":false}
event: chunk
data: {"content":" computing","done":false}
event: chunk
data: {"content":" is a type","done":false}
event: tool_use
data: {"tool":"web_search"}
event: tool_result
data: {"tool":"web_search","input":{"query":"quantum computing basics"}}
event: done
data: {"done":true,"usage":{"input_tokens":150,"output_tokens":340}}
SSE 事件类型
| 事件名称 | 描述 |
|---|---|
chunk | 来自 LLM 的文本增量。"done": false 表示还有更多令牌。 |
tool_use | Agent 正在调用工具。包含工具名称。 |
tool_result | 工具调用已完成。包含工具名称和输入。 |
done | 最终事件。包含 "done": true 和令牌使用统计。 |
OpenAI 兼容 API
LibreFang 提供 OpenAI 兼容 API,可与支持 OpenAI API 格式的工具(Cursor、Continue、Open WebUI 等)即插即用集成。
POST /v1/chat/completions
使用 OpenAI 消息格式发送聊天完成请求。
请求体:
{
"model": "librefang:coder",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
"stream": false,
"temperature": 0.7,
"max_tokens": 1024
}
模型解析(model 字段映射到 LibreFang Agent):
| 格式 | 示例 | 行为 |
|---|---|---|
librefang:<name> | librefang:coder | 按名称查找 Agent |
| UUID | a1b2c3d4-... | 按 ID 查找 Agent |
| 普通字符串 | coder | 尝试作为 Agent 名称 |
| 其他 | gpt-4o | 回退到第一个注册的 Agent |
图像支持 --- 消息可以包含图像内容部分:
{
"model": "librefang:analyst",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "Describe this image"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBOR..."}}
]
}
]
}
响应(非流式) 200 OK:
{
"id": "chatcmpl-a1b2c3d4-...",
"object": "chat.completion",
"created": 1708617600,
"model": "coder",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I help you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 12,
"total_tokens": 37
}
}
流式传输 --- 设置 "stream": true 以使用 SSE:
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":"Hello"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":25,"completion_tokens":12,"total_tokens":37}}
data: [DONE]
GET /v1/models
以 OpenAI 格式列出可用模型(Agent)。
响应 200 OK:
{
"object": "list",
"data": [
{
"id": "librefang:coder",
"object": "model",
"created": 1708617600,
"owned_by": "librefang"
},
{
"id": "librefang:researcher",
"object": "model",
"created": 1708617600,
"owned_by": "librefang"
}
]
}
错误响应
所有错误响应使用统一的 JSON 格式:
{
"error": "Description of what went wrong"
}
HTTP 状态码
| 状态码 | 含义 |
|---|---|
200 | 成功 |
201 | 已创建(创建 Agent、创建工作流、创建触发器、安装技能) |
400 | 请求错误(无效 UUID、缺少必填字段、格式错误的 TOML/JSON) |
401 | 未授权(缺少或无效的 Authorization: Bearer 头) |
404 | 未找到(Agent、工作流、触发器、模板、模型、技能或 KV 键不存在) |
429 | 请求过多(GCRA 速率限制超限) |
500 | 服务器内部错误(Agent 循环失败、数据库错误、驱动错误) |
请求 ID
每个响应都包含一个 x-request-id 头,用于追踪的 UUID:
x-request-id: 550e8400-e29b-41d4-a716-446655440000
在报告问题或在日志中关联请求时使用此值。
安全头
每个响应都包含安全头:
| 头 | 值 |
|---|---|
Content-Security-Policy | default-src 'self'(附带适当的指令) |
X-Frame-Options | DENY |
X-Content-Type-Options | nosniff |
Strict-Transport-Security | max-age=63072000; includeSubDomains |
X-Request-Id | 每个请求的唯一 UUID |
速率限制
GCRA(通用信元速率算法)速率限制器提供成本感知的令牌桶速率限制,支持按 IP 追踪和自动过期条目清理。不同端点消耗不同的令牌成本(例如 /api/agents/{id}/message 比 /api/health 成本更高)。超限时,服务器返回 429 Too Many Requests:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{"error": "Rate limit exceeded"}
Retry-After 头表示窗口持续时间(秒)。
端点总览
共 76 个端点,分布在 15 个分组中。
| 方法 | 路径 | 描述 |
|---|---|---|
| 系统 | ||
| GET | / | WebChat UI |
| GET | /api/health | 健康检查(无需认证,已脱敏) |
| GET | /api/health/detail | 完整健康检查(需认证) |
| GET | /api/status | 内核状态 |
| GET | /api/version | 版本信息 |
| POST | /api/shutdown | 优雅关闭 |
| GET | /api/profiles | 列出 Agent 配置文件 |
| GET | /api/tools | 列出可用工具 |
| GET | /api/config | 配置(密钥已脱敏) |
| GET | /api/peers | 列出 OFP 节点 |
| Agent | ||
| GET | /api/agents | 列出 Agent |
| POST | /api/agents | 创建 Agent |
| GET | /api/agents/{id} | 获取 Agent 详情 |
| PUT | /api/agents/{id}/update | 更新 Agent 配置 |
| PUT | /api/agents/{id}/mode | 设置 Agent 模式(Stable/Normal) |
| DELETE | /api/agents/{id} | 终止 Agent |
| POST | /api/agents/{id}/message | 发送消息(阻塞) |
| POST | /api/agents/{id}/message/stream | 发送消息(SSE 流) |
| GET | /api/agents/{id}/session | 获取对话历史 |
| GET | /api/agents/{id}/ws | WebSocket 聊天 |
| POST | /api/agents/{id}/session/reset | 重置会话 |
| POST | /api/agents/{id}/session/compact | LLM 会话压缩 |
| POST | /api/agents/{id}/stop | 取消当前运行 |
| PUT | /api/agents/{id}/model | 切换模型 |
| 工作流 | ||
| GET | /api/workflows | 列出工作流 |
| POST | /api/workflows | 创建工作流 |
| POST | /api/workflows/{id}/run | 执行工作流 |
| GET | /api/workflows/{id}/runs | 列出工作流运行记录 |
| 触发器 | ||
| GET | /api/triggers | 列出触发器 |
| POST | /api/triggers | 创建触发器 |
| PUT | /api/triggers/{id} | 更新触发器 |
| DELETE | /api/triggers/{id} | 删除触发器 |
| 内存 | ||
| GET | /api/memory/agents/{id}/kv | 列出键值对 |
| GET | /api/memory/agents/{id}/kv/{key} | 获取键值 |
| PUT | /api/memory/agents/{id}/kv/{key} | 设置键值 |
| DELETE | /api/memory/agents/{id}/kv/{key} | 删除键值 |
| 通道 | ||
| GET | /api/channels | 列出通道(40 种适配器) |
| 模板 | ||
| GET | /api/templates | 列出模板 |
| GET | /api/templates/{name} | 获取模板 |
| 会话 | ||
| GET | /api/sessions | 列出会话 |
| DELETE | /api/sessions/{id} | 删除会话 |
| 模型目录 | ||
| GET | /api/models | 完整模型目录(51+ 模型) |
| GET | /api/models/{id} | 模型详情 |
| GET | /api/models/aliases | 列出 23 个模型别名 |
| GET | /api/providers | 提供商列表及认证状态 |
| 提供商配置 | ||
| POST | /api/providers/{name}/key | 设置提供商 API 密钥 |
| DELETE | /api/providers/{name}/key | 移除提供商 API 密钥 |
| POST | /api/providers/{name}/test | 测试提供商连接 |
| 技能与市场 | ||
| GET | /api/skills | 列出已安装技能(60 个内置) |
| POST | /api/skills/install | 安装技能 |
| POST | /api/skills/uninstall | 卸载技能 |
| POST | /api/skills/create | 创建新技能 |
| GET | /api/marketplace/search | 搜索 FangHub |
| ClawHub | ||
| GET | /api/clawhub/search | 搜索 ClawHub |
| GET | /api/clawhub/browse | 浏览 ClawHub |
| GET | /api/clawhub/skill/{slug} | 技能详情 |
| POST | /api/clawhub/install | 从 ClawHub 安装 |
| MCP 与 A2A | ||
| GET | /api/mcp/servers | MCP 服务器连接 |
| POST | /mcp | MCP HTTP 传输(JSON-RPC 2.0) |
| GET | /.well-known/agent.json | A2A Agent Card |
| GET | /a2a/agents | A2A Agent 列表 |
| POST | /a2a/tasks/send | 发送 A2A 任务 |
| GET | /a2a/tasks/{id} | 获取 A2A 任务状态 |
| POST | /a2a/tasks/{id}/cancel | 取消 A2A 任务 |
| 审计与安全 | ||
| GET | /api/audit/recent | 最近审计日志 |
| GET | /api/audit/verify | 验证 Merkle 链完整性 |
| GET | /api/security | 安全状态(16 个系统) |
| 使用量与分析 | ||
| GET | /api/usage | 使用统计 |
| GET | /api/usage/summary | 使用量摘要及配额 |
| GET | /api/usage/by-model | 按模型使用量明细 |
| 迁移 | ||
| GET | /api/migrate/detect | 检测迁移源 |
| POST | /api/migrate/scan | 扫描可导入数据 |
| POST | /api/migrate | 执行迁移 |
| OpenAI 兼容 | ||
| POST | /v1/chat/completions | OpenAI 兼容聊天 |
| GET | /v1/models | OpenAI 兼容模型列表 |