·
1 commit
to master
since this release
TidGi-Desktop v0.13.1 发布报告
发布日期:2026-06-12
基于标签:v0.13.0→v0.13.1-fix
改动范围:337 个文件变更,新增 21,569 行,删除 11,615 行
目录
- 重大变更与依赖升级
- MCP 服务器修复与增强
- Bug 修复
- E2E 测试与 CI 改进
- 杂项与文档
1. 重大变更与依赖升级
🔼 全量依赖升级 + Vite 8 / Rolldown 迁移 (#719)
一次性将几乎所有依赖升级到最新版本,并解决了大量兼容性问题:
| 类别 | 变更内容 |
|---|---|
| 构建系统 | Vite 8 + Rolldown 替换旧版 Vite,修复 ESM/CJS 互操作问题 |
| Electron | 升级至 Electron 41.7.1(Node.js 22),配合 better-sqlite3 原生模块 |
| Electron Forge | 升级至 v8 alpha,使用异步 hooks 和新版 packageAfterPrune 签名 |
| MUI | MUI v9 迁移:system-props → sx prop,Autocomplete freeSolo 改用 Enter 键处理 |
| TypeORM | v1.0 关系 API 迁移:string[] → 对象格式 {x: true} |
| inversify | v8:rebindSync → rebind |
| 核心输出格式 | 主进程改为 ESM 输出,修复 rotating-file-stream 类方法断裂 |
| date-fns | 3.6 → 4.4(大版本跳升) |
| default-gateway | 6.0 → 7.2(统一 API gateway4()) |
| electron-unhandled | 4.0 → 5.0(需 bridge 模块配合 dynamic import()) |
| 移除依赖 | 移除 moment.js、typescript-styled-is 等废弃库 |
🔒 安全漏洞修复 (#722)
- 修复
ini(CVE)和bl(CVE)两个 transitive 依赖的安全漏洞 - 通过
pnpm.overrides锁定ini@^1.3.8和bl@^4.1.0 - 更新
git-sync-js2.3.3 → 2.4.0(ESLint 10/TypeScript 6 兼容) - 更新
eslint-config-tidgi2.2.0 → 3.1.0(ESLint 10 迁移) - ESLint 启用
--max-warnings 0,消除所有 lint 警告
2. MCP 服务器修复与增强 (#723)
这是本版本最大的功能更新,对 MCP(Model Context Protocol)服务器进行了全面重构:
| 方面 | 变更 |
|---|---|
| 架构重构 | Schema-driven 开发工具设置,统一偏好设置页面 |
| 安全性 | ui_navigate 禁止操作 app 窗口目标;移除废弃的 --mcp-port/MCP_PORT CLI 绕过 |
| Token 认证 | 默认关闭 token 认证(mcpServerRequireToken: false),避免新用户被空 token 阻塞 |
| 打包修复 | 修复 packaged 应用中 @modelcontextprotocol/sdk 的 require() ESM 加载错误 |
| 启动健壮性 | EADDRINUSE 时清除 server handle 以便重试;端口范围验证 |
| CI 修复 | 非 Windows 平台跳过 registry-js(pnpmfile hook),添加 Linux lint 类型声明 |
| Git 修复 | CI 上使用 HTTPS 替代 SSH git 协议,修复 Windows runner 上的 pnpm 安装 |
3. Bug 修复
🖼️ 图片上下文菜单:复制图片到剪贴板 (#718)
- 右键图片可一键复制到剪贴板
🌀 子工作区休眠/唤醒同步 (#718)
- 子工作区的 UI 状态(侧栏图标灰色/恢复)与主工作区同步
- 应用启动时子工作区的休眠状态也会正确同步
📂 文件系统监听器:修复 .tid 文件格式保存错误 (#718)
关键修复 — 解决了 issue #669
- 文件监听器检测到变更后加载数据时,错误地使用 tiddler 的 content type(如
text/markdown)作为文件格式类型 - 导致后续保存时 TiddlyWiki 误用 JSON 格式而非
.tid格式保存 - 修复:使用
fileDescriptor.type(文件格式)而不是tiddler.type(内容类型) - 添加
inferFileTypeFromExtension()容错回退
🔧 动态 import() 替换为静态 import — 修复 Node.js 22 ESM 错误 (#718)
- Electron 41(Node.js 22)中,带路径别名(
@/、@services/)的动态import()在打包代码中运行时崩溃 - 将所有动态 import 转换为静态顶层 import(涉及 5 个核心文件 + 测试文件)
🪟 迷你窗口视图竞争条件修复 (#712)
- 首次创建路径正确处理 WebContentsView 创建
- 修复
addViewForAllBrowserViews中菜单栏窗口未就绪时的未捕获 rejection - 避免迷你窗口启动锁死锁
🔄 Git 操作修复 (#718)
- 死锁修复:
acquireOperationLock超时触发时不再永久锁定工作区 - 本地工作区隐藏"同步到远程"按钮和未推送图标
- 工作区休眠时跳过 git 操作
- 添加
try/catch包裹commitAndSync和forcePull的锁获取
📋 Git 日志修复 (#718)
- 本地工作区的
loadMore()正确应用守卫逻辑 - 为本地工作区添加同步设置标签页
🧩 其他修复
- 修复 E2E 拖拽(dnd)在 Windows CI 上的指针 Y 坐标问题(使用
activatorEvent.clientY + delta.y)
4. E2E 测试与 CI 改进
⏱️ E2E 校准系统 (#704, #723)
- 引入独立的校准运行机制(
test:e2e:calibrate),CI 在分片前运行一次 - 移除所有硬编码的超时回退值,全部从校准测量中获取
- 步骤超时 = 各类型(launch + wait + element)测量最大值的总和
- Log-marker 等待使用步骤超时预算(而非紧张的测量值)
- CI 上每个 OS 运行一次校准,上传 .calibration.json 工件
🔧 CI 工作流改进
- 修复
upload-artifactv4+ 跳过隐藏文件(dotfiles)的问题 - 修复 Linux 校准缺少 X display 的问题
- 添加 pre-push hook(husky),推送前自动运行
tsc + eslint FORCE_JAVASCRIPT_ACTIONS_TO_NODE24已移除(actions 将在 2026.09 前自然升级)
5. 杂项与文档
- README.zh-CN.md 更新
- macOS 终端命令:添加从终端移除 TidGi app quarantine 属性的命令说明
- 移除了废弃的 Analytics 披露弹窗 (#719)
- 修复 Tiddler 多轮 filter 污染:停止在 filter 字符串后追加
+[!is[system]],改用wiki.isSystemTiddler()后过滤
完整 PR 列表
| PR | 标题 | 类型 |
|---|---|---|
| #704 | Fix/misc bug1 | 修复 |
| #712 | Fix/mini window view race | 修复 |
| #718 | Fix/misc batch 2026 06 | 修复/功能 |
| #719 | chore: upgrade all deps to latest, fix ESM/CJS interop | 依赖升级 |
| #722 | chore(deps): fix security vulns | 安全修复 |
| #723 | Fix/mcp | 修复/重构 |
完整对比: v0.13.0...v0.13.1-fix
# TidGi-Desktop v0.13.1 Release Report
Release Date: 2026-06-12
Tag Range:v0.13.0→v0.13.1-fix
Scope: 337 files changed, 21,569 insertions, 11,615 deletions
Table of Contents
- Major Changes & Dependency Upgrades
- MCP Server Fixes & Enhancements
- Bug Fixes
- E2E Testing & CI Improvements
- Miscellaneous & Documentation
1. Major Changes & Dependency Upgrades
🔼 Full Dependency Upgrade + Vite 8 / Rolldown Migration (#719)
Upgraded nearly all dependencies to their latest versions, resolving numerous compatibility issues:
| Category | Changes |
|---|---|
| Build System | Vite 8 + Rolldown replaces legacy Vite; fixed ESM/CJS interop issues |
| Electron | Upgraded to Electron 41.7.1 (Node.js 22), compatible with better-sqlite3 native module |
| Electron Forge | Upgraded to v8 alpha with async hooks and new packageAfterPrune signature |
| MUI | MUI v9 migration: system-props → sx prop, Autocomplete freeSolo uses explicit Enter key handling |
| TypeORM | v1.0 relations API migration: string[] → object format {x: true} |
| inversify | v8: rebindSync → rebind |
| Main Process Output | Changed to ESM output to fix rotating-file-stream class method breakage |
| date-fns | 3.6 → 4.4 (major version jump) |
| default-gateway | 6.0 → 7.2 (unified gateway4() API) |
| electron-unhandled | 4.0 → 5.0 (requires bridge module with dynamic import()) |
| Removed Dependencies | Removed moment.js, typescript-styled-is, and other deprecated libraries |
🔒 Security Vulnerability Fixes (#722)
- Fixed security vulnerabilities in
ini(CVE) andbl(CVE) transitive dependencies - Pinned
ini@^1.3.8andbl@^4.1.0viapnpm.overrides - Updated
git-sync-js2.3.3 → 2.4.0 (ESLint 10/TypeScript 6 compatibility) - Updated
eslint-config-tidgi2.2.0 → 3.1.0 (ESLint 10 migration) - ESLint now enforces
--max-warnings 0, eliminating all lint warnings
2. MCP Server Fixes & Enhancements (#723)
This is the largest feature update in this release, with a comprehensive refactor of the MCP (Model Context Protocol) server:
| Area | Changes |
|---|---|
| Architecture | Schema-driven developer tools settings, unified preferences pages |
| Security | ui_navigate blocked on app window targets; removed deprecated --mcp-port/MCP_PORT CLI bypass |
| Token Auth | Default token authentication disabled (mcpServerRequireToken: false) to avoid blocking new users |
| Packaging Fix | Fixed require() ESM loading error for @modelcontextprotocol/sdk in packaged app |
| Startup Robustness | Clears server handle on EADDRINUSE for retry capability; port range validation |
| CI Fixes | Skip registry-js on non-Windows platforms; added Linux lint type declarations |
| Git Fixes | Use HTTPS instead of SSH git protocol on CI; fixed pnpm installation on Windows runners |
3. Bug Fixes
🖼️ Image Context Menu: Copy Image to Clipboard (#718)
- Right-click images to copy directly to clipboard
🌀 Sub-Workspace Hibernate/Wake Sync (#718)
- Sub-workspace UI state (sidebar icons gray/restored) now syncs with the main workspace
- Sub-workspace hibernation state is correctly synced on app startup
📂 FileSystemWatcher: Fix .tid File Format Corruption (#718)
Critical Fix — resolves issue #669
- The file watcher was incorrectly using the tiddler's content type (e.g.,
text/markdown) as the file format type when loading changed data - This caused subsequent saves to use JSON format instead of the correct
.tidformat - Fix: uses
fileDescriptor.type(file format) instead oftiddler.type(content type) - Added
inferFileTypeFromExtension()fallback for robustness
🔧 Dynamic import() Replaced with Static Imports — Fix Node.js 22 ESM Error (#718)
- In Electron 41 (Node.js 22), dynamic
import()with path aliases (@/,@services/) crashes at runtime in bundled code - Converted all dynamic imports to static top-level imports (5 core files + test files)
🪟 Mini Window View Race Condition Fix (#712)
- First-creation path now correctly handles WebContentsView creation
- Fixed unhandled rejection in
addViewForAllBrowserViewswhen menubar window is not ready - Avoided mini window startup lock deadlock
🔄 Git Operations Fixes (#718)
- Deadlock Fix:
acquireOperationLockno longer permanently locks the workspace on timeout - Local workspaces now hide the "sync-to-remote" button and unpushed icon
- Git operations are skipped when workspace is hibernated
- Added
try/catchwrappingcommitAndSyncandforcePulllock acquisition
📋 Git Log Fixes (#718)
loadMore()correctly applies local-workspace guard logic- Added sync settings tab for local workspaces
🧩 Other Fixes
- Fixed E2E drag-and-drop pointer Y coordinate issue on Windows CI (uses
activatorEvent.clientY + delta.y)
4. E2E Testing & CI Improvements
⏱️ E2E Calibration System (#704, #723)
- Introduced independent calibration run (
test:e2e:calibrate), executed once per OS on CI before sharding - Removed all hardcoded fallback timeout values; all timeouts come exclusively from calibration measurements
- Step timeout = sum of measured per-type maxima (launch + wait + element)
- Log-marker waits use the generous step timeout budget (instead of tight measured values)
- Calibration runs on each OS, uploading .calibration.json as CI artifact
🔧 CI Workflow Improvements
- Fixed
upload-artifactv4+ skipping hidden files (dotfiles) - Fixed Linux calibration missing X display
- Added pre-push hook (husky) that automatically runs
tsc + eslintbeforegit push - Removed
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24(actions will naturally upgrade by September 2026)
5. Miscellaneous & Documentation
- README.zh-CN.md updated
- macOS Terminal Command: Added instructions to remove quarantine attribute from TidGi app via terminal
- Removed deprecated Analytics disclosure dialog (#719)
- Fixed tiddler multi-run filter corruption: Stopped appending
+[!is[system]]to filter strings; useswiki.isSystemTiddler()for post-filtering instead
Complete PR List
| PR | Title | Type |
|---|---|---|
| #704 | Fix/misc bug1 | Fix |
| #712 | Fix/mini window view race | Fix |
| #718 | Fix/misc batch 2026 06 | Fix/Feature |
| #719 | chore: upgrade all deps to latest, fix ESM/CJS interop | Dependency Upgrade |
| #722 | chore(deps): fix security vulns | Security Fix |
| #723 | Fix/mcp | Fix/Refactor |
Full Changelog: v0.13.0...v0.13.1-fix