Repository navigation
Releases: yitom486/montree
Release list
v0.4.31
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主进程运行时白名单,修复 CIcheck:bundle。
v0.4.30
v0.4.30
-
阅读器 AI 翻译与网页阅读改进:正式提供独立翻译 Agent、模型与思考档配置,译文和词句解读流式输出,可拖动且保留状态的翻译浮窗、译文批注、Markdown 卡片流和 Claude 开发者博客图片恢复;同时修复 MCP 批注提议重复挂载。
-
修复回归环境初始化竞争:在应用脚本启动前注入测试翻译运行时,避免设置测试意外启动真实 Agent。v0.4.28、v0.4.29 未发布安装包,本版继续通过完整 CI 与三平台打包后发布。
v0.4.27
v0.4.27
- 修复:目录按钮重名与主题切换回归抖动:右侧目录收起按钮不再与在线文档「目录」按钮重名;主题相关 E2E 等待过渡结束后再断言,提升 CI 稳定性。
v0.4.24
v0.4.24
-
安全:HTML 预览改为独立源隔离:本地 HTML 通过
montree-html://独立源加载,阻断预览页经window.parent访问应用 preload、终端与文件接口;相对资源只读工作区/HTML 所在目录,缩放、锚点、链接与阅读快照改走受限桥接。localStorage与相对 CSS/JS 保持可用,并补充隔离 E2E。 -
修复:多次会话切换后 Agent 一直显示「工作中」:主进程在
session/prompt终止时补发回合完成标记,即使渲染端因路由/会话代际检查丢弃 IPC 返回值也能收尾;新回合开始会清理上一回合遗留的流式状态,避免停止按钮与工作记录长期悬挂。
v0.4.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
v0.4.22
- 修复:MCP / Skills 资源详情状态偶发不稳:会话连接/断开空窗时,显式空会话不再被误判为旧会话;未连接时仍可查看本地 Skills。MCP 每 3 秒轮询的瞬时失败不再清空上次成功结果,Skills/MCP 查询自动重试一次,手动刷新不再被后台轮询禁用;补充窗口/会话归属单测、组件回归与建会话前 E2E。
v0.4.21
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
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 加了单元测试。
- 侧栏目录选错了导航:页面里顶栏 nav 的链接比文档侧栏多,按链接数打分时顶栏胜出,目录变成 Blog、Shop 之类的全站链接。现在额外看链接是否与当前页同分区(共享前两级路径),没有同分区链接的导航降权;
-
修复:选区靠近窗口顶部时,智能制卡菜单被标题栏挡住:菜单原先固定向上展开,在小窗口或 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
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 笔记并采用 → 重载后持久化并重新锚定。
- 智能制卡 / AI 笔记偶发空回复:子会话的 prompt 应答与
-
依赖:
@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
v0.4.18
- 工作区终端:新增供用户操作的多标签 Shell 终端,支持输入、粘贴、Git、尺寸调整与 WSL 工作区,隐藏保留进程、关闭释放资源。
- Agent 原生工具指引:工作区文件创建、Shell 和 Git 优先使用 Agent 原生工具;区分 Code mode 局部目录和顶层工具列表,避免误报缺少文件/终端能力。保留当前编辑器未保存内容的文档工具路径。
- OpenCode 闲置后的工具恢复:原连接恢复仍无法重新发现工具时,自动冷启动一次并恢复同一会话;确认 MCP 工具重新连接后才发送消息,保留取消控制,禁止回退新会话或重复发送。
- 在线文档解析增强:增强 MDN / GitHub / Sphinx 代码块语言识别与文件名工具栏;归一化 Baseline 状态卡、BCD 浏览器兼容性表格与文章底部元信息卡;被安全策略移除的交互式嵌入降级为原文占位卡。
- 在线文档目录层级:支持
<ol>/<summary>分组并恢复可折叠目录树;修复 MDN 状态图标title被误当目录标题的问题。