Skip to content

Releases: yitom486/montree

v0.4.31

Choose a tag to compare

@github-actions github-actions released this 05 Nov 03:06

v0.4.31

  • 阅读馆资讯源重构:发现页改为通用 FeedSource / FeedItem,接入 Hacker News、Lobsters、arXiv、AI 前沿、技术博客与自定义 RSS;来源/频道切换、已读、稍后读与书架按 source:id 隔离。

  • 通用分页与缓存:Hacker News 按 id 列表分页、Lobsters 使用 /page/N.json、arXiv 使用 start 参数;RSS/Atom 支持 rel="next",Substack 订阅走归档接口;列表底部统一「加载更多」,各来源独立缓存时长与本地快照。

  • AI 前沿:新增 Claude、Hugging Face、OpenAI、Google DeepMind、Google AI、BAIR、Import AI 七个频道。

  • 自定义 RSS:技术博客来源支持添加/删除 RSS/Atom 订阅并自动读取 feed 标题;抓取逐跳校验重定向并拦截本机/内网地址。

  • Linux.do 与登录窗口:新增 Linux.do 最新/热门频道;需要登录的来源通过独立持久化分区打开真实登录窗口,不接触账号密码,登录状态可探测/退出,抓取使用同一会话。

  • 正文与讨论连接:HN 讨论页重建评论树、清理缩进占位图并生成顶层评论目录;正文页与讨论页双向切换;手动打开文章可按 URL 反查 HN 讨论。

  • arXiv 阅读修复:修复 LaTeXML 缩放表格压住正文;PDF / TeX 源码等非 HTML 资源改为系统浏览器打开;arXiv 讨论页目录只保留标题。

  • 打包:补充 @xmldom/xmldom 主进程运行时白名单,修复 CI check:bundle。

v0.4.30

Choose a tag to compare

@github-actions github-actions released this 03 Nov 11:15

v0.4.30

  • 阅读器 AI 翻译与网页阅读改进:正式提供独立翻译 Agent、模型与思考档配置,译文和词句解读流式输出,可拖动且保留状态的翻译浮窗、译文批注、Markdown 卡片流和 Claude 开发者博客图片恢复;同时修复 MCP 批注提议重复挂载。

  • 修复回归环境初始化竞争:在应用脚本启动前注入测试翻译运行时,避免设置测试意外启动真实 Agent。v0.4.28、v0.4.29 未发布安装包,本版继续通过完整 CI 与三平台打包后发布。

v0.4.27

Choose a tag to compare

@github-actions github-actions released this 01 Nov 17:29

v0.4.27

  • 修复:目录按钮重名与主题切换回归抖动:右侧目录收起按钮不再与在线文档「目录」按钮重名;主题相关 E2E 等待过渡结束后再断言,提升 CI 稳定性。

v0.4.24

Choose a tag to compare

@github-actions github-actions released this 24 Oct 03:08

v0.4.24

  • 安全:HTML 预览改为独立源隔离:本地 HTML 通过 montree-html:// 独立源加载,阻断预览页经 window.parent 访问应用 preload、终端与文件接口;相对资源只读工作区/HTML 所在目录,缩放、锚点、链接与阅读快照改走受限桥接。localStorage 与相对 CSS/JS 保持可用,并补充隔离 E2E。

  • 修复:多次会话切换后 Agent 一直显示「工作中」:主进程在 session/prompt 终止时补发回合完成标记,即使渲染端因路由/会话代际检查丢弃 IPC 返回值也能收尾;新回合开始会清理上一回合遗留的流式状态,避免停止按钮与工作记录长期悬挂。

v0.4.23

Choose a tag to compare

@github-actions github-actions released this 23 Oct 11:23

v0.4.23

  • HTML / Markdown 本地内链:本地 HTML 侧栏链接和 Markdown 相对链接现在按当前文档目录解析并在应用内切换;支持跨文件锚点与同页锚点,外部链接仍交给系统浏览器。修复 srcdoc 相对链接把 Montree 自身加载进 iframe、出现 preload 缺失提示的问题。

  • HTML 阅读 MCP:本地 HTML 通过 montree_read 返回 iframe 渲染后的可见纯文本和标题目录,排除导航、页脚、脚本与隐藏内容;支持视图、章节、目录和搜索读取,并要求 Agent 不再用原生文件读取或 montree_text_read 解析 HTML 源码。补充懒加载期间的纯文本后备,避免刚打开文档时读不到正文。

  • 修复:HTML 预览工具栏窄面板重叠:视图切换按钮不再使用固定图标宽度,文件名、主题、缩放与文字标签按容器宽度逐级收纳,避免「预览 / 分屏 / 源码」相互挤压;新增窄窗口 E2E 溢出与重叠回归。

v0.4.22

Choose a tag to compare

@github-actions github-actions released this 23 Oct 06:49

v0.4.22

  • 修复:MCP / Skills 资源详情状态偶发不稳:会话连接/断开空窗时,显式空会话不再被误判为旧会话;未连接时仍可查看本地 Skills。MCP 每 3 秒轮询的瞬时失败不再清空上次成功结果,Skills/MCP 查询自动重试一次,手动刷新不再被后台轮询禁用;补充窗口/会话归属单测、组件回归与建会话前 E2E。

v0.4.21

Choose a tag to compare

@github-actions github-actions released this 22 Oct 11:49

v0.4.21

  • 行内补全独立配置:补全与聊天模型分开配置,设置页可单独选择 OpenAI 兼容 API Key 或 ChatGPT 登录;保留旧 Agent 自定义供应商作为回退,本地 localhost 允许空 Key。

  • ChatGPT 登录补全:新增 Codex OAuth PKCE 登录、token 自动刷新与退出登录,凭据只存主进程 userData;支持 gpt-6-luna / gpt-6.1-sol / gpt-6-astra,补全默认使用最低思考等级。ChatGPT 补全直接走 Codex Responses SSE,不经过 ACP 会话,也不读取 Codex/OpenCode 本地登录文件。

  • DeepSeek 等动态模型:设置页可按 Base URL/Key 请求 OpenAI 兼容 GET /models 并下拉选择模型,不再依赖预设模型 id;同一地址可复用已保存 Key。DeepSeek 官方接口自动关闭 thinking,避免补全默认进入 high reasoning。

  • 补全稳定性:修复中文输入法提交后不触发、配置保存后同步状态缓存仍为未配置、旧 preload 缺少 ChatGPT 方法导致未捕获异常等问题;补全失败会给出可见提示。输入模式补全增加文档标题、标题路径与 Markdown 块类型上下文,并完善 CJK/单行清洗。

  • 测试:新增 ChatGPT OAuth/刷新/SSE、provider 状态、动态模型列表、补全服务与输入法触发单测,以及补全设置 E2E。

v0.4.20

Choose a tag to compare

@github-actions github-actions released this 22 Oct 03:47

v0.4.20

  • 修复:Agent 输入框底部控件在窄聊天栏下溢出并盖住「发送」按钮(Windows 1x 发现)。

  • 修复:Windows 扫描版 PDF OCR(打开即自动识别与「识别本页」)下载识别引擎时改用系统 System32\tar.exe 解压 zip;自动识别失败写入诊断日志;E2E 改为覆盖不点按钮的自动 OCR,并恢复打包冒烟。

  • 修复:Windows 上按需下载 Typst 运行时改用系统 System32\tar.exe 解压 zip,避免 PATH 中 GNU tar 解压失败。

  • 修复:在线文档目录与大纲在 TanStack 这类多产品文档站上解析不到位(以 tanstack.com/ai 为例):

    • 侧栏目录选错了导航:页面里顶栏 nav 的链接比文档侧栏多,按链接数打分时顶栏胜出,目录变成 Blog、Shop 之类的全站链接。现在额外看链接是否与当前页同分区(共享前两级路径),没有同分区链接的导航降权;aria-label 为 mobile/social/legal 的导航也降权。
    • 全站目录拿不到:这类站点首屏只渲染当前分组的侧栏,完整索引在分区路径下的 llms.txt(如 /ai/latest/llms.txt),根 /llms.txt 只是产品路由表。现在按「页面声明 → 路径前缀 → 根」依次尝试,优先采用包含当前页的索引,跳过 SPA 返回的 HTML 回退页;页面提供自身 .md 版本也视为可尝试 llms.txt。
    • llms.txt 分组:带 ##/### 标题的索引按标题建树,不再按 URL 路径生成「Ai / Latest / Docs」这种空层级;首个标题前的自引用、仓库链接和跨站链接不进目录。
    • 页内大纲缺 h2:没有 <article>/<main> 的页面走 Readability 抽正文时,标题上的 scroll-my-20 工具类命中它的 /scroll/ 负权重,所有 h2 被当成噪音删掉,大纲只剩 h3。交给 Readability 前先去掉标题的 class。
    • 用保存的 TanStack 页面与 llms.txt 加了单元测试。
  • 修复:选区靠近窗口顶部时,智能制卡菜单被标题栏挡住:菜单原先固定向上展开,在小窗口或 Windows 高 DPI 下会被标题栏盖住点不到。现在上方空间不够时向下展开。这个问题由 Windows E2E 作业发现。

  • 安装包瘦身:

    • Tinymist 改为首次使用时下载:打开 Typst 文件时,从固定版本的上游发布下载约 31 MB 的归档,流式校验 SHA-256,解压后原子安装到 userData;状态栏显示下载进度,完成或失败时弹提示。已配置自定义路径、或开发环境已准备随包资源时不下载。安装包只带许可证。
    • asar 只带主进程运行时闭包:files 先排除全部 node_modules,再按白名单加回。此前渲染端依赖(Univer、lucide、mermaid 等,已由 Vite 打进 out/renderer)也重复进了 asar。check:bundle 新增 6.4:自动核对白名单覆盖每个包的传递依赖,缺一项即失败。
    • 原生包按平台裁剪:node-pty 只保留本平台预编译产物,去掉调试符号(.pdb)、源码与构建中间文件;pdf-inspector 只保留本平台二进制,去掉 musl 版;pdfjs 只留主进程用的 legacy 构建;pdfjs 的可选画布 @napi-rs/canvas(62 MB)不再打包。
    • 压缩:AppImage 与 deb 改用 xz。
    • 体积:Linux 本机同一提交对比,AppImage 274 → 116 MiB,deb 205 → 115 MiB。Windows 安装包体积由 CI Windows 作业打包后写入运行摘要。
  • Windows E2E:CI 新增 windows-latest 作业,分 1x 与 1.5x(150% 缩放)两档,跑启动冒烟、渲染隔离、在线文档批注、Typst(真实 Tinymist)、终端、修改建议审阅/行内补全、聊天链接、终端审批与窗口宽度稳定用例,失败时上传产物。E2E 可用 E2E_DEVICE_SCALE_FACTOR 模拟高 DPI。新增窗口宽度稳定 E2E:在奇数窗口宽度、滚动条临界内容和拖动分隔条之后,外框宽度静置时不得来回跳。各 Job 用 .node-version 固定 Node。

  • 输入法与 EPIPE 回归测试:新增 CDP 真实输入法组合 E2E,覆盖编辑器实时预览标题行、粗体行与聊天输入框,组合中按 Enter 不发送,提交后文本恰好一次、无拼音残留,保存内容正确。新增“回合中杀掉 Agent 进程后再写 stdin”E2E:主进程无未捕获异常、不弹错误框,可重连并继续对话。

  • 修改建议/批注提议按 toolCallId 精确关联:Agent 在 MCP tools/call 的 _meta 里带 toolCallId(toolCallId、acp/toolCallId、claudecode/toolUseId 等)时,宿主把它交给 montree_text_propose / montree_text_edit / montree_propose_mark。修改建议按它去重:同一调用重放或迟到时不再新建卡片。批注提议在结果中回显 toolCallId,由 chat-core 0.1.26 精确挂到对应工具消息,不再靠“最近一条同名工具”的猜测。没有 _meta 时仍走原来的启发式。新增 E2E 覆盖去重、审阅模式拦截直接编辑、清空对话撤回全部建议。

  • 本地测试环境:本地约 29 个单测文件的“原生模块”失败,根因是 Node 20(缺 node:sqlite、Object.groupBy、Iterator、WebSocket、stripTypeScriptTypes);终端 E2E 失败是缺 make/C++ 编译器,node-pty 在 Linux 没有编译出来。新增 .node-version(24),CI 用 setup-node 固定版本;Node 低于 22.13 时 vitest 直接给出可执行提示;新增 bun run doctor 检查 Node、编译工具、node-pty、Electron、Typst 运行时与 xvfb 并给出修复命令。

  • E2E 稳定性:截图不再删除 toast DOM(会让 React 在 insertBefore/removeChild 上崩溃),统一用 screenshotWithoutToasts 以样式隐藏。在线文档三击选段的偶发失败查明是 iframe 交互监听尚未绑定,阅读器绑定后在 iframe 上标记 data-web-doc-interactive,用例先等标记再三击,去掉重试循环。新增用例一律 retries: 0。ppt-slideshow / agent-rich-result / annotations 各重复 5 轮共 50 次,本地 0 次失败。

  • 聊天链接安全打开:升级 @yitom/* 到 0.1.26(修复 ChatMarkdown 覆盖外层 onLinkClick)。Agent 聊天里的 http(s)/mailto 链接交系统浏览器打开,file:、自定义协议等一律拦截;主窗口 will-navigate 与 window.open 统一走白名单策略(仅应用入口页、开发服务器与 devtools),被拦截的目标记日志。新增 E2E。

  • Agent 终端命令需审批:Agent 请求 terminal/create 时先弹审批卡(允许一次 / 信任此工作区 / 拒绝),拒绝或未确认则不启动进程;信任的工作区记在 agent-terminal-trust.json,每次决定写入 logs/agent-terminal-audit.jsonl。新增单测与 E2E。

  • Agent 批注提议:采用时保存卡片里的改稿:升级 @yitom/* 到 0.1.25,聊天气泡内提议卡经 onAdoptMarkProposal 把用户编辑后的批注交给宿主写库;写库成功才标记已采用,失败保持待确认并提示原因。移除此前只能保存 AI 原稿的宿主侧兜底。E2E 增加“改稿后采用、重载后为改后文本”断言。

  • E2E 稳定性:React 在线文档标注用例三击选段改为重试至选区工具栏出现(iframe 刚载入时首次三击可能丢失)。

v0.4.19

Choose a tag to compare

@github-actions github-actions released this 21 Oct 18:36

v0.4.19

  • AI 修改建议(审阅层):Markdown / Typst 新增 MCP 工具 montree_text_propose(参数同 montree_text_edit,同样校验 revision / expectedText / Unicode 边界),Agent 的修改先以“删除线原文 + 绿色替换文本”显示在 CodeMirror 编辑器内,附行内接受/拒绝按钮;多行修改用整行标记 + 块级预览。编辑器上方审阅栏可上一处/下一处导航、查看列表、全部接受/全部拒绝。建议绑定文档模型(切换预览、卸载编辑器不丢失),随用户输入映射位置;用户改动目标范围则失效、不自动合并;接受恰好一次且为单个可撤销事务;迟到的、指向其他文档的调用一律拒绝。设置新增「AI 编辑 · 审阅模式」:开启后 Agent 直接 montree_text_edit 也改为待确认建议。

  • 切换文档不再闪动聊天面板:此前阅读器(PDF / EPUB / 在线文档)把 Agent 面板挂在各自内框里,编辑器则挂在外壳右侧。在 Markdown、PDF、在线文档之间切换时,面板整树卸载再重挂(消息列表重建、滚动位置丢失),宽度也在外壳百分比和阅读器固定像素之间来回跳,整页都会重新排版。现在聊天面板始终挂在外壳,与文档类型无关。聊天面板隐藏时主区仍铺满(修正 Typst 预览缩放回归)。文档区与聊天区外框使用 contain: strict 隔离,工作区内容(工具栏、滚动条、异步渲染)的尺寸变化不再外溢。新增 E2E:用渲染计数探针断言切换时聊天面板零重渲染,外框零位移。

  • 实时预览 Mermaid 稳定:预览块 widget 的相等判断包含块位置,在图上方每输入一个字符,整块就被销毁重建、重新异步渲染(实测输入一句话时 SVG 被移除 51 次,高度先塌到加载态再撑开)。现在判等与位置无关,点击编辑时按当前 DOM 位置定位。Mermaid SVG 按源码加主题做 LRU 缓存,同键并发请求合并,mermaid.render 串行执行;源码变化时保留旧图直到新图就绪。块高度按源码缓存,重建时预留高度,不再跳动。新增 E2E 和单测。

  • 扫描版 PDF / 在线文档:标注、智能制卡与 AI 笔记修复:

    • 智能制卡 / AI 笔记偶发空回复:子会话的 prompt 应答与 session/update 文本增量走不同通道,应答可能先于最后几段文本到达渲染端;卡片 JSON 这类短回复会整段落空,表现为“AI 无响应 / 制卡失败”。现在等增量静默(120 ms,最长 1.5 s)再读回复。
    • 扫描版 PDF(OCR)文字层:OCR 逐词 span 之间没有空白,选区、摘录、引用和给 Agent 的页面文本粘成一串(如 ReactisaJavaScriptlibrary),Agent 按摘录定位批注也因此失败。现在拉丁词之间补空格(中日韩文不加),行尾换行,span 宽度延伸到下一个词,划选连续;页面文本按行输出。已有标记按坐标渲染,不受影响。
    • 扫描版 PDF 划选落不到词尾:OCR 透明文字层的 span 用固定宽度,字形自然宽度与 OCR 框不一致,词尾字符(如行末单词的最后一个字母)选不中。现在与 pdf.js 一样按自然字宽 scaleX 缩放到框宽。
    • 右侧 Agent 提议的批注「采用并保存」不写库:聊天包迁移后,气泡内的提议卡不再带写库回调,点“采用”只把卡片标为已采用,标记并未保存。现在由宿主按提议摘录定位后写库,失败时提示原因。批注对话框里采用 Agent 草稿时,如果草稿摘录与残留选区不一致,改为按摘录定位,不再覆盖上一条标记的批注。
    • 新增 E2E,使用 React 官方文档(在线文档快照和扫描版 PDF)和 mock Agent:划重点 → 批注 → 智能制卡 → Agent 经 MCP 提议 AI 笔记并采用 → 重载后持久化并重新锚定。
  • 依赖:@yitom/* 升级到 0.1.24(contracts 并入 text-propose 资源),移除桌面端类型断言。

  • AI 修改建议 · 第二阶段:撤销已接受的建议会让它回到待审,重做则再次接受(与 CodeMirror 历史联动)。线程取消、清空、删除或 Agent 断开时,待审建议自动撤回,并在审阅栏显示原因;文件关闭时清理建议。新增「逐句」审阅:按中英文句界拆分,逐句采纳或拒绝后一次提交。选区浮动工具栏提供改写、润色、缩短、扩写、翻译和自定义指令(Ctrl/Cmd+J),请求发给当前 Agent,结果以建议形式返回。审阅栏改为紧凑单行,并新增可折叠的右侧审阅面板。新增多窗口隔离 E2E;修复单测在仓库内生成 D: 目录的问题。

  • 行内补全(Ghost text):Markdown / Typst 输入停顿后,用已配置的自定义模型(Vercel AI SDK,不经 ACP Agent)补全灰色后续文本。Tab 接受,Ctrl/Cmd+→ 按词接受,Esc 或继续输入取消,Alt+] / Alt+[ 切换候选。输入时取消在途请求,尊重 IME 输入法组合;未声明语言的代码块内不触发;未配置模型时静默不触发。设置中可开关(默认开),状态栏可按文件禁用。

  • 聊天包升级 @yitom/ 0.1.23*:流式结束保留已显示正文块(脚注不再触发整篇重挂载);上滑看历史时发送不抢滚动。恢复对应两条 E2E。

  • Agent 退出不再卡死应用:Agent 进程退出途中仍有写入时,stdin 的 EPIPE 曾成为主进程未捕获异常,弹出阻塞错误框并冻结整个应用;现统一监听 Agent stdio 错误,断开原因并入连接错误提示,面板回到可重连状态。

  • CI 恢复与发版闸门:修复 Agent 聊天 E2E 一直红的根因——测试仍往旧键 montree-acp-ui 播种,而聊天单权威迁移后应用读 montree-acp-metadata/v2 + montree-chat-session/v1,种子被忽略、面板退回默认运行时;新增共享播种 helper。Release 工作流改为先完整复用 CI(含 E2E),CI 红则不打包、不发布。

  • Release 产物清理:上传清单只收 latest*.yml,builder-debug.yml 不再进入 GitHub Release。

v0.4.18

Choose a tag to compare

@github-actions github-actions released this 20 Oct 06:55

v0.4.18

  • 工作区终端:新增供用户操作的多标签 Shell 终端,支持输入、粘贴、Git、尺寸调整与 WSL 工作区,隐藏保留进程、关闭释放资源。
  • Agent 原生工具指引:工作区文件创建、Shell 和 Git 优先使用 Agent 原生工具;区分 Code mode 局部目录和顶层工具列表,避免误报缺少文件/终端能力。保留当前编辑器未保存内容的文档工具路径。
  • OpenCode 闲置后的工具恢复:原连接恢复仍无法重新发现工具时,自动冷启动一次并恢复同一会话;确认 MCP 工具重新连接后才发送消息,保留取消控制,禁止回退新会话或重复发送。
  • 在线文档解析增强:增强 MDN / GitHub / Sphinx 代码块语言识别与文件名工具栏;归一化 Baseline 状态卡、BCD 浏览器兼容性表格与文章底部元信息卡;被安全策略移除的交互式嵌入降级为原文占位卡。
  • 在线文档目录层级:支持 <ol> / <summary> 分组并恢复可折叠目录树;修复 MDN 状态图标 title 被误当目录标题的问题。