docs(env): .env.example 统一收三片改动(X1 允许集注释 / P1 directMsgPerMin / E3+E4 CHANNEL_EVENT_* 三键)
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

- 三片各自落地时该文件同时含他片在途行,逐片提交一律排除它,故在这里一次性收(避免任一片吞掉别片的行)
- 修一个真实后果:E3+E4 的测试钉住「新 env 键必须同步模板」(AGENTS §10)⇒ 该文件未进 HEAD 时,检出 HEAD 跑全量会在 cmd/cyrene 红两条
- 键名与代码逐字一致;CHANNEL_EVENT_RETENTION/GC_INTERVAL 写 0 或负数 = 关闭清扫,COUNTER_FLUSH 写 0 回落到 30s(后者不是破坏性动作)
This commit is contained in:
AskaEth committed 2026-10-05 14:14:14 +08:00
1 parent 213aff2e33
commit f9c5b56a2f
1 file changed
+25 -1
+25 -1
View File
@@ -51,6 +51,25 @@ CHAT_DOCUMENT_MAX_BYTES=20971520
DOCUMENT_GC_INTERVAL=1h
DOCUMENT_RETENTION=168h
# ---- 渠道事件留存(非消息事件 / 请求 / 未知帧;design/26 §4.4;切片 E3+E4) ----
# 目的:让**到达过适配器的每一帧**至少留下可查(逐条落行)、可计数(按平台+类型聚合)的
# 脱敏结构痕迹 —— 事故排查时「上游推过没有 / 是不是被我们过滤了」必须答得上来。
# 落库口径:T2/T3 事件与「未知类型 / 解析失败」逐条落 channel_events(30 天保留期),
# 纯遥测(心跳 / 生命周期 / 自身回声)只进 channel_event_counters(不参与 GC)。
# 摘要一律走 adapter.SanitizeNoticeText;**消息正文 / 媒体 URL / OneBot request.flag
# 等凭据绝不入库、绝不进日志**。
# CHANNEL_EVENT_RETENTION:channel_events 行的保留期(Go duration),默认 720h(30 天)。
# 它比文档保留期(168h)长:事件表的核心用途是**事后定案**,一周太短。
# CHANNEL_EVENT_GC_INTERVAL:保留期清扫间隔(Go duration),默认 1h。
# ⚠️ 上面任一键写 0 或负数 = **关闭清扫**(同时关闭启动期那一次,日志会写明原因);
# `CHANNEL_EVENT_RETENTION=0` 不是「立即清空」——那会让一次笔误抹掉唯一的取证面。
# CHANNEL_EVENT_COUNTER_FLUSH:内存计数落盘间隔(Go duration),默认 30s。
# 计数是**近似值**(crash 会丢 ≤ 一个间隔的计数,面板须如实标注 approx)。
# 该键不做「显式关闭」:写 0 或负数一律回落 30s(计数落盘不是破坏性动作)。
CHANNEL_EVENT_RETENTION=720h
CHANNEL_EVENT_GC_INTERVAL=1h
CHANNEL_EVENT_COUNTER_FLUSH=30s
# ---- LLM 用量样本保留期(llm_usage 表;切片 U1,主人裁决「2.4 落」) ----
# 每次成功模型调用都会把一条**非敏感**用量样本(token 计数 / 缓存两档 / 模型名 /
# 用途 / 耗时)异步落进 llm_usage 表,供 GET /api/v1/admin/llm/usage 与面板的
@@ -243,7 +262,11 @@ CAPACITY_ENABLED=false
CAPACITY_MIN_CONFIDENCE=0.6
# 状态 → 允许工具名的 JSON 映射,例如
# {"quiet":["terminal","file"],"awake":["terminal","file","web-search"],"full":null}
# 缺失的状态用内置默认集;null(如 "full")= 不限制。解析失败记 WARN 并回落到内置默认。
# 缺失的状态用内置默认集(quiet = terminal/file/knowledge/text/transcode/capability_list;
# awake = quiet + web-search/web-fetch/http;full 不限制);null(如 "full")= 不限制。
# 解析失败记 WARN 并回落到内置默认。
# ⚠️ 自己写映射时,请把你要用的新能力一并列进去:不在允许集里的工具在
# CAPACITY_ENABLED=true 时会从模型可见工具面里消失(Invoke 仍放行,见 design/14 §4)。
# CAPACITY_TOOL_SETS=
# L3 = 模型辅助的意图分类:仅当 L1 启发式与 L2 上下文仍拿不准时介入一次轻量模型调用。
# 默认关闭(纯启发式够日常,且该层要多花一次模型调用);关闭时该层从不运行,
@@ -436,6 +459,7 @@ ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000
# allowUsers/denyUsers(私聊用户黑白名单)。未配置时按单账号 env 路径处理。
# 群/总限流与总上限(可选,design/12 §6 策略三/四,公共平台防刷屏/最小化打扰):
# groupMsgPerMin 群聊每分钟上限(0=用默认6,-1=不限,正整数=该值)
# directMsgPerMin 非主人(陌生人)私聊每分钟每发送者上限(0=用默认6,-1=关闭,正整数=该值)
# msgPerMin 非主人消息每分钟总上限(>0 生效,0/-1=不限)
# maxMessages 待处理上限,接近上限时由审查模型剔除低价值消息(0=用默认50,-1=不限,正整数=该值)
# 旧账号不配这些字段默认走「保护性默认/不限」,保持向后兼容。