Repository navigation
Releases: weibaohui/dsh-sync
Releases · weibaohui/dsh-sync
Release list
v0.4.8
0.4.8
修复六条问题链,核心是阻断性的「点保存提示成功,重启 dsh 后设置回到默认」。
0.4.3 — 保存后重启回默认(阻断性修复)
- 根因:可加载到的
@deepseek-ai/schemastery是 3.18.1,没有 3.18.4 才引入的.volatile(),导致Config = undefined,宿主ctx.settings.describe()不再列出 dsh-sync,PUT /settings走宿主通道抛No configurable plugin entry,异常被 catch 成一行 warn、接口仍返回 200 —— 设置只活在内存里,重启即丢。 - 修复:schemastery 移入 dependencies +
loadSchemastery()逐候选校验.volatile();Config永不为 undefined(自铸 Config 兜底);新增自持文件层~/.dsh/dsh-sync/settings.json(0600),保存即落盘,宿主写回失败也跨重启生效;新增GET /dsh-sync/api/diag排障端点,PUT 回传persist{fileOk,hostOk},UI 不再假装成功。
0.4.4 — 面板/状态层与保存语义
- 状态轮询失败不再静默(错误行 + 重试);用户编辑期间不再被轮询覆盖(
dirtyRef);token 显示「已配置」标记;新增「清空仓库地址」按钮。 - PUT 语义固定:
null= 显式清除(含clearedKeys墓碑层防复活),''= 保持不变(兼容旧客户端);响应回传applied/ignored/cleared/persist。
0.4.5 — 多托管方与泄露风险闸门
- 新增 GitHub / GitLab / Gitee 托管方(页面按钮组,默认 GitCode);provider 感知私仓校验,公共仓库一律拒绝保存;自建/未知主机返回
400 UNVERIFIED_REPO,用户显式确认风险后才放行。 - 非 GitCode 的 PR/conflict/prune 返回明确错误而非静默失败;askpass 用户名按 provider(GitHub
x-access-token)。
0.4.6 — Windows remote 镜像
- 修复「远端为准」策略下覆盖循环静默空转(git 路径引号转义致
startsWith恒 false):gitDiffNameStatus改-z解析 +normGitPath归一化。 - 修复镜像写入行尾不一致(autocrlf 把 LF 写成 CRLF):
shadowFileBuf改从git show HEAD:path取仓库原始字节。
0.4.7 — 浏览远端报 400
- 根因:浏览 ref(
refs/dshsync/browse)相对远端 main 常处于回退状态,refspec 无+时 git 以non-fast-forward拒绝。 - 修复:refspec 改为
+<branch>:refs/dshsync/browse(强制更新);客户端getJson失败时读响应体,不再只显示裸HTTP 400。
0.4.8 — 桌面版 AI 对齐 + 同步基线失效
- 桌面版 AI 智能对齐只报
fetch failed:apiproxy 基地址写死 3080,桌面宿主用随机端口 → 改用ctx.webServer.port。 - 远端 main 被改写后同步基线失效导致会话日志永久挂账:
resolveSyncBase()退化到merge-base,revalidatePendingBoth()自动销账失效挂账,runPush未合并出口restoreBaseline()。
离线测试 82 项全绿(macOS Node 22 真机复跑:82 pass / 0 fail / 0 skip,30s)。详细根因与验证见 #13。
v0.4.2 — 修复 Windows 路径转换导致 fetch failed (issue #10)
修复
Windows 下 AI 智能对齐/浏览远端报 fetch failed(issue #10)
根因是 Git for Windows 的 MSYS2 路径转换:在 Git Bash 里,传给原生 .exe 的参数会被重写,
目录名里的点被当成路径段拆开 —— C:\Users\x\.dsh\dsh-sync\repo 变成
C:\Users\x\dsh\dsh-sync\repo(点消失、多出一级),git 于是在不存在的目录里执行并报错。
这也解释了「手动在该目录里跑 git fetch 成功、插件却失败」。
官方定性为 wontfix:git-for-windows/git#685
两层防护
- host 侧:git 子进程在 Windows 下自动注入
MSYS_NO_PATHCONV=1+MSYS2_ARG_CONV_EXCL='*',
仅作用于该子进程,不写全局环境(全局设置会破坏其它程序,官方专门警告过)。 - AI 侧:三个 AI 提示词(冲突处理 / AI 智能对齐 / 远端对齐)加入 Windows 前置保险:
判定平台 → 路径自检 → 每条 git 命令前置开关 →rev-parse --show-toplevel验证目录真实可达后才动手;
验证失败立即停止并如实汇报,不允许据错误目录判定「无冲突/无需修改」。
验证
- 新增
test/win-pathconv.test.mjs(8 项契约测试) - 离线测试 60 项全绿(原 52 + 新 8)
请 Windows 用户更新验证
dsh plugin add @weibaohui/dsh-sync@0.4.2更新后重试「AI 智能对齐」/「浏览远端」。若仍报错,请在 issue #10 附上 uname -s 输出与
完整报错(GIT_TRACE=1 更佳),以便定位是否还有其它链路。
v0.4.1
安全修复(issue #9)
- AI agent 提示词不再携带 GitCode 访问令牌:需要凭据的 git 推送、PR 查询/合并收归 host 侧
prepareConflictTree/finalizeConflictBranch;agent 只做本地语义解冲突/合并,prompt 严禁一切网络操作。三个 AI 模板零凭据占位符(回归测试保障) conflictMode=manual关闭全部 AI 入口:/conflict/run、/align/run、/remote/align一律 403(原实现只约束自动触发路径)- git 子进程凭证改经
GIT_ASKPASSenv 注入:远端 URL 保持干净,argv 不再携带 token(ps全机可见),.git/config不落盘
真机/CI 测试发现并修复
- mergeable 竞态:GitCode 在 push 后异步重算 mergeable,推送前的陈旧
false不再一票否决(轮询 5×3s,参数可注入) - merge 身份依赖:
prepareConflictTree的 merge 显式内联-c user.name=dsh-sync,无全局 git 身份的环境(CI/新机器)不再 128 失败 - finalize push 补回 authEnv:resolve 后的推送经 GIT_ASKPASS 认证,不依赖本机 credential store
离线测试 52 项全绿(macOS + Linux CI);另在真实 GitCode 仓库完成 prepare→解冲突→finalize 全链路真机验证(凭证隔离模式,认证只走 askpass 一条通道)。
v0.4.0 — 多协议备份:WebDAV / 本地文件夹
多协议备份(WebDAV / 本地文件夹)+ 快照多协议通用上云 + ~/agents/skills 技能根。详见 README。
Full Changelog: v0.3.4...v0.4.0
v0.3.4
v0.3.3
v0.3.2
v0.3.1
0.3.0 — 远端备份浏览+选择性拉取+AI对齐+文件预览
Full Changelog: v0.2.3...v0.3.0