Plaer1/junction · VS Code Extension · MIT

Junction · VS Code 聊天侧栏 × 7 种 Agent 后端

把 VS Code 的聊天侧栏变成 7 种本地 coding agent 的统一控制台——OpenClaw WebSocket、Hermes REST、MiMoCode、Goose、OpenCode、OpenHands、Souveraine,一个界面切换后端,不换工作流。

512
Stars (3 天)
7
Agent 后端
TypeScript
实现语言
MIT
许可证
OpenClaw
WebSocket
Hermes
REST+WS
MiMoCode
Auto-spawn
Goose
Data-dir

一句话定位

Junction 是一个 VS Code 扩展,为本地运行的 AI coding agent(OpenClaw、Hermes、MiMoCode、Goose、OpenCode、OpenHands、Souveraine)提供一个统一的聊天侧栏界面。它解决的核心问题是:不同的 agent 运行时有不同的 CLI 和配置方式,开发者需要在 IDE 和终端之间反复切换。

Junction 的设计哲学是"零妥协的编辑器集成"——不改变 agent 行为,只提供更好的交互界面。模型选择、上下文注入、会话管理、输出渲染全在 VS Code 内完成。

架构总览

Junction 采用"统一抽象层 + 后端适配器"架构:

src/agent-adapters/*.ts — 每种后端一个适配器
Junction
VS Code 侧栏 UI
→
AgentBridge
统一消息协议
→
OpenClawAdapter
WebSocket
HermesAdapter
REST+WS
MiMoCodeAdapter
Auto-spawn
GooseAdapter
Data-dir
OpenCodeAdapter
Binary+Config
OpenHandsAdapter
Launcher+Home
SouveraineAdapter
HTTP+Runtime

每种后端的连接协议不同:WebSocket(OpenClaw/Hermes)、HTTP(Souveraine)、进程 Spawn(MiMoCode)、二进制路径+配置(OpenCode)、Launcher+Home(OpenHands)

后端连接协议对比

后端协议连接参数会话管理
OpenClawWebSocketws URL + session tokenagent managed
HermesREST + WSDashboard URL + API keynative session
SouveraineHTTPserver URL + managed runtime spawningruntime managed
MiMoCodeAuto-spawnauto-spawn or pre-configured serverprocess managed
GooseData-dirdata directory + secret keyfile based
OpenCodeBinary+Configbinary path + config homeconfig based
OpenHandsLauncher+Homeserver launcher + home directoryhome 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 的上下文注入有两种方式:

01
拖拽添加拖拽文件/文件夹到聊天输入框,路径作为上下文引用注入
↓
02
右键菜单在文件树或编辑器中选择内容 → "Add to Junction Thread",选区内容注入
↓
03
主动上下文Agent 可通过工具调用卡片请求特定上下文(Git status、文件内容)

技术亮点

亮点 1:多后端协议统一抽象
7 种 agent 运行时有 5 种不同的连接协议(WebSocket、HTTP、进程 spawn、配置文件、环境变量),Junction 用适配器模式把它们抽象成统一的 AgentAdapter 接口,前端 UI 完全不需要知道后端类型。
亮点 2:零侵入性的 agent 集成
Junction 不修改任何 agent 的行为,只在协议层做桥接。agent 仍然用自己的 CLI 和配置,Junction 只负责把消息转发过去。这避免了 agent 版本升级带来的兼容性问题。
亮点 3:编辑器级上下文工程
拖拽/右键的上下文注入方式,把 VS Code 的编辑器能力(文件树、选择区、多选)直接接入 agent 对话,这是纯终端界面无法提供的能力。

OpenClaw WebSocket 集成详解

Junction 与 OpenClaw 的集成是所有后端中最深的。OpenClaw 提供 WebSocket gateway,包含 session 管理、模型管理和工具路由。Junction 的 OpenClawAdapter 负责:

src/agent-adapters/openclaw-adapter.ts (概念模型)
// 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 的架构是一个可参考的"统一界面"方案。