
L842 开始是"配置回写的兼容保留路径",然后进入第二阶段。
L824-835 applyReloadableGatewayAuthRefs
编辑
作用:这是 auth 覆盖的第二层。之前第一阶段有 resolvedStartupAuthOverride(普通值覆盖),这个是专门处理那些走 SecretRef 路径的 token/password——它们的真实值在 secrets 解密后才拿到,所以需要单独一层覆盖函数。
和第一阶段的 applyFixedGatewayOverlays(L786-823)的关系:applyFixedGatewayOverlays 覆盖非 secret 的 auth + tailscale + control UI;applyReloadableGatewayAuthRefs 专门覆盖 secret ref 类型的 token/password。两个函数共同构成完整的 auth 覆盖链。
L836-876 prepareReloadCandidate — 热重载候选准备
编辑
这不是启动时执行的,它是一个闭包工具函数,留给后面配置热重载时用。核心逻辑:
- 环境变量不变性检查:assertGatewayConfigEnvSelectionUnchanged ——确保新旧配置引用的环境变量集一致
- 准备运行时环境:prepareConfigRuntimeEnv ——根据配置变更计算新的环境变量
- 插件重载候选:resolveGatewayReloadPluginActivationCandidate ——判断哪些插件需要重新激活
- 覆盖函数链:reapplyRuntimeOverlays = applyFixedGatewayOverlays ∘ applyReloadableGatewayAuthRefs ∘ reapplyCompareOverlays
设计要点:启动时把所有覆盖逻辑封装成纯函数,热重载时直接调用这些函数而不需要重新解析命令行参数。
L879-885 配置回写兼容
编辑
作用:如果启动过程中修改了配置文件(比如自动生成了 token 持久化到了 openclaw.json),重新读取一次文件快照作为"启动后的最终状态"。这是兼容旧行为的保留路径——注释写了 keep the old startup-write suppression path intact。
L886-894 运行时快照 + 环境变量初始化
编辑
两个动作:
- setAppliedRuntimeConfigSnapshot:把启动阶段的配置快照注册为"已应用的运行时配置",后续 getRuntimeConfig() 就能读到了
- initializePublishedConfigRuntimeEnv:把配置文件里声明的环境变量写入 process.env,但保留用户已有的环境变量(preserveExistingOwnership: true)——不覆盖用户手动设置的
L895-900 Worker 环境启动
编辑
作用:从持久化存储中加载 Worker 环境的状态(哪些 Worker 之前注册过、placement 记录等)。如果是最小测试模式则跳过。
Worker 环境是 OpenClaw 的分布式执行概念——可以在远程 Node 上运行 Agent,这里只是从存储中恢复之前的注册信息。
L901-914插件引导
这是第二阶段的重头戏:
编辑
关键参数解读:
参数 | 含义 |
cfgAtStart | 经过 auth + tailscale + secret 全部覆盖后的最终配置 |
activationSourceConfig | 原始配置文件的 source(用于判断插件激活变化) |
startupRuntimeConfig | 含命令行 --profile / --dev 覆盖后的配置 |
pluginMetadataSnapshot | 插件发现阶段的元数据(哪些插件可用、版本、manifest) |
loadRuntimePlugins: false | 不在 bootstrap 阶段加载完整运行时插件(延迟到后面) |
loadSetupRuntimePlugins: true | 但 setup 阶段的插件现在就加载(保证基础能力就绪) |
这个函数做的事(在 server-startup-plugins.ts 里):
- 构建 插件查找表(pluginLookUpTable)——把所有可用插件索引起来
- 分类:启动插件 vs 延迟通道插件
- 提取基础 gateway 方法(核心 RPC)
- 生成 gatewayPluginConfigAtStart——融合了插件激活后的最终配置
L915-923 拆包 + 插桩打点
编辑
然后注册插件元数据快照 + 打性能指标:
编辑
这里传了 三个 compatible configs:运行时覆盖版、启动版、插件激活版——任一匹配都不需要重新发现插件。
L960-992 Worker 环境服务 + Placement 运行时
编辑
编辑
分两步:
- Worker Environment Runtime:管理远程 worker 的生命周期
- Placement Runtime:决定 Agent run 分配到哪个 worker 上执行
两个都是有条件启动的——取决于是否有配置的 worker profiles。
L998-1019 通道日志 + 方法注册
编辑
为每个通道插件创建独立的子 logger(如 discord、telegram、wecom 各一个),日志输出时带通道前缀。
编辑
动态过滤可用方法:如果 worker dispatch 不可用,就从方法列表中移除 sessions.dispatch;reclaim 同理。实现了"功能按能力开关"的机制。
L1020-1047 运行时配置合并 resolveGatewayRuntimeConfig
编辑
编辑
作用:把配置文件 + 命令行覆盖 + 启动阶段的各种中间结果,合并成一份最终的运行时配置对象。返回的字段包括:
夜雨聆风