Skip to Content
Руководство для разработчиковDaemonСправочник по конфигурации

Справочник по конфигурации

Обзор

На этой странице собраны все настройки, влияющие на демон qwen serve и его адаптеры: переменные окружения, флаги CLI, ключи settings.json и программные опции. Страницы, посвященные отдельным функциям, ссылаются сюда, когда требуются сквозные детали конфигурации.

Флаги CLI (qwen serve)

ФлагТипПо умолчаниюДействие
--hostname <host>string127.0.0.1Адрес привязки. Значения loopback: 127.0.0.1, localhost, ::1, [::1]. Для не-loopback адресов при запуске требуется bearer-токен. Ввод в формате host:port отклоняется с рекомендацией использовать --port.
--port <n>number4170Порт прослушивания; 0 означает эфемерный порт.
--token <s>stringenvBearer-токен. Переопределяет QWEN_SERVER_TOKEN и обрезается при запуске. Отображается в командной строке процесса, поэтому при развертывании лучше использовать переменную окружения.
--openbooleanfalseОткрыть смонтированный Web Shell после готовности среды выполнения. Настроенный токен доставляется как фрагмент URL. Обычный --open остаётся тихим no-op, когда запуск браузера невозможен.
--open-with-authbooleanfalseОткрыть Web Shell с bearer-аутентификацией на loopback. Требуется включённый Web Shell и собранные ресурсы. Повторно использует выбранный --token / QWEN_SERVER_TOKEN или генерирует 256-битный bearer на время жизни процесса перед прослушиванием. В окружении без поддержки браузера запускается и печатает URL с секретом в фрагменте. Не является настройкой ServeOptions или SDK.
--require-authbooleanfalseРасширяет действие bearer-аутентификации на loopback и /health; запуск прерывается, если токен не задан.
--workspace <dir>absolute path / repeatableprocess.cwd()Стартовое рабочее пространство; можно повторять для регистрации дополнительных изолированных сред выполнения. Первое является основным. Каждое значение должно быть абсолютным путём к директории; канонизируется при запуске.
--memory-project-scope <mode>git-root / workspaceworkspaceРазделение памяти проекта. workspace изолирует по точному каталогу рабочего пространства; git-root — устаревшая область совместимости, общая для рабочих пространств с одним Git-корнем. Переопределяет QWEN_CODE_MEMORY_PROJECT_SCOPE.
--max-sessions <n>number32Лимит активных сессий на рабочее пространство. 0 / Infinity означает без ограничений; NaN / отрицательные значения вызывают ошибку.
--max-total-sessions <n>numberвычисляется для нескольких рабочих пространств при запускеОбщесистемный лимит активных сессий демона. Если не указан, конечное значение по умолчанию вычисляется один раз из лимита на рабочее пространство и количества рабочих пространств при запуске. 0 / Infinity означает без ограничений.
--max-pending-prompts-per-session <n>number5Лимит принятых, но ожидающих/выполняющихся промптов на сессию. Превышение лимита возвращает 503. 0 / Infinity означает без ограничений; отрицательные или нецелые значения вызывают ошибку.
--max-connections <n>number256server.maxConnections для HTTP-слушателя; 0 / Infinity означает без ограничений.
--enable-session-shellbooleanfalseВключает прямое выполнение POST /session/:id/shell. Требуется bearer-токен, и каждый вызов должен содержать привязанный к сессии X-Qwen-Client-Id.
--event-ring-size <n>number8000Кольцо повтора SSE для каждой сессии; мягкий лимит — 1_000_000.
--compacted-replay-max-bytes <n>positive integer4194304Ограничение в байтах для ограниченного снимка воспроизведения в памяти, возвращаемого POST /session/:id/load; жёсткий лимит — 268435456.
--max-journal-events <n>positive safe integer10000Базовый лимит на количество записей воспроизведения liveJournal в полёте для незавершённого хода. Адаптивный рост может увеличить его (см. --max-journal-bytes); фиксация любого флага журнала отключает рост.
--max-journal-bytes <n>positive safe integer8388608 (8 МиБ)Базовый байтовый лимит liveJournal в полёте для каждой сессии. Когда ход превышает его, адаптивный рост повышает лимиты сессии по требованию, вплоть до удвоения, но ограниченный оставшимся запасом пула и не далее жёсткого лимита 256 МиБ на сессию — в рамках общесистемного пула 5% от эффективного --memory-budget-mb (ограничено 1024 МБ; 0 — рост отключён — когда эффективный бюджет ниже минимума 1024 МБ), общего для каждого bridge рабочего пространства; без запаса самые старые записи отбрасываются с маркером history_truncated. Фиксация любого флага журнала отключает рост.
--memory-budget-mb <n>integer in [1024, 1048576]50% памяти cgroup или хоста, ограничено максимумом флага (1048576 МБ)Общий бюджет памяти для дерева процессов демона, ограниченный доступной памятью. Сообщается в limits.memory в статусе демона; не определяет размер дочерних процессов — единственный потребитель на сегодня — адаптивный рост live-journal (см. --max-journal-bytes). Запуск отклоняет значения вне диапазона.
--memory-pressure-mode <mode>off | observeobserveОпределяет ли демон уровень давления памяти на основе собственного RSS и кучи V8. Оба режима сообщают runtime.memory.pressure; только observe вызывает daemon_memory_pressure. Только для корневого процесса; без remediation.
--child-heap-mode <mode>off | observeobserveМоделирует ли демон разделение кучи на каждого дочернего процесса из бюджета. observe сообщает об этом и считает запуски сверх лимита; ничего не применяется. off не публикует разделение вообще — maxConcurrentChildren и perChildCeilingMb оба null.
--http-bridgebooleantrueРежим моста этапа 1. --no-http-bridge все равно использует резервный http-bridge и выводит предупреждение в stderr.
--mcp-client-budget <n>positive integerunsetУстанавливает WorkspaceMcpBudget.clientBudget и передает его дочернему процессу ACP через childEnvOverrides.
--mcp-budget-mode <m>off / warn / enforcewarn, если задан бюджет, иначе offУстанавливает WorkspaceMcpBudget.mode; для enforce требуется --mcp-client-budget.
--external-tool-guard-mode <m>off / requiredoffВключает управляемый внешний Guard перед выполнением ACP. required не позволяет запустить демон, если его провайдер loopback не завершит рукопожатие v1.
--external-tool-guard-endpoint <url>loopback HTTP(S) originunsetOrigin провайдера, используется только в режиме required. Должен быть только origin и использовать 127.0.0.1, localhost или ::1; пути, учётные данные, редиректы и маршрутизация через прокси отклоняются.
--external-tool-guard-timeout-ms <n>integer 100..300003000Таймаут на каждое рукопожатие и подготовку. Тайм-аут при рукопожатии прерывает запуск; при выполнении — закрывает вызов.
--allow-origin <pattern>repeatable stringunsetБелый список cross-origin, заменяющий стандартный запрет CORS. * разрешает любой origin, но требует токен.
--allow-private-auth-base-urlbooleanfalseПозволяет /workspace/auth/provider устанавливать baseUrl для провайдера аутентификации localhost / частной сети; использовать только в доверенной локальной среде разработки.
--web / --no-webbooleantrueРаздача собранного Web Shell SPA в корне демона (GET /, /assets/* и навигации по документам /session/:id). Эти точки монтирования размещаются до bearerAuth; каждый API-маршрут остаётся защищённым токеном. --no-web оставляет демон в режиме API-only.
--prompt-deadline-ms <n>positive integerunsetСерверный лимит реального времени выполнения промпта в мс. При тайм-ауте выполнение прерывается и возвращается ошибка.
--writer-idle-timeout-ms <n>positive integerunsetТайм-аут простоя для каждого SSE-соединения в мс. Демон закрывает SSE-соединение, если в течение этого времени не отправлено ни одного события.
--channel-idle-timeout-ms <n>non-negative integer0Как долго держать дочерний процесс ACP активным после закрытия последней сессии. 0 означает немедленное освобождение ресурсов.
--initialize-timeout-ms <n>positive integer10000Таймаут запросов дочернего процесса ACP, включая рукопожатие initialize (мс).
--session-restore-timeout-ms <n>positive integer60000Таймаут загрузки/восстановления сессии ACP (мс). Когда флаг не указан, явно заданный таймаут инициализации повышает бюджет, но не опускает его ниже значения по умолчанию.
--permission-response-timeout-ms <n>non-negative integer0Общий таймаут реального времени для обычных запросов разрешений и ответов ask_user_question. 0 или отсутствующий флаг ожидает бесконечно; положительное значение включает таймер.
--session-reap-interval-ms <n>non-negative integer60000Интервал сканирования сборщика неактивных сессий; 0 отключает его.
--session-idle-timeout-ms <n>non-negative integer1800000Время простоя отключенной сессии перед сборкой; 0 отключает его.
--rate-limit / --no-rate-limitbooleanenv / offВключает HTTP rate limiting для маршрутов промптов, мутаций и чтения с разделением по уровням.
--rate-limit-prompt <n>positive integer10Лимит запросов промптов в окне; требует включения rate limiting.
--rate-limit-mutation <n>positive integer30Лимит запросов мутаций в окне; требует включения rate limiting.
--rate-limit-read <n>positive integer120Лимит запросов на чтение в окне; требует включения rate limiting.
--rate-limit-window-ms <n>integer >= 100060000Длина окна rate limiting; требует включения rate limiting.
нет флага--QWEN_SERVE_NO_MCP_POOL=1 полностью отключает пул.

Переменные окружения

Читаются runQwenServe / Express middleware

ПеременнаяДействие
QWEN_SERVER_TOKENBearer-токен; обрезается при запуске.
QWEN_SERVE_DEBUG1 / true / on / yes (без учета регистра) включает подробные логи в stderr. См. 19-observability.md.
QWEN_SERVE_NO_MCP_POOL1 отключает пул транспортов MCP рабочей области и переключает на McpClientManager для каждой сессии; возможности перестают анонсировать mcp_workspace_pool / mcp_pool_restart.
QWEN_SERVE_PROMPT_DEADLINE_MSРезервная переменная окружения для --prompt-deadline-ms.
QWEN_SERVE_WRITER_IDLE_TIMEOUT_MSРезервная переменная окружения для --writer-idle-timeout-ms.
QWEN_SERVE_RATE_LIMIT1 / true включает HTTP rate limiting с разделением по уровням; флаги CLI --rate-limit / --no-rate-limit имеют приоритет.
QWEN_SERVE_RATE_LIMIT_PROMPTРезервная переменная окружения для --rate-limit-prompt.
QWEN_SERVE_RATE_LIMIT_MUTATIONРезервная переменная окружения для --rate-limit-mutation.
QWEN_SERVE_RATE_LIMIT_READРезервная переменная окружения для --rate-limit-read.
QWEN_SERVE_RATE_LIMIT_WINDOW_MSРезервная переменная окружения для --rate-limit-window-ms.
QWEN_SERVE_NEW_FILE_MODEПолитика режима новых файлов для текстовых записей демона: owner (по умолчанию — НОВЫЕ файлы создаются 0600, независимо от umask) или system (НОВЫЕ файлы следуют 0o666 & ~umask). Без учета регистра; литерал 0600 принимается как псевдоним для owner (другие восьмеричные режимы не поддерживаются), а нераспознанные значения выводят предупреждение в stderr и сохраняют значение по умолчанию 0600. Существующие файлы всегда сохраняют свой режим. См. qwen-serve.md — Режим новых файлов для текстовых записей агента.
QWEN_CODE_MEMORY_PROJECT_SCOPEworkspace привязывает память проекта к точному каталогу рабочего пространства; git-root выбирает устаревшую общую область. Когда не установлена, демон подставляет workspace; нераспознанные значения выводят предупреждение один раз и сохраняют устаревшее поведение git-root. Распространяется через базовую переменную окружения среды выполнения, а не childEnvOverrides; --memory-project-scope имеет приоритет. Каждая дорожка remember/forget/dream рабочего пространства ограничивает ожидающие задачи до MAX_PENDING = 16; N рабочих пространств допускают до 16·N задач в очереди без общесистемного лимита.

Пустые значения QWEN_CODE_MEMORY_PROJECT_SCOPE трактуются как неустановленные и поэтому по умолчанию принимают значение workspace; нераспознанные непустые значения всё ещё выводят предупреждение один раз и сохраняют устаревшее поведение git-root.

Читаются обёрткой CLI qwen serve

ПеременнаяДействие
QWEN_CODE_EXTERNAL_TOOL_GUARD_TOKENНепустой bearer-токен длиной не более 8192 кодовых единиц UTF-16 без управляющих символов, копируется в ServeOptions.externalToolGuard только в режиме required. Затем CLI удаляет значение окружения перед заморозкой сред выполнения; дочерние процессы ACP, воркеры каналов и среды исполнителей также защитно очищают его.

Передаются дочернему процессу ACP через BridgeOptions.childEnvOverrides

runQwenServe формирует их для каждого обработчика, чтобы два демона в одном процессе не конкурировали за process.env. Переменные бюджета не являются резервными переменными окружения родительского процесса для qwen serve; путь CLI должен генерировать их из --mcp-client-budget / --mcp-budget-mode.

ПеременнаяДействие
QWEN_SERVE_MCP_CLIENT_BUDGETСтрока с положительным целым числом, потребляемая readBudgetFromEnv() дочернего процесса ACP.
QWEN_SERVE_MCP_BUDGET_MODEoff / warn / enforce.
QWEN_SERVE_MCP_POOL_TRANSPORTSРазделенный запятыми белый список транспортов; по умолчанию пул использует stdio,websocket; можно явно добавить http,sse.
QWEN_SERVE_MCP_POOL_DRAIN_MSЗадержка сброса неактивной записи пула; по умолчанию 30000, ограничена диапазоном 1000..600000 мс.

Читаются SDK / адаптерами

ПеременнаяДействие
QWEN_DAEMON_URLБазовый URL демона для CLI TUI адаптера, каналов и IDE-компаньона.
QWEN_DAEMON_TOKENBearer-токен.
QWEN_DAEMON_WORKSPACEПереопределяет cwd, отправляемый в POST /session.

Ключи settings.json

Демон строит каждую среду выполнения рабочего пространства из объединённых настроек и наложения переменных окружения этого рабочего пространства. Глобальные для процесса опции слушателя/аутентификации разрешаются один раз, тогда как сервисы среды выполнения и дочерние процессы ACP получают снимок владеющей среды выполнения. Некорректные настройки подчиняются документированному поведению фолбэка или ошибки при запуске для затронутой среды выполнения; они не должны приводить к повторному использованию настроек другого рабочего пространства.

КлючТипДействие
policy.permissionStrategy'first-responder' | 'designated' | 'consensus' | 'local-only'Устанавливает BridgeOptions.permissionPolicy; активное значение отображается в /capabilities как policy.permission. При запуске проверяется через validatePolicyConfig() на соответствие SERVE_CAPABILITY_REGISTRY.permission_mediation.modes. Неизвестные литералы вызывают InvalidPolicyConfigError и явно прерывают запуск.
policy.consensusQuorumpositive integerN для политики consensus. По умолчанию равно floor(M/2) + 1 от votersAtIssue.size (M=2 означает единогласие; большее четное M означает больше половины). Если задано для политики, отличной от consensus, игнорируется, и при запуске выводится предупреждение в stderr. Не положительные целые числа вызывают InvalidPolicyConfigError. См. 04-permission-mediation.md.
context.fileNamestringПереопределяет getCurrentGeminiMdFilename() через BridgeOptions.contextFilename.
tools.disabledstring[]Инструменты, отключенные для следующего запуска дочернего процесса ACP. Нормализуется через normalizeDisabledToolList() (packages/cli/src/config/normalizeDisabledTools.ts): не массив становится [], не строковые элементы пропускаются, пробелы обрезаются, пустые элементы удаляются, дубликаты удаляются с сохранением первого вхождения. Настройки запуска и обновления restartMcpServer обе проходят через эту функцию. ToolRegistry.has(name) работает точно и с учетом регистра. POST /workspace/tools/:name/enable и tool_toggled обновляют этот ключ.
tools.approvalMode'default' | 'auto' | ...Режим одобрения сессии по умолчанию; POST /session/:id/approval-mode записывает сюда значение, если persist: true.
telemetryobjectКонфигурация OTel. Ключи включают enabled, otlpEndpoint, otlpProtocol, otlpTracesEndpoint, otlpLogsEndpoint, otlpMetricsEndpoint, target, outfile, userId, includeSensitiveSpanAttributes, sensitiveSpanAttributeMaxLength, resourceAttributes и metrics.includeSessionId. resolveTelemetrySettings() читает её при запуске и инициализирует initializeTelemetry(). userId действует на весь процесс и не должен настраиваться как идентификатор конечного пользователя, когда демон обслуживает нескольких пользователей.

ServeOptions (программное встраивание)

packages/cli/src/serve/types.ts определяет типизированные опции, передаваемые через публичные API serve. Он дублирует флаги CLI выше и добавляет:

ПолеДействие
eventRingSizeПереопределяет размер кольца по умолчанию для каждой сессии.
memoryProjectScopeТолько runQwenServe; приоритет: опция, переменная окружения при запуске, затем workspace. Прямые вызовы createServeApp используют deps.daemonEnv.
maxPendingPromptsPerSessionЛимит ожидающих промптов на сессию; 0 / Infinity означает без ограничений.
mcpPoolActiveПрограммный переключатель, по умолчанию зависит от QWEN_SERVE_NO_MCP_POOL.
externalToolGuardОпциональный {mode:'required', endpoint, token, timeoutMs?}. Отсутствие полностью отключает; режим required выполняет рукопожатие с провайдером перед прослушиванием.
allowOriginsБелый список cross-origin (string[]), соответствует --allow-origin.
allowPrivateAuthBaseUrlРазрешает установку baseUrl для провайдера аутентификации private / localhost.
serveWebShellРаздача собранного Web Shell SPA в корне демона (по умолчанию true); false (CLI --no-web) оставляет демон в режиме API-only. Нет эффекта, если сборка не содержит ресурсов оболочки.
enableSessionShellВключает выполнение shell в сессии; bearer-токен и привязанный к сессии client id по-прежнему требуются.
promptDeadlineMsЛимит реального времени выполнения промпта.
writerIdleTimeoutMsТайм-аут простоя SSE writer.
channelIdleTimeoutMsКак долго держать дочерний процесс ACP активным после закрытия последней сессии.
initializeTimeoutMsТаймаут запросов дочернего процесса ACP, включая рукопожатие initialize.
sessionRestoreTimeoutMsТаймаут загрузки/восстановления сессии ACP. Приоритет: явное значение restore; иначе явное значение initialize увеличивает дефолт 60000, но не опускает его ниже; иначе 60000.
sessionReapIntervalMsИнтервал сканирования сборщика неактивных сессий.
sessionIdleTimeoutMsВремя простоя отключенной сессии перед сборкой.
rateLimit*Переключатель HTTP rate limiting с разделением по уровням, пороги и окно.

BridgeOptions (программное встраивание bridge)

В файле packages/acp-bridge/src/bridgeOptions.ts определены опции bridge. Полная таблица приведена в 03-acp-bridge.md. Ключевые поля:

FieldEffect
boundWorkspaceОбязательное каноническое рабочее пространство.
sessionScope'single' (по умолчанию) или 'thread'.
initializeTimeoutMs, sessionRestoreTimeoutMs, maxSessions, eventRingSize, permissionResponseTimeoutMs, maxPendingPermissionsPerSessionОграничения на использование ресурсов.
channelFactoryПодключаемая фабрика дочерних процессов ACP; по умолчанию используется defaultSpawnChannelFactory.
fileSystemАдаптер BridgeFileSystem. См. 07-workspace-filesystem.md.
permissionPolicy, permissionConsensusQuorum, permissionAuditНастройка медиатора.
statusProviderЯчейки предварительной проверки хоста демона.
childEnvOverridesДобавление или удаление переменных окружения для каждого хэндла.
externalToolGuardОпциональный обработчик на стороне демона для приватного RPC prepare от дочернего процесса к родительскому. Bridge проверяет принадлежность канала и активный промпт до и после вызова обработчика.
contextFilenameПереопределяет getCurrentGeminiMdFilename().
channelIdleTimeoutMsВремя жизни дочернего процесса ACP после закрытия последней сессии, в мс; по умолчанию 0.

Важные значения по умолчанию

ConstantFileValueMeaning
DEFAULT_MAX_SESSIONSbridge.ts32Лимит сессий перед возникновением SessionLimitExceededError.
MAX_EVENT_RING_SIZEbridge.ts1_000_000Мягкий лимит для BridgeOptions.eventRingSize; защита от опечаток.
DEFAULT_RING_SIZEeventBus.ts8000Глубина кольца повторной передачи SSE для каждой сессии.
DEFAULT_MAX_QUEUEDeventBus.ts256Лимит очереди для каждого подписчика.
DEFAULT_MAX_SUBSCRIBERSeventBus.ts64Лимит подписчиков для каждой шины.
WARN_THRESHOLD_RATIOeventBus.ts0.75Триггер для slow_client_warning.
WARN_RESET_RATIOeventBus.ts0.375Порог сброса гистерезиса.
DEFAULT_INIT_TIMEOUT_MSbridge.ts10_000Таймаут рукопожатия initialize в ACP.
MCP_RESTART_TIMEOUT_MSbridge.ts300_000Таймаут bridge для /workspace/mcp/:server/restart.
DEFAULT_PERMISSION_TIMEOUT_MSbridge.ts0Таймаут запросов разрешений по умолчанию; 0 означает ожидание без ограничений.
DEFAULT_MAX_PENDING_PER_SESSIONbridge.ts64Согласовано с DEFAULT_MAX_SUBSCRIBERS.
MAX_RESOLVED_PERMISSION_RECORDSpermissionMediator.ts512FIFO для недавно обработанных разрешений.
KILL_HARD_DEADLINE_MSspawnChannel.ts10_000Окно корректного завершения работы для каждого канала.
SHUTDOWN_FORCE_CLOSE_MSrun-qwen-serve.ts5_000Таймер принудительного закрытия HTTP-сервера.
MAX_READ_BYTESfs/policy.ts256 * 1024Лимит полного снимка и возвращаемого текста; больший UTF-8 текст требует конечного лимита строк.
MAX_WRITE_BYTESfs/policy.ts5 * 1024 * 1024Лимит записи.
MAX_DISPLAY_NAME_LENGTHbridge.ts256Лимит длины displayName сессии.

Перекрестные ссылки

Last updated on