Daemon REST API 参考
这是运行 qwen serve --no-web 并提供自有 UI 的集成所使用的公共 REST/SSE 接口。请先阅读集成指南,然后使用本页面进行端点发现,并参考 HTTP 协议参考 了解详细的生命周期语义。
OpenAPI
经过整理的 25 个操作契约以 OpenAPI 3.1 JSON 形式提供。将该 URL 导入兼容 OpenAPI 的渲染器、客户端生成器或验证工具。已提交的 JSON 是下方索引操作的便携接口契约,并在 CI 中根据指南、协议标题和已注册路由进行了验证。
本索引涵盖 daemon REST 接口中经过整理的核心子集,而非全部内容。索引之外包括第一方 Web Shell 路由、条件内部表面以及其他公开但非核心的路由:文件变更、工作区注册、会话组织与 generation,以及工作区 MCP、skill 和 provider 等。这些表面由各自的能力标签进行通告;HTTP 协议参考 记录了会话、工作区状态和文件表面,MCP 服务器管理、认证提供者和设备流登录则由 daemon 认证与安全说明 覆盖。它们不在本契约范围内,但并未被弃用。
阅读索引
- Capability 是在
GET /capabilities中需要检查的功能标签。破折号表示该操作没有专属的功能标签;需要支持较旧 daemon 构建版本的客户端应处理404。 - Scope 指明哪个运行时拥有该操作。
process-global读取 daemon 全局状态,selected-runtime使用请求的工作区选择,persisted-workspace解析持久化会话存储,live-session-owner通过实时会话进行路由,legacy-primary始终定位 daemon 的主工作区。GET /session/:id/export固定为主工作区:它仅在托管内部运行时中解析,然后回退到主工作区。 - 本索引中的所有操作在 v1 REST 契约中均为 stable。已弃用的
unstable_session_resume能力名称仅为别名;请使用session_resume作为稳定的 resume 路由。
Discovery
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
GET /health | health | process-global | DaemonClient.health |
GET /capabilities | capabilities | process-global | DaemonClient.capabilities |
会话生命周期
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
POST /session | session_create | selected-runtime | DaemonClient.createOrAttachSession |
POST /session/:id/load | session_load | selected-runtime | DaemonClient.loadSession |
POST /session/:id/resume | session_resume | selected-runtime | DaemonClient.resumeSession |
POST /session/:id/heartbeat | client_heartbeat | live-session-owner | DaemonClient.heartbeat |
PATCH /session/:id/metadata | session_metadata | live-session-owner | DaemonClient.updateSessionMetadata |
POST /session/:id/model | session_set_model | live-session-owner | DaemonClient.setSessionModel |
DELETE /session/:id | session_close | live-session-owner | DaemonClient.closeSession |
提示与事件
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
GET /session/:id/status | session_status | live-session-owner | DaemonClient.sessionStatus |
POST /session/:id/prompt | session_prompt | live-session-owner | DaemonClient.promptNonBlocking |
POST /session/:id/cancel | session_cancel | live-session-owner | DaemonClient.cancel |
GET /session/:id/events | session_events | live-session-owner | DaemonClient.subscribeEvents |
GET /session/:id/transcript | session_transcript | persisted-workspace | DaemonClient.getSessionTranscriptPage |
GET /session/:id/context | session_context | live-session-owner | DaemonClient.sessionContext |
GET /session/:id/export | session_export | legacy-primary | DaemonClient.exportSession |
GET /session/:id/pending-prompts | — | live-session-owner | DaemonClient.getPendingPrompts |
POST /session/:id/prompt 在提示进入队列时返回 202,而非 Agent 完成时。请先订阅,然后通过 promptId 关联 turn_complete 或 turn_error。
权限
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
POST /session/:id/permission/:requestId | session_permission_vote | live-session-owner | DaemonClient.respondToSessionPermission |
POST /permission/:requestId | permission_vote | legacy-primary | DaemonClient.respondToPermission |
新的多工作区集成应始终使用会话作用域路由。旧版路由对属于另一个运行时的请求可能返回与已解决投票相同的 404。
只读工作区上下文
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
GET /workspace/tools | — | legacy-primary | DaemonClient.workspaceTools |
GET /file | workspace_file_read | legacy-primary | DaemonClient.readWorkspaceFile |
GET /file/bytes | workspace_file_bytes | legacy-primary | DaemonClient.readWorkspaceFileBytes |
GET /stat | workspace_file_read | legacy-primary | DaemonClient.fileStat |
GET /list | workspace_file_read | legacy-primary | DaemonClient.dirList |
GET /glob | workspace_file_read | legacy-primary | DaemonClient.glob |
这些单一路由定位主工作区。暴露多个已注册工作区的集成应使用完整协议中记录的工作区限定对应路由,并预检 workspace_qualified_rest_core。
其他已记录的 API
上述 25 个操作构成了稳定的 OpenAPI 集成契约。以下操作补全了拥有专属协议章节的 HTTP 路由索引。它们是已记录的 v1 表面,但不在该精简 OpenAPI 契约之内,因为它们属于条件性、管理性接口,或主要服务于第一方客户端。请预检每个列出的能力,并将缺失的能力视为不可用的路由。当多个操作共享归属和 SDK 系列时,一行中可包含多个操作。
| 领域 | 操作 | 能力与作用域 | TypeScript SDK |
|---|---|---|---|
| 操作员状态 | GET /daemon/status · GET /brand | daemon_status、web_shell_brand;process-global | DaemonClient.daemonStatus、DaemonClient.brand |
| 工作区注册 | POST /workspaces · PATCH /workspaces/:workspace · DELETE /workspaces/:workspace · GET /workspace-registrations · DELETE /workspace-registrations/:id | dynamic_workspace_registration、persistent_workspace_registration、workspace_display_name、workspace_runtime_removal;process-global 或 selected-runtime | DaemonClient.addWorkspace、DaemonClient.updateWorkspace、WorkspaceDaemonClient.remove;注册存储路由使用原生 REST |
| 工作区运行时状态 | GET /workspace/mcp · GET /workspace/skills · GET /workspace/providers · GET /workspace/env · GET /workspace/preflight | workspace_mcp、workspace_skills、workspace_providers、workspace_env、workspace_preflight;legacy-primary | DaemonClient.workspaceMcp、workspaceSkills、workspaceProviders、workspaceEnv、workspacePreflight |
| 文件变更 | POST /file/write · POST /file/edit | workspace_file_write;legacy-primary | DaemonClient.writeWorkspaceFile、DaemonClient.editWorkspaceFile |
| 会话检查与任务 | GET /session/:id/supported-commands · GET /session/:id/tasks · POST /session/:id/tasks/:taskId/workflow-action · GET /session/:id/lsp · GET /session/:id/resources | session_supported_commands、session_tasks、session_lsp、session_resources;live-session-owner | DaemonClient.sessionSupportedCommands、sessionTasks、sessionWorkflowTaskAction、sessionLspStatus、sessionResources |
| 工作区限定历史 | GET /workspaces/:workspace/session/:id/transcript · GET /workspaces/:workspace/session/:id/export · GET /workspaces/:workspace/session/:id/archive/export | workspace_persisted_transcript、workspace_session_export、workspace_archived_session_export;persisted-workspace | WorkspaceDaemonClient.getSessionTranscriptPage、exportSession、exportArchivedSession |
| Worktree 恢复 | POST /session/:id/worktree-reset | session_worktree_reset_v1;live-session-owner | DaemonClient.resetWorktreeSession |
| 持久化会话目录 | GET /workspace/:id/session-info · GET /workspaces/:workspace/session-info · GET /workspace/:id/sessions · GET /workspaces/:workspace/sessions · GET /workspaces/:workspace/sessions/live-state | session_info、session_list、workspace_session_live_state;persisted-workspace | DaemonClient.getStandaloneSession、listWorkspaceSessions、getWorkspaceSessionLiveState |
| 会话组织 | GET /workspace/:id/session-groups · POST /workspace/:id/session-groups · PATCH /workspace/:id/session-groups/:groupId · DELETE /workspace/:id/session-groups/:groupId · PATCH /session/:id/organization · PATCH /workspaces/:workspace/session/:id/organization | session_organization;legacy-primary 或 persisted-workspace | DaemonClient.listSessionGroups、createSessionGroup、updateSessionGroup、deleteSessionGroup、updateSessionOrganization;WorkspaceDaemonClient.updateSessionOrganization |
| 批量持久化会话变更 | POST /sessions/delete · POST /sessions/archive · POST /sessions/unarchive | session_archive;legacy-primary | DaemonClient.deleteSessionsData、archiveSessionsData、unarchiveSessionsData |
| 可选会话控制 | POST /session/:id/recap · POST /session/:id/generate · POST /session/:id/approval-mode | session_recap、session_generation、session_approval_mode_control;live-session-owner | DaemonClient.recapSession、原生 REST 用于 generation、DaemonClient.setSessionApprovalMode |
| 工作区配置 | POST /workspace/tools/:name/enable · POST /workspace/skills/:name/enable · POST /workspace/skills/enable · POST /workspace/init · POST /workspace/mcp/reload · POST /workspace/mcp/:server/restart · POST /language | workspace_tool_toggle、workspace_skill_settings_toggle、workspace_skill_settings_batch_toggle、workspace_init、workspace_mcp_manage、workspace_mcp_restart、user_language_sync;legacy-primary 或 process-global | DaemonClient.setWorkspaceToolEnabled、setWorkspaceSkillEnabled、setWorkspaceSkillsEnabled、initWorkspace、reloadWorkspaceMcp、restartMcpServer、setUserLanguage |
| 设备流认证 | POST /workspace/auth/device-flow · GET /workspace/auth/device-flow/:id · DELETE /workspace/auth/device-flow/:id · GET /workspace/auth/status | auth_device_flow;legacy-primary | DaemonClient.startDeviceFlow、getDeviceFlow、cancelDeviceFlow、getAuthStatus |
没有专属协议章节的路径被有意排除在本索引之外。它们可能是第一方 Web Shell 内部机制或条件性实现表面,不会因遗漏而被提升为集成契约。
通用协议规则
- 使用
Authorization: Bearer <token>对常规路由进行认证。默认的本地回环/health探测可以豁免;非本地回环绑定则不可豁免。 - 当 create/load 响应提供了
X-Qwen-Client-Id时发送该头。它是一个附加和归因标识符,而非终端用户安全主体。 - 将错误体视为附加信息。主要根据 HTTP 状态码以及稳定的
code或errorKind(如果存在)进行分支处理。 - 保留 SSE 响应头并禁用代理缓冲。当 daemon 提供了 epoch 时,同时使用
Last-Event-ID和X-Qwen-Event-Epoch进行恢复。 - 工作区信任边界不是租户隔离。当安全主体或进程级故障边界必须独立时,请运行独立的 daemon。