memoir-cli 1.5.0 → 1.5.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memoir-cli",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Sync and translate AI memory across devices and tools. Back up Claude, Gemini, Codex, Cursor, Copilot, Windsurf, and Aider configs. Migrate instructions between AI coding assistants with one command.",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -55,7 +55,7 @@
55
55
  "fs-extra": "^11.2.0",
56
56
  "gradient-string": "^3.0.0",
57
57
  "inquirer": "^9.2.15",
58
- "memoir-cli": "^1.4.4",
58
+
59
59
  "open": "^11.0.0",
60
60
  "ora": "^7.0.1"
61
61
  }
@@ -15,9 +15,13 @@ export const adapters = [
15
15
  icon: '🔵',
16
16
  source: path.join(home, '.gemini'),
17
17
  filter: (src) => {
18
+ const geminiDir = path.join(home, '.gemini');
19
+ const rel = path.relative(geminiDir, src);
20
+ if (src === geminiDir) return true;
21
+ // Only sync config/settings files — skip caches, history, auth, sandbox, etc.
22
+ const allowed = ['settings.json', 'projects.json', 'state.json', 'installation_id', 'trustedFolders.json', '.gitignore', 'GEMINI.md'];
18
23
  const basename = path.basename(src);
19
- const ignored = ['.git', 'oauth_creds.json', 'google_accounts.json', 'tmp', 'history'];
20
- return !ignored.includes(basename);
24
+ return allowed.includes(basename) && !rel.includes(path.sep);
21
25
  }
22
26
  },
23
27
  {
@@ -54,9 +58,13 @@ export const adapters = [
54
58
  icon: '🟢',
55
59
  source: path.join(home, '.codex'),
56
60
  filter: (src) => {
61
+ const codexDir = path.join(home, '.codex');
62
+ const rel = path.relative(codexDir, src);
63
+ if (src === codexDir) return true;
57
64
  const basename = path.basename(src);
58
- const ignored = ['.git', 'sessions', 'cache'];
59
- return !ignored.includes(basename) && !basename.endsWith('.key') && basename !== '.env';
65
+ // Only sync config files
66
+ const allowed = ['config.json', 'settings.json', 'instructions.md'];
67
+ return allowed.includes(basename) && !rel.includes(path.sep);
60
68
  }
61
69
  },
62
70
  {
@@ -66,9 +74,19 @@ export const adapters = [
66
74
  ? path.join(appData, 'Cursor', 'User')
67
75
  : path.join(home, 'Library', 'Application Support', 'Cursor', 'User'),
68
76
  filter: (src) => {
77
+ const cursorDir = isWin
78
+ ? path.join(appData, 'Cursor', 'User')
79
+ : path.join(home, 'Library', 'Application Support', 'Cursor', 'User');
80
+ const rel = path.relative(cursorDir, src);
81
+ if (src === cursorDir) return true;
69
82
  const basename = path.basename(src);
70
- const ignored = ['globalStorage', 'workspaceStorage', 'CachedData', 'Cache', 'GPUCache', 'logs', 'History', 'Backups', 'snippets'];
71
- return !ignored.includes(basename);
83
+ // Only sync settings and keybindings not extensions, cache, storage
84
+ const allowed = ['settings.json', 'keybindings.json', 'rules'];
85
+ const topDir = rel.split(path.sep)[0];
86
+ if (allowed.includes(basename) && !rel.includes(path.sep)) return true;
87
+ // Allow rules directory (cursor rules)
88
+ if (topDir === 'rules') return true;
89
+ return false;
72
90
  }
73
91
  },
74
92
  {
@@ -78,9 +96,14 @@ export const adapters = [
78
96
  ? path.join(appData, 'GitHub Copilot')
79
97
  : path.join(home, '.config', 'github-copilot'),
80
98
  filter: (src) => {
99
+ const copilotDir = isWin
100
+ ? path.join(appData, 'GitHub Copilot')
101
+ : path.join(home, '.config', 'github-copilot');
102
+ if (src === copilotDir) return true;
81
103
  const basename = path.basename(src);
82
- const ignored = ['hosts.json', 'apps.json', 'versions.json'];
83
- return !ignored.includes(basename);
104
+ // Only sync config skip auth tokens and version files
105
+ const allowed = ['settings.json', 'config.json'];
106
+ return allowed.includes(basename);
84
107
  }
85
108
  },
86
109
  {
@@ -90,9 +113,18 @@ export const adapters = [
90
113
  ? path.join(appData, 'Windsurf', 'User')
91
114
  : path.join(home, 'Library', 'Application Support', 'Windsurf', 'User'),
92
115
  filter: (src) => {
116
+ const windsurfDir = isWin
117
+ ? path.join(appData, 'Windsurf', 'User')
118
+ : path.join(home, 'Library', 'Application Support', 'Windsurf', 'User');
119
+ const rel = path.relative(windsurfDir, src);
120
+ if (src === windsurfDir) return true;
93
121
  const basename = path.basename(src);
94
- const ignored = ['workspaceStorage', 'CachedData', 'Cache', 'GPUCache', 'logs', 'History', 'Backups', 'memories', 'snippets'];
95
- return !ignored.includes(basename);
122
+ // Only sync settings and keybindings
123
+ const allowed = ['settings.json', 'keybindings.json', 'rules'];
124
+ const topDir = rel.split(path.sep)[0];
125
+ if (allowed.includes(basename) && !rel.includes(path.sep)) return true;
126
+ if (topDir === 'rules') return true;
127
+ return false;
96
128
  }
97
129
  },
98
130
  {