|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## v1.7.0 - Custom service support |
| 4 | + |
| 5 | +- Custom AI service management: add services with name, description, icon, config path, and file patterns |
| 6 | +- DB migration: add `description` and `icon_path` to `service_configs` |
| 7 | + |
3 | 8 | ## v1.6.0 - Multi-machine support |
4 | 9 |
|
5 | | -- **New:** Multi-machine support — each machine gets a unique ID and name, stored in local config (`~/.ai-sync/config.json`) |
6 | | -- **New:** Git-tracked `machines.json` in the store repo maps repo/service paths per machine, enabling cross-machine sync with different absolute paths |
7 | | -- **New:** Auto-link on startup — repos with valid path mappings for the current machine are automatically registered in the local database |
8 | | -- **New:** Unlinked repos detection — dashboard shows store repos that exist but aren't linked on the current machine, with manual link and auto-link options |
9 | | -- **New:** Machine name displayed in the footer alongside the data directory |
10 | | -- **New:** Settings "Machine" tab — edit machine name, view machine ID, see all known machines |
| 10 | +- Multi-machine support with unique machine ID/name per device |
| 11 | +- Git-tracked `machines.json` maps repo/service paths per machine for cross-machine sync |
| 12 | +- Auto-link repos on startup; dashboard shows unlinked repos with link options |
11 | 13 |
|
12 | 14 | ## v1.5.1 |
13 | 15 |
|
14 | | -- **New:** Right-click "Delete" on file tree — deletes files/folders from both store and target repo, with empty parent directory cleanup |
15 | | -- **New:** Size labels: normal (<1 MB), amber (1–10 MB), red (>10 MB), violet (>50 MB) |
16 | | -- **Perf:** code-splitting with manual chunks (React, CodeMirror, Radix, Markdown) and lazy-loaded routes |
17 | | -- **Perf:** removed Framer Motion (~150 KB) — replaced with CSS transitions |
18 | | -- **New:** Build a single commit message from a batch of messages |
19 | | -- **New:** "Apply .gitignore" button in repo settings and global settings — re-applies managed `.gitignore` block and untracks files from git (useful after cloning the data repo) |
20 | | -- **New:** Search button in pattern lists — filter patterns by keyword |
| 16 | +- Right-click "Delete" on file tree (removes from both store and target) |
| 17 | +- File size labels: normal (<1 MB), amber (1–10 MB), red (>10 MB), violet (>50 MB) |
| 18 | +- Batch commit message builder |
| 19 | +- "Apply .gitignore" button in repo/global settings |
| 20 | +- Search in pattern lists |
| 21 | +- Code-splitting, lazy-loaded routes, removed Framer Motion |
21 | 22 |
|
22 | | -## v1.5.0 - Breaking change - Removed desktop apps |
| 23 | +## v1.5.0 - Removed desktop app |
23 | 24 |
|
24 | | -- Removed desktop app (Tauri v2) — the project now runs as a web app only (`pnpm build && pnpm start`) |
25 | | -- Removed sidecar build pipeline, Tauri CORS origins, and all desktop-related code |
26 | | -- Simplified UI API client and WebSocket client (no more port-based routing for Tauri) |
| 25 | +- Removed Tauri v2 desktop app — web app only (`pnpm build && pnpm start`) |
27 | 26 |
|
28 | 27 | ## v1.4.2 |
29 | 28 |
|
30 | | -- **Fix:** `FOREIGN KEY constraint failed` error when syncing services — `sync_log.repo_id` had a foreign key referencing `repos(id)` but services write `service_config_id` into that column |
| 29 | +- Fix: `FOREIGN KEY constraint failed` when syncing services |
31 | 30 |
|
32 | 31 | ## v1.4.1 |
33 | 32 |
|
34 | | -- **Fix:** `.gitignore` managed block now syncs with file pattern settings — adding/removing/disabling patterns updates all active repos' `.gitignore` files automatically |
35 | | -- **Fix:** false conflicts in service sync (e.g. `~/.claude/`) caused by uncommitted store git changes |
36 | | -- **Fix:** Adding ignore patterns now takes effect immediately — matching tracked files are untracked and removed from store on save |
37 | | -- **Fix:** Repo watcher now restarts when ignore patterns change |
38 | | -- **New:** Search files in file tree |
39 | | -- **New:** Ignore patterns for services — override global ignore patterns or add custom ones per service (same as repos) |
40 | | -- **New:** Right-click context menu on file tree — "Ignore this file/folder" adds the pattern to ignore list and immediately untracks matching files |
41 | | -- **New:** toggle button to show largest files in file tree |
42 | | -- **Security:** path traversal protection (`safeJoin`) on all file routes — prevents `../` escape from store/repo directories |
43 | | -- **Security:** command injection fix in open-folder — replaced shell-spawning `exec` with `execFile` |
44 | | -- **Security:** CORS restricted to `localhost` / `127.0.0.1` only (was `origin: true`) |
45 | | -- **Security:** default listen host changed from `0.0.0.0` to `127.0.0.1` |
46 | | -- **Security:** symlink target validation — rejects absolute paths and `..` escaping |
47 | | -- **Security:** WebSocket `maxPayload` limit (1 MB) |
48 | | -- **Security:** sync_log auto-cleanup (entries older than 30 days removed on startup) |
49 | | -- **Perf:** N+1 query fix in repo/service listing — single aggregating SQL instead of per-item queries |
50 | | -- **Perf:** polling `setInterval` replaced with `setTimeout` chain — prevents overlapping sync cycles |
51 | | -- **Perf:** `picomatch` compiled matchers cached per pattern set |
52 | | -- **Perf:** periodic cleanup of file watcher `selfChanges` map (prevents memory leak) |
53 | | -- **Perf:** added missing `idx_conflicts_tracked_file` database index |
| 33 | +- Fix: `.gitignore` managed block syncs with pattern settings changes |
| 34 | +- Fix: false conflicts from uncommitted store git changes |
| 35 | +- Fix: ignore pattern changes take effect immediately and restart watchers |
| 36 | +- File tree: search, right-click "Ignore", show largest files toggle |
| 37 | +- Per-service ignore pattern overrides |
| 38 | +- Security: path traversal protection, command injection fix, CORS/host lockdown, symlink validation, WebSocket payload limit, sync_log auto-cleanup |
| 39 | +- Perf: N+1 query fix, non-overlapping sync cycles, picomatch caching, DB index |
54 | 40 |
|
55 | 41 | ## v1.4.0 |
56 | 42 |
|
57 | | -- **New:** AI Service Config sync: sync local AI service settings (e.g., `~/.claude/` for Claude Code) |
58 | | -- Merged repo and service detail pages into a shared component (reduced code duplication) |
59 | | -- **New:** Showing size information: |
60 | | - - Show total store size per repo/service on dashboard cards and detail pages |
61 | | - - Per-file size display in repo/service detail file tree |
62 | | - - Aggregated folder sizes in file tree (computed client-side from per-file data) |
63 | | - - Size warning indicators: yellow (20-50 MB), red (50-100 MB) |
64 | | - - Sync blocked automatically when store size exceeds 100 MB with clear banner |
65 | | - - Customizable size thresholds (warning, danger, block) in Settings > General |
| 43 | +- AI Service Config sync (e.g., `~/.claude/` for Claude Code) |
| 44 | +- Store size display on dashboard and detail pages with warning indicators |
| 45 | +- Sync blocked when store size exceeds threshold (configurable in Settings) |
66 | 46 |
|
67 | 47 | ## v1.3.1 |
68 | 48 |
|
69 | | -- Local patterns now always on top, global below (with divider) in repo settings |
| 49 | +- Local patterns always shown above global patterns in repo settings |
70 | 50 |
|
71 | 51 | ## v1.3.0 |
72 | 52 |
|
73 | | -- **New:** Per-repository settings with local overrides for general settings, AI file patterns, and ignore patterns |
74 | | -- **New:** Update notification from GitHub Releases |
75 | | -- **New:** Clone files/folders across repos with conflict preview |
76 | | -- **New:** Dashboard filter for repos with unresolved conflicts |
| 53 | +- Per-repository settings with local overrides |
| 54 | +- Update notification from GitHub Releases |
| 55 | +- Clone files/folders across repos with conflict preview |
| 56 | +- Dashboard filter for unresolved conflicts |
77 | 57 |
|
78 | 58 | ## v1.2.1 |
79 | 59 |
|
80 | | -- **Fix:** "Clean" in settings now also commits in git |
81 | | -- **Fix:** `__pycache__/` pattern not ignored correctly |
82 | | -- **Fix:** Conflict warnings not refreshing on repo removal |
| 60 | +- Fix: "Clean" now commits in git, `__pycache__/` ignore, conflict refresh on repo removal |
83 | 61 |
|
84 | 62 | ## v1.2.0 |
85 | 63 |
|
86 | | -- **New:** Desktop app (Tauri v2) with bundled sidecar server |
| 64 | +- Desktop app (Tauri v2) — later removed in v1.5.0 |
87 | 65 | - Rebranded from `local-ai-stuffs` to `ai-sync` |
88 | 66 |
|
89 | | -## v1.1.1 & v1.1.2 |
90 | | - |
91 | | -- UI improvements |
92 | | - |
93 | | -## v1.1.0 |
| 67 | +## v1.1.x |
94 | 68 |
|
95 | | -- **New:** Ignore patterns with configurable globs and "Clean" button |
96 | | -- **New:** Favorite repositories |
97 | | -- **New:** Symbolic link support |
98 | | -- **New:** New default patterns: `.agent/**`, `.agents/**`, `.gemini/**`, `.github/skills/**`, `.opencode/**` |
99 | | -- **Fix:** conflict resolver refresh, editor content updates, symlink sync |
| 69 | +- Ignore patterns with configurable globs and "Clean" button |
| 70 | +- Favorite repositories, symbolic link support |
| 71 | +- Default patterns: `.agent/**`, `.agents/**`, `.gemini/**`, `.github/skills/**`, `.opencode/**` |
| 72 | +- Bug fixes and UI improvements |
100 | 73 |
|
101 | 74 | ## v1.0.0 |
102 | 75 |
|
103 | 76 | - Central store as git repo for AI config files |
104 | | -- Bidirectional sync with chokidar watchers |
105 | | -- Git-based 3-way merge and auto-merge |
106 | | -- Web Admin UI (React SPA, CodeMirror 6 editor, conflict resolver) |
| 77 | +- Bidirectional sync with git-based 3-way merge |
| 78 | +- Web Admin UI with CodeMirror editor and conflict resolver |
107 | 79 | - Template system, file pattern management, gitignore management |
108 | | -- Remote publishing, WebSocket events, setup wizard, pause/resume |
109 | 80 | - Supported: Claude Code, Cursor, Gemini, GitHub Copilot, Aider, Windsurf |
0 commit comments