feat(memory): 整理频率走面板配置(面板 > env > 默认)+ 分时段动态间隔

主人 2026-10-07:「.env 只做兜底…优先从面板配置上取」+「频率必须调…或者动态
分配,比如白天间隔短一点 晚上到了静默时期稍微长一点」。

- memory-tidy.json 新增四键:intervalSec / quietIntervalSec / quietStartHour /
  quietEndHour(*int + 指针判定 => 显式 0 是合法值、缺位才回落)
- 优先级逐键三档:面板 > env(既有键,未增删)> 代码默认;坏值不覆盖 + WARN,
  且不启动失败
- 动态间隔由纯函数 intervalAt(at) 决定,调度侧每一拍现算 => 跑完按当时时段重算
- 🔴 语义变更(有意,代码注释已登记,待补设计修订):安静时段从「唯一可跑时段」
  变成「降频时段」—— 旧的「安静窗外一律 continue」被删,否则 intervalSec 永远
  是空壳(白天唤醒必被跳过);窗口仍决定档位与补跑判据
- 6 个变异(含「加回旧的那道门」=> 端到端用例红)
This commit is contained in:
AskaEth committed 2026-10-07 19:21:32 +08:00
1 parent 6deab2e836
commit d680390300
11 files changed
+832 -54

No files matched your search

+8 -4
View File
@@ -246,13 +246,17 @@ type MemoryTidyConfig struct {
// 关闭)。整理**只产建议、绝不自动改记忆**,因此默认开启是安全的;
// 它带来的是每轮一次的记忆向量化(召回用)与一批候选行。
Enabled bool `env:"MEMORY_TIDY_ENABLED" default:"true"`
// IntervalSec 是整理周期(秒),默认 86400 = 每天 1 次(design/23 §13
// 开放点 8 的建议值)。它是下限:实际在安静时段起点跑,因此间隔取
// 「安静时段每天一次」与它之中较长者。
// IntervalSec 是**非安静时段**的整理周期(秒),默认 86400 = 每天 1 次
// (design/23 §13 开放点 8 的建议值)。它是**兜底档**:`$DATA_DIR/config/
// memory-tidy.json` 的 `intervalSec` 可覆盖它(面板优先、`.env` 兜底。
// 2026-10-07 主人口径「`.env` 只做兜底用」),安静时段的另一档是同一文件里的
// `quietIntervalSec`(缺省 = 等于它,见 memory 侧的 intervalAt)。
IntervalSec int `env:"MEMORY_TIDY_INTERVAL_SEC" default:"86400"`
// QuietStartHour / QuietEndHour 是低峰窗口(本地钟点),默认复用
// backthink 的 23:00-07:00 语义(窗口可跨午夜;两端相等且非 0 则关闭窗口,
// 改为纯周期)。整理只在低峰跑,且**从不推送**(design/23 §4)。
// 改为纯周期)。2026-10-07 起窗口同时是**降频档位**(安静时段用
// quietIntervalSec)与**补跑判据**(窗口内没跑过就补一轮),不再表示
// 「只有低峰才跑」。整理**从不推送**(design/23 §4)。
QuietStartHour int `env:"MEMORY_TIDY_QUIET_START_HOUR" default:"23"`
QuietEndHour int `env:"MEMORY_TIDY_QUIET_END_HOUR" default:"7"`
// RecallThreshold 是候选召回的余弦**召回门**,默认 0.80(design/23 §5.1