Skip to content

Releases

v0.3.0 双向同步(免费账号网页端点)

Choose a tag to compare

@Hoemr Hoemr released this 31 Aug 06:43

概览

v0.3.0 把 dsh-better-overleaf 从“快照拉取 + Git 令牌推送”变成“任意账号、任何时间、双向同步”——免费账号通过 Overleaf 网页端点(不再需要 Git 令牌)即可把本地修改推回 Overleaf;同时 UI 重构为以同步条为核心、设亮教程与 PDF 阅读器。

亮点

1. 快照模式双向同步(核心)

免费账号也能双向同步。不再依赖 Git 桥,按以下路径推送到 Overleaf:

  1. 拉一次远端 zip → 本地仓进新 commit
  2. git diff remote..pre 解析出本地变更(add/modify/delete/rename)
  3. 逐个应用:删除旧 doc/file、上传新 doc/file
  4. 再拉一次确认结果

实现细节见 src/overleaf-web.ts(手动实现 socket.io 0.9 协议,手工 multipart upload)和 src/transports.ts:apiSnapshotPush。由于 Overleaf 的上传端点不支持 in-place 修改,“更新”采用 “删除 + 上传同名” 策略,所以同名的修订历史会断开。

2. UI 重构

原 4 卡片堆叠的页面(登录教程占据首屏)重写为:

  • 顶部 同步条:项目名 + 状态 pill + 拉取 / 推送 / 检查 + 编译预览(检测到 latexmk 才出现)+ 设置
  • 中部 项目列表:登录后自动加载,点项目 = 直接绑定
  • 底部 绑定列表:每行状态行 + 行内拉取/推送/打开/解绑,快照镜像多一个「切换 Git 双向」按钮
  • 设置弹窗:所有连接说明都在 <details> 里折叠,默认不占货仓

3. PDF 阅读器

用 pdf.js 替换 sidebar 内置的 iframe PDFium 渲染器。包含缩放、适应宽度、页码跳转、目录、全文搜索、文本选择复制、深色模式反色适配。以 priority 10 注册为 overleaf-pdf,全局替换 .pdf viewer。

4. 智能同步

  • 拉取:自动提交未保存修改后 rebase;有冲突时中止并列出冲突文件
  • 推送:远端有更新时拒绝并提示先拉取,防止覆盖
  • 检杏:实时显示「落后 N · 领先 M · 远端 X 前更新 · 上次同步 X 前」
  • 模式切换:快照项目可一键升级为 Git 双向(splice 本地提交到远端历史),远端较新时拒绝

5. 后台自动同步

绑定后不需打开 Overleaf 标签页。设置里选「每 5/15/30 分钟 / 每 1 小时」拉动间隔;自动推送独立开关(默认关);跳过工作区有未提交修改的镜像并提醒。

6. 本地编译

检测到本机 latexmk 后,同步条出现「编译预览」按钮:在镜像目录 latexmk -pdf 一次,生成 PDF 后在新标签页用新的 pdf.js 阅读器打开。失败时原样回显末尾几行日志。

7. AI 工具

在 ctx.tools 注册了 4 个工具,会话里可直接调用:

  • overleaf_status:查项目同步状态
  • overleaf_pull / overleaf_push:拉 / 推
  • overleaf_compile:本地编译,返 PDF 路径

这是 VSCode 做不到的——在 DSH 会话里一句话驱动完整编辑-同步循环。

8. Bug 修复

  • 快照拉取以前会误删 .overleaf.json,导致后续同步 / 编译报错“not bound”。现在保留并在每次拉取后重写
  • “打开”现在自动选含 \documentclass 的 .tex,不再打开 sty 等辅助文件
  • 补 bind 的“认领现有目录”逻辑,丢失绑定的镜像能重绑
  • 快照项目可一键升级为 Git 双向,含远端较新保护

代码质量

  • 36 个测试全部通过(6 个 spec 文件)
  • 含一个推推送集成测试(真 HTTP server + ws server 模拟 overleaf.com 端到端跑一遍)
  • TypeScript 严格模式 typecheck 绿
  • Peer 范围 调整到 sidebar 0.13–0.18

仓库

v0.2.1

Choose a tag to compare

@Hoemr Hoemr released this 27 Aug 17:12

修复 (DSH Desktop 2.0.x 兼容)

  • 客户端 bundle 注册 id 必须等于 npm 包名;改为从 package.json 推导,防止再改名后脱同步(DSH Desktop 2.0.3 强制包身份校验 + 客户端模块系统按包名查找)
  • 放宽 dsh-better-sidebar peer 范围至 <0.17(registerTab / openTab / openFile 客户端接口与 0.16.1 验证兼容)
  • 新增 scripts/replug.ps1:一键重新构建 + 重新接线 + 校验插件契约(身份 / patch / 客户端 id / loader 行名)

Install

dsh plugin --profile desktop add dsh-better-overleaf@0.2.1