Skip to Content
Руководство для разработчиковСправочник по REST API демона

Справочник по REST API демона

Это публичный REST/SSE-интерфейс для интеграций, которые запускают qwen serve --no-web и предоставляют собственный UI. Начните с руководства по интеграции, затем используйте эту страницу для обнаружения эндпоинтов, а справочник по протоколу HTTP — для подробной семантики жизненного цикла.

OpenAPI

Курируемый контракт из 25 операций доступен в формате OpenAPI 3.1 JSON . Импортируйте этот URL в OpenAPI-совместимый рендерер, генератор клиентов или инструмент валидации. Зафиксированный JSON является переносимым контрактом интерфейса для проиндексированных ниже операций и проверяется на соответствие руководству, заголовкам протокола и зарегистрированным маршрутам в CI.

Этот индекс охватывает курируемое базовое подмножество REST-поверхности демона, а не всю её целиком. За пределами этого индекса остаются собственные маршруты Web Shell, условные внутренние поверхности и другие публичные, но не базовые маршруты: мутация файлов, регистрация рабочих пространств, организация и генерация сессий, а также MCP рабочих пространств, навыки и провайдеры. Эти поверхности объявляются собственными тегами возможностей; справочник по протоколу HTTP документирует поверхности сессий, статусов рабочих пространств и файлов, а управление MCP-серверами, провайдеры аутентификации и вход через device-flow описаны в заметках по аутентификации и безопасности демона. Они находятся за рамками данного контракта, а не устарели.

Чтение индекса

  • Capability — тег возможности для проверки в GET /capabilities. Тире означает, что у операции нет выделенного тега возможности; клиенты, которым нужна поддержка старых сборок демона, должны обрабатывать 404.
  • Scope указывает, какой runtime владеет операцией. process-global читает состояние демона в целом, selected-runtime использует выбор рабочего пространства из запроса, persisted-workspace разрешает сохранённое хранилище сессий, live-session-owner маршрутизирует по активной сессии, а legacy-primary всегда нацелен на основное рабочее пространство демона. GET /session/:id/export привязан к основному рабочему пространству: он разрешает только управляемые внутренние runtime, прежде чем вернуться к основному рабочему пространству.
  • Все операции в этом индексе являются стабильными в контракте REST v1. Устаревшее имя возможности unstable_session_resume — только алиас; используйте session_resume для стабильного маршрута возобновления.

Обнаружение

OperationCapabilityScopeTypeScript SDK
GET /healthhealthprocess-globalDaemonClient.health
GET /capabilitiescapabilitiesprocess-globalDaemonClient.capabilities

Жизненный цикл сессии

OperationCapabilityScopeTypeScript SDK
POST /sessionsession_createselected-runtimeDaemonClient.createOrAttachSession
POST /session/:id/loadsession_loadselected-runtimeDaemonClient.loadSession
POST /session/:id/resumesession_resumeselected-runtimeDaemonClient.resumeSession
POST /session/:id/heartbeatclient_heartbeatlive-session-ownerDaemonClient.heartbeat
PATCH /session/:id/metadatasession_metadatalive-session-ownerDaemonClient.updateSessionMetadata
POST /session/:id/modelsession_set_modellive-session-ownerDaemonClient.setSessionModel
DELETE /session/:idsession_closelive-session-ownerDaemonClient.closeSession

Промпты и события

OperationCapabilityScopeTypeScript SDK
GET /session/:id/statussession_statuslive-session-ownerDaemonClient.sessionStatus
POST /session/:id/promptsession_promptlive-session-ownerDaemonClient.promptNonBlocking
POST /session/:id/cancelsession_cancellive-session-ownerDaemonClient.cancel
GET /session/:id/eventssession_eventslive-session-ownerDaemonClient.subscribeEvents
GET /session/:id/transcriptsession_transcriptpersisted-workspaceDaemonClient.getSessionTranscriptPage
GET /session/:id/contextsession_contextlive-session-ownerDaemonClient.sessionContext
GET /session/:id/exportsession_exportlegacy-primaryDaemonClient.exportSession
GET /session/:id/pending-prompts—live-session-ownerDaemonClient.getPendingPrompts

POST /session/:id/prompt возвращает 202, когда промпт поступает в очередь, а не когда Агент завершает работу. Сначала подпишитесь, затем сопоставляйте turn_complete или turn_error по promptId.

Разрешения

OperationCapabilityScopeTypeScript SDK
POST /session/:id/permission/:requestIdsession_permission_votelive-session-ownerDaemonClient.respondToSessionPermission
POST /permission/:requestIdpermission_votelegacy-primaryDaemonClient.respondToPermission

Новые интеграции с несколькими рабочими пространствами всегда должны использовать маршрут с областью действия сессии. Устаревший маршрут может вернуть тот же 404 для запроса, принадлежащего другому runtime, как и для уже разрешённого голосования.

Дополнительные документированные API

25 операций выше составляют стабильный контракт интеграции OpenAPI. Следующие операции завершают индекс HTTP-маршрутов с выделенными разделами протокола. Это документированные поверхности v1, но они находятся за рамками компактного контракта OpenAPI, поскольку являются условными, административными или в основном обслуживают клиентов от первой стороны. Выполняйте preflight каждой перечисленной возможности и рассматривайте отсутствующую возможность как недоступный маршрут. Сгруппированная строка может содержать несколько операций, если они имеют общего владельца и семейство SDK.

AreaOperationsCapability and scopeTypeScript SDK
Operator stateGET /daemon/status · GET /branddaemon_status, web_shell_brand; process-globalDaemonClient.daemonStatus, DaemonClient.brand
Workspace registrationPOST /workspaces · PATCH /workspaces/:workspace · DELETE /workspaces/:workspace · GET /workspace-registrations · DELETE /workspace-registrations/:iddynamic_workspace_registration, persistent_workspace_registration, workspace_display_name, workspace_runtime_removal; process-global or selected-runtimeDaemonClient.addWorkspace, DaemonClient.updateWorkspace, WorkspaceDaemonClient.remove; registration-store routes use raw REST
Workspace runtime statusGET /workspace/mcp · GET /workspace/skills · GET /workspace/providers · GET /workspace/env · GET /workspace/preflightworkspace_mcp, workspace_skills, workspace_providers, workspace_env, workspace_preflight; legacy-primaryDaemonClient.workspaceMcp, workspaceSkills, workspaceProviders, workspaceEnv, workspacePreflight
File mutationPOST /file/write · POST /file/editworkspace_file_write; legacy-primaryDaemonClient.writeWorkspaceFile, DaemonClient.editWorkspaceFile
Session inspection and tasksGET /session/:id/supported-commands · GET /session/:id/tasks · POST /session/:id/tasks/:taskId/workflow-action · GET /session/:id/lsp · GET /session/:id/resourcessession_supported_commands, session_tasks, session_lsp, session_resources; live-session-ownerDaemonClient.sessionSupportedCommands, sessionTasks, sessionWorkflowTaskAction, sessionLspStatus, sessionResources
Workspace-qualified historyGET /workspaces/:workspace/session/:id/transcript · GET /workspaces/:workspace/session/:id/export · GET /workspaces/:workspace/session/:id/archive/exportworkspace_persisted_transcript, workspace_session_export, workspace_archived_session_export; persisted-workspaceWorkspaceDaemonClient.getSessionTranscriptPage, exportSession, exportArchivedSession
Worktree recoveryPOST /session/:id/worktree-resetsession_worktree_reset_v1; live-session-ownerDaemonClient.resetWorktreeSession
Persisted session catalogGET /workspace/:id/session-info · GET /workspaces/:workspace/session-info · GET /workspace/:id/sessions · GET /workspaces/:workspace/sessions · GET /workspaces/:workspace/sessions/live-statesession_info, session_list, workspace_session_live_state; persisted-workspaceDaemonClient.getStandaloneSession, listWorkspaceSessions, getWorkspaceSessionLiveState
Session organizationGET /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/organizationsession_organization; legacy-primary or persisted-workspaceDaemonClient.listSessionGroups, createSessionGroup, updateSessionGroup, deleteSessionGroup, updateSessionOrganization; WorkspaceDaemonClient.updateSessionOrganization
Bulk persisted-session changesPOST /sessions/delete · POST /sessions/archive · POST /sessions/unarchivesession_archive; legacy-primaryDaemonClient.deleteSessionsData, archiveSessionsData, unarchiveSessionsData
Optional session controlsPOST /session/:id/recap · POST /session/:id/generate · POST /session/:id/approval-modesession_recap, session_generation, session_approval_mode_control; live-session-ownerDaemonClient.recapSession, raw REST for generation, DaemonClient.setSessionApprovalMode
Workspace configurationPOST /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 /languageworkspace_tool_toggle, workspace_skill_settings_toggle, workspace_skill_settings_batch_toggle, workspace_init, workspace_mcp_manage, workspace_mcp_restart, user_language_sync; legacy-primary or process-globalDaemonClient.setWorkspaceToolEnabled, setWorkspaceSkillEnabled, setWorkspaceSkillsEnabled, initWorkspace, reloadWorkspaceMcp, restartMcpServer, setUserLanguage
Device-flow authenticationPOST /workspace/auth/device-flow · GET /workspace/auth/device-flow/:id · DELETE /workspace/auth/device-flow/:id · GET /workspace/auth/statusauth_device_flow; legacy-primaryDaemonClient.startDeviceFlow, getDeviceFlow, cancelDeviceFlow, getAuthStatus

Маршруты без выделенного раздела протокола намеренно отсутствуют в этом индексе. Они могут быть внутренней механикой Web Shell от первой стороны или условными поверхностями реализации и не.promoteются в контракт интеграции фактом их пропуска.

Контекст рабочего пространства только для чтения

OperationCapabilityScopeTypeScript SDK
GET /workspace/tools—legacy-primaryDaemonClient.workspaceTools
GET /fileworkspace_file_readlegacy-primaryDaemonClient.readWorkspaceFile
GET /file/bytesworkspace_file_byteslegacy-primaryDaemonClient.readWorkspaceFileBytes
GET /statworkspace_file_readlegacy-primaryDaemonClient.fileStat
GET /listworkspace_file_readlegacy-primaryDaemonClient.dirList
GET /globworkspace_file_readlegacy-primaryDaemonClient.glob

Эти единичные маршруты нацелены на основное рабочее пространство. Интеграции, предоставляющие доступ к нескольким зарегистрированным рабочим пространствам, должны использовать квалифицированные по рабочему пространству аналоги, описанные в полном протоколе и preflight workspace_qualified_rest_core.

Общие правила протокола

  • Аутентифицируйте обычные маршруты с помощью Authorization: Bearer <token>. Стандартный loopback-зонд /health может быть освобождён; привязки не к loopback не освобождаются.
  • Отправляйте X-Qwen-Client-Id, если ответ create/load предоставил его. Это идентификатор привязки и атрибуции, а не принципал безопасности конечного пользователя.
  • Рассматривайте тела ошибок как дополнения. Ветвитесь преимущественно по HTTP-статусу и стабильным code или errorKind, если они присутствуют.
  • Сохраняйте заголовки ответов SSE и отключайте буферизацию прокси. Возобновляйте с помощью Last-Event-ID и X-Qwen-Event-Epoch, если демон предоставил эпоху.
  • Граница доверия рабочего пространства — это не изоляция арендаторов. Запускайте отдельные демоны, когда принципалы безопасности или границы сбоев на уровне процессов должны быть независимы.
Last updated on