跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Java legacy stdio

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

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 资源,不继承这组容量参数。