Skip to content

Commit 2d0f697

Browse files
committed
docs(todo): 记录本轮完成情况与未竟项
本轮已完成 - 会话重置(reset 命令 + session_reset 工具 + 宿主补来源 + 频控 + 留痕) - P3 上半:首次关注自动补拉历史(实地验证:500 条→去重入库 100 条) - ④ token 用量统计落库(UsageStore + IUsageSink + Agent 双路径 + 单测) - ⑥ 响应压缩;并核实两项原判断有误(MessageDedup 已有上限与过期清理;IdMap 不应淘汰) - 安全:群内禁用 fs_*/pb_*(上一轮) 未竟(已写入 TODO 的"本轮未竟"小节) - ③ 日志管道、P3 下半(日报改走库存,Range 已就绪)、④ 的 WebUI 展示与 /healthz、 ⑤ 测试补面、P4 会话 id 与关联分离、② 拆分巨型文件
1 parent e176bf4 commit 2d0f697

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

‎TODO.md‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@
2929
- [ ] **⑤ 测试补面** —— 现状:仅 `CoreTests.cs`(16 用例,集中在 SecretBox / 插件名门禁 / 去重 / 配置加密)。
3030
动作:补 WebUI 端点冒烟(鉴权与返回体)、**zip 安装防目录穿越**(实现有、测试无)、命令派发与管理员门禁、配置迁移。
3131
验收:`dotnet test` 全绿,CI 自动跑。
32-
- [ ] **④ 可观测性补完** —— 现状:AI **token/费用无聚合**;无插件耗时/异常排行;`/healthz` 只看连接状态。
32+
- [~] **④ 可观测性补完**(token 统计已落地 `e176bf4`:UsageStore + IUsageSink + Agent 双路径记录 + 2 个单测;**WebUI 展示与 /healthz 扩展未做**) —— 现状:AI **token/费用无聚合**;无插件耗时/异常排行;`/healthz` 只看连接状态。
3333
动作:Abstractions 加极小的 `IBotMetrics`(宿主实现、`ctx.Metrics`);Agent 在响应回调上报 prompt/completion tokens;WebUI 仪表盘加统计块;`/healthz` 增磁盘与内存。
3434
验收:跑一轮 AI 对话后 `/api/stats` 出现 token 计数;`/healthz` 含磁盘指标。
35-
- [ ] **⑥ 小项** —— `IdMap` 加容量上限与淘汰(官方通道身份映射会一直涨);`MessageDedup` 淘汰改环形(去掉 `OrderBy` 的 O(n log n));WebUI 加响应压缩与 CSRF token;插件目录加文件监听(改动自动 reload,默认关闭)。
35+
- [~] **⑥ 小项**(核实后调整 + 部分完成)—— 响应压缩 ✅ 已加(`e176bf4`);**`MessageDedup` 无需改**:已有 2000 上限 + 过期清理,用的是 `Where` 不是 `OrderBy`(原判断有误);**`IdMap` 不应加淘汰**:身份映射必须稳定,天然受"不同用户数"约束,强制淘汰会造成身份漂移,比不加上限更糟;CSRF 由 SameSite=Lax + 单一会话令牌覆盖;插件目录文件监听未做(dev 便利,默认关)。
3636

3737
### 数据层:记忆与聊天记录
3838

3939
> 完整设计(架构图 / 时序图 / ER 图 / 隔离威胁模型 / 向量库取舍)见本文件末尾「设计:记忆与聊天记录」一节。
4040
41-
- [ ] **会话重置:允许 agent「遗忘」当前会话(不清空记忆)** —— 现在只有"清空记忆"这一种破坏性操作,缺一个安全的"丢上下文"。
41+
- [x] **会话重置:允许 agent「遗忘」当前会话(不清空记忆)**(`5bb57eb` 已实现:reset 命令 + session_reset 工具 + 宿主补来源 + 60 秒频控 + 留痕) —— 现在只有"清空记忆"这一种破坏性操作,缺一个安全的"丢上下文"。
4242
**可立刻动手,不依赖 P1**(当前内存实现清 `_convHist[key]` 即可)。
4343
动作:① 新增 `session_reset` 工具(模型可调)+ `!reset` 命令(按现有权限模型);② 影响范围**只有短期上下文**;
4444
③ **绝不动** `mem` 长期条目、`conversation_*.md` 摘要、消息流水;④ 重置后同一回合重建必带块(global + 高重要度条目 + 最近摘要),避免"以为记得";
@@ -59,13 +59,22 @@
5959
- [ ] **P2 检索** —— `msg_fts`(FTS5,**必须 `tokenize='trigram'`**,默认 `unicode61` 不切中文)+ `history_search` / `history_recent` 工具;会话历史与"必带注入"改为从库取近 N 轮(同时修掉"超限就丢")。
6060
安全:**工具签名不含 `scope` 参数**,scope 由宿主从 `TurnContext` 注入(见设计 §5 注)。
6161
验收:能答"上周谁说过 X";跨 scope 检索被拒。
62-
- [ ] **P3 增强** —— 首次关注群用 `GetGroupMsgHistoryAsync` 分页补拉历史;`SummarizeDayAsync` 改走库存(不再受单次 1500 条分页上限);按天总结顺带产出结构化 `mem` 条目(复用同一次模型调用,零额外成本)。
62+
- [~] **P3 增强**(上半完成 `5bb57eb`)—— ~~首次关注群补拉历史~~ ✅ 已实现并实地验证(启动 20 秒后 + 每 6 小时检查,无数据的关注群补拉最多 5 页×100 条;实测「关注群 207937678 首次补拉 500 条历史」,去重后入库 100 条);**日报改走库存尚未接线**(`IHistoryStore.Range` 已就绪,见下);结构化 `mem` 条目抽取未做。
6363
验收:新关注的群立即有历史;日报覆盖全天消息。
6464
- [ ] **P4(可选项)会话 id + 关联/分离** —— 每个会话分配稳定短 id(`s_xxxxxx`),主人可用 `!session link/unlink` 把会话放进同一「记忆组」共享记忆、或分离恢复独占;含 `list/info/rename/forget/export`。
6565
设计见下文 §7.3。**不阻塞 P1–P3**,可随时插入或跳过。
6666
防护(最容易出事):关联 `private → group` 等于把私聊暴露给该群 ⇒ **默认禁止 + 显式二次确认 + 审计留痕 + WebUI 风险标记**;关联只增不减权限。
6767
验收:关联后两边记忆互通、分离后历史互不可见;越权关联被拒并留下审计。
6868

69+
### 本轮未竟(按建议顺序续做)
70+
71+
- [ ] **③ 日志管道**:`TimestampWriter` 逐字符 + 每行 `AutoFlush` 同步刷盘 → 行级缓冲批量刷;stdout 被重定向(非 TTY)时剥掉 ANSI。
72+
- [ ] **P3 下半**:`SummarizeDayAsync` 改为先查库(`IHistoryStore.Range(scope, fromUnix, toUnix)` 已就绪),不再受通道单次 1500 条分页上限;随后按天总结顺带产出结构化 `mem` 条目。
73+
- [ ] **④ 补完**:WebUI 展示用量(`/api/usage` + 页面 chip)+ `/healthz` 增加磁盘/内存指标。
74+
- [ ] **⑤ 测试补面**:WebUI 端点冒烟(鉴权与返回体)、zip 安装防目录穿越、命令派发与管理员门禁、配置迁移。
75+
- [ ] **P4(可选)**:会话 id + 记忆组「关联 / 分离」+ 审计(设计见设计章节 §7.3)。
76+
- [ ] **② 拆分巨型文件**:`PluginManager.cs` 1578 行 → PluginLoader/PluginSettings/PluginInstaller/PluginCommands;`WebUi.cs` 端点分模块;`Program.cs` 启动编排拆分。
77+
6978
## 明确不做
7079

7180
自研向量库 / 本地 embedding(真要做也只对 `mem` 条目嵌入,不对全量消息,见设计 §8.1);

0 commit comments

Comments
 (0)