附录 D:Feature Flags 一览

本附录以当前 ../octos main 分支的 Cargo workspace 为准。源码审查范围包括根 Cargo.tomlmembers 列表,以及 octos-clioctos-busoctos-agent 三个 crate 的 [features] 段。当前 workspace 采用 “默认最小、按需开启通道/工具” 的策略:default = [],生产部署通过显式 feature 组合选择 API、频道、admin bot 和可选工具能力。

Feature 传播图

flowchart LR
    CLI[octos-cli]
    Bus[octos-bus]
    Agent[octos-agent]

    CLI -->|api| BusApi[octos-bus/api]
    CLI -->|telegram / discord / slack / whatsapp / email / feishu / twilio / wecom / matrix / wecom-bot / qq-bot / wechat| Bus
    CLI -->|git| AgentGit[octos-agent/git]
    CLI -->|ast| AgentAst[octos-agent/ast]
    CLI -->|admin-bot includes api| AdminBot[dep:teloxide + dep:futures + api]

    BusApi --> Bus
    AgentGit --> Agent
    AgentAst --> Agent

这张图体现了三个层次:

  1. octos-cli 是最终二进制入口,负责把用户选择的 feature 转发到下游 crate。
  2. octos-bus 承载多频道接入能力,频道相关 feature 基本都从 CLI 转发到 bus。
  3. octos-agent 承载可选工具能力,gitast 通过 CLI feature 暴露给最终构建。

octos-cli Feature Flags

Feature启用功能额外依赖 / 下游 feature默认开启
default最小 CLI 构建是,且为空
apiWeb API、dashboard、SSE/WebSocket、监控、OTP 登录、Prometheus exporter、用户与 profile 管理dep:axumdep:tower-httpdep:futuresdep:rust-embeddep:metrics-exporter-prometheusdep:lettredep:randdep:sysinfodep:subtleoctos-bus/api
admin-bot管理 Bot;依赖 API 模式dep:teloxidedep:futuresapi
telegramTelegram 频道集成octos-bus/telegram
discordDiscord 频道集成octos-bus/discord
slackSlack 频道集成octos-bus/slack
whatsappWhatsApp 频道集成octos-bus/whatsapp
emailEmail 频道集成octos-bus/email
feishu飞书频道集成octos-bus/feishu
twilioTwilio 频道集成octos-bus/twilio
wecom企业微信回调频道octos-bus/wecom
matrixMatrix 频道集成octos-bus/matrix
wecom-bot企业微信 Bot WebSocket 通道octos-bus/wecom-bot
qq-botQQ Bot WebSocket 通道octos-bus/qq-bot
wechatWeChat WebSocket bridge 通道octos-bus/wechat
gitAgent Git 工具能力octos-agent/git
astAgent AST 代码结构分析能力octos-agent/ast

octos-bus Feature Flags

Feature启用功能额外依赖默认开启
default最小 bus 构建是,且为空
apiAPI/SSE/WebSocket 接入所需 bus 类型axum
telegramTelegram channel 实现teloxide
discordDiscord channel 实现serenity
slackSlack WebSocket channel 实现tokio-tungstenite
whatsappWhatsApp WebSocket channel 实现tokio-tungstenite
feishu飞书 channel 与回调接入tokio-tungsteniteaxumrustlsrustls-native-certs
twilioTwilio webhook/API channelaxum
wecom企业微信 webhook/API channelaxum
matrixMatrix webhook/API channelaxum
wecom-bot企业微信 Bot WebSocket channeltokio-tungsteniterustlsrustls-native-certs
qq-botQQ Bot WebSocket channeltokio-tungsteniterustlsrustls-native-certs
wechatWeChat bridge WebSocket channeltokio-tungstenite
emailEmail channel,含 IMAP/SMTP 与邮件解析async-imaptokio-rustlsrustlswebpki-rootslettremailparse

octos-agent Feature Flags

Feature启用功能额外依赖默认开启
gitGit 操作与 diff 能力dep:gixdep:similar
astAST 代码结构分析,覆盖 Rust/Python/JavaScript/TypeScript parserdep:tree-sitterdep:tree-sitter-rustdep:tree-sitter-pythondep:tree-sitter-javascriptdep:tree-sitter-typescript

octos-agent 当前没有显式 default = [] 行;这表示没有默认 feature 被声明,gitast 仍然只会在上游显式开启时编译。

当前没有 [features] 的 crate

这些 crate 目前没有 Cargo feature flags;它们要么始终作为核心库编译,要么作为独立 app-skill / platform-skill 二进制维护自己的依赖边界:

类别Crate
核心库octos-coreoctos-memoryoctos-llmoctos-pipelineoctos-pluginoctos-swarmoctos-dora-mcp
平台/沙箱octos-sandboxplatform-skills/voice
App skillsnewsdeep-searchdeep-crawlsend-emailaccount-managertimeweatherwechat-bridgepipeline-guardskill-evolve
Harness starter skillsharness-starter-genericharness-starter-reportharness-starter-audioharness-starter-coding

编译示例

# 最小 CLI:不启用 API、频道集成、Git/AST 工具
cargo build -p octos-cli --release

# CLI + Web API / Dashboard
cargo build -p octos-cli --release --features api

# API + 管理 Bot
cargo build -p octos-cli --release --features admin-bot

# Gateway 常见多频道组合
cargo build -p octos-cli --release --features "api,telegram,slack,email,feishu,wecom-bot,qq-bot,wechat"

# 开发者完整构建:包括 API、所有频道、Git/AST 工具
cargo build -p octos-cli --release --all-features

设计原则

Feature flags 的工程边界不是“功能分类标签”,而是“依赖树切割线”:

  1. 频道集成放在 octos-bus,CLI 只做 feature 转发,避免 CLI 直接知道每个频道的底层依赖。
  2. api 是服务端能力开关,不只启用 axum,还会连带 dashboard embedding、Prometheus exporter、OTP/email 相关依赖和 bus API 层。
  3. admin-bot 显式依赖 api,因为它不是独立聊天频道,而是服务端管理面的入口。
  4. git / ast 放在 octos-agent,通过 CLI 暴露,避免默认构建拉入较重的 Git 和 tree-sitter 依赖。
  5. app-skill 二进制没有使用 Cargo features;它们通过 workspace member 和 skill manifest 管理分发边界,而不是通过主 CLI 的 feature flag 混编。