Junction · VS Code 聊天侧栏 × 7 种 Agent 后端
把 VS Code 的聊天侧栏变成 7 种本地 coding agent 的统一控制台——OpenClaw WebSocket、Hermes REST、MiMoCode、Goose、OpenCode、OpenHands、Souveraine,一个界面切换后端,不换工作流。
一句话定位
Junction 是一个 VS Code 扩展,为本地运行的 AI coding agent(OpenClaw、Hermes、MiMoCode、Goose、OpenCode、OpenHands、Souveraine)提供一个统一的聊天侧栏界面。它解决的核心问题是:不同的 agent 运行时有不同的 CLI 和配置方式,开发者需要在 IDE 和终端之间反复切换。
Junction 的设计哲学是"零妥协的编辑器集成"——不改变 agent 行为,只提供更好的交互界面。模型选择、上下文注入、会话管理、输出渲染全在 VS Code 内完成。
架构总览
Junction 采用"统一抽象层 + 后端适配器"架构:
VS Code 侧栏 UI
统一消息协议
WebSocket
REST+WS
Auto-spawn
Data-dir
Binary+Config
Launcher+Home
HTTP+Runtime
每种后端的连接协议不同:WebSocket(OpenClaw/Hermes)、HTTP(Souveraine)、进程 Spawn(MiMoCode)、二进制路径+配置(OpenCode)、Launcher+Home(OpenHands)
后端连接协议对比
| 后端 | 协议 | 连接参数 | 会话管理 |
|---|---|---|---|
| OpenClaw | WebSocket | ws URL + session token | agent managed |
| Hermes | REST + WS | Dashboard URL + API key | native session |
| Souveraine | HTTP | server URL + managed runtime spawning | runtime managed |
| MiMoCode | Auto-spawn | auto-spawn or pre-configured server | process managed |
| Goose | Data-dir | data directory + secret key | file based |
| OpenCode | Binary+Config | binary path + config home | config based |
| OpenHands | Launcher+Home | server launcher + home directory | home dir |
核心功能解析
聊天侧栏 UI
VS Code Secondary Sidebar(活动栏右侧)作为 Junction 的主界面,提供:
- 多会话标签页:每个 agent 后端一个 tab,tab 内维护独立消息历史
- 消息渲染:Markdown 完整渲染(含代码高亮)、工具调用卡片、推理过程折叠
- 上下文注入:拖拽文件到输入框,或右键文件/选区添加到当前 thread
- Follow-Up Modes:Queue(agent 完成后排队)、Steer(中间接管)、Interrupt(打断重定向)
模型与推理强度选择
侧栏头部提供每个会话的模型选择器和"推理努力"滑块(reasoning effort),这解决了 agent 运行时通常需要 CLI 参数或配置文件来切换模型的问题——在编辑器内即时生效。
两种聊天布局
Compact Mode
工具调用卡片折叠为 accordion,节省垂直空间,适合长对话
Timeline Mode
时序视图,推理过程(Chain of Thought)完整展示,用户消息 sticky
上下文注入机制
Junction 的上下文注入有两种方式:
技术亮点
7 种 agent 运行时有 5 种不同的连接协议(WebSocket、HTTP、进程 spawn、配置文件、环境变量),Junction 用适配器模式把它们抽象成统一的
AgentAdapter 接口,前端 UI 完全不需要知道后端类型。
Junction 不修改任何 agent 的行为,只在协议层做桥接。agent 仍然用自己的 CLI 和配置,Junction 只负责把消息转发过去。这避免了 agent 版本升级带来的兼容性问题。
拖拽/右键的上下文注入方式,把 VS Code 的编辑器能力(文件树、选择区、多选)直接接入 agent 对话,这是纯终端界面无法提供的能力。
OpenClaw WebSocket 集成详解
Junction 与 OpenClaw 的集成是所有后端中最深的。OpenClaw 提供 WebSocket gateway,包含 session 管理、模型管理和工具路由。Junction 的 OpenClawAdapter 负责:
// 1. 建立 WebSocket 连接
const ws = new WebSocket('ws://localhost:8080/gateway', {
headers: { 'x-session-token': sessionToken }
});
// 2. 会话初始化 → 发送模型选择和系统提示
ws.on('open', () => {
adapter.sendSessionInit({
model: selectedModel,
reasoningEffort: reasoningLevel,
systemPrompt: userSystemPrompt
});
});
// 3. 消息双向流:用户消息 → agent 流式响应
function sendMessage(content, contextFiles) {
ws.send(JSON.stringify({
type: 'user_message',
content,
context: contextFiles // Junction 特有的编辑器上下文注入
}));
}
// 4. 渲染 agent 的流式输出(Markdown + 工具调用卡片)
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.type === 'stream_token') render.appendToken(msg.token);
if (msg.type === 'tool_call') render.showToolCard(msg.tool, msg.args);
if (msg.type === 'reasoning') render.showCOT(msg.content);
});
生态意义
Junction 解决的是一个实际工作流摩擦:开发者使用多个 coding agent(各自擅长不同任务),但每个 agent 都有自己的 CLI 和界面,需要在 IDE 和终端之间反复横跳。Junction 把"多 agent 切换"收敛到 VS Code 侧栏一个界面。
它的架构也值得借鉴——适配器模式使得新增后端的成本很低,只需要实现 AgentAdapter 接口即可。对于想统一管理多个 agent 运行时的人来说,Junction 的架构是一个可参考的"统一界面"方案。