Back to Qwen Code

配置参考

docs/developers/daemon/17-configuration.md

0.18.123.8 KB
Original Source

配置参考

概览

把所有会影响 qwen serve daemon 与适配器的旋钮(env、CLI 参数、settings.json 键)汇总到一页。跨切面参考,单 feature 文档链接到此。

CLI 参数(qwen serve

参数类型默认效果
--hostname <host>string127.0.0.1监听绑定。loopback 值:127.0.0.1localhost::1[::1]。非 loopback 要求 boot 时有 bearer token。错配兜底 host:port 形(用 --port
--port <n>number4170监听端口;0 = ephemeral
--token <s>string(env)Bearer token,覆盖 QWEN_SERVER_TOKEN,boot 时 trim;会出现在进程命令行,部署时优先用 env
--require-authbooleanfalsebearer 扩展到 loopback + /health,无 token 拒启动
--workspace <dir>绝对路径process.cwd()绑定 workspace。必须绝对且为目录;boot 时 canonicalize 一次
--max-sessions <n>number20活动 session 上限。0 / Infinity = 不限;NaN/负值抛错
--max-pending-prompts-per-session <n>number5每 session 已接受但仍在等待或运行的 prompt 上限;超过返回 503。0 / Infinity = 不限;负值 / 非整数抛错
--max-connections <n>number256HTTP 监听器的 server.maxConnections0 / Infinity = 不限
--enable-session-shellbooleanfalse启用直接 POST /session/:id/shell 执行。需要 bearer token,且每次调用都要带 session-bound X-Qwen-Client-Id
--event-ring-size <n>number8000per-session SSE 重放环;软上限 1_000_000
--http-bridgebooleantrueStage 1 桥模式;--no-http-bridge 仍会 fallback 到 http-bridge 并打 stderr
--mcp-client-budget <n>正整数(未设)WorkspaceMcpBudget.clientBudget,通过 childEnvOverrides 传 ACP child
--mcp-budget-mode <m>off/warn/enforcebudget 设了默认 warn,否则 offWorkspaceMcpBudget.modeenforce--mcp-client-budget
--allow-origin <pattern>string(可多次)(未设)跨域允许列表,替代默认的 CORS 拒绝策略。* 允许任何来源但需 token
--allow-private-auth-base-urlbooleanfalse允许 /workspace/auth/provider 安装 localhost / private-network baseUrl;仅本地可信开发场景使用
--prompt-deadline-ms <n>正整数(未设)prompt 的服务端 wallclock 上限(ms)。超时 abort 并返错
--writer-idle-timeout-ms <n>正整数(未设)per-SSE-connection 空闲超时(ms)。无事件发送超过此时间则关闭 SSE 连接
--channel-idle-timeout-ms <n>非负整数0最后一个 session 关闭后保持 ACP child 存活的时间(ms)。0 = 立即回收
--session-reap-interval-ms <n>非负整数60000session reaper 扫描间隔;0 = 禁用
--session-idle-timeout-ms <n>非负整数1800000disconnected session 的 idle 回收时间;0 = 禁用
--rate-limit / --no-rate-limitbooleanenv / off启用 per-tier HTTP rate limit;prompt / mutation / read 三档
--rate-limit-prompt <n>正整数10每窗口 prompt 请求上限;需开启 --rate-limit
--rate-limit-mutation <n>正整数30每窗口 mutation 请求上限;需开启 --rate-limit
--rate-limit-read <n>正整数120每窗口 read 请求上限;需开启 --rate-limit
--rate-limit-window-ms <n>整数 >= 100060000rate limit 窗口长度;需开启 --rate-limit
(无 flag)env QWEN_SERVE_NO_MCP_POOL=1 完全禁池

环境变量

runQwenServe / Express 中间件读

Env作用
QWEN_SERVER_TOKENBearer token,boot 时 trim
QWEN_SERVE_DEBUG1 / true / on / yes(不区分大小写)开启详细 stderr(见 19-observability.md
QWEN_SERVE_NO_MCP_POOL1 禁 workspace MCP transport 池(回到 per-session McpClientManager;capabilities 不再广播 mcp_workspace_pool / mcp_pool_restart
QWEN_SERVE_PROMPT_DEADLINE_MSenv fallback for --prompt-deadline-ms
QWEN_SERVE_WRITER_IDLE_TIMEOUT_MSenv fallback for --writer-idle-timeout-ms
QWEN_SERVE_RATE_LIMIT1 / true 开启 per-tier HTTP rate limit;CLI --rate-limit / --no-rate-limit 优先
QWEN_SERVE_RATE_LIMIT_PROMPTenv fallback for --rate-limit-prompt
QWEN_SERVE_RATE_LIMIT_MUTATIONenv fallback for --rate-limit-mutation
QWEN_SERVE_RATE_LIMIT_READenv fallback for --rate-limit-read
QWEN_SERVE_RATE_LIMIT_WINDOW_MSenv fallback for --rate-limit-window-ms

通过 BridgeOptions.childEnvOverrides 转发给 ACP child

runQwenServe per-handle 构造,防止同进程两个 daemon 在 process.env 上 race。注意预算两项不是 qwen serve 父进程的 env fallback;CLI 路径必须通过 --mcp-client-budget / --mcp-budget-mode 生成这些 child env override:

Env作用
QWEN_SERVE_MCP_CLIENT_BUDGET正整数字符串;ACP child 的 readBudgetFromEnv() 消费
QWEN_SERVE_MCP_BUDGET_MODEoff / warn / enforce
QWEN_SERVE_MCP_POOL_TRANSPORTScomma-separated transport allowlist;默认池化 stdio,websocket,可显式包含 http,sse
QWEN_SERVE_MCP_POOL_DRAIN_MS池 entry idle drain 延迟;默认 30000,限制在 1000..600000 ms

SDK / 适配器读

Env作用
QWEN_DAEMON_URLdaemon base URL(CLI TUI 适配器、channels、IDE companion)
QWEN_DAEMON_TOKENBearer token
QWEN_DAEMON_WORKSPACE覆盖 POST /sessioncwd

settings.json

daemon boot 时读一次(runQwenServe 里的 loadSettings(boundWorkspace))。损坏 try/catch 回退默认。

类型效果
policy.permissionStrategy'first-responder' | 'designated' | 'consensus' | 'local-only'BridgeOptions.permissionPolicy;激活值出现在 /capabilitiespolicy.permissionboot 校验通过 validatePolicyConfig(),对照 SERVE_CAPABILITY_REGISTRY.permission_mediation.modes;未知字面量抛 InvalidPolicyConfigError,boot 显式失败
policy.consensusQuorum正整数consensus 策略的 N。默认votersAtIssue.sizefloor(M/2) + 1(M=2 一致同意;更大偶数 M 超过半数)。非 consensus 策略下设它会被静默忽略,boot 会打 stderr 警告。非正整数抛 InvalidPolicyConfigError。详见 04-permission-mediation.md
context.fileNamestring覆盖 getCurrentGeminiMdFilename();走 BridgeOptions.contextFilename
tools.disabledstring[]下次 ACP child spawn 时被禁的 tool;通过 normalizeDisabledToolList()packages/cli/src/config/normalizeDisabledTools.ts)归一化:非数组 → [];非字符串项跳过;trim 空白;trim 后空串丢弃;去重(保留首次出现顺序)。boot 路径与 restartMcpServer settings 刷新都过这函数,ToolRegistry.has(name) 精确匹配才一致。做大小写折叠 —— Stage 1 工具名在 registry 全程大小写敏感。POST /workspace/tools/:name/enabletool_toggled 事件改这里
tools.approvalMode'default' | 'auto' | ...session 默认 approval mode;POST /session/:id/approval-mode(带 persist: true)写这里
telemetryobjectOTel 配置段。子键包括 enabledotlpEndpointotlpProtocolotlpTracesEndpointotlpLogsEndpointotlpMetricsEndpointtargetoutfileincludeSensitiveSpanAttributesresourceAttributesmetrics.includeSessionId。boot 时 resolveTelemetrySettings() 读并初始化 initializeTelemetry()

ServeOptions(程序化嵌入)

packages/cli/src/serve/types.ts 的 typed options 对象,runQwenServecreateServeApp 都接受。镜像上面 CLI 参数,外加:

字段效果
eventRingSize覆盖默认 per-session 环大小
maxPendingPromptsPerSession每 session 未完成 prompt 上限;0 / Infinity 不限
mcpPoolActive程序化开关(默认从 QWEN_SERVE_NO_MCP_POOL 推断)
allowOrigins跨域允许列表(string[]),对应 --allow-origin
allowPrivateAuthBaseUrl允许安装 private / localhost auth provider baseUrl
enableSessionShell启用 session shell 执行;仍要求 bearer token 与 session-bound client id
promptDeadlineMsprompt wallclock 上限
writerIdleTimeoutMsSSE writer 空闲超时
channelIdleTimeoutMsACP child 空闲保活时长
sessionReapIntervalMssession reaper 扫描间隔
sessionIdleTimeoutMsdisconnected session idle 回收时间
rateLimit*per-tier HTTP rate limit 开关、阈值和窗口

BridgeOptions(程序化 bridge 嵌入)

packages/acp-bridge/src/bridgeOptions.ts,完整表见 03-acp-bridge.md。要点:

字段效果
boundWorkspace必填 canonical workspace
sessionScope'single'(默认)vs 'thread'
initializeTimeoutMsmaxSessionseventRingSizepermissionResponseTimeoutMsmaxPendingPermissionsPerSession有界资源 caps
channelFactory可插拔 ACP child 工厂,默认 defaultSpawnChannelFactory
fileSystemBridgeFileSystem adapter(见 07-workspace-filesystem.md
permissionPolicypermissionConsensusQuorumpermissionAuditmediator 接线
statusProviderdaemon-host preflight cells
childEnvOverridesper-handle env 增量 / scrub
contextFilename覆盖 getCurrentGeminiMdFilename()
channelIdleTimeoutMs最后 session 关闭后保活 ACP child 的时长(ms),默认 0

重要默认

常量文件意义
DEFAULT_MAX_SESSIONSbridge.ts20每 daemon 抛 SessionLimitExceededError 前的上限
MAX_EVENT_RING_SIZEbridge.ts1_000_000BridgeOptions.eventRingSize 软上限(错字防御)
DEFAULT_RING_SIZEeventBus.ts8000per-session SSE 重放环深度
DEFAULT_MAX_QUEUEDeventBus.ts256per-subscriber 队列上限
DEFAULT_MAX_SUBSCRIBERSeventBus.ts64per-bus 订阅者上限
WARN_THRESHOLD_RATIOeventBus.ts0.75slow_client_warning 触发
WARN_RESET_RATIOeventBus.ts0.375滞回 re-arm
DEFAULT_INIT_TIMEOUT_MSbridge.ts10_000ACP initialize 握手超时
MCP_RESTART_TIMEOUT_MSbridge.ts300_000/workspace/mcp/:server/restart 的 bridge race deadline
DEFAULT_PERMISSION_TIMEOUT_MSbridge.ts5 * 60_000每权限请求 wallclock
DEFAULT_MAX_PENDING_PER_SESSIONbridge.ts64对齐 DEFAULT_MAX_SUBSCRIBERS
MAX_RESOLVED_PERMISSION_RECORDSpermissionMediator.ts512近期已 resolved 权限的 FIFO
KILL_HARD_DEADLINE_MSbridge.ts10_000per-channel graceful 关闭窗口
SHUTDOWN_FORCE_CLOSE_MSrunQwenServe.ts5_000HTTP server 强关定时器
MAX_READ_BYTESfs/policy.ts256 * 1024读上限
MAX_WRITE_BYTESfs/policy.ts5 * 1024 * 1024写上限
MAX_DISPLAY_NAME_LENGTHbridge.ts256session displayName 上限

交叉参考