23.2 配置类型系统详解

生成模型:Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗:输入 ~170k tokens,输出 ~7k tokens(本节)


OpenClaw 的配置类型系统是整个项目中最庞大的类型定义集合——src/config/types.ts 作为桶文件(barrel file),重新导出了 30 余个子类型模块。本节梳理其核心结构,帮助读者理解配置对象的全貌。


23.2.1 核心类型概览(src/config/types.ts

模块化拆分

types.ts 本身只有 32 行——它是一个纯粹的重新导出文件:

// src/config/types.ts
export * from "./types.agent-defaults.js";
export * from "./types.agents.js";
export * from "./types.approvals.js";
export * from "./types.auth.js";
export * from "./types.base.js";
export * from "./types.browser.js";
export * from "./types.channels.js";
export * from "./types.discord.js";
// ... 共 30+ 个子模块
export * from "./types.memory.js";

这种拆分策略遵循了"编辑局部性(edit locality)"原则——修改 Telegram 配置类型只需编辑 types.telegram.ts,不会触发其他 20+ 个模块的重新编译。

OpenClawConfig 的顶层结构

OpenClawConfig 是所有配置的根类型(在 types.openclaw.ts 中定义,通过 barrel 导出)。下表列出了它的主要顶级键:

类型模块
描述

gateway

types.gateway.ts

Gateway 服务器设置(端口、认证、远程访问)

agents

types.agents.ts

Agent 列表与默认配置

models

types.models.ts

模型提供者与模型定义

tools

types.tools.ts

工具配置(bash、浏览器、媒体理解等)

channels

types.channels.ts

各通道配置(WhatsApp、Telegram 等)

hooks

types.hooks.ts

钩子系统配置

skills

types.skills.ts

技能系统配置

plugins

types.plugins.ts

插件系统配置

session

types.base.ts

会话管理配置

messages

types.messages.ts

消息处理配置

logging

types.base.ts

日志配置

env

环境变量定义

meta

版本戳记、元数据


23.2.2 Agent 配置(types.agents.ts / types.agent-defaults.ts

双层配置结构

Agent 配置采用默认值 + 实例覆盖的双层结构:

AgentDefaultsConfig 定义了所有 Agent 共享的默认配置——心跳设置、模型选择、上下文压缩策略、沙箱行为等。每个 AgentConfig 实例可以选择性地覆盖这些默认值。

AgentConfig 关键字段

模型配置 AgentModelConfig 支持两种写法:

默认配置中的精细控制

AgentDefaultsConfig 中有几个特别值得注意的嵌套配置:

上下文压缩(Context Pruning)——当对话变长时,自动裁剪旧的工具调用结果:

CLI 后端(CLI Backend)——允许用 CLI 命令替代内置的模型提供者:


23.2.3 通道配置(types.channels.ts / types.discord.ts / types.telegram.ts 等)

每个通道有独立的配置类型,但共享一些通用模式:

通道
类型文件
关键配置项

WhatsApp

types.whatsapp.ts

web(WebSocket)、allowFromgroups

Telegram

types.telegram.ts

botTokenwebhookSecretgroups

Discord

types.discord.ts

botTokenguildIdthreadMode

Slack

types.slack.ts

botTokenappTokensocketMode

Signal

types.signal.ts

signalCliPathattachmentsDir

iMessage

types.imessage.ts

dbPathpollInterval

MS Teams

types.msteams.ts

appIdappSecrettenantId

Google Chat

types.googlechat.ts

credentialsprojectId

通道配置的共同模式包括:

  • DM 策略pairing(需要配对)/ open(开放)/ allowlist(白名单)

  • 群组策略:每个群组可以独立配置是否需要 @提及、回复模式、会话范围

  • 发送策略:控制哪些通道/聊天类型允许 Agent 主动发消息


23.2.4 安全配置(types.sandbox.ts / types.auth.ts

沙箱配置

沙箱模式有三种层级:

  • "off" — 不使用沙箱

  • "non-main" — 仅非主会话使用沙箱(默认推荐)

  • "all" — 所有会话都在沙箱中运行

认证配置


23.2.5 模型配置(types.models.ts

模型配置的设计极为灵活——用户可以自定义模型提供者,甚至接入私有部署的 API:

支持的 API 协议包括:

API 标识
对应服务

openai-completions

OpenAI Chat Completions

openai-responses

OpenAI Responses API

anthropic-messages

Anthropic Messages API

google-generative-ai

Google Gemini

github-copilot

GitHub Copilot

bedrock-converse-stream

AWS Bedrock

ModelsConfig 还支持 mode 字段——"merge" 将自定义模型与内置模型合并,"replace" 则完全替换内置模型列表。


23.2.6 工具/技能/钩子配置(types.tools.ts / types.skills.ts / types.hooks.ts

工具配置

工具配置控制 Agent 可以使用的工具及其行为。最重要的几个子配置:

  • exec:bash 工具的执行限制(超时、工作目录、禁止命令)

  • media:媒体处理配置(音频转录模型、图像理解、视频理解)

  • browser:浏览器控制配置(是否启用、evaluate 权限)

  • agentToAgent:跨 Agent 通信配置

技能配置

钩子配置

钩子配置分为两层:外层控制 HTTP 钩子端点,内层控制内部事件钩子。

每个钩子条目 HookConfig 支持 enabled(启用/禁用)和 env(环境变量注入),还可以有任意额外字段供钩子处理器读取(如 session-memorymessages 字段)。


本节小结

  1. 类型系统采用模块化拆分策略,30+ 个子类型文件通过桶文件统一导出,兼顾了类型完整性和编辑局部性。

  2. Agent 配置采用默认值 + 实例覆盖的双层结构,支持灵活的模型选择(主模型 + 备用列表)、沙箱隔离、技能白名单等精细控制。

  3. 通道配置为每个消息通道提供独立的类型定义,同时共享 DM 策略、群组策略、发送策略等通用模式。

  4. 模型配置支持自定义提供者和 6 种 API 协议,允许接入任何兼容的 LLM 服务,包括私有部署。

  5. 工具/技能/钩子配置各自独立又相互关联——它们共同定义了 Agent 的能力边界和行为规则。

Last updated