Skip to content
FunCoding

Search

Search docs, Skills and MCP

Java legacy stdio

维护旧 CLI 子进程集成,配置内容回调、超时层级和资源清理。

This page has not been translated into English yet. The original Chinese version is shown below.

com.alibaba.qwen.code.cli 是保留的 experimental stdio API,依赖外部 qwen-code 0.5.0+。新包的 Java 11 要求仍适用,不能将它与 daemon API 的 HTTP/SSE 生命周期混用。

调用和配置

QwenCodeCli.simpleQuery() 提供简化查询,复杂用途可通过 QwenCodeCli.newSession() 创建 Session,并配置 TransportOptions。

字段/方法用途
pathToQwenExecutable、cwdCLI 路径和子进程工作目录
model、authType、env模型、认证模式与进程环境
permissionModedefault、plan、auto-edit、yolo 等该文档列出的 legacy 模式
maxSessionTurns会话轮次限制
coreTools、excludeTools、allowedTools工具可用集合、拒绝与预先批准
includePartialMessages接收生成中的消息
turnTimeout、messageTimeout一轮和单条消息的等待限制
resumeSessionId续接旧会话
otherOptions其他传给 CLI 的参数

allowedTools 表示自动批准,不是仅允许这些工具注册;default 下写调用需获批,plan 阻止写,auto-edit 自动批准编辑工具。不要为修复某个工具未执行而直接把所有操作改成 yolo。

两层事件处理

SessionEventConsumers 按 system、result、assistant、partial assistant、user、control 等消息分类;AssistantContentConsumers 在消息内部处理 text、thinking、tool use、tool result、usage 和其他内容。

onAssistantMessage 会派生内容回调,onPartialAssistantMessage 派生流式内容,onControlRequest 再路由到 onPermissionRequest 或 onOtherControlRequest。应用选择合适层级消费,避免把两层相同内容重复显示。

SessionEventSimpleConsumers 默认超时 180 秒,AssistantContentSimpleConsumers 默认 60 秒。各 handler 有对应 Timeout 方法;外层 onAssistantMessageTimeout 应长于文本、思考和工具等内层回调,onControlRequestTimeout 应长于权限及其他控制回调。

Session 生命周期

Session 可发送 prompt、interrupt 当前 prompt、setModel、setPermissionMode;TransportOptions.setResumeSessionId() 用于恢复。结束时始终调用 session.close() 清理 CLI 进程。

SessionControlException 表示会话控制问题,构造或 start 可直接抛出;QwenCodeCli.newSession() 会把更底层创建/初始化错误包成 RuntimeException。SessionSendPromptException 对应发送或响应问题。不要套用 daemon 的 PromptOutcomeIndeterminateException 去解释 stdio 特有错误。

默认线程池

旧实现的默认池核心 30、最大 100 线程,空闲保留 60 秒,LinkedBlockingQueue 容量 300,拒绝策略 CallerRunsPolicy,线程名 qwen_code_cli-pool-{number}。

线程为 daemon threads,JVM 退出时仍运行或排队的任务会被放弃。应用要求完成时需明确等待任务,不能只依靠存在异步 callback 就让 main 返回。

这些数值属于 legacy 全局池,推荐 daemon API 使用自己的有界 HTTP、prompt、maintenance 和 timer 资源,不继承这组容量参数。