/** * Protocol Factory — 注册制 Protocol 工厂 * * 通过 name → constructor 映射表创建 Protocol 实例。 * 新增协议只需加一行注册,不需要改 AgentManager。 */ const PROTOCOLS = { 'acp': () => require('@mas/acp-core').AcpProtocol, 'claude-cli': () => require('@mas/acp-core').ClaudeCliProtocol, 'claude-stream': () => require('@mas/acp-core').ClaudeStreamProtocol, 'codex-jsonl': () => require('@mas/acp-core').CodexJsonlProtocol, }; /** * 创建 Protocol 实例 * * @param {string} protocolName - 协议名(acp / claude-stream / codex-jsonl) * @param {object} config - { id, name } * @param {object} [options] - 协议选项(yolo 等) * @returns {Protocol} */ function createProtocol(protocolName, config, options = {}) { const factory = PROTOCOLS[protocolName]; if (!factory) { const available = Object.keys(PROTOCOLS).join(', '); throw new Error(`Unknown protocol: "${protocolName}". Available: ${available}`); } const Cls = factory(); return new Cls(config, options); } /** * 注册新协议(运行时扩展) * * @param {string} name - 协议名 * @param {function} factory - 返回 Protocol 构造函数的工厂 */ function registerProtocol(name, factory) { PROTOCOLS[name] = factory; } module.exports = { createProtocol, registerProtocol };