v0.4.0 — Risk Engine + Channel abstraction
v0.4 把 Memora 从"被动通知层"演进为"有判断力的代理层"。三件事一锅做:Channel 抽象 + Risk Engine + 新 Approval UI——共享同一个数据流 ApprovalRequest。完整设计 docs/v0.4-design.md(~850 行)。
✅ 本版已完成
主线
- Channel 抽象:通知不再绑定 Beacon,
ChannelRegistry统一调度 + fan-out + first-response-wins。 - Risk Engine 三层决策架构(29035 样本评估):
- Hard Deny(规则,永远问):
rm -rf/git push --force/reset --hard/sudo 写/删除/curl|bash/ SQLDROP/TRUNCATE/DELETE no WHERE/.ssh/.aws/.env/.github/workflows/~/.memora/raw//~/.claude/对话记录等。 - Hard Allow(规则+上下文,一定放过):项目内 Edit/Write(git 可恢复)、只读命令、构建测试、git 日常、项目内
rm。 - 灰色地带:LLM advisor(DeepSeek / Claude / OpenAI)出 verdict + 动词/意图/关键参数,LLM 离线/超时走静态 fallback。
- Hard Deny(规则,永远问):
- 新 Approval UI:替代 raw shell command。动词 + 意图 + 关键参数 + AI 徽章。Spinner → done → fallback。
- EventLogger:
~/.memora/events.jsonl记录每次 verdict + 决策。 - 两种操作模式:
- 正常模式(默认):deny-list + Hard Allow 之外都弹通知,LLM 作参考。
- 省心模式(opt-in):LLM 判
level != high && rec != deny全部 auto-approve。
- 自动刷新:FSEvents 监听
~/.memora/raw/+ 60s 兜底,sessions 列表不需手动刷新。
关键修复
- Beacon 项目误匹配(v0.3.0 起潜伏 11 天):Ghostty OSC 7 cwd 保留用户键入大小写,
_matchProjectcase-sensitive + first-match 让父目录项目吞掉子项目。修复:case-insensitive + longest-prefix。 - AX 权限被 macOS 静默撤销(影响所有 v0.3.0+ 用户):adhoc 签名触发撤销,必须用
./build.sh(Developer ID 重签)。 - Hook 协议脱节(F1 P0):CC hook 不传 toolInput,全部从 requestDetail 回退解析。
- 路径含空格(R1)、递归删除漏拦(R2)、Beacon 多个渲染 bug、LLM timeout 15s、compact 消息丢失、搜索跳转精度等。
Deny-list 收紧(13005 样本,FP -86%)
不再 deny:npm/pip/cargo/brew install、sudo apt update 等 read-ish sudo、curl POST、production keyword、cp memora.db。只保留真正不可逆的。
Quality assurance
4 轮独立第三方评审:4 项已关闭(F1/F5/R1/R2),4 项保持开放(F4/F6/F7/F8),3 项转产品决策(F2/F3/F9)。见 review matrix。
🚧 Beta / 未实机验证
- LarkChannel(飞书):代码完整(交互卡片 + reactions 轮询 + Settings UI),本版未完整 dogfood。Settings → Channels 可试用,v0.5 window 内完成端到端验证。
⚠️ 已知问题(本版未修)
- F8 / 安全:API Key 明文存 SharedPreferences,计划迁 Keychain。
- F4 / 架构:
lib/src/app.dart~5000 行,审批编排需重构。 - F6 / 文档:README "15 秒同步" 与当前 FSEvents + 60s 兜底不一致。
- F7:
should_skip_project()误跳部分 dot-config 项目。 - F9:
~/.memora自动 Git 缺可见控制。 - Mission Control 中 Beacon 仍可见(有意不做):
com.apple.expose.*假阳性多 + 抢焦点;.transient在全屏 app 跟丢;CGWindowList轮询 99.99% 时间空转。调研 docs/wiki/beacon-mission-control-hide.md。
🔮 Coming next(v0.5+)
- LarkChannel 端到端 dogfood + 稳定化
- 多 channel fallback 链(Beacon 无响应 → Lark → …)
- Per-project / per-tool risk policy 配置 UI
- Beacon 重构为 BeaconChannel(统一抽象)
- API Key 迁 macOS Keychain(F8)
app.dart拆分(F4)- IM Inbound(手机发命令给 CC,v0.6+)
升级说明
- 旧
auto_allow_low_risk=true用户升级后默认进入正常模式(体感更"啰嗦")。要恢复"自动放过"请 Settings → Risk Engine → 开"省心模式"。无 schema migration。
Install
Download Memora_0.4.0_aarch64.dmg below. Notarized by Apple, macOS 14+ Apple Silicon.