Session API
Xiaohe Agent 提供 REST Session API,用于以程序方式驱动 Agent 工作流。它驱动的是真实 CLI 后端 —— Claude、Kimi、Codex、Cursor —— 不是另一套独立 Agent SDK。
用 OS 服务生命周期命令启动本机控制面:
xiaohe server ensure # 安装 + 启动;还没有桌面密钥时写一把
xiaohe server install # 只装服务单元
xiaohe server start
本机默认地址是 http://127.0.0.1:8110。托管 Session 使用运维方给你的地址和密钥,它可能位于私有网络而非公网。各类窗口各自需要什么,见快速开始。
鉴权
开启鉴权后,每个 /v1/* 请求(健康检查与公开 UI 路径除外)都需要 Bearer token:
Authorization: Bearer <api-key|access-jwt>
在控制面主机上签发与管理密钥:
xiaohe server pair # 签发密钥并打印;--write-client(默认)写入桌面应用
xiaohe keys issue --tenant local --label mac
xiaohe keys list
xiaohe keys revoke <id|prefix>
EventSource 与 SSE 无法携带请求头,这两处要把密钥作为查询参数:
GET /v1/sessions/{id}/events?access_token=<key>&after=0&follow=true
核心接口
| 方法 | 路径 | 作用 |
|---|---|---|
| POST | /v1/sessions | 创建托管会话 |
| GET | /v1/sessions/{id} | 会话状态 |
| POST | /v1/sessions/{id}/messages | 发送用户消息 |
| GET | /v1/sessions/{id}/events | SSE 事件流 |
| POST | /v1/sessions/{id}/approvals | 批准或拒绝待确认动作 |
| POST | /v1/sessions/{id}/cancel | 取消生成中的回复 |
| DELETE | /v1/sessions/{id} | 结束会话 |
| GET | /v1/me | 调用方身份与工作区提示 |
| GET/PUT | /v1/provider | 列出或切换 Claude LLM provider |
| GET/PUT | /v1/voice/provider | 列出或切换 TTS/STT provider |
创建会话
POST /v1/sessions
{
"tenant_id": "demo",
"backend": "claude",
"skill_ids": ["demo.echo"],
"message": "optional first turn",
"workspace_path": "/absolute/path/to/project",
"persistent": false
}
- backend ——
claude(默认)、kimi、codex、cursor,或用于本地测试的fake。会话代理真实 CLI;claude使用 Agent SDK 做 token 流式与跨回合--resume。 - workspace_path —— 调用方项目的绝对路径,作为工作目录。省略则使用沙箱工作区。
- persistent —— 为会话保持长生命周期主机进程,而不是每回合起停。
- skill_ids —— 限制会话可加载的产品技能。
消息与事件
用 POST /v1/sessions/{id}/messages 发送回合:
{"content": "Hello"}
进度经 SSE 到达。用 after=<last_event_seq> 重连以续传:
GET /v1/sessions/{id}/events?after=0&follow=true
附件
上传文件上限 50 MiB:
POST /v1/sessions/{id}/attachments—— multipart 字段file,返回{id, name, mime, size, kind}GET /v1/sessions/{id}/attachments—— 列出元数据GET /v1/sessions/{id}/attachments/{att_id}—— 下载字节
入站附件会以本机路径追加到提示里,agent 的 Read 与图片工具随即可以读取。
转写
GET /v1/sessions/{id}/messages 返回稳定聊天气泡,是界面重开时的真相源。分页可选且最新优先:limit(1–500)配合 before_created_at 加 before_msg_id 的 keyset 游标;省略 limit 则返回全文。
批准
POST /v1/sessions/{id}/approvals
{"approval_id": "...", "approved": true, "note": ""}
当 Agent 需要决策时,会话进入 waiting_approval,并在 SSE 流上发出 approval_required 事件。
工作区
GET /v1/me—— 调用方建议的workspace_pathGET /v1/workspaces—— 该密钥租户下已注册的工作区POST /v1/workspaces—— 确保或注册工作区
语音
语音合成与识别使用同一个地址、同一把密钥。
POST /v1/tts—— 文本转音频(audio/mpeg)。Body{"text", "voice", "tenant_id"}。音色:zh_male_m191_uranus_bigtts(经典男声)、zh_female_xiaohe_uranus_bigtts(经典女声)、ICL_uranus_zh_female_yuanqitianmei_tob(阳光甜妹)。最多 2000 字。POST /v1/stt—— multipartfile转{"text": "..."}(豆包 flash ASR)。