diff --git a/.env.example b/.env.example index ff2646c..f70e39e 100644 --- a/.env.example +++ b/.env.example @@ -175,6 +175,17 @@ QUIET_START_HOUR=23 QUIET_END_HOUR=7 # ---- 唤醒式能力渐进(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 上下文仍拿不准时介入一次轻量模型调用。 # 默认关闭(纯启发式够日常,且该层要多花一次模型调用);关闭时该层从不运行, # L1/L2/L4 的行为与接线前逐字节一致。 @@ -230,6 +241,11 @@ SESSION_IDLE_TIMEOUT_MIN=30 # MCP_SERVERS_JSON=[{"name":"calc","command":"mcp-calc","args":["--stdio"],"enabled":true}] # SSE 端点示例: # 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 工具;默认关闭,授权放权) ---- # 只有 Enabled=true 时 agent 才可执行命令;仍需命令白名单与根目录边界。 @@ -250,6 +266,70 @@ ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000 # CHANNEL_KOOK_TOKEN= # 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) ---- # ⚠️ 本节是【兜底】:管理面板「渠道管理」页保存会写入本地 channels.json(默认 /channels.json,已 gitignore), # 只要 channels.json 存在且有效,运行中的渠道 adapter 就优先用它的多平台账号配置,并支持面板实时保存→热更新(无需重启)。