docs(env): .env.example 与实现同步(协同 E6,主会话已独立复核)

- 补 26 个键:Telegram(2) / OneBot v11(8) / 通用 Webhook(5) / 微信 iLink(5) / CAPACITY_*(3);全部注释占位符、无任何真实凭据(长串扫描为空)。

- CAPACITY_* 核实为**在用**(internal/config/config.go:351,354,361 + cmd/cyrene/wire_capacity.go),按在用补入并写准「0 = 用代码内默认 0.6」。

- MCP_* 扁平单 server env 模式核实为**无生产调用者**(mcp.Load/FromEnv 只被同包单测调用;生产装配只读 MCP_SERVERS_JSON)⇒ 模板里显式标注「未接线,配了不生效,勿用」。

- 复核:代码键 124 / 模板键 110;模板无孤儿键;comm 差值仅剩 OS 变量/测试 helper/注释误命中共 14 个,逐条已说明;CHANNEL_* 22 键与代码逐字一致。
This commit is contained in:
AskaEth committed 2026-10-04 17:14:56 +08:00
1 parent f2c12b1921
commit 042cd586af
1 file changed
+80
+80
View File
@@ -175,6 +175,17 @@ QUIET_START_HOUR=23
QUIET_END_HOUR=7 QUIET_END_HOUR=7
# ---- 唤醒式能力渐进(capacity 意图判定,design/14 §2.2) ---- # ---- 唤醒式能力渐进(capacity 意图判定,design/14 §2.2) ----
# 总开关(默认 false):关闭时 loop 向模型暴露【全部】已注册工具,行为与接线前逐字节一致;
# 置 true 才按判定出的状态裁剪可用工具集(判定只在 loop 外围,不阻塞 Invoke)。
CAPACITY_ENABLED=false
# 唤醒阈值(默认 0.6):判定置信度低于它的状态强制回落到角色默认态(保守、不打扰);
# 角色 YAML 的 awakening.minConfidence 为正数时覆盖本全局值。
# 写 0 = 用代码内默认 0.6,不是「阈值归零」。
CAPACITY_MIN_CONFIDENCE=0.6
# 状态 → 允许工具名的 JSON 映射,例如
# {"quiet":["terminal","file"],"awake":["terminal","file","web-search"],"full":null}
# 缺失的状态用内置默认集;null(如 "full")= 不限制。解析失败记 WARN 并回落到内置默认。
# CAPACITY_TOOL_SETS=
# L3 = 模型辅助的意图分类:仅当 L1 启发式与 L2 上下文仍拿不准时介入一次轻量模型调用。 # L3 = 模型辅助的意图分类:仅当 L1 启发式与 L2 上下文仍拿不准时介入一次轻量模型调用。
# 默认关闭(纯启发式够日常,且该层要多花一次模型调用);关闭时该层从不运行, # 默认关闭(纯启发式够日常,且该层要多花一次模型调用);关闭时该层从不运行,
# L1/L2/L4 的行为与接线前逐字节一致。 # L1/L2/L4 的行为与接线前逐字节一致。
@@ -230,6 +241,11 @@ SESSION_IDLE_TIMEOUT_MIN=30
# MCP_SERVERS_JSON=[{"name":"calc","command":"mcp-calc","args":["--stdio"],"enabled":true}] # MCP_SERVERS_JSON=[{"name":"calc","command":"mcp-calc","args":["--stdio"],"enabled":true}]
# SSE 端点示例: # SSE 端点示例:
# MCP_SERVERS_JSON=[{"name":"weather","url":"http://localhost:3001/sse","enabled":true}] # MCP_SERVERS_JSON=[{"name":"weather","url":"http://localhost:3001/sse","enabled":true}]
# ⚠️ 旧键(未接线,配了不生效,勿用):`MCP_NAME` / `MCP_COMMAND` / `MCP_ARGS` / `MCP_URL` /
# `MCP_TRANSPORT` / `MCP_ENABLED` 这类「单 server 扁平 env 模式」(含带编号的
# `MCP_0_*`、`MCP_1_*` …)只在 internal/capability/mcp 的单测里被解析;生产装配
# (cmd/cyrene/mcp.go)只读 `MCP_SERVERS_JSON`。`MCP_API_KEY` / `MCP_ENV` 更连那套
# 解析都不读(结构体上的残留 tag)。要接 MCP server 请只用上面的 MCP_SERVERS_JSON。
# ---- 本地执行沙箱(exec/terminal 工具;默认关闭,授权放权) ---- # ---- 本地执行沙箱(exec/terminal 工具;默认关闭,授权放权) ----
# 只有 Enabled=true 时 agent 才可执行命令;仍需命令白名单与根目录边界。 # 只有 Enabled=true 时 agent 才可执行命令;仍需命令白名单与根目录边界。
@@ -250,6 +266,70 @@ ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000
# CHANNEL_KOOK_TOKEN= # CHANNEL_KOOK_TOKEN=
# CHANNEL_KOOK_BASE_URL= # CHANNEL_KOOK_BASE_URL=
# ---- Telegram 渠道 ----
# 同 KOOK 口径:单账号走环境变量、多账号走下方 CHANNELS_JSON,业务·高级项一律在面板配置。
# bot_token 为空时该账号【完全不存在】(空占位符绝不占用裸平台名),所以不用的平台留空即可。
# CHANNEL_TELEGRAM_BOT_TOKEN 为 BotFather 签发的 token(敏感,勿写日志/提交)。
# CHANNEL_TELEGRAM_WEBHOOK_URL 可选:填公网 HTTPS 回调地址走 webhook 投递;
# 留空则适配器改用 getUpdates 长轮询(本地开发无需公网地址)。
# CHANNEL_TELEGRAM_BOT_TOKEN=
# CHANNEL_TELEGRAM_WEBHOOK_URL=
# ---- OneBot v11(QQ)渠道 ----
# 四端由 transport(ws|http) × mode(client|server) 组合决定(裁决 1.4 / design/08 §4):
# ws+client Cyrene 拨号 OneBot,收发同一 WS
# ws+server OneBot 反连 Cyrene(需 LISTEN_ADDR),收发同一 WS
# http+client Cyrene → OneBot(纯出站,POST {API_BASE_URL}/{action})
# http+server OneBot → Cyrene(纯入站,POST 到 LISTEN_ADDR + REPORT_PATH)
# 该平台【无 token 门槛】:一个键都不配也会合成账号,是否真拨号由渠道桥的 configured 闸门
# 决定(server 模式要 LISTEN_ADDR 非空,client 模式要 REMOTE_URL 非空)。
# transport 留空或未知值一律回落 ws;mode 默认 server(即不给任何新配置时行为与改造前一致)。
# CHANNEL_QQ_OBV11_TRANSPORT=ws
# CHANNEL_QQ_OBV11_MODE=server
# ⚠️ LISTEN_ADDR 落在 AGENTS §9 登记的唯一「可开监听端口」豁免(OneBot 反连):
# 必须由配置显式给出,为空则 server 模式 Connect 直接失败、绝不开端口。
# CHANNEL_QQ_OBV11_LISTEN_ADDR=127.0.0.1:5700
# ws+client 的拨号端点(ws:// 或 wss://)。
# CHANNEL_QQ_OBV11_REMOTE_URL=
# OneBot HTTP API 基址(如 http://127.0.0.1:3000):http+client 必填;http+server 可选,
# 给了才有出站(回消息)能力。必须显式给出,不从 REMOTE_URL 推导。
# CHANNEL_QQ_OBV11_API_BASE_URL=
# http+server 接收上报的路径,默认 /(缺前导 / 会自动补齐)。
# CHANNEL_QQ_OBV11_REPORT_PATH=/
# 可选 OneBot access_token,四端通用:出站走 Authorization: Bearer;http+server 入站侧
# fail-closed——配了则 Bearer 或 ?access_token= 不匹配回 403,为空则放行(勿写日志/提交)。
# CHANNEL_QQ_OBV11_ACCESS_TOKEN=
# 机器人自己的 QQ 号(已知时填写,用于识别自消息)。
# CHANNEL_QQ_OBV11_SELF_ID=
# ---- 通用 Webhook 渠道(入站专用) ----
# 回调由网关挂在上面的唯一端口上,不新开监听。全部字段可选且都有可用默认值,
# 空配置也是一个能接请求的端点;该平台无 token 门槛,configured 闸门对 webhook 恒放行。
# ENDPOINT_PATH 是该适配器在网关上的路由,默认 /webhook。
# CHANNEL_WEBHOOK_ENDPOINT_PATH=/webhook
# CHANNEL_ID / CHANNEL_NAME 只用于向 ListChannels 报告该渠道(留空 = 不预注册渠道)。
# CHANNEL_WEBHOOK_CHANNEL_ID=
# CHANNEL_WEBHOOK_CHANNEL_NAME=
# ⚠️ SECRET 非空才对请求体做 HMAC-SHA256 验签;留空 = 【关闭验签】,任何能访问该路径的请求
# 都会被当消息收下。对公网暴露时务必填写(敏感,勿写日志/提交)。
# CHANNEL_WEBHOOK_SECRET=
# 承载签名的请求头名,默认 X-Webhook-Signature。
# CHANNEL_WEBHOOK_SIGNATURE_HEADER=X-Webhook-Signature
# ---- 微信 iLink 渠道 ----
# bot_token 为空时该账号【不存在】(同 Telegram),configured 闸门要求它非空才连接。
# CHANNEL_WEIXIN_ILINK_BOT_TOKEN 是扫码登录得到的长期 bearer token:非空即跳过二维码流程
# (敏感,勿写日志/提交)。
# CHANNEL_WEIXIN_ILINK_BOT_TOKEN=
# BOT_ID = 登录确认返回的 ilink_bot_id;OWNER_ID = 已绑定主人的 ilink_user_id
# (用于把该渠道的主人身份对上:身份判定仍只看渠道层 actor 元数据,不看提示词)。
# CHANNEL_WEIXIN_ILINK_BOT_ID=
# CHANNEL_WEIXIN_ILINK_OWNER_ID=
# API 根地址与媒体 CDN 根地址;留空用协议默认值:
# https://ilinkai.weixin.qq.com 与 https://novac2c.cdn.weixin.qq.com/c2c。
# CHANNEL_WEIXIN_ILINK_BASE_URL=
# CHANNEL_WEIXIN_ILINK_CDN_BASE_URL=
# ---- IM 多账号 / 黑白名单(可选,design/16 §4.6 §5-6) ---- # ---- IM 多账号 / 黑白名单(可选,design/16 §4.6 §5-6) ----
# ⚠️ 本节是【兜底】:管理面板「渠道管理」页保存会写入本地 channels.json(默认 <DATA_DIR>/channels.json,已 gitignore), # ⚠️ 本节是【兜底】:管理面板「渠道管理」页保存会写入本地 channels.json(默认 <DATA_DIR>/channels.json,已 gitignore),
# 只要 channels.json 存在且有效,运行中的渠道 adapter 就优先用它的多平台账号配置,并支持面板实时保存→热更新(无需重启)。 # 只要 channels.json 存在且有效,运行中的渠道 adapter 就优先用它的多平台账号配置,并支持面板实时保存→热更新(无需重启)。