OpenWork · 第 5 章 OpenCode 引擎托管与运行时配置注入 章节摘要:OpenWork 不是一个从零造的 Agent 引擎——它基于一个开源 AI 编码 Agent 引擎(OpenCode)构建。但「基于」二字背后的工程远不简单:OpenWork 要接管这个引擎,让它按 OpenWork 的意志行事(用 OpenWork 定义的 Agent、插件、MCP、Provider),却又不能修改用户的引擎配置文件。这套看似矛盾的需求,被一个精巧的机制解决——运行时配置注入:服务端把 OpenWork 的 Agent 定义、插件、MCP、Provider 写入一个服务端管理的配置文件,通过环境变量交给引擎;引擎每次重建实例都重读该文件,配置新鲜度通过同步机制保持。
章节摘要:OpenWork 不是一个从零造的 Agent 引擎——它基于一个开源 AI 编码 Agent 引擎(OpenCode)构建。但「基于」二字背后的工程远不简单:OpenWork 要接管这个引擎,让它按 OpenWork 的意志行事(用 OpenWork 定义的 Agent、插件、MCP、Provider),却又不能修改用户的引擎配置文件。这套看似矛盾的需求,被一个精巧的机制解决——运行时配置注入:服务端把 OpenWork 的 Agent 定义、插件、MCP、Provider 写入一个服务端管理的配置文件,通过环境变量交给引擎;引擎每次重建实例都重读该文件,配置新鲜度通过同步机制保持。再加上反向托管(服务端通过子进程生成引擎并注册为信任进程)与三方配置合并去重(legacy 配置 / 用户配置 / 服务端管理配置),OpenWork 就能在不动用户文件的前提下,让引擎「变成」OpenWork 想要的样子。本章要把这套机制讲透——这是理解「平台如何接管引擎而不篡改用户资产」的关键一章。
阅读完本章,你应当能够:
一句话总结:OpenWork 用「反向托管 + 环境变量注入配置 + 三方合并去重 + 新鲜度同步」四件套接管引擎——引擎按 OpenWork 的意志行事,但用户的配置文件一个字节都没动,这正是「平台可弹出(ejectable)」的工程根基。
讲服务端如何反向托管引擎:通过子进程生成引擎实例、如何注册为信任进程(让引擎接受服务端的某些特权操作)、信任进程的生命周期管理。重点说明「为什么需要信任」——某些操作(如配置注入)需要引擎信任服务端。
本章核心。讲 OpenWork 的 Agent 定义、插件、MCP、Provider 如何被写入一个服务端管理的配置文件,如何通过环境变量交给引擎,引擎何时重读(每次重建实例)。重点说明:为什么不直接改用户配置文件——为了「可弹出」,用户随时能回到原生引擎。
讲三方配置如何合并:legacy 配置(老格式)、用户配置(用户自己的引擎配置)、服务端管理配置(OpenWork 注入的)。重点讲合并优先级、冲突解决、去重逻辑——为什么去重(避免同一配置被注入两次导致引擎报错)。
讲服务端运行时数据库写入后,如何通过同步机制保证配置文件新鲜(每次运行时 DB 写入后同步配置文件),引擎如何感知变化并重建实例。这一节解释了「改了能力后引擎如何实时生效」的部分机制(完整实时性见第 8 章 Reload 事件)。
本章遵循「托管 → 注入 → 合并 → 同步」的引擎接管路径:
反向托管 (01) ──引擎如何被生成与信任 │ ▼ 配置注入 (02) ──配置如何被交给引擎 │ ▼ 三方合并 (03) ──多源配置如何叠加 │ ▼ 新鲜度同步 (04) ──配置变化如何生效 │ ▼ 第 6 章:被注入的「能力」具体是什么
四节构成引擎接管的完整链路:生成(托管)、交付(注入)、消化(合并)、生效(同步)。理解了这四节,你才算真正理解 OpenWork 与引擎的关系——不是「用」,而是「托管且尊重」。
前置知识:
本章为后续章节奠定的基础: