mirror of
https://github.com/jackwener/OpenCLI.git
synced 2026-09-14 18:25:42 +08:00
3c088da53e
* refactor: smart sync adapters instead of full copy (#sparse-override) Replace unconditional full-copy of all adapters to ~/.opencli/clis/ with hash-based smart sync that only copies files whose content has changed. Changes: - fetch-adapters.js: use SHA-256 content hashes to skip unchanged files; store per-file hashes in adapter-manifest.json - discovery.ts: simplify ensureUserAdapters() to only create the directory (no longer triggers full copy on first run) - main.ts: fix fast completion to check manifest file existence instead of directory existence (sparse override may have empty user dir) - cli.ts: add `opencli adapter eject/reset/status` commands for managing local adapter overrides - engine.test.ts: add tests for empty user dir and ensureUserAdapters * fix: address review blockers — site-level sync + reset --all 1. Fix `adapter reset --all`: change <site> from required to optional argument so --all can be used without specifying a site name. 2. Change smart sync from file-level to site-level granularity: if any file in a site has changed upstream, overwrite the entire site directory. This matches the agreed product semantics — local modifications to any file in a site are replaced when upstream updates that site. * fix: delete old site dir before writing updated adapter files When a site has upstream changes, delete the entire site directory first, then write the new version. This prevents stale files from older versions lingering in the user directory. * fix: reset --all preserves custom sites, only removes official overrides Blocker 3 fix: reset --all now checks BUILTIN_CLIS to identify official sites and only deletes those, preserving user-created custom sites. * refactor: sparse sync deletes local overrides instead of copying new versions Changed fetch-adapters.js semantics per team agreement: - When an official site has upstream changes, DELETE the local override instead of copying the new version into ~/.opencli/clis/ - Runtime automatically falls back to package baseline - ~/.opencli/clis/ becomes a true sparse override layer * fix: reset <site> rejects custom sites, only allows official overrides Single-site reset now checks BUILTIN_CLIS before deleting, matching the same protection that reset --all already has. * fix: reset <site> allows custom sites per product decision Per @WAWQAQ: explicit single-site reset should work on custom sites too. Differentiate messaging: official sites say "using official baseline", custom sites say "removed custom site". reset --all still only removes official overrides (bulk safety). * fix: reset --all deletes all local sites including custom per product decision Per @WAWQAQ: --all should clear the entire local working cache, including custom sites. Single-site reset already handles both types.