autodev-cli 1.4.149 → 1.4.150

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.
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // gimpPluginInstall — drop the vendored AUTO-START GIMP MCP plugin into the
4
+ // correct GIMP 3.x user plug-ins folder so the socket bridge opens on GIMP
5
+ // launch (no manual copy, no menu click).
6
+ //
7
+ // GROUNDED RULES (see AutoDev research):
8
+ // - GIMP 3.x user config is MINOR-versioned: GIMP 3.2 → .../GIMP/3.2/ (NOT 3.0).
9
+ // Bases: linux $XDG_CONFIG_HOME/GIMP or ~/.config/GIMP; win32 %APPDATA%\GIMP;
10
+ // darwin ~/Library/Application Support/GIMP. Honor GIMP3_DIRECTORY (overrides
11
+ // the WHOLE versioned dir). Glob GIMP/3.* and pick the HIGHEST minor; if none
12
+ // exists, create 3.0 and warn (user should launch GIMP once).
13
+ // - GIMP 3.x layout: plug-ins/gimp_mcp_server/gimp_mcp_server.py — the .py MUST
14
+ // sit in a sub-folder whose name == the .py basename (a loose .py is ignored).
15
+ // On non-Windows the .py must be executable (0o755).
16
+ // - Windows Store (MSIX) GIMP reads the REAL %APPDATA%\GIMP\<ver>. As a safety
17
+ // net we ALSO write the virtualized path when a package dir exists:
18
+ // %LOCALAPPDATA%\Packages\GIMP.<...>_*\LocalCache\Roaming\GIMP\<ver>\plug-ins.
19
+ //
20
+ // Everything is dependency-injected (platform/env/homedir/fileExists/listDir/
21
+ // mkdirp/writeFile/chmod/copyFile/readPluginSource/detectGimp) so the resolver is
22
+ // unit-testable without a real GIMP or filesystem.
23
+ // ---------------------------------------------------------------------------
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.vendoredPluginSourcePath = vendoredPluginSourcePath;
59
+ exports.gimpMajorFromPath = gimpMajorFromPath;
60
+ exports.installGimpPlugin = installGimpPlugin;
61
+ const fs = __importStar(require("fs"));
62
+ const path = __importStar(require("path"));
63
+ const os = __importStar(require("os"));
64
+ const binDetect_1 = require("./binDetect");
65
+ /** Absolute path to the vendored auto-start plugin shipped in the tarball. */
66
+ function vendoredPluginSourcePath() {
67
+ // Compiled to out/core/gimpPluginInstall.js → package root is ../../ .
68
+ return path.join(__dirname, '..', '..', 'media', 'gimp', 'gimp_mcp_server.py');
69
+ }
70
+ function realDeps() {
71
+ return {
72
+ platform: process.platform,
73
+ env: process.env,
74
+ homedir: os.homedir,
75
+ fileExists: (p) => { try {
76
+ return fs.existsSync(p);
77
+ }
78
+ catch {
79
+ return false;
80
+ } },
81
+ listDir: (p) => { try {
82
+ return fs.readdirSync(p);
83
+ }
84
+ catch {
85
+ return [];
86
+ } },
87
+ mkdirp: (p) => { fs.mkdirSync(p, { recursive: true }); },
88
+ writeFile: (p, data) => { fs.writeFileSync(p, data); },
89
+ chmod: (p, mode) => { try {
90
+ fs.chmodSync(p, mode);
91
+ }
92
+ catch { /* non-POSIX fs */ } },
93
+ copyFile: (src, dst) => { fs.copyFileSync(src, dst); },
94
+ readPluginSource: () => fs.readFileSync(vendoredPluginSourcePath(), 'utf8'),
95
+ detectGimp: () => (0, binDetect_1.detectApp)('gimp'),
96
+ };
97
+ }
98
+ /** GIMP user-config BASE dir (the folder that CONTAINS the 3.x version dirs). */
99
+ function gimpConfigBase(d) {
100
+ const home = d.homedir();
101
+ if (d.platform === 'win32') {
102
+ const appData = d.env.APPDATA || path.join(home, 'AppData', 'Roaming');
103
+ return path.join(appData, 'GIMP');
104
+ }
105
+ if (d.platform === 'darwin') {
106
+ return path.join(home, 'Library', 'Application Support', 'GIMP');
107
+ }
108
+ const xdg = d.env.XDG_CONFIG_HOME && d.env.XDG_CONFIG_HOME.trim();
109
+ const cfg = xdg ? xdg : path.join(home, '.config');
110
+ return path.join(cfg, 'GIMP');
111
+ }
112
+ /** Parse the numeric minor from a `3.<minor>` dir name; null if not `3.*`. */
113
+ function minorOf(name) {
114
+ const m = /^3\.(\d+)$/.exec(name);
115
+ return m ? parseInt(m[1], 10) : null;
116
+ }
117
+ /**
118
+ * Pick the HIGHEST-minor `3.*` version dir under base. Returns the chosen
119
+ * version string and whether it already existed. When none exist, defaults to
120
+ * "3.0" (created + warned by the caller).
121
+ */
122
+ function chooseVersion(base, d) {
123
+ const kids = d.listDir(base)
124
+ .map((n) => ({ name: n, minor: minorOf(n) }))
125
+ .filter((x) => x.minor !== null);
126
+ if (kids.length === 0) {
127
+ return { version: '3.0', existed: false };
128
+ }
129
+ kids.sort((a, b) => b.minor - a.minor);
130
+ return { version: kids[0].name, existed: true };
131
+ }
132
+ /**
133
+ * Windows Store virtualized fallback plug-ins dir(s) for a given version. Only
134
+ * returned when a `GIMP.*` package dir actually exists under %LOCALAPPDATA%\Packages.
135
+ */
136
+ function storeVirtualizedPluginDirs(version, d) {
137
+ if (d.platform !== 'win32') {
138
+ return [];
139
+ }
140
+ const home = d.homedir();
141
+ const localAppData = d.env.LOCALAPPDATA || path.join(home, 'AppData', 'Local');
142
+ const packagesDir = path.join(localAppData, 'Packages');
143
+ const pkgs = d.listDir(packagesDir).filter((n) => /^GIMP\./i.test(n));
144
+ return pkgs.map((pkg) => path.join(packagesDir, pkg, 'LocalCache', 'Roaming', 'GIMP', version, 'plug-ins'));
145
+ }
146
+ /** Extract the GIMP MAJOR version from a launcher path (e.g. gimp-2.10 → 2). */
147
+ function gimpMajorFromPath(p) {
148
+ if (!p) {
149
+ return null;
150
+ }
151
+ const base = p.replace(/\\/g, '/').split('/').pop() || p;
152
+ const m = /gimp[-_]?(\d+)/i.exec(base);
153
+ return m ? parseInt(m[1], 10) : null;
154
+ }
155
+ /** Write the vendored plugin into one plug-ins dir (backing up any existing copy). */
156
+ function installInto(pluginsDir, source, d) {
157
+ const sub = path.join(pluginsDir, 'gimp_mcp_server');
158
+ const py = path.join(sub, 'gimp_mcp_server.py');
159
+ d.mkdirp(sub);
160
+ if (d.fileExists(py)) {
161
+ d.copyFile(py, py + '.bak');
162
+ }
163
+ d.writeFile(py, source);
164
+ if (d.platform !== 'win32') {
165
+ d.chmod(py, 0o755);
166
+ }
167
+ return py;
168
+ }
169
+ /**
170
+ * Install the auto-start GIMP MCP plugin. Resolves the target plug-ins dir(s)
171
+ * per-OS and writes the vendored plugin so GIMP opens the localhost:9876 socket
172
+ * on launch. Does NOT install when a clearly < 3 GIMP is the only one detected.
173
+ */
174
+ function installGimpPlugin(opts, deps) {
175
+ const d = { ...realDeps(), ...deps };
176
+ const warnings = [];
177
+ // Gate: if a GIMP is detected and is clearly < 3, do not install.
178
+ const det = d.detectGimp();
179
+ const major = gimpMajorFromPath(det.path);
180
+ if (det.installed && major !== null && major < 3) {
181
+ warnings.push(`Detected GIMP ${major}.x at ${det.path}. GIMP MCP needs GIMP 3.x — ` +
182
+ 'the auto-start plugin uses the GIMP 3.0 Python API and was NOT installed. ' +
183
+ 'Install GIMP 3 and re-run.');
184
+ return { installed: false, paths: [], version: null, warnings };
185
+ }
186
+ const source = d.readPluginSource();
187
+ // Resolve the versioned config dir(s). GIMP3_DIRECTORY / opts.targetDir
188
+ // override the WHOLE versioned dir.
189
+ const override = (opts?.targetDir && opts.targetDir.trim()) || (d.env.GIMP3_DIRECTORY && d.env.GIMP3_DIRECTORY.trim());
190
+ const targets = [];
191
+ let version;
192
+ if (override) {
193
+ version = path.basename(override) || 'custom';
194
+ if (!d.fileExists(override)) {
195
+ warnings.push(`GIMP dir ${override} does not exist yet — creating it. Launch GIMP once so it initialises its config.`);
196
+ }
197
+ targets.push(path.join(override, 'plug-ins'));
198
+ }
199
+ else {
200
+ const base = gimpConfigBase(d);
201
+ const chosen = chooseVersion(base, d);
202
+ version = chosen.version;
203
+ if (!chosen.existed) {
204
+ warnings.push(`No GIMP 3.x config dir found under ${base} — creating ${version}. ` +
205
+ 'Launch GIMP 3 at least once (so it creates its real config dir), then re-run to be sure it lands in the right place.');
206
+ }
207
+ targets.push(path.join(base, version, 'plug-ins'));
208
+ // Windows Store virtualized safety net (only when a package dir exists).
209
+ for (const vdir of storeVirtualizedPluginDirs(version, d)) {
210
+ targets.push(vdir);
211
+ }
212
+ }
213
+ const paths = [];
214
+ for (const pluginsDir of targets) {
215
+ try {
216
+ paths.push(installInto(pluginsDir, source, d));
217
+ }
218
+ catch (e) {
219
+ warnings.push(`Failed to write plugin into ${pluginsDir}: ${e.message}`);
220
+ }
221
+ }
222
+ return { installed: paths.length > 0, paths, version, warnings };
223
+ }
224
+ //# sourceMappingURL=gimpPluginInstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gimpPluginInstall.js","sourceRoot":"","sources":["../../src/core/gimpPluginInstall.ts"],"names":[],"mappings":"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"}
@@ -136,7 +136,7 @@ function getCatalog(platform) {
136
136
  prerequisites: [{ id: 'uv', installHint: uvInstallHint(platform) }],
137
137
  postSetup: [
138
138
  'The MCP client runs from git automatically (uv fetches it) — no manual download of the client.',
139
- `You still need the GIMP-side plugin: download gimp_mcp_server.py from https://github.com/libreearth/gimp-mcp into your GIMP 3.x plug-ins folder (${gimpPluginDir(platform)}), restart GIMP, then Filters → Development → Start MCP Server (listens on localhost:9876).`,
139
+ `The GIMP-side AUTO-START plugin is installed for you into your GIMP 3.x plug-ins folder (${gimpPluginDir(platform)}) — just restart GIMP and the server auto-starts on localhost:9876 (no menu click). Re-run any time with: autodev mcp gimp-install-plugin`,
140
140
  'Requires GIMP 3.0+ (the plugin uses the GIMP 3.0 API).',
141
141
  "Port 9876 collides with Blender — don't run both MCP servers at once.",
142
142
  ],
@@ -150,10 +150,10 @@ function getCatalog(platform) {
150
150
  /** GIMP 3.0 plug-ins directory, per OS (where the server-side plugin lives). */
151
151
  function gimpPluginDir(platform) {
152
152
  return platform === 'win32'
153
- ? '%APPDATA%\\GIMP\\3.0\\plug-ins\\'
153
+ ? '%APPDATA%\\GIMP\\3.x\\plug-ins\\'
154
154
  : platform === 'darwin'
155
- ? '~/Library/Application Support/GIMP/3.0/plug-ins/'
156
- : '~/.config/GIMP/3.0/plug-ins/';
155
+ ? '~/Library/Application Support/GIMP/3.x/plug-ins/'
156
+ : '~/.config/GIMP/3.x/plug-ins/';
157
157
  }
158
158
  /** Lookup a single catalog entry. */
159
159
  function catalogEntry(app, platform) {
@@ -1 +1 @@
1
- {"version":3,"file":"mcpCatalog.js","sourceRoot":"","sources":["../../src/core/mcpCatalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpCatalog.js","sourceRoot":"","sources":["../../src/core/mcpCatalog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autodev-cli",
3
- "version": "1.4.149",
3
+ "version": "1.4.150",
4
4
  "description": "AutoAIDev CLI — autonomous AI task loop with VS Code / Cursor launcher",
5
5
  "author": "Peter Ivanov <peter@microweber.com>",
6
6
  "license": "MIT",
@@ -33,7 +33,7 @@
33
33
  "start": "node bin/autodev.js",
34
34
  "test:coverage": "c8 npm test",
35
35
  "coverage:html": "c8 --reporter=html npm test",
36
- "test": "node test/smoke.mjs && node test/liveNarration.smoke.mjs && node test/liveNarration.edge.smoke.mjs && node test/normalizer.parity.smoke.mjs && node test/providerConfig.smoke.mjs && node test/providers.services.smoke.mjs && node test/providers.dummy.smoke.mjs && node test/mcpOnlyOperator.smoke.mjs && node test/opencodeEventFilter.smoke.mjs && node test/copilotMcpIsolation.smoke.mjs && node test/grokSpawnError.smoke.mjs && node test/initTemplate.smoke.mjs && node test/settingsAliases.smoke.mjs && node test/setupWritesOfficeMcp.smoke.mjs && node test/provisionNoGlobalMcp.smoke.mjs && node test/deprovisionCleans.smoke.mjs && node test/hooksElectronSafe.smoke.mjs && node test/claudePermissions.smoke.mjs && node test/claudeMcpAllowList.smoke.mjs && node test/presenceGuard.smoke.mjs && node test/cliExitHardFail.smoke.mjs && node test/redactSecrets.smoke.mjs && node test/claudeUsage.smoke.mjs && node test/graphStore.smoke.mjs && node test/programReminder.smoke.mjs && node test/agentBackup.smoke.mjs && node test/persona.smoke.mjs && node test/soulUpdate.smoke.mjs && node test/sessionsGlobal.smoke.mjs && node test/resumeSessionLoopDefault.smoke.mjs && node test/secureFilePerms.smoke.mjs && node test/providers.dummy.office.smoke.mjs && node test/mcpDetect.smoke.mjs && node test/mcpCatalog.smoke.mjs && node test/mcpCatalogMigrate.smoke.mjs && node test/mcpStartupTimeout.smoke.mjs"
36
+ "test": "node test/smoke.mjs && node test/liveNarration.smoke.mjs && node test/liveNarration.edge.smoke.mjs && node test/normalizer.parity.smoke.mjs && node test/providerConfig.smoke.mjs && node test/providers.services.smoke.mjs && node test/providers.dummy.smoke.mjs && node test/mcpOnlyOperator.smoke.mjs && node test/opencodeEventFilter.smoke.mjs && node test/copilotMcpIsolation.smoke.mjs && node test/grokSpawnError.smoke.mjs && node test/initTemplate.smoke.mjs && node test/settingsAliases.smoke.mjs && node test/setupWritesOfficeMcp.smoke.mjs && node test/provisionNoGlobalMcp.smoke.mjs && node test/deprovisionCleans.smoke.mjs && node test/hooksElectronSafe.smoke.mjs && node test/claudePermissions.smoke.mjs && node test/claudeMcpAllowList.smoke.mjs && node test/presenceGuard.smoke.mjs && node test/cliExitHardFail.smoke.mjs && node test/redactSecrets.smoke.mjs && node test/claudeUsage.smoke.mjs && node test/graphStore.smoke.mjs && node test/programReminder.smoke.mjs && node test/agentBackup.smoke.mjs && node test/persona.smoke.mjs && node test/soulUpdate.smoke.mjs && node test/sessionsGlobal.smoke.mjs && node test/resumeSessionLoopDefault.smoke.mjs && node test/secureFilePerms.smoke.mjs && node test/providers.dummy.office.smoke.mjs && node test/mcpDetect.smoke.mjs && node test/gimpPluginInstall.smoke.mjs && node test/mcpCatalog.smoke.mjs && node test/mcpCatalogMigrate.smoke.mjs && node test/mcpStartupTimeout.smoke.mjs"
37
37
  },
38
38
  "dependencies": {
39
39
  "@opencode-ai/sdk": "^1.14.41",