ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Evolver主机运行时适配器开发指南:hookAdapter模式完整教程

2026/9/17 12:44:02 拓冰建站 浏览量
Evolver主机运行时适配器开发指南:hookAdapter模式完整教程 Evolver主机运行时适配器开发指南hookAdapter模式完整教程【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolverEvolver 是一个基于 GEPGenes、Capsules、Events的 AI Agent 自进化引擎它通过钩子Hooks机制嵌入到 Cursor、Claude Code、Codex、Kiro、opencode 等主机运行时中在会话开始、文件编辑、会话结束时自动采集进化信号。本文以hookAdapter 模式为主线手把手讲解如何为 Evolver 编写一个新的主机运行时适配器从平台注册、安装/卸载接口到安全守卫与测试规范一次讲透。全局认知hookAdapter 模式是怎么分工的Evolver 的适配器层位于 src/adapters/ 目录核心设计思想是一份共享基础设施 N 个轻量平台适配器共享中枢src/adapters/hookAdapter.js封装了平台检测、配置文件合并、钩子脚本拷贝、卸载清理、符号链接安全守卫等所有平台通用的能力每个函数都单独导出供各适配器直接require复用。平台适配器如 src/adapters/cursor.js、src/adapters/claudeCode.js、src/adapters/codex.js、src/adapters/kiro.js、src/adapters/opencode.js每个文件只需关心这个平台把钩子写到哪里、文件格式长什么样。钩子脚本本体src/adapters/scripts/evolver-session-start.js、evolver-signal-detect.js、evolver-session-end.js等真正干活的脚本安装时被拷贝到目标平台的配置目录。这个模式带来的好处是新增一个平台时你几乎不用写底层逻辑只需声明平台元数据 安装/卸载差异点。新增平台适配器五步走完整开发清单第一步在 PLATFORMS 表登记平台元数据打开 src/adapters/hookAdapter.js找到PLATFORMS常量它决定了平台 ID、显示名称、配置目录和检测标记cursor → 配置目录 .cursor检测标记 .cursor claude-code → 配置目录 .claude检测标记 .claude codex → 配置目录 .codex检测标记 .codex kiro → 配置目录 .kiro检测标记 .kiro opencode → 配置目录 .opencode检测标记 .opencode为新平台追加一条记录即可。detector字段用于项目目录 → 用户主目录两级探测判断当前工作区或全局是否安装了对应运行时。第二步编写平台适配器的 install / uninstall 接口新建src/adapters/myplatform.js参考 src/adapters/cursor.js 这个最简范例只需导出两个函数install({ configRoot, evolverRoot, force }) uninstall({ configRoot, evolverRoot })install的典型套路以 Cursor 适配器为例安全预检调用assertSafeConfigDir()确认配置目录不是符号链接防止恶意仓库把写入重定向到项目外。幂等检查若目标配置已带_evolver_managed标记直接返回skipped: true提示用户加--force。写入钩子配置用mergeJsonFile()合并 JSON——它内置钩子并集合并会保留用户已安装的钩子、只刷新 Evolver 自己的条目通过命令中是否包含evolver-session/evolver-signal等关键字识别。拷贝钩子脚本调用copyHookScripts()它负责把 src/adapters/scripts/ 下的全部脚本含_开头的辅助模块落到目标目录并逐文件拒绝预置符号链接。返回结果{ ok: true, platform, files: [...] }files列表会由 CLI 打印给用户。uninstall则对称地使用removeEvolverHooks()只删 Evolver 自己的条目、removeHookScripts()、removeMarkedSection()清理 CLAUDE.md / AGENTS.md 中带标记的注入段落。 不同平台的差异点Codex 还需要在config.toml里打开codex_hooks特性开关并注入AGENTS.md说明段见 src/adapters/codex.jsopencode 走插件文件形态并额外提供verify()只读自检见 src/adapters/opencode.js。你的适配器只需在通用流程上叠加这类平台特有步骤。第三步在 loadAdapter 路由中注册仍在 src/adapters/hookAdapter.js 的loadAdapter()函数中按平台 ID 增加一个require分支case myplatform: return require(./myplatform);setupHooks()是 CLI 的统一入口它先detectPlatform()自动探测平台无法探测时才报错提示--platform参数再loadAdapter()取出适配器并分发install/uninstall。注册完成后node index.js setup-hooks --platformmyplatform就能直接跑通。第四步可选补充平台环境信号识别detectPlatformFromEnv()通过环境变量强信号优先于目录探测来判断运行时例如CURSOR_TRACE_ID指向 Cursor、CODEX_CI指向 Codex。如果你的平台运行时也会导出专属环境变量按现有强信号 → 弱信号的优先级插入判断可避免.claude与.cursor目录同时存在时的误判。第五步补上回归测试测试集中在 test/adapters.test.js新适配器至少覆盖四件事安装正确性在临时目录调用install()断言配置文件与脚本齐全卸载对称性uninstall()后不留孤儿文件历史上曾因装了没删产生过回归;用户钩子保全预置用户自己的钩子条目重装后确认未被覆盖;符号链接拒绝把配置目录或其子目录换成符号链接断言install/uninstall抛错拒绝执行——这是 test/adapters.test.js 中symlinkIt用例组的核心。另外该测试文件还会扫描源脚本中所有require(./_*)断言其目标都出现在copyHookScripts的拷贝清单里。如果你给钩子脚本新增辅助模块记得同步两处清单。值得学习的三个安全与工程细节命令注入免疫buildSafeNodeHookCommand()把脚本绝对路径 base64 编码进node -e包装器用shell:false方式执行路径中的空格、$()、反引号、%VAR%都无从被 shell 展开。原子写文件所有 JSON 写入都走写.tmp→rename两步避免半截文件。卸载即清理isEvolverHookCommand()统一识别 Evolver 命令含已废弃的旧守护进程钩子保证重装不重复、卸载无残留。快速上手用 CLI 验证你的适配器node index.js setup-hooks --platformmyplatform node index.js setup-hooks --platformmyplatform --uninstallsetup-hooks命令的完整分发逻辑在 index.js 中支持--force覆盖重装与--verify只读健康检查仅对实现了verify()的适配器可用。各平台的标准接入命令速查可参考 README.md 中的集成表格。常见坑位自查清单症状排查方向钩子运行时 MODULE_NOT_FOUND新辅助脚本没加进copyHookScripts清单用户投诉钩子被覆盖未走mergeWithHooksUnion直接整文件写入重装出现重复条目命令未包含可识别的evolver-*关键字安装报错refusing to operate配置目录是符号链接属安全守卫正常拦截换真实目录重跑平台探测到错误的运行时补充第四步的环境变量强信号按这份清单走完五步你就能为 Evolver 稳定接入任意新的 AI Agent 主机运行时且与现有五个平台适配器共享同一套安全基线。【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考