Appearance
Routing / Provider Adaptation
Coordinator 的职责
| Symbol | 作用 |
|---|---|
createCoordinatorInferenceRouter() | routing owner + local transcript owner |
execute() | 建 user entry → provider request → stream assistant → persist assistant |
dispatch() | 拦截 sendPrompt / transcript / reaction operations |
queues | per-agent Promise queue,防止同一 agent 的 Turn 乱序 |
runRoutedProviderText() | provider-specific inference execution |
createRoutedMcpBridge() call site | Claude Code 走 MCP bridge |
direct tools + executeTool | 其他 provider 可直接接 internal tools |
Provider tool adaptation
text
provider == claude-code
→ createRoutedMcpBridge()
→ provider gets mcpServerUrl
other routed provider
→ listRoutedMcpTools()
→ provider gets direct tool definitions
→ executeTool() dispatches internal tool关键点:同一内部 capability 可以通过不同 provider adapter 暴露;Harness core 不应该把“工具只能通过 MCP”写死。
Per-agent serialization
dispatch("sendPrompt") 从 queues 取该 agent 上一次 Promise,新 Turn 链在 previous 后面执行。它解决的是同一 agent transcript / turn order,而不是全局只能串行。
Stream normalization
conversation-state.ts 中 sanitizeFullStream()、sanitizeUsage()、createSandResolvedModelTracker() 处理 provider event / usage / resolved model 的归一化。Routing 不只是挑 provider,还需要把 provider-specific output 收敛成 Runtime 可依赖的语义。
本地定位
bash
rg -n "createCoordinatorInferenceRouter|const execute|dispatch\(|queues|runRoutedProviderText|createRoutedMcpBridge" source/node-agent-coordinator/inference-router.ts
rg -n "sanitizeFullStream|sanitizeUsage|createSandResolvedModelTracker|sanitizePromptSessionUsage" source/host/runner/conversation-state.ts固定源码
关联知识文章
- 模型调用失败后怎么处理:Error Taxonomy、Routing 与 Fallback — Router 的职责边界:选择 Provider + 串行化 Agent Turn;
createCoordinatorInferenceRouter()→dispatch()→execute() - 如何隔离 Provider 差异:Streaming、Adapter 与 Capability — Provider delta 先规范化,再进入 Runtime 事件模型;
sanitizeFullStream()→sanitizeStreamResult()→createSandResolvedModelTracker() - 常见编排模式怎么选:Router、Fan-out、Manager 与 Handoff — 真实 Router 同时处理 provider 差异和 Turn 顺序;
createCoordinatorInferenceRouter()→dispatch()→execute()→queues