执行通道队列
会话默认没有队列,除非创建时传入 queueConfig / queue_config / QueueConfig。有了队列后,
宿主直接发起的工具调用(session.tool(...) 以及 bash、readFile、grep 等类型化辅助方法)
会被调度到各个 lane 上,每个 lane 有自己的并发上限。模型在 send 或 stream 回合内发起的
工具调用会直接运行,不经过队列。
四个 lane 分别是 control、query、execute 和 generate,默认并发上限依次为 2、4、2 和 1。
工具按名称映射到 lane:read、ls、search(grep 和 glob 背后的工具)、web_fetch、
web_search 以及代码智能工具使用 query;其他所有工具使用 execute。没有工具映射到
control 或 generate。
说明:
- 只有在创建会话时传入了队列配置,
hasQueue()/has_queue()/HasQueue()才返回true。 没有队列配置时,设置 lane 处理器不起作用,队列统计也始终为零。 - 每个 lane 都有一个处理器
mode:internal(默认)在进程内运行工具;external把调用作为 外部任务挂起,直到你的宿主完成它;hybrid在进程内运行工具,只发出 pending 和 completed 通知。可以用setLaneHandler/set_lane_handler/SetLaneHandler设置,也可以预先写在 队列配置中。完整的取出并完成流程见 外部任务。 - 队列统计报告
total_pending、total_active和external_pending(Node 中为totalPending、totalActive和externalPending)。Rust、Python 和 Go 还会在lanes下给出每个 lane 的状态。 - 在 Node 中,
hasQueue是同步的,其他队列方法返回 promise。Python 的队列方法是同步的。Go 的 队列方法接收调用方的context.Context。