eca
编辑器通用的AI编程中台,一次配置让VS Code/Emacs/Neovim全面接入AI能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
编辑器通用的AI编程中台,一次配置让VS Code/Emacs/Neovim全面接入AI能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你正在 Vim 里写 Go 代码,队友用的是 VS Code,后端同事偏好 IntelliJ——三人的 IDE 环境完全不同,却都想要统一的 AI 编程辅助体验。传统的解决方案是每个编辑器各自维护一套 AI 插件,维护成本极高,用户体验也参差不齐。ECA(Editor Code Assistant)正是为解决这个痛点而生:它将 AI 能力下沉为编辑器无关的后台守护进程,通过业界标准的 JSON-RPC 协议(LSP 协议的一个变种)与前端编辑器插件通信,从根本上实现了「一次配置,处处生效」的设计目标。
ECA 由编辑器生态中一批资深开发者于 2025 年 6 月发起,GitHub 页面显示其定位是「编辑器无关的 AI 配对编程协议」。项目的核心灵感来源于 Language Server Protocol(LSP)——微软在 2016 年推出的编辑器语言服务协议,将语法高亮、代码补全、跳转定义等能力抽象为统一的 JSON-RPC 接口,使得一门语言只需实现一次逻辑,就能被所有支持 LSP 的编辑器调用。ECA 将这一思路延伸到了 AI 时代:AI 聊天、重写(rewrite)、补全(completion)等能力同样可以通过标准协议分发。
从技术选型来看,ECA 选用 Clojure(LISP 方言)实现,选择背后的逻辑很清晰:Clojure 在元编程和数据转换方面有天然优势,JSON-RPC 消息的序列化/反序列化、配置文件的 YAML 解析、动态 prompt 组装等场景用 Clojure 的 seq 和 EDN 数据结构处理非常优雅。项目使用 JVM 21 运行,支持 GraalVM Native Image 编译为原生可执行文件,性能和冷启动均有保障。
1. Chat(对话):这是最基础的功能,用户在编辑器中发起与 AI 的对话,ECA 作为中转将消息转发给后端 LLM,并将回复流式推送回编辑器插件。Chat 模块支持多轮对话上下文管理,能够记住会话历史,并通过 MCP(Model Context Protocol)接入外部工具和资源。
2. Rewrite(代码重写):用户选中一段代码后,向 AI 描述期望的修改方向,ECA 调用 LLM 生成修改建议并以 diff 格式返回,编辑器插件负责将 diff 渲染为可视化的变更预览,支持一键接受或逐处修改。这是日常开发中最高频的使用场景,比复制粘贴 AI 回复要高效得多。
3. Completion(代码补全):提供比传统 IDE 补全更智能的 AI 级补全建议。ECA 支持流式输出(Streaming),补全结果逐 token 渲染到编辑器中,用户体验接近 GitHub Copilot 的实时补全效果,但底层对接的是任意 LLM 提供商。
ECA 在 AGENTS.md 中定义了成熟的 Agent 架构:支持配置多个 Agent(智能体),每个 Agent 可绑定不同的 LLM 模型、工具集和行为规则。例如,你可以配置一个「代码审查 Agent」使用 Claude-3.5-Sonnet,另一个「文档生成 Agent」使用 GPT-4o,Subagent 则允许在主 Agent 执行过程中动态创建子任务并行处理。
Agent 的配置通过 ~/.eca.edn 或项目级 .eca.edn 文件管理,支持 YAML 和 EDN 两种格式。配置项包括:LLM 提供商选择、API 密钥引用(支持环境变量和文件引用)、系统 Prompt 模板、可用工具列表(内置工具 + MCP 工具)、变体(variant)选择等。
ECA 内置了完整的 MCP(Model Context Protocol)客户端实现,支持接入任何符合 MCP 规范的外部工具服务器。在 MCP 协议中,工具服务器声明自己的能力(tools)、资源(resources)和 prompt 模板,ECA 负责管理连接生命周期并向 LLM 暴露这些能力。这意味着 AI 不再局限于「能说不能做」,而是可以通过 MCP 工具读写文件系统、执行 Shell 命令、查询数据库、甚至调用外部 API——这已经非常接近通用 Agent 的形态。
ECA 的架构分为清晰的四层:
编辑器插件层(eca-emacs、eca-vscode、eca-intellij、eca-desktop):负责 UI 交互、用户输入捕获、diff 渲染等。每个插件只需实现 JSON-RPC 客户端连接 ECA 服务端,无需关心 AI 逻辑。目前已有 Emacs(Spacemacs/Doom Emacs 兼容)、VS Code、IntelliJ IDEA/CLion 和通用 Desktop(Electron)四种插件。
ECA 核心层(src/eca/):用 Clojure 实现,包含 server(Jetty HTTP + JSON-RPC)、handlers(请求路由与业务逻辑)、llm_api(多提供商统一调用)、models(模型列表管理)、config(配置加载)等核心模块。其中 handlers.clj(30,347 字符)是最大的单文件,负责所有 JSON-RPC 请求的分派。
LLM 提供商层(src/eca/llm_providers/):每个提供商对应一个 Clojure 文件,统一接口规范。目前支持 15 家提供商:OpenAI 系列(openai、openai-chat、copilot)、Anthropic(Claude 系列)、Google(Gemini)、Azure、AWS Bedrock、DeepSeek、Moonshot(Kimi)、Mistral、Ollama(本地模型)、LM Studio(本地模型)、LiteLLM(聚合)、OpenRouter、Z.AI。这是目前见过的最广泛的 LLM 多提供商支持之一。
功能插件层(src/eca/features/):按功能域划分的模块化实现。chat、completion、rewrite 三个核心功能各自独立;agents 处理多 Agent 协作;plugins 处理第三方插件加载;hooks 实现了类似 Git Hook 的事件机制,允许在特定时机(如文件保存、提交前)触发 AI 操作;skills 允许用户定义可复用的 prompt 技能集。
| 依赖 | 版本 | 作用 |
|---|---|---|
| Clojure | 1.12.4 | 主语言 |
| Babashka CLI | 0.8.65 | 命令行解析 |
| jsonrpc4clj | 1.0.2 | JSON-RPC 4.0 服务端 |
| Ring | 1.15.2 | Clojure Web 框架 |
| Hato | 1.0.0 | 异步 HTTP 客户端 |
| clj-otel | 0.2.10 | OpenTelemetry 可观测性 |
| Cheshire | latest | JSON 编解码 |
| Selmer | 1.12.69 | 模板引擎 |
值得注意的是,ECA 使用 Transit 格式(基于 JSON 的二进制序列化格式)进行内部进程间通信,使用 JSON 作为与编辑器插件的协议格式——这是一个务实的分层设计,避免了进程间数据传输的序列化开销。
ECA 内置了完整的 OpenTelemetry 支持,可以将指标(metrics)、链路追踪(traces)、日志(logs)导出到任何兼容的 OTel 后端(如 Jaeger、Zipkin、Datadog)。对于企业级部署来说,这是非常有价值的特性——团队可以监控 AI 请求的响应时间、成本、Token 消耗等关键指标。
ECA 提供了三种安装路径:
方式一:install 脚本(推荐):curl -sL https://eca.dev/install | bash,自动下载最新 release 并安装到 /usr/local/bin/eca,支持指定版本和校验和验证。脚本使用 bash 编写,兼容 macOS 和主流 Linux 发行版。
方式二:Nix/NixOS:提供 flake.nix 和 NixOS module 配置,NixOS 用户可以直接在 configuration.nix 中声明式配置 ECA,这是最符合 Nix 哲学的安装方式。
方式三:源码构建:需要 Clojure CLI + Babashka,克隆仓库后运行 bb prod-jar 编译 uberjar(包含所有依赖的独立 JAR),或 bb native-cli 编译 GraalVM 原生镜像(冷启动更快)。
ECA 以守护进程(server)模式运行,监听本地端口(默认或用户指定)等待来自编辑器插件的 JSON-RPC 请求。第一次运行需要配置 API 密钥(支持 OpenAI、Anthropic、Copilot、Ollama 等),配置文件默认路径 ~/.eca.edn。
ECA 本身是纯 CPU 运行,不需要 GPU(AI 推理由远程 LLM API 处理)。最低配置:1GB RAM、200MB 磁盘空间,需要 JVM 21 或 GraalVM 21。部署难度评定为「中等」——比纯 CLI 工具稍复杂,比需要 GPU 的项目简单很多。
编辑器插件质量参差:虽然 ECA 核心设计优雅,但最终用户体验取决于各编辑器插件的实现质量。从仓库来看,Emacs 和 VS Code 插件相对成熟,IntelliJ 和 Desktop 插件仍在活跃开发中(Open Issues: 63,Forks: 65,说明社区参与度较高)。
无 Docker 支持:项目没有提供 Dockerfile 或 docker-compose.yml,对习惯容器化部署的团队来说需要手动处理依赖。对于企业级批量部署场景,这增加了运维复杂度。
LLM API 成本与延迟:所有 AI 推理走远程 API,存在网络延迟和 API 调用成本(按 Token 计费)。虽然支持 Ollama 本地模型,但配置本地模型需要额外的工程工作,对非技术用户有一定门槛。
协议锁定风险:JSON-RPC 4.0 是开放标准,但 ECA 的具体扩展(如 Agent 配置格式、MCP 工具注册格式)是自己的领域特定语言(DSL),迁移到其他工具链有一定成本。
ECA 代表了一个正在浮现的趋势:AI 编程工具的平台化。从 GitHub Copilot(绑定 VS Code/GitHub)、Cursor(自有 IDE)、Windsurf(自有 IDE)到 Codeium(跨 IDE 但深度集成),AI 编程工具正在经历从「单点产品」到「平台生态」的演进。ECA 走的是最彻底的平台路线——它不提供自己的 IDE,而是做 AI 能力的中台,让所有主流编辑器都能平等地接入。
从 GitHub 数据来看,项目自 2025 年 6 月上线不到一年,已获得 885 颗星、65 个 Fork、63 个 Open Issues,社区活跃度在中型开源项目中属于较高水平。15 个 LLM 提供商的广泛支持也表明 ECA 的设计足够抽象,能够消化不同 API 的差异。
对于 AI 开发者而言,ECA 的 Agent + MCP 架构提供了一个可扩展的 AI 编程实验平台——你可以用 ECA 的框架来测试新模型、新提示工程方法,而无需为每个编辑器重新实现一遍接入逻辑。对于 AI 爱好者而言,ECA 将 AI 编程从昂贵的商业产品(如 Copilot)带入了一个更开放、更可定制的生态,降低了体验 AI 编程的门槛。