dsh-home-sync 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # dsh-home-sync
1
+ # dsh-home-sync
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/dsh-home-sync)](https://www.npmjs.com/package/dsh-home-sync)
4
4
  [![GitHub](https://img.shields.io/badge/GitHub-OverDustD7%2Fdsh--home--sync-24292e)](https://github.com/OverDustD7/dsh-home-sync)
5
5
 
6
- English | [绠€浣撲腑鏂嘳(README.zh-CN.md)
6
+ English | [简体中文](README.zh-CN.md)
7
7
 
8
8
  Git-based sync for DSH configuration and Mnemon memory plugin data, with automatic two-way sync, cross-device migration, initialization backups, conflict detection, and a web UI.
9
9
 
@@ -44,13 +44,13 @@ A `link:` installation reads that source directory directly: restart DSH web aft
44
44
  Build a tarball and copy it to the target machine:
45
45
 
46
46
  ```powershell
47
- npm pack --ignore-scripts --pack-destination dist
47
+ npm pack --pack-destination dist
48
48
  ```
49
49
 
50
50
  On the target, run the following from the directory containing the archive:
51
51
 
52
52
  ```powershell
53
- dsh plugin --profile web add ./dsh-home-sync-0.2.2.tgz
53
+ dsh plugin --profile web add ./dsh-home-sync-0.2.3.tgz
54
54
  ```
55
55
 
56
56
  If the package manager cannot install a local tarball, extract it into a permanent directory and install the extracted `package` subdirectory using `link:`. Do not use a temporary extraction directory as a permanent link target.
@@ -116,7 +116,7 @@ Configuration is stored at `<DSH_HOME>/dsh-home-sync.json`.
116
116
  | `autoPullOnStartup` | Pull when the plugin starts |
117
117
  | `autoSync` | Run periodic full synchronization |
118
118
  | `syncIntervalSeconds` | Integer from 15 to 86,400 |
119
- | `commitMessage` | Commit message, 1鈥?,000 characters |
119
+ | `commitMessage` | Commit message, 1–1,000 characters |
120
120
  | `sshBatch` | Use SSH batch mode |
121
121
 
122
122
  The legacy `autoSyncOnStartup` setting migrates to `autoSync`. If both are present, `autoSync` takes precedence.
@@ -132,6 +132,8 @@ npm run check
132
132
  npm test
133
133
  ```
134
134
 
135
+ Save documentation as UTF-8. When editing it with scripts, specify UTF-8 for both reading and writing; do not rely on a system code page. `npm run check:docs` validates the README text and language links, and runs as part of `npm run check` and the normal npm packaging lifecycle. Avoid `--ignore-scripts` when packing, because it skips this check.
136
+
135
137
  Tests use system temporary directories, synthetic files, and local Git remotes. They do not access your real DSH home or accounts. Test repositories are retained in temporary directories for diagnosis.
136
138
 
137
139
  Browser tests use a separate temporary Chrome/Edge profile and are skipped if no supported browser is found. Set `CHROME_PATH` to select a browser. Restricted environments may require running browser tests with normal user permissions.
package/README.zh-CN.md CHANGED
@@ -1,81 +1,130 @@
1
- # dsh-home-sync
1
+ # dsh-home-sync
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/dsh-home-sync)](https://www.npmjs.com/package/dsh-home-sync)
4
4
  [![GitHub](https://img.shields.io/badge/GitHub-OverDustD7%2Fdsh--home--sync-24292e)](https://github.com/OverDustD7/dsh-home-sync)
5
5
 
6
- [English](README.md) | 绠€浣撲腑鏂?
7
- DSH 閰嶇疆涓?Mnemon 璁板繂鎻掍欢鏁版嵁鐨?Git 鍚屾宸ュ叿锛屾敮鎸佽嚜鍔ㄥ弻鍚戝悓姝ャ€佽法璁惧杩佺Щ銆佸垵濮嬪寲澶囦唤銆佸啿绐佹娴嬪拰 Web 鍙鍖栫鐞嗐€?.2.1 琛ラ綈缁存姢寤鸿锛屽苟淇澶嶅鍙戠幇鐨勫巻鍙叉鏌ャ€佸垵濮嬪寲鍜岀姸鎬佹樉绀洪仐婕忋€?
8
- 闇€瑕?Node.js 20 鎴栨洿鏂扮増鏈€丟it锛屼互鍙婃彁渚?`webServer`銆乣timer`銆乣connection.requestRejection` 鐨?DSH 瀹夸富銆傛湰鏈哄吋瀹规€ч獙璇佷娇鐢?DSH 0.1.2-rc.1銆丯ode 24.20.0銆丟it 2.55.0.windows.4銆?
9
- ## 瀹夎涓庣敓鏁?
10
- ### 浠?npm 瀹夎锛堟帹鑽愶級
6
+ [English](README.md) | 简体中文
7
+
8
+ DSH 配置与 Mnemon 记忆插件数据的 Git 同步工具,支持自动双向同步、跨设备迁移、初始化备份、冲突检测和 Web 可视化管理。0.2.1 补齐维护建议,并修复复审发现的历史检查、初始化和状态显示遗漏。
9
+
10
+ 需要 Node.js 20 或更新版本、Git,以及提供 `webServer`、`timer`、`connection.requestRejection` 的 DSH 宿主。本机兼容性验证使用 DSH 0.1.2-rc.1、Node 24.20.0、Git 2.55.0.windows.4。
11
+
12
+ ## 安装与生效
13
+
14
+ ### 从 npm 安装(推荐)
11
15
 
12
16
  ```powershell
13
17
  dsh plugin --profile web add dsh-home-sync
14
18
  ```
15
19
 
16
- 瑁呭畬閲嶅惎 DSH web锛屽埛鏂版祻瑙堝櫒鍔犺浇鐣岄潰銆傚凡鍙戝竷鍖呮棤闇€鏋勫缓鎴栫涓夋柟渚濊禆銆?
17
- ### 浠?GitHub 瀹夎
20
+ 装完重启 DSH web,刷新浏览器加载界面。已发布包无需构建或第三方依赖。
21
+
22
+ ### 从 GitHub 安装
18
23
 
19
24
  ```powershell
20
25
  dsh plugin --profile web add github:OverDustD7/dsh-home-sync
21
26
  ```
22
27
 
23
- ### 鏈湴寮€鍙戯紙浠庢簮鐮侊級
28
+ ### 本地开发(从源码)
24
29
 
25
30
  ```powershell
26
31
  dsh plugin --profile web add link:D:/Project/DSH/dsh-home-sync
27
32
  ```
28
33
 
29
- `link:` 瀹夎鐩存帴璇诲彇璇ユ簮鐮佺洰褰曪細鍚庣鏀瑰姩鍚庨噸鍚?DSH web锛岀晫闈㈡敼鍔ㄥ埛鏂版祻瑙堝櫒鍗冲彲銆?
30
- ### 绂荤嚎/闅旂缃戠粶璁惧
34
+ `link:` 安装直接读取该源码目录:后端改动后重启 DSH web,界面改动刷新浏览器即可。
35
+
36
+ ### 离线/隔离网络设备
37
+
38
+ 先本地生成安装包再拷到目标机:
31
39
 
32
- 鍏堟湰鍦扮敓鎴愬畨瑁呭寘鍐嶆嫹鍒扮洰鏍囨満锛?
33
40
  ```powershell
34
- npm pack --ignore-scripts --pack-destination dist
41
+ npm pack --pack-destination dist
35
42
  ```
36
43
 
37
- 鐩爣鏈哄湪鍘嬬缉鍖呮墍鍦ㄧ洰褰曟墽琛岋細
44
+ 目标机在压缩包所在目录执行:
38
45
 
39
46
  ```powershell
40
- dsh plugin --profile web add ./dsh-home-sync-0.2.2.tgz
47
+ dsh plugin --profile web add ./dsh-home-sync-0.2.3.tgz
41
48
  ```
42
49
 
43
- 鑻ョ洰鏍囨満鍣ㄧ殑鍖呯鐞嗗櫒鏃犳硶浣跨敤鏈湴 tarball锛屽彲鎶婂寘瑙e帇鍒颁换鎰忔寔涔呯洰褰曪紝鍐嶅皢璇ョ洰褰曚腑鐨?`package` 瀛愮洰褰曚互 `link:` 瀹夎锛涢伩鍏嶆妸涓存椂瑙e帇鐩綍浣滀负闀挎湡閾炬帴鐩爣銆?
44
- ## 鍚屾琛屼负
45
-
46
- - 鈥滄媺鍙栤€濇鏌ヨ繙绔苟灏濊瘯蹇繘锛岄亣鍒板垎鍙夋垨鍙兘瑕嗙洊鏈湴淇敼鏃跺け璐ワ紝涓嶄細鍒涘缓鏈湴鎻愪氦銆傛樉寮忕鐢?`merge.autoStash`锛岄伩鍏嶈嚜鍔ㄦ仮澶嶆殏瀛樻椂鍙戠敓鍐茬獊鍗磋鎶ユ垚鍔燂紱鍚堝苟缁撴潫杩樹細妫€鏌ユ湭瑙e喅鐨勭储寮曞啿绐併€?- 鈥滃悓姝ュ埌杩滅鈥濆厛 fetch 骞舵鏌ユ枃浠惰寖鍥达紝鍐嶆彁浜ゅ厑璁稿悓姝ョ殑淇敼銆佹暣鍚堣繙绔紝鏈€鍚庢帹閫併€傚伐浣滃尯骞插噣鏃朵粛浼氶噸璇曞皻鏈笂浼犵殑鎻愪氦銆?- 鑷姩鍚屾鎸夐棿闅旀墽琛屽畬鏁村悓姝ワ紝鏈湴娌℃湁鍙樺寲鏃朵篃浼氭鏌ヨ繙绔€備繚瀛樺紑鍏冲拰闂撮殧鍚庣珛鍗抽噸寤轰换鍔★紱鎿嶄綔姝e湪鎵ц鏃讹紝璁剧疆淇濆瓨鍜屽叾浠栧啓璇锋眰杩斿洖蹇欑锛岃寰呭叾缁撴潫鍚庨噸璇曘€?- 褰撳墠鍒嗘敮蹇呴』涓庤缃腑鐨勫垎鏀竴鑷淬€傚垎鏀垎鍙夊彲浠ュ皾璇曟櫘閫?Git 鍚堝苟锛涘悓涓€鍐呭鍐茬獊鏃跺仠姝㈡帹閫併€佹挙閿€姝ゆ鏈畬鎴愬悎骞跺苟淇濈暀鏈湴鎻愪氦銆傞渶鎵嬪姩瑙e喅 Git 鍐茬獊鍚庨噸璇曪紝涓嶄細鑷姩 force push銆?- 鐘舵€佸尯姣?15 绉掑埛鏂帮紝鍖哄垎寰呮彁浜ゃ€佸緟鎺ㄩ€併€佸緟鎷夊彇鍜岃鍙栧け璐ワ紝鏂板鐩綍鎸夊疄闄呮枃浠惰鏁般€傞鍏?钀藉悗鏁伴噺浠ユ渶杩戞垚鍔?fetch 鐨勮繙绔揩鐓т负鍑嗐€?- 鎿嶄綔鍙嶉浣跨敤 toast锛涢潰鏉垮簳閮ㄢ€滄搷浣滆褰曗€濋粯璁ゆ姌鍙狅紝鎸夐渶灞曞紑鏌ョ湅銆侀€夋嫨骞跺鍒跺浠借矾寰勫拰鎭㈠鎸囧紩銆傛渶杩?100 鏉″悗鍙?鎵嬪姩鎿嶄綔璁板綍淇濆瓨鍦ㄤ富鐩綍鏃佺殑 `<DSH_HOME>.home-sync-history.json`锛岄噸鍚悗浠嶅彲鏌ヨ锛屼笉鍙備笌 Git 鍚屾銆傝褰曞寘鍚搷浣滅粨鏋溿€佹椂闂村拰澶囦唤璺緞锛屼笉璁板綍鏂囦欢姝f枃銆傝褰曟枃浠舵崯鍧忔椂淇濈暀鍘熸枃浠跺苟鎶ュ憡閿欒锛涜褰曞啓鍏ュけ璐ヤ笉浼氭挙閿€宸茬粡鎴愬姛鐨勫悓姝ャ€?- 鎵撳紑鐨勯潰鏉夸笌娴姩鎸夐挳闅忓涓诲拰绯荤粺涓婚鍙樺寲閲嶆柊閰嶈壊锛屼繚鐣欏綋鍓嶈緭鍏ュ強灞曞紑鐘舵€併€?
47
- 鎵€鏈?HTTP 鏁版嵁鎺ュ彛閮戒娇鐢ㄥ涓荤殑韬唤鍜?Host/Origin 鏍¢獙锛涚己灏戞鏈嶅姟鏃舵彃浠朵笉鍚敤銆侾OST 鍙帴鍙?JSON銆傜晫闈㈣剼鏈湰韬笉鍚敤鎴锋暟鎹€?
48
- ## 鍏佽鍚屾鐨勬枃浠?
49
- - `.gitignore`銆乣settings.yaml`銆佹牴鐩綍 `cordis.patch.yml`銆?- `profiles/web/` 涓嬬殑 `package.json`銆乣pnpm-lock.yaml`銆乣pnpm-workspace.yaml`銆乣cordis.yml`銆乣cordis.patch.yml`銆乣.dsh-market/state.json`銆?- `mnemon/` 涓嬮潪闅愯棌鏂囦欢锛屼絾鎺掗櫎鍚嶇О涓?data銆乻tate銆乧redential(s)銆乻ecret(s) 鐨勮矾寰勬锛屼互鍙?`.log`銆乣.wal`銆乣.shm` 鏂囦欢銆?
50
- 鍑嵁銆佷細璇濄€侀檮浠躲€乶ode_modules 绛変笉鍔犲叆鎻愪氦銆傚凡鏆傚瓨鎴栧凡璺熻釜鐨勭姝㈡枃浠朵細闃绘鍚屾锛涙帹閫佸墠妫€鏌?HEAD 鐨勫畬鏁村彲杈惧巻鍙诧紙鏈€澶?1000 涓彁浜わ級锛屼笉浠ユ媺鍙栦粨搴撳凡鏈夊巻鍙蹭綔涓哄厤妫€鑼冨洿锛屽洜姝ゆ媺鍙?鎺ㄩ€佸湴鍧€涓嶅悓鎴栧涓帹閫佸湴鍧€鍚屾牱鍙椾繚鎶ゃ€傚巻鍙蹭腑鏇惧嚭鐜扮姝㈡枃浠舵椂鍋滄鍙戝竷锛屽嵆浣胯鏂囦欢宸茶鍒犻櫎锛涜秴杩囨鏌ヤ笂闄愰渶鍏堜汉宸ユ暣鐞嗕负骞插噣鍚屾鍘嗗彶銆傛帹閫佸彧鏇存柊鎵€閫夊垎鏀紝涓嶈嚜鍔ㄨ窡闅忔爣绛炬垨闀滃儚鍏朵粬寮曠敤銆傚涓洰鏍囩殑缃戠粶鎺ㄩ€佷笉鍏峰璺ㄤ粨搴撲簨鍔℃€э紝閮ㄥ垎澶辫触鏃堕渶閲嶈瘯銆傚厑璁告枃浠跺唴閮ㄧ殑鏂囨湰涓嶅仛瀛楁绾ц劚鏁忥紝鍥犳涓嶈鍦ㄥ厑璁稿悓姝ョ殑閰嶇疆鎴栬蹇嗛噷淇濆瓨涓嶅笇鏈涗笂浼犵殑鍐呭銆?
51
- 鍙帴鍙楁櫘閫氭枃浠躲€傜鍙烽摼鎺ャ€佺‖閾炬帴銆佸瓙妯″潡銆佽秺鐣岃矾寰勩€乄indows 淇濈暀鍚嶇О鍜屽ぇ灏忓啓鍐茬獊浼氳鎷掔粷銆侴it hooks 鍜屾彁浜ょ鍚嶄粛閬靛惊鐢ㄦ埛鑷繁鐨?Git 閰嶇疆锛汫it 瀛愯繘绋嬭缃簡瓒呮椂鍙婇潪浜や簰鍑嵁妯″紡銆?
52
- ## 璁惧鍒濆鍖栦笌鎭㈠
53
-
54
- 涓ょ鍒濆鍖栨ā寮忛兘浼氬浠姐€俙merge` 琛ㄧず澶囦唤鍚庨渶瑕佹墜鍔ㄥ悎骞讹紝骞朵笉琛ㄧず鑷姩鎶婁袱浠借蹇嗗悎骞躲€?
55
- 1. 浠庤繙绔姄鍙栧埌鐙珛涓存椂浠撳簱锛屾鏌ユ墍鏈夌洰鏍囪矾寰勫拰鏂囦欢绫诲瀷銆?2. 妫€鏌ユ湰鏈虹鎾烇紝澶囦唤鎵€鏈夊彲鑳借鐩?鍒犻櫎鐨勬枃浠躲€佸師 Git 鍏冩暟鎹拰鎻掍欢閰嶇疆銆?3. 楠岃瘉澶囦唤鏈熼棿鏈湴鏂囦欢娌℃湁鍙樺寲锛屽啀搴旂敤鍏佽鐨勬枃浠跺苟璁剧疆鐩爣鍒嗘敮銆乷rigin銆乽pstream銆?4. 鎴愬姛鍚庢殏鍋滆嚜鍔ㄥ悓姝ヤ笌鍚姩鎷夊彇锛岀瓑寰呯敤鎴锋牳瀵广€佹墜鍔ㄥ悎骞跺強閲嶆柊寮€鍚€?
56
- 鏀寔鍏ㄦ柊鐩綍銆佸凡鎵ц `git init` 浣嗗皻鏈娆℃彁浜ょ殑鐙珛浠撳簱锛屼互鍙婂啀娆″垵濮嬪寲鍒板巻鍙蹭笉鐩稿叧鐨勮繙绔€傛垚鍔熷搷搴旇繑鍥炲疄闄呴厤缃紝鐣岄潰绔嬪嵆鍒锋柊鑷姩寮€鍏筹紱鍒濆鍖栬涓烘樉寮忛噸缃缃紝褰撳墠琛ㄥ崟浠ユ湇鍔$閰嶇疆涓哄噯銆?
57
- 澶囦唤浣嶄簬 DSH_HOME 鏃佽竟鐨?`<DSH_HOME>.home-sync-backups/init-*`锛屼笉鍦ㄨ鍚屾鐨勫伐浣滃尯鍐呫€傞粯璁や富鐩綍鏃剁被浼?`~/.dsh.home-sync-backups/init-*`銆?
58
- - `files/`锛氬師鏂囦欢銆?- `repository/`锛氬師 `.git`锛屽寘鍚湰鍦板巻鍙层€佺储寮曞拰杩滅閰嶇疆銆?- `config.json`锛氬師鎻掍欢閰嶇疆锛堝師鍏堝瓨鍦ㄦ椂锛夈€?- `manifest.json`锛氱洰鏍囥€侀樁娈点€佸師鏂囦欢瀛樺湪鐘舵€佸拰鏍¢獙鍊笺€?- `MERGE.md`锛氭仮澶嶈鏄庛€?
59
- 鍙崟鑾风殑鎵ц閿欒浼氬皾璇曡嚜鍔ㄦ仮澶嶃€傛柇鐢垫垨寮哄埗缁撴潫杩涚▼涓嶈兘淇濊瘉鑷姩鎭㈠锛氬厛鍋滄 DSH锛屼緷鎹?manifest 鎭㈠ files锛屽皢 repository 鎭㈠涓?`.git`锛屾仮澶嶅師閰嶇疆锛屽苟绉婚櫎娓呭崟涓師鍏堜笉瀛樺湪鐨勬柊鏂囦欢銆備笉瑕佸湪 DSH 姝e啓鍏ヨ蹇嗘椂鎵ц鎭㈠銆侴it worktree 鎴栭摼鎺?`.git` 鐨勫垵濮嬪寲鐩墠浼氭槑纭嫆缁濄€?
60
- 鍒濆鍖栨湡闂翠粛闇€閬垮厤鍏朵粬绋嬪簭鍐欏叆鍚屾鏂囦欢锛涙彃浠堕攣鍙崗璋冩湰鎻掍欢瀹炰緥锛屼笉鑳芥殏鍋滃叾浠栨彃浠舵垨浜哄伐 Git 鎿嶄綔銆?
61
- ## 閰嶇疆涓庤繍琛岄攣
62
-
63
- 閰嶇疆浣嶄簬 `<DSH_HOME>/dsh-home-sync.json`锛屾敮鎸侊細branch銆乤utoPullOnStartup銆乤utoSync銆乻yncIntervalSeconds锛?5鈥?6400锛夈€乧ommitMessage锛?鈥?000 瀛楃锛夈€乻shBatch銆傛棫 autoSyncOnStartup 浼氳縼绉讳负 autoSync锛涘悓鏃跺瓨鍦ㄦ椂浠?autoSync 涓哄噯銆?
64
- 鎹熷潖閰嶇疆涓嶄細閫€鍥炲苟寮€鍚粯璁よ嚜鍔ㄤ换鍔°€傞渶淇鎴栨仮澶嶆 JSON 鍚庨噸鍚?DSH銆傚啓鍏ラ€氳繃涓存椂鏂囦欢鍚屾钀界洏鍚庢浛鎹紝鍒濆鍖栧彟澶栦繚鐣欓厤缃浠姐€?
65
- 璺ㄨ繘绋嬮攣鐩綍涓?`<DSH_HOME>.home-sync-lock`銆傚紓甯搁€€鍑哄彲鑳界暀涓嬮攣锛涚‘璁ゆ病鏈?DSH 鍚屾浠诲姟杩愯鍚庯紝鎵嶅彲绉婚櫎杩欎釜閿佺洰褰曘€傛湭瀹屾垚鐨勫垵濮嬪寲搴斿厛鎸夊浠芥仮澶嶃€?
66
- ## 楠岃瘉
50
+ 若目标机器的包管理器无法使用本地 tarball,可把包解压到任意持久目录,再将该目录中的 `package` 子目录以 `link:` 安装;避免把临时解压目录作为长期链接目标。
51
+
52
+ ## 同步行为
53
+
54
+ - “拉取”检查远端并尝试快进,遇到分叉或可能覆盖本地修改时失败,不会创建本地提交。显式禁用 `merge.autoStash`,避免自动恢复暂存时发生冲突却误报成功;合并结束还会检查未解决的索引冲突。
55
+ - “同步到远端”先 fetch 并检查文件范围,再提交允许同步的修改、整合远端,最后推送。工作区干净时仍会重试尚未上传的提交。
56
+ - 自动同步按间隔执行完整同步,本地没有变化时也会检查远端。保存开关和间隔后立即重建任务;操作正在执行时,设置保存和其他写请求返回忙碌,请待其结束后重试。
57
+ - 当前分支必须与设置中的分支一致。分支分叉可以尝试普通 Git 合并;同一内容冲突时停止推送、撤销此次未完成合并并保留本地提交。需手动解决 Git 冲突后重试,不会自动 force push。
58
+ - 状态区每 15 秒刷新,区分待提交、待推送、待拉取和读取失败,新增目录按实际文件计数。领先/落后数量以最近成功 fetch 的远端快照为准。
59
+ - 操作反馈使用 toast;面板底部“操作记录”默认折叠,按需展开查看、选择并复制备份路径和恢复指引。最近 100 条后台/手动操作记录保存在主目录旁的 `<DSH_HOME>.home-sync-history.json`,重启后仍可查询,不参与 Git 同步。记录包含操作结果、时间和备份路径,不记录文件正文。记录文件损坏时保留原文件并报告错误;记录写入失败不会撤销已经成功的同步。
60
+ - 打开的面板与浮动按钮随宿主和系统主题变化重新配色,保留当前输入及展开状态。
61
+
62
+ 所有 HTTP 数据接口都使用宿主的身份和 Host/Origin 校验;缺少此服务时插件不启用。POST 只接受 JSON。界面脚本本身不含用户数据。
63
+
64
+ ## 允许同步的文件
65
+
66
+ - `.gitignore`、`settings.yaml`、根目录 `cordis.patch.yml`。
67
+ - `profiles/web/` 下的 `package.json`、`pnpm-lock.yaml`、`pnpm-workspace.yaml`、`cordis.yml`、`cordis.patch.yml`、`.dsh-market/state.json`。
68
+ - `mnemon/` 下非隐藏文件,但排除名称为 data、state、credential(s)、secret(s) 的路径段,以及 `.log`、`.wal`、`.shm` 文件。
69
+
70
+ 凭据、会话、附件、node_modules 等不加入提交。已暂存或已跟踪的禁止文件会阻止同步;推送前检查 HEAD 的完整可达历史(最多 1000 个提交),不以拉取仓库已有历史作为免检范围,因此拉取/推送地址不同或多个推送地址同样受保护。历史中曾出现禁止文件时停止发布,即使该文件已被删除;超过检查上限需先人工整理为干净同步历史。推送只更新所选分支,不自动跟随标签或镜像其他引用。多个目标的网络推送不具备跨仓库事务性,部分失败时需重试。允许文件内部的文本不做字段级脱敏,因此不要在允许同步的配置或记忆里保存不希望上传的内容。
71
+
72
+ 只接受普通文件。符号链接、硬链接、子模块、越界路径、Windows 保留名称和大小写冲突会被拒绝。Git hooks 和提交签名仍遵循用户自己的 Git 配置;Git 子进程设置了超时及非交互凭据模式。
73
+
74
+ ## 设备初始化与恢复
75
+
76
+ 两种初始化模式都会备份。`merge` 表示备份后需要手动合并,并不表示自动把两份记忆合并。
77
+
78
+ 1. 从远端抓取到独立临时仓库,检查所有目标路径和文件类型。
79
+ 2. 检查本机碰撞,备份所有可能覆盖/删除的文件、原 Git 元数据和插件配置。
80
+ 3. 验证备份期间本地文件没有变化,再应用允许的文件并设置目标分支、origin、upstream。
81
+ 4. 成功后暂停自动同步与启动拉取,等待用户核对、手动合并及重新开启。
82
+
83
+ 支持全新目录、已执行 `git init` 但尚未首次提交的独立仓库,以及再次初始化到历史不相关的远端。成功响应返回实际配置,界面立即刷新自动开关;初始化视为显式重置设置,当前表单以服务端配置为准。
84
+
85
+ 备份位于 DSH_HOME 旁边的 `<DSH_HOME>.home-sync-backups/init-*`,不在被同步的工作区内。默认主目录时类似 `~/.dsh.home-sync-backups/init-*`。
86
+
87
+ - `files/`:原文件。
88
+ - `repository/`:原 `.git`,包含本地历史、索引和远端配置。
89
+ - `config.json`:原插件配置(原先存在时)。
90
+ - `manifest.json`:目标、阶段、原文件存在状态和校验值。
91
+ - `MERGE.md`:恢复说明。
92
+
93
+ 可捕获的执行错误会尝试自动恢复。断电或强制结束进程不能保证自动恢复:先停止 DSH,依据 manifest 恢复 files,将 repository 恢复为 `.git`,恢复原配置,并移除清单中原先不存在的新文件。不要在 DSH 正写入记忆时执行恢复。Git worktree 或链接 `.git` 的初始化目前会明确拒绝。
94
+
95
+ 初始化期间仍需避免其他程序写入同步文件;插件锁只协调本插件实例,不能暂停其他插件或人工 Git 操作。
96
+
97
+ ## 配置与运行锁
98
+
99
+ 配置位于 `<DSH_HOME>/dsh-home-sync.json`,支持:branch、autoPullOnStartup、autoSync、syncIntervalSeconds(15–86400)、commitMessage(1–1000 字符)、sshBatch。旧 autoSyncOnStartup 会迁移为 autoSync;同时存在时以 autoSync 为准。
100
+
101
+ 损坏配置不会退回并开启默认自动任务。需修复或恢复此 JSON 后重启 DSH。写入通过临时文件同步落盘后替换,初始化另外保留配置备份。
102
+
103
+ 跨进程锁目录为 `<DSH_HOME>.home-sync-lock`。异常退出可能留下锁;确认没有 DSH 同步任务运行后,才可移除这个锁目录。未完成的初始化应先按备份恢复。
104
+
105
+ ## 验证
67
106
 
68
107
  ```powershell
69
108
  npm run check
70
109
  npm test
71
110
  ```
72
111
 
73
- 娴嬭瘯浣跨敤绯荤粺涓存椂鐩綍銆佽櫄鏋勬枃浠朵笌鏈湴 Git 杩滅锛屼笉璁块棶鐪熷疄 DSH 涓荤洰褰曟垨鐪熷疄璐﹀彿銆傛祴璇曚粨搴撲繚鐣欏湪绯荤粺涓存椂鐩綍渚夸簬璇婃柇銆?
74
- 娴忚鍣ㄦ祴璇曚娇鐢ㄧ嫭绔嬩复鏃?Chrome/Edge 閰嶇疆锛涙病鏈夋祻瑙堝櫒鏃惰烦杩囷紝鍙€氳繃 `CHROME_PATH` 鎸囧畾銆傚彈闄愮幆澧冨彲鑳介渶瑕佸湪姝e父鐢ㄦ埛鏉冮檺涓嬭繍琛屾祻瑙堝櫒娴嬭瘯銆傚涓诲吋瀹规€ф祴璇曞彲鐢?`DSH_HOST_MODULES` 鎸囧悜宸插畨瑁?DSH 鐨?`node_modules/@deepseek-ai`锛屾湭鎵惧埌鏃惰烦杩囷紱姝ゆ祴璇曞鐢ㄧ湡瀹炲涓昏矾鐢变笌鏉ユ簮鏍¢獙鏂规硶锛岃韩浠?Cookie 楠岃瘉浣跨敤铏氭瀯瀹炵幇銆?
75
- 寮€鍙戜笌瀹¤鏂囨。锛堟鏌?淇/澶嶆牳鎶ュ憡鍙?`audit/` 璇佹嵁锛変负鏈湴鍐呴儴璧勬枡锛屼笉闅忔湰浠撳簱鍒嗗彂锛沗test/` 涓?`npm test` 鏄叕寮€鍙鐜扮殑楠岃瘉鍏ュ彛銆?
76
- ## 鍘嗗彶澶嶆牳璁板綍锛?026-09-07锛屽凡琚悗缁瀹¤ˉ鍏咃級
112
+ 文档统一保存为 UTF-8。使用脚本修改时,读取和写入都应显式指定 UTF-8,不能依赖系统默认代码页。`npm run check:docs` 检查 README 正文和语言链接,并已接入 `npm run check` 与正常 npm 打包流程;打包时不要使用 `--ignore-scripts`,否则会跳过该检查。
113
+
114
+ 测试使用系统临时目录、虚构文件与本地 Git 远端,不访问真实 DSH 主目录或真实账号。测试仓库保留在系统临时目录便于诊断。
115
+
116
+ 浏览器测试使用独立临时 Chrome/Edge 配置;没有浏览器时跳过,可通过 `CHROME_PATH` 指定。受限环境可能需要在正常用户权限下运行浏览器测试。宿主兼容性测试可用 `DSH_HOST_MODULES` 指向已安装 DSH 的 `node_modules/@deepseek-ai`,未找到时跳过;此测试复用真实宿主路由与来源校验方法,身份 Cookie 验证使用虚构实现。
117
+
118
+ 开发与审计文档(检查/修复/复核报告及 `audit/` 证据)为本地内部资料,不随本仓库分发;`test/` 与 `npm test` 是公开可复现的验证入口。
119
+
120
+ ## 历史复核记录(2026-09-07,已被后续复审补充)
121
+
122
+ **以下是 0.2.0 的历史记录,其"未发现新的高风险缺陷"结论已被后续复审推翻。** 开发与审计文档(含 0.2.1 二次审查报告)为本地内部资料,未随本仓库分发,本段仅作历史追溯;默认隐藏即时日志的交互保持,新增独立折叠操作记录入口。
77
123
 
78
- **浠ヤ笅鏄?0.2.0 鐨勫巻鍙茶褰曪紝鍏?鏈彂鐜版柊鐨勯珮椋庨櫓缂洪櫡"缁撹宸茶鍚庣画澶嶅鎺ㄧ炕銆?* 寮€鍙戜笌瀹¤鏂囨。锛堝惈 0.2.1 浜屾瀹℃煡鎶ュ憡锛変负鏈湴鍐呴儴璧勬枡锛屾湭闅忔湰浠撳簱鍒嗗彂锛屾湰娈典粎浣滃巻鍙茶拷婧紱榛樿闅愯棌鍗虫椂鏃ュ織鐨勪氦浜掍繚鎸侊紝鏂板鐙珛鎶樺彔鎿嶄綔璁板綍鍏ュ彛銆?
79
- 鍦ㄤ慨澶嶅畬鎴愭姤鍛婁箣鍚庯紝瀵?0.2.0 婧愮爜杩涜浜嗙嫭绔嬬殑鍙澶嶆牳涓庢祴璇曞璺戯細
124
+ 在修复完成报告之后,对 0.2.0 源码进行了独立的只读复核与测试复跑:
80
125
 
81
- - **澶嶆牳鑼冨洿**锛歚lib/index.js`銆乣lib/sync.js`銆乣lib/ui.js`銆乣package.json`銆乣cordis.patch.yml`锛屼笌涓や唤鎶ュ憡閫愭潯瀵圭収銆?- **缁撴灉**锛氬師瀹¤ 17 椤癸紙F01鈥揊17锛変慨澶嶅潎宸茶惤瀹炲埌褰撳墠婧愮爜锛屾娊鏌ュ叧閿疄鐜颁笌鏈〉鈥滃悓姝ヨ涓?鍏佽鍚屾鐨勬枃浠?璁惧鍒濆鍖?楠岃瘉鈥濇弿杩颁竴鑷达紱鎶ュ憡鎵€杩?35 椤规祴璇曞湪鏈満锛圢ode 24.20.0 + Git 2.55.0.windows.4锛岀湡瀹?Git 涓存椂浠撳簱涓庤櫄鏋勮繙绔級澶嶈窇**35/35 閫氳繃锛? 澶辫触**銆?- **澶嶆牳涓慨姝g殑涓€澶勭晫闈㈠洖褰?*锛氱晫闈㈡搷浣滃弽棣堟敼涓哄簳閮?toast 娴獥锛堜笉鍐嶆樉绀哄崱鐗囧唴鏃ュ織妗嗭級锛沗#log` 淇濈暀浣嗘敼涓鸿瑙夐殣钘忥紝浠呬綔 aria-live 渚涘睆骞曢槄璇诲櫒浣跨敤锛岄伩鍏嶅啀娆″嚭鐜扮敤鎴峰凡鍚﹀喅鐨勨€滀繚瀛樺悗鍦ㄤ笅鏂规樉绀烘彁绀衡€濄€?- **澶嶆牳缁撹**锛歚npm run check` 涓?`npm test` 鍏ㄧ豢锛涙湭鍙戠幇鏂扮殑楂橀闄╃己闄枫€?- **宸茬煡杈圭晫锛堜笌鎶ュ憡涓€鑷达紝闈炵己闄凤級**锛氫袱绉嶅垵濮嬪寲妯″紡搴曞眰琛屼负鐩稿悓锛堝浠?鈫?閲嶇疆 鈫?鏆傚仠鑷姩浠诲姟锛夛紝`mode` 浠呭奖鍝嶆彁绀烘枃妗堬紱鈥滃凡鐢ㄦ満鍣ㄥ悎骞垛€濋渶瑕佹寜澶囦唤涓?`MERGE.md` 鎵嬪姩鎸戞嫞锛汬TTP 鎺ュ彛浠呮帴鍙楀凡鐧诲綍鐨勫彲淇′細璇濓紙鏈櫥褰曠洿杩炶繑鍥?401 灞為鏈燂級锛涘悗绔紙index/sync锛夋敼鍔ㄩ渶閲嶅惎 DSH web 鍚庣敓鏁堬紝鐣岄潰锛坲i.js锛夋敼鍔?Ctrl+F5 鍗崇敓鏁堛€?
126
+ - **复核范围**:`lib/index.js`、`lib/sync.js`、`lib/ui.js`、`package.json`、`cordis.patch.yml`,与两份报告逐条对照。
127
+ - **结果**:原审计 17 项(F01–F17)修复均已落实到当前源码,抽查关键实现与本页“同步行为/允许同步的文件/设备初始化/验证”描述一致;报告所述 35 项测试在本机(Node 24.20.0 + Git 2.55.0.windows.4,真实 Git 临时仓库与虚构远端)复跑**35/35 通过,0 失败**。
128
+ - **复核中修正的一处界面回归**:界面操作反馈改为底部 toast 浮窗(不再显示卡片内日志框);`#log` 保留但改为视觉隐藏,仅作 aria-live 供屏幕阅读器使用,避免再次出现用户已否决的“保存后在下方显示提示”。
129
+ - **复核结论**:`npm run check` 与 `npm test` 全绿;未发现新的高风险缺陷。
130
+ - **已知边界(与报告一致,非缺陷)**:两种初始化模式底层行为相同(备份 → 重置 → 暂停自动任务),`mode` 仅影响提示文案;“已用机器合并”需要按备份与 `MERGE.md` 手动挑拣;HTTP 接口仅接受已登录的可信会话(未登录直连返回 401 属预期);后端(index/sync)改动需重启 DSH web 后生效,界面(ui.js)改动 Ctrl+F5 即生效。
package/lib/sync.js CHANGED
@@ -108,8 +108,12 @@ export function createHomeSync(directory = process.env.DSH_HOME || path.join(os.
108
108
  for (const key of Object.keys(env)) if (/^GIT_(DIR|WORK_TREE|COMMON_DIR|INDEX_FILE|OBJECT_DIRECTORY|ALTERNATE_OBJECT_DIRECTORIES|NAMESPACE|CONFIG_COUNT|CONFIG_KEY_.*|CONFIG_VALUE_.*|CONFIG_PARAMETERS|CEILING_DIRECTORIES|DISCOVERY_ACROSS_FILESYSTEM|PREFIX|SSH|SSH_COMMAND)$/.test(key)) delete env[key]
109
109
  env.GIT_TERMINAL_PROMPT = '0'; env.GCM_INTERACTIVE = 'never'; env.GIT_OPTIONAL_LOCKS = '0'; env.GIT_NO_REPLACE_OBJECTS = '1'
110
110
  if (cfg.sshBatch) env.GIT_SSH_COMMAND = 'ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o ConnectTimeout=15'
111
+ // `safe.directory=*` skips Git's "dubious ownership" check: we only run
112
+ // Git inside the validated DSH home or our own temp repositories, so a
113
+ // directory legitimately owned by another Windows user (e.g. created by
114
+ // an elevated prompt) must not block sync/init.
111
115
  return new Promise(resolve => {
112
- const child = execFile('git', ['--literal-pathspecs', '-C', cwd, ...args],
116
+ const child = execFile('git', ['-c', 'safe.directory=*', '--literal-pathspecs', '-C', cwd, ...args],
113
117
  { env, timeout: 90000, windowsHide: true, maxBuffer: 16 * 1024 * 1024 }, (error, stdout, stderr) => {
114
118
  resolve({ ok: !error, code: error?.code ?? 0, stdout: String(stdout || ''), stderr: String(stderr || ''), timedOut: !!error?.killed })
115
119
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-home-sync",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Git-based sync for DSH configuration and Mnemon memory plugin data, with automatic two-way sync, cross-device migration, initialization backups, conflict detection, and a web UI.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -8,7 +8,9 @@
8
8
  "engines": { "node": ">=20" },
9
9
  "scripts": {
10
10
  "test": "node --test test/*.test.mjs",
11
- "check": "node --check lib/index.js && node --check lib/sync.js && node --check lib/ui.js"
11
+ "check": "node --check lib/index.js && node --check lib/sync.js && node --check lib/ui.js && npm run check:docs",
12
+ "check:docs": "node scripts/check-docs.mjs",
13
+ "prepack": "npm run check:docs"
12
14
  },
13
15
  "repository": { "type": "git", "url": "https://github.com/OverDustD7/dsh-home-sync.git" },
14
16
  "homepage": "https://github.com/OverDustD7/dsh-home-sync#readme",