# 可靠性与安全升级候选 本轮保留现有 CLI + Skill + 本地 SQLite + Markdown/HTML 架构,不重写成常驻 Agent,也不增加自动发消息能力。版本号暂不变;工作区改动不等于已经发布的版本。 ## 本轮改动 | 范围 | 改动 | 影响 | |---|---|---| | HTML 边界 | 两个 bundle 渲染器关闭 Pandoc raw HTML、使用 nh3 白名单、添加脚本哈希 CSP | 聊天中的标签不能成为页面脚本,远程图片不自动加载 | | 单份报告 | render-report 不再使用 embed-resources,输出静态 CSP 页面 | 保留文字、表格和手动 HTTP(S) 原链接;不嵌入远程图片 | | 机器初筛页 | 链接协议检查和 CSP | 保留原有只读筛选功能 | | 时间查询 | 日报窗口、联系人日报、承诺回看按时间戳比较,不按混合格式字符串比较 | 支持旧本地时间、ISO offset 和 UTC;不重写历史行或消息 hash | | 回复判断 | 本人别名精确匹配,复合确认语不再直接进入待回复 | 防止名字前缀相同的联系人被当成本人;不是通用语义判断的替代品 | | 旧版重点群标题 | 无二级标题时支持三级标题折叠 | 不要求用户重新写旧 Markdown | | 可选接入助手 | 在实际提权 worker 中先打开数据库文件头,再启动 provider | 读权限失败时提前停止,减少已经退出微信才发现权限不足的情况 | | 接入诊断 | 仅保留阶段、退出码、超时标记和数据库数量 | 不回传 provider 原始 stdout/stderr,不泄露 key 或聊天 | ## 安装与升级 新安装:`./scripts/install.sh --with-sqlcipher --with-html`。`--with-html` 仅在引擎 `.venv` 中安装 `requirements-html.txt` 的固定版本依赖,Pandoc 需要另外安装。未启用时 Markdown/检索仍可用;HTML 会提示缺少净化依赖,不生成不安全的替代页面。 已有安装不要重跑安装器覆盖目录。让 Codex: 1. 查清实际 Skill 入口、引擎和 Reader 路径,检查是否有个人补丁。 2. 备份待改代码,保留 Profile、数据库、key、确认过的商机状态和旧报告。 3. 合并源码,在实际引擎执行 `bash scripts/setup_html.sh`;明确指定的 `PYTHON_BIN` 优先于自动选择的 `.venv`。 4. 运行单元测试和虚构报告验证,再用已知时间段做少量只读抽检。 5. 重新渲染旧报告后再打开。旧 HTML 不会因为升级代码而自动变安全;重新渲染也不会刷新旧报告内容。 完整验证:在安装了 nh3 的测试 Python 环境中运行 `bash scripts/validate.sh`。如果启用本机 Skill 元数据校验器,还需要其 PyYAML 依赖。安装测试使用临时目录,不运行取 key 流程。 ## 尚未解决的边界 - 新机首次获取不是已验收能力。macOS 权限、provider root/用户进程身份、shadow 应用启动和恢复必须分别实测。预检只能拦住不可读数据库,不能保证后续获取成功。参见公开反馈 [#2](https://github.com/Rion-Wu-tech/wechat-intelligence-hub/issues/2)、[#3](https://github.com/Rion-Wu-tech/wechat-intelligence-hub/issues/3)。 - 数据库 key 不等于图片 key;文字可读不代表图片、语音、文件完整。通知预览仍不能冒充全量历史。 - 无时区的历史时间暂按当前机器本地时区解释。跨时区迁移和夏令时歧义需要明确的来源时区,不能从旧字符串恢复不存在的信息。 - 本轮未迁移数据库。时间函数查询可能不再利用旧文本时间索引;下一阶段应添加可回滚的 epoch 列/索引和长窗口性能基线。其他历史搜索路径需逐项迁移。 - 没有改成自动判断“已成交/已结算/承诺已完成”。这些状态仍需对应原文、交付/收款证据或用户确认。 - 私有安装与公开包之间可能存在个人 UI 改动,发布前必须比对;不能整目录覆盖。 ## 下一阶段 | 优先级 | 工作 | 验收条件 | |---|---|---| | P0 | 在干净机器验证接入、取消、失败恢复和两种安装方式 | 无 key 日志、无静默覆盖、失败后官方微信能恢复;不使用维护者已有配置证明新机成功 | | P1 | 统一覆盖说明 | 每次报告展示时间窗、账号/标签范围、分页上限、失败群和各媒体能力;截断必须提示 | | P1 | 建立匿名质量用例集 | 无链接培训、直接招募、纯加热、闲聊、旧商单、交接联系人、用户已确认收款分别测漏报和误报 | | P1 | 结构化机会证据 | 固定字段记录证据消息、发布者/组织者/品牌角色、当前阶段、最新变化和建议动作;同链接只占一个条目 | | P1 | 升级检查与诊断包 | 显示实际运行版本、保留个人补丁;诊断包默认无聊天、账号、路径和凭据 | | P2 | 长窗口增量和性能 | 稳定消息 ID、分页游标、重复导入幂等性与 epoch 索引;以实际规模测试决定是否增加搜索引擎 | 保留四个阅读入口:综合行动、群聊日报、重点联系人、商单信号。群聊页保留话题、重点群、群聊筛选;证据仍就地展开。当前不新增一层大而全的仪表盘。 ## 技术依据 Pandoc sandbox 约束转换时的文件访问,但不是浏览器 HTML 净化器,所以和 raw HTML 关闭、白名单净化分开使用。[Pandoc 手册](https://pandoc.org/MANUAL.html) 净化使用现成的解析器库,不用正则表达式替代 HTML 安全解析;CSP 是额外防线。[nh3 文档](https://nh3.readthedocs.io/)、[OWASP XSS 防护指南](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html) 时间需要按同一时间基准比较,不能假设所有日期字符串具有相同表示。[SQLite 日期与时间函数](https://sqlite.org/lang_datefunc.html)