Skip to content

v0.4.0 — Risk Engine + Channel abstraction

Choose a tag to compare

@4over7 4over7 released this 18 Apr 07:12
· 15 commits to main since this release

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 / SQL DROP/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。
  • 新 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 保留用户键入大小写,_matchProject case-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 installsudo apt update 等 read-ish sudo、curl POSTproduction 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.