Skip to content

Changelog zh

LeonXu edited this page Apr 20, 2026 · 28 revisions

更新日志

[0.4.1] — 2026-04-20

省心模式体验打磨。

修复

  • Hard Allow 漏判引号里的 pipe_isDefinitelySafe|;& 切命令不懂 shell 引号,grep "A\|B\|C" file 被切成破碎段、降级走 LLM。新增 shell-aware 预处理:遇到 $(...) / 反引号直接 bail-out;否则先剥 "..." / '...' 再 split。常见带 regex alternation 的 grep 重回第 2 层瞬时放过,不弹通知、不等 LLM。
  • Auto-allow 后面板残影 1–2 秒 — 省心模式下 LLM 出 allow 后,_autoAllowRequest 写响应文件 + 删请求文件,但原生 Beacon 面板要等 BeaconService 下一次 scan 周期(~2s)才收。新 public BeaconService.dismissById(reqId):同步清 active id + 推进队列 + 发 native dismiss。Lark 先响应路径同步调用。
  • 展开态 Beacon 面板挡住背后内容 — 点面板空白区域之前不响应;现在点非按钮区域就收缩回小圆点,方便看被遮住的代码;窗口 title 变化时自动重新展开。"Open in Memora" 保留在按钮上。

[0.4.0] — 2026-04-18

Risk Engine + Channel 抽象 + 两种操作模式。Memora 从"被动通知层"演进为"有判断力的代理层"。

新增

  • Channel 抽象ChannelRegistry 把每个请求 fan-out 到所有启用 channel(本地 Beacon / 飞书 Lark),first-response-wins,其他自动 dismiss。
  • Risk Engine 三层决策 — Hard Deny(rm -rf、凭据路径、git push --force ...) / Hard Allow(项目内编辑、只读命令、构建测试、日常 git) / 灰色地带 → LLM advisor(DeepSeek / Claude / OpenAI),静态 + raw 两层 fallback。
  • 新 Approval UI — 语义动词、AI 建议、关键参数高亮,替代 raw shell 显示。
  • 两种操作模式正常(默认):deny/hard-allow 之外都弹通知,LLM verdict 作为参考。省心(手动开):LLM 判 level != high && rec != deny 全部 auto-approve。
  • 自动刷新 — FSEvents 监听 ~/.memora/raw/ + 60s 兜底轮询。sessions 自动更新无需点刷新。

修复

  • 项目误匹配(case-insensitive + longest-prefix)。
  • Accessibility 权限被 adhoc 签名撤销(CLAUDE.md 禁止 flutter build + cp,必须走 ./build.sh)。
  • Hook 协议:toolInput 缺失时从 requestDetail 回退;路径正则修复空格。
  • Deny-list 收紧:基于 13005 条真实命令评估,FP -86%(docs/risk-evaluation-report.md)。

完整细节见 release v0.4.0 和仓库内 CHANGELOG.md

[0.3.1] — 2026-04-08

关键修复

  • Hook adhoc 签名 → Developer IDbuild.sh):v0.3.0 发出去的 memora-hook 是 cargo 默认的 ad-hoc 签名。macOS 14+ Gatekeeper 在执行时会直接 SIGKILL ad-hoc 签名的 CLI 二进制(exit 137),导致所有 PreToolUse / PostToolUse hook 在用户机器上静默失败——Memora 捕获不到任何 hook 事件。v0.3.1 在 include_bytes! 把 hook 字节冻结进 .app 之前用 Developer ID Application 重签。Hook 的 CDHash 经 Apple 公证传播到 .app 公证记录里,用户首次跑 hook 时 Gatekeeper 在线查 CDHash 命中通过。已经在跑 v0.3.0 的用户必须升级。

新增

  • Settings 中的 Hook 版本检查:Settings → Hooks 显示已安装的 memora-hook 版本和期望版本,不一致时显示琥珀色警告 banner + 重装说明。memora-hook 新增 --version flag。
  • Beacon 通知声音可配置:Settings → General 可选 14 种系统声音(或无声),每个选项有预览按钮。
  • 设置界面重构:760×560 双栏布局,macOS 风格左侧边栏(General / LLM / Personas / Hooks / About),替代原来的单栏滚动。

修复

  • Beacon 展开面板文字残留updateState 多次调用累积了过期的 NSTextField 子视图。现在用 dynamicContainer 模式,每次 transition 时清空所有动态子视图。
  • Beacon 点击意图:之前点击展开面板任何位置都会跳到主程序。现在只有明确的 "Open ↗" hit rect 会触发跳转。
  • 显示器热插拔后下拉框过期:Swift 通过 beacon:displaysChanged 主动通知 Dart,加上 PopupMenuButton.onOpened 打开时再 fetch 一次。
  • Beacon sentinel 存活检查:PreToolUse 不再依赖过期的 sentinel PID(加 kill(0) 校验),避免匹配的 Beacon 进程崩溃后还在放行请求。
  • Hook 协议——空 stdout ≠ allow:hook 始终显式写 permissionDecision JSON,不依赖 Claude Code 的隐式默认。

技术

  • 新增 Rust API hook_version_status(),通过 flutter_rust_bridge 暴露为 check_hook_version()
  • build.sh --no-bump flag 用于精确版本号的 release build。
  • NSScreen.didChangeScreenParametersNotification 触发 Swift→Dart method channel callback,让 Flutter 不用轮询就能刷新显示器列表。

[0.3.0] — 2026-04-07

新增 — Beacon V3

  • 基于文件的授权通信:Hook 轮询 ~/.memora/beacon-responses/<toolUseId>.json 最多 30 秒,超时后回退到终端确认。完全替代脆弱的按键模拟——跨 macOS Space、跨多窗口终端、任何焦点状态都可靠。
  • AXDocument 项目检测:直接读 kAXDocumentAttribute(OSC 7 cwd),不依赖窗口标题。Ghostty / Terminal / iTerm2 / Warp 开箱可用。
  • 首选显示器设置:可将 Beacon(项目信息 + 通知)固定到指定显示器。对多屏用户尤其关键(如竖屏副屏上 Beacon 看不到时通知会被错过)。
  • per-request resolved 追踪:PostToolUse 写 toolUseId(不是时间戳)→ 通知队列也能精确匹配 dismiss。
  • 通知队列:多个 PreToolUse 请求依次显示,不会丢失。

修复

  • 快速切换项目时 UI 不更新(transitionTo 在 state 未变时早返回,导致旧数据残留)。
  • 通知面板在外接屏(无 notch)上按钮被裁切(高度算式没用统一的 topArea)。
  • Hook 超时后通知卡住——hook 超时时主动删除请求文件,让 Dart 自动 dismiss。
  • 响应文件孤儿堆积——Dart 启动时清理 ~/.memora/beacon-responses/ 中超过 30 秒的旧文件。
  • flutter build macos 产生 ad-hoc 签名 → 必须用 build.sh 才能拿到正确的 Developer ID 签名(否则辅助功能权限会被撤销)。

移除

  • 删除所有按键模拟代码(sendKeystrokeToTerminalfindAndRaiseTerminalWindowraiseWindowContainingsendKeyCodeToPidkeystrokeForAction)—— ~100 行脆弱的 AX/CGEvent 代码被文件通信完全替代。

[0.2.22] — 2026-04-06

新增 — Beacon(AI 编程的灵动岛)

  • 菜单栏上方的浮动面板,像素螃蟹吉祥物
  • 授权双通道:Beacon 和终端同时显示 Allow/Deny
  • 按键转发 CGEvent.postToPid() — 不切换焦点
  • 可配置的权限规则(按来源+工具)
  • 凹弧形状 — 面板从屏幕边缘"生长"
  • 上下文感知状态机(收缩/展开/通知)
  • 点击展开态 → 在 Memora 中打开项目

新增 — 核心功能

  • Continue V2:跨工具工作区创建——git clone + MEMORA_CONTEXT.md,包含完整对话历史、git log 和项目文件
  • Drift Awareness:Blackboard 中的计划与实际工作对比面板,带用户裁决按钮
  • Context-Linked Commits:Hook 检测 AI session 期间的 commit 并关联到对话
  • 新手引导:6 步交互式引导,带聚光灯覆盖层
  • 国际化:英文 + 中文语言支持
  • 自动 Git 保护:每次同步时自动提交 ~/.memora/ 数据
  • 设置:Hook 重装按钮

改进

  • Blackboard 视图切换:Insights | vs Plan
  • 前进/后退 commit 导航按钮
  • 搜索:关键词高亮、摘要片段、结果计数
  • Session 时间线:右键 commit 可 Recall/Branch
  • Branch 对话框:Clone 模式添加浏览按钮
  • Drift 读取策略文件全文;Continue 上下文扩展到 50 commits + 10 sessions
  • 响应式 Blackboard 卡片,fullSizeContentView 标题栏

修复

  • 通知自动消失竞态条件
  • 启动时清理残留请求文件
  • AXObserver 即时窗口切换检测
  • commit-link 处理移到 git sync 之后(防止关联丢失)
  • Drift 裁决取消正确持久化到 DB
  • 分支过滤器显示空状态而非静默回退
  • 从 Git 保护中排除 *.db(之前导致磁盘膨胀)
  • flutter analyze 0 issues, flutter test 52/52 pass

[0.1.2] — 2026-03-31

新增

  • 双轨时间线(对话 + Git commit)
  • Blackboard(AI 驱动的项目分析)
  • History Branching(Worktree 和 Clone 模式)
  • 消息级 Continue(导出为 Markdown)
  • 六层知识模型(L1-L6)
  • 多提供商 LLM 支持(12+ 提供商)
  • 跨对话和 commit 的全文搜索
  • 代码签名 + DMG 打包

[0.1.0] — 2026-03-29

新增

  • 首次发布
  • Flutter + Rust 架构
  • Hook 驱动的对话捕获
  • Claude Code、Codex、OpenCode、Cursor 支持

Clone this wiki locally