autodev-cli 1.4.138 → 1.4.140

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,71 @@
1
+ ## 0.0l Compaction Continuity — Survive The Context Boundary
2
+
3
+ **When to use:** Whenever you sense the context window is filling and a summarize/compaction is imminent · The instant a compaction signal or `PreCompact` hook fires · At the START of any turn that resumes in a fresh or freshly-compacted window. **Treat the compaction boundary as a handoff to your future self: BEFORE it, snapshot the minimum needed to resume into `PRE_COMPACT.md` (only if something important is in flight); AFTER it, READ `PRE_COMPACT.md` FIRST and continue the loop from where it left off.**
4
+
5
+ You are a long-horizon autonomous loop. The failure mode this pillar kills is the **rolled-over window**: the context fills, the harness summarizes it, and the lossy summary silently drops the one thing that mattered — the half-applied edit, the next concrete step, the decision you just made — so the next turn wakes up amnesiac and either re-derives the plan from scratch or, worse, drops the thread entirely. A compaction is not a fresh start; it is a boundary the loop must cross without losing work. This is the transient-state counterpart to the durable disciplines around it: Deferred-Task Resolution ([[00j-deferred-task-resolution]], §0.0j) guarantees no parked task evaporates, Long-Horizon Planning ([[00e-long-horizon-planning]], §0.0e) holds the arc, and Verifiable Threads ([[00c-verifiable-threads]], §0.0c) makes a cold reader able to act — this pillar guarantees none of that is lost just because the window compacted.
6
+
7
+ ---
8
+
9
+ ### Context compaction is a boundary the loop must survive
10
+
11
+ When the window fills and gets summarized, **unwritten in-flight state can be lost**. The summary keeps a gist; it does not reliably keep the exact next step, the file you were mid-edit in, or the reason you chose approach B over A. Anything living only in the conversation — not in a file — is at risk the moment compaction runs. So treat the boundary as a handoff: the sender is present-you with full context; the receiver is future-you with only the summary plus whatever you wrote down. Write for that degraded receiver ([[00c-verifiable-threads]], §0.0c).
12
+
13
+ ---
14
+
15
+ ### Before compaction — write `PRE_COMPACT.md` if (and only if) needed
16
+
17
+ When you sense context is filling, or a compaction signal / `PreCompact` hook fires, snapshot the **minimum needed to resume** into `PRE_COMPACT.md`:
18
+
19
+ - **What you're mid-way through** — the task/step in flight and how far it got (e.g. *"edited `src/auth/login.ts::validate()`, tests not yet run"*).
20
+ - **The current plan and the next concrete step** — the ordered remaining steps ([[00e-long-horizon-planning]], §0.0e), with the very next action named.
21
+ - **Open decisions** — what's undecided and the options in play, so future-you doesn't silently re-litigate or forget.
22
+ - **The deferred set** — the still-open `[ ]` items and their unblock conditions ([[00j-deferred-task-resolution]], §0.0j), so the post-compaction sweep re-attempts them.
23
+ - **Key handles** — file paths, task/ticket ids, office slugs, endpoints, and the exact **verify commands** that prove each piece done.
24
+ - **Anything a lossy summary would drop** — the non-obvious fact, the false start already discarded, the gotcha you just hit.
25
+
26
+ **Skip it when nothing important is in flight.** A window that compacts between clean tasks, with the plan already in `TODO.md` and no half-done work, needs no snapshot — don't write noise. `PRE_COMPACT.md` is for the transient "where was I", not a per-turn ritual.
27
+
28
+ ---
29
+
30
+ ### `PRE_COMPACT.md` is a bounded SNAPSHOT, not a log
31
+
32
+ - **Keep it well under 16 KB** — the same hard cap every living doc obeys ([[00g-swarm-living-documents]], §0.0g). It is read straight back into a fresh context; a bloated snapshot bloats exactly the reader it exists for.
33
+ - **OVERWRITE it each time** — latest state supersedes. It is a single current snapshot, never an append-only history.
34
+ - **Keep it beside the other living docs** — the workspace root / the agent's `.autodev/` living-doc location, consistent with where `MEMORY.md`/`TODO.md` live ([[00g-swarm-living-documents]], §0.0g).
35
+ - **It complements, does not replace, durable memory.** `MEMORY`/`LESSONS`/`TODO` and the graph (§0.2, §0.20) hold *learned facts* that outlive the task; `PRE_COMPACT.md` holds the *transient thread state* — the "where was I" — needed to resume THIS run. Durable lessons still go to the durable stores; don't dump them into the snapshot.
36
+
37
+ ---
38
+
39
+ ### After compaction — READ `PRE_COMPACT.md` FIRST
40
+
41
+ On resuming in a fresh or compacted window, **read `PRE_COMPACT.md` before acting**:
42
+
43
+ - **Reconstruct the thread** ([[00c-verifiable-threads]], §0.0c) — restore what you were doing and why from the snapshot plus the durable docs, before you touch anything.
44
+ - **Continue the loop from where it left off** — pick up the named next step, honor the plan ([[00e-long-horizon-planning]], §0.0e), and re-attempt the deferred set ([[00j-deferred-task-resolution]], §0.0j) rather than re-deriving or restarting.
45
+ - **Then update or clear it** — as the state moves on, overwrite the snapshot to match, or delete it once the in-flight work is closed and nothing transient remains. A stale `PRE_COMPACT.md` is misleading; keep it true or remove it.
46
+
47
+ ---
48
+
49
+ ### No dropped threads across the boundary
50
+
51
+ Losing track of work because the window rolled over is a **failure mode, same class as a leftover deferred task** ([[00j-deferred-task-resolution]], §0.0j) — the work didn't finish, it just fell off the edge of the context. Continuity across compaction is a first-class discipline for an autonomous long-horizon loop, not an optional nicety. The boundary is where an unattended loop most often silently derails; crossing it cleanly is what makes "long-horizon" actually hold.
52
+
53
+ If the harness exposes a compaction signal or `PreCompact` hook, use it as the trigger to write the snapshot. But the discipline is **tool-agnostic**: the behavior — snapshot before, read after — holds regardless of the mechanism that surfaces (or doesn't surface) the boundary. When in doubt near a full window, write the snapshot; a cheap file beats a lost thread.
54
+
55
+ ---
56
+
57
+ ### Before / after — the rolled-over window vs the clean crossing
58
+
59
+ > **Rolled-over (state lost):** halfway through a 3-file refactor, the window fills and compacts. The summary keeps *"refactoring the settings loader"* but drops that file 2 of 3 is done, tests are RED on one case, and you'd decided to punt the caching subtask. Next turn re-reads the code cold, re-plans from scratch, re-opens the punted decision, and re-does work already finished — or ships the half-refactor as "done".
60
+
61
+ > **Clean crossing:** sensing the window filling, you overwrite `PRE_COMPACT.md`: *"MID: settings-loader refactor, 2/3 files done (`loader.ts`,`validator.ts` split; `index.ts` re-wire NEXT). VERIFY: `npm test -- settings` (currently RED on empty-config case — fix in `validator.ts`). DECIDED: drop the cache subtask → opened AUT-91. DEFERRED: AUT-58 migration test `[ ]`."* After compaction, future-you reads it first, re-wires `index.ts`, fixes the empty-config case, confirms green, and the thread never skipped a beat.
62
+
63
+ ---
64
+
65
+ ### Why continuity compounds — the loop can't outrun its window
66
+
67
+ There is no referee catching a dropped thread; the loop stays coherent anyway, for one reason: **a boundary that is snapshotted before and read after cannot silently lose the in-flight step, the plan, or the deferred set — the receiver always has the minimum to resume.** A long-horizon loop *will* fill its window many times over a task; a loop that treats every compaction as a clean handoff keeps making forward progress, while one that trusts the summary quietly loses a little work at each boundary until the horizon collapses. Snapshot-before / read-after is the whole mechanism.
68
+
69
+ ---
70
+
71
+ **Rule of thumb:** when the window feels full, answer — *"If this context vanished right now and only the summary survived, could future-me resume the loop from where I am?"* If not, write `PRE_COMPACT.md`. On resuming, before anything else, answer — *"Is there a `PRE_COMPACT.md` to read?"* If yes, read it first and pick up the thread.
package/out/cli.js CHANGED
@@ -51,6 +51,7 @@ const office_1 = require("./commands/office");
51
51
  const deprovision_1 = require("./commands/deprovision");
52
52
  const login_1 = require("./commands/login");
53
53
  const models_1 = require("./commands/models");
54
+ const mcp_1 = require("./commands/mcp");
54
55
  const connect_2 = require("./connect");
55
56
  const logger_1 = require("./logger");
56
57
  // eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -130,6 +131,7 @@ const program = new commander_1.Command()
130
131
  (0, deprovision_1.deprovisionCommand)(program);
131
132
  (0, login_1.loginCommand)(program);
132
133
  (0, models_1.modelsCommand)(program);
134
+ (0, mcp_1.mcpCommand)(program);
133
135
  program.parseAsync(process.argv).catch((err) => {
134
136
  console.error(err.message);
135
137
  process.exit(1);
package/out/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Command } from 'commander';
2
+ import { type McpJsonEntry } from '../core/projectMcp';
3
+ import { type BinDetectDeps } from '../core/binDetect';
4
+ import { type CreativeAppId } from '../core/mcpCatalog';
5
+ export interface DetectPrereq {
6
+ id: string;
7
+ installed: boolean;
8
+ installHint: string;
9
+ }
10
+ export interface DetectApp {
11
+ id: CreativeAppId;
12
+ name: string;
13
+ installed: boolean;
14
+ path: string | null;
15
+ source: string | null;
16
+ experimental: boolean;
17
+ server: McpJsonEntry;
18
+ serverName: string;
19
+ prerequisites: DetectPrereq[];
20
+ postSetup: string[];
21
+ notes: string[];
22
+ alreadyEnabled: boolean;
23
+ }
24
+ export interface DetectResult {
25
+ apps: DetectApp[];
26
+ }
27
+ export declare function buildDetect(root: string, deps?: Partial<BinDetectDeps>): DetectResult;
28
+ export declare function mcpCommand(program: Command): void;
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildDetect = buildDetect;
37
+ exports.mcpCommand = mcpCommand;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const logger_1 = require("../logger");
41
+ const projectMcp_1 = require("../core/projectMcp");
42
+ const configManager_1 = require("../configManager");
43
+ const mcpManager_1 = require("../mcpManager");
44
+ const binDetect_1 = require("../core/binDetect");
45
+ const mcpCatalog_1 = require("../core/mcpCatalog");
46
+ const settingsLoader_1 = require("../core/settingsLoader");
47
+ const secureFile_1 = require("../core/secureFile");
48
+ // Names autodev treats as built-in MCP servers (toggled via disabledBuiltinMcp,
49
+ // not via an enabled:false entry in .mcp.json).
50
+ const BUILTIN_NAMES = new Set([
51
+ ...mcpManager_1.DEFAULT_MCP_SERVERS.map((s) => s.name), 'memory', 'pixel-office',
52
+ ]);
53
+ function resolveRoot(p) {
54
+ return p ? path.resolve(p) : process.cwd();
55
+ }
56
+ /** Commander collector for repeatable single-value options (append into an array). */
57
+ function collect(val, acc) {
58
+ acc.push(val);
59
+ return acc;
60
+ }
61
+ function sync(root) {
62
+ configManager_1.ConfigManager.syncProjectMcpServers(root, (m) => logger_1.log.gray(m));
63
+ }
64
+ function saveSettings(root, settings) {
65
+ const file = (0, settingsLoader_1.settingsWritePath)(root);
66
+ const dir = path.dirname(file);
67
+ if (!fs.existsSync(dir)) {
68
+ fs.mkdirSync(dir, { recursive: true });
69
+ }
70
+ (0, secureFile_1.writeFileSecure)(file, JSON.stringify(settings, null, 2) + '\n');
71
+ }
72
+ /** Parse repeated K=V option values into an object (ignores malformed pairs). */
73
+ function parseKvPairs(pairs) {
74
+ if (!pairs || pairs.length === 0) {
75
+ return undefined;
76
+ }
77
+ const out = {};
78
+ for (const p of pairs) {
79
+ const i = p.indexOf('=');
80
+ if (i <= 0) {
81
+ logger_1.log.warn(`Ignoring malformed pair "${p}" (expected KEY=VALUE)`);
82
+ continue;
83
+ }
84
+ out[p.slice(0, i)] = p.slice(i + 1);
85
+ }
86
+ return Object.keys(out).length ? out : undefined;
87
+ }
88
+ function isBuiltinName(root, name) {
89
+ if (BUILTIN_NAMES.has(name)) {
90
+ return true;
91
+ }
92
+ const all = (0, projectMcp_1.loadProjectAllMcp)(root);
93
+ return all[name]?._meta?.kind === 'builtin';
94
+ }
95
+ function transportOf(e) {
96
+ if ((0, projectMcp_1.isRemoteMcp)(e)) {
97
+ return e.type === 'sse' ? 'sse' : 'http';
98
+ }
99
+ return 'stdio';
100
+ }
101
+ /** Is a prerequisite launcher present on PATH? (uvx / python[3]). */
102
+ function prereqInstalled(id, deps) {
103
+ if (id === 'python') {
104
+ return !!((0, binDetect_1.detectBinOnPath)('python3', deps) || (0, binDetect_1.detectBinOnPath)('python', deps));
105
+ }
106
+ return !!(0, binDetect_1.detectBinOnPath)(id, deps);
107
+ }
108
+ function buildDetect(root, deps) {
109
+ const platform = deps?.platform ?? process.platform;
110
+ const existing = (0, projectMcp_1.loadProjectAllMcp)(root);
111
+ const apps = (0, mcpCatalog_1.getCatalog)(platform).map((entry) => {
112
+ const det = (0, binDetect_1.detectApp)(entry.id, deps);
113
+ const server = (0, mcpCatalog_1.serverSpecFor)(entry.id, platform);
114
+ const prerequisites = entry.prerequisites.map((pr) => ({
115
+ id: pr.id,
116
+ installed: prereqInstalled(pr.id, deps),
117
+ installHint: pr.installHint,
118
+ }));
119
+ return {
120
+ id: entry.id,
121
+ name: entry.name,
122
+ installed: det.installed,
123
+ path: det.path,
124
+ source: det.source,
125
+ experimental: entry.experimental,
126
+ server,
127
+ serverName: entry.serverName,
128
+ prerequisites,
129
+ postSetup: entry.postSetup,
130
+ notes: entry.notes,
131
+ alreadyEnabled: !!existing[entry.serverName],
132
+ };
133
+ });
134
+ return { apps };
135
+ }
136
+ // ---------------------------------------------------------------------------
137
+ // --enable <app> — write the server spec + propagate + print manual steps.
138
+ // ---------------------------------------------------------------------------
139
+ function enableApp(root, app, opts) {
140
+ const platform = process.platform;
141
+ const entry = (0, mcpCatalog_1.catalogEntry)(app, platform);
142
+ const det = (0, binDetect_1.detectApp)(app);
143
+ if (app === 'blender') {
144
+ if (!det.installed) {
145
+ logger_1.log.error('Blender was not detected on this machine. Install Blender first, then re-run.');
146
+ logger_1.log.gray(' (checked PATH + Program Files / Applications / flatpak / snap)');
147
+ return 1;
148
+ }
149
+ const server = (0, mcpCatalog_1.serverSpecFor)('blender', platform);
150
+ const user = (0, projectMcp_1.loadProjectUserMcp)(root);
151
+ user[entry.serverName] = server;
152
+ (0, projectMcp_1.saveProjectUserMcp)(root, user);
153
+ sync(root);
154
+ logger_1.log.success(`Configured Blender MCP server "${entry.serverName}" (${det.path}).`);
155
+ const uvx = prereqInstalled('uvx');
156
+ if (!uvx) {
157
+ logger_1.log.warn('⚠ `uvx` is NOT on PATH — the server is written but will not start until you install uv:');
158
+ logger_1.log.plain(` ${entry.prerequisites[0].installHint}`);
159
+ }
160
+ logger_1.log.section('Next steps');
161
+ for (const s of entry.postSetup) {
162
+ logger_1.log.plain(` • ${s}`);
163
+ }
164
+ return 0;
165
+ }
166
+ // gimp — experimental.
167
+ logger_1.log.warn('⚠ GIMP MCP is EXPERIMENTAL — upstream ships no packaged launcher; expect manual wiring.');
168
+ const gimpClient = (opts.gimpClient && opts.gimpClient.trim()) || undefined;
169
+ const server = (0, mcpCatalog_1.serverSpecFor)('gimp', platform, { gimpClientPath: gimpClient });
170
+ const user = (0, projectMcp_1.loadProjectUserMcp)(root);
171
+ user[entry.serverName] = server;
172
+ (0, projectMcp_1.saveProjectUserMcp)(root, user);
173
+ sync(root);
174
+ if (gimpClient) {
175
+ logger_1.log.success(`Configured GIMP MCP client "${entry.serverName}" → ${gimpClient}`);
176
+ }
177
+ else {
178
+ logger_1.log.warn(`Wrote a DISABLED stub "${entry.serverName}" (args: ${mcpCatalog_1.GIMP_CLIENT_PLACEHOLDER}). Provide --gimp-client <path> to complete it.`);
179
+ }
180
+ if (!prereqInstalled('python')) {
181
+ logger_1.log.warn('⚠ No python/python3 on PATH:');
182
+ logger_1.log.plain(` ${entry.prerequisites[0].installHint}`);
183
+ }
184
+ logger_1.log.section('Manual steps');
185
+ for (const s of entry.postSetup) {
186
+ logger_1.log.plain(` • ${s}`);
187
+ }
188
+ for (const n of entry.notes) {
189
+ logger_1.log.gray(` ! ${n}`);
190
+ }
191
+ return 0;
192
+ }
193
+ // ---------------------------------------------------------------------------
194
+ // Command wiring
195
+ // ---------------------------------------------------------------------------
196
+ function mcpCommand(program) {
197
+ const cmd = program
198
+ .command('mcp')
199
+ .description('Manage this workspace\'s MCP servers (.mcp.json) and detect creative apps');
200
+ // autodev mcp list [path] [--json]
201
+ cmd
202
+ .command('list [path]')
203
+ .description('List MCP servers configured for this workspace')
204
+ .option('--json', 'Output the raw entries array as JSON')
205
+ .action((p, opts) => {
206
+ const root = resolveRoot(p);
207
+ const all = (0, projectMcp_1.loadProjectAllMcp)(root);
208
+ if (opts.json) {
209
+ const arr = Object.entries(all).map(([name, e]) => ({ name, ...e }));
210
+ process.stdout.write(JSON.stringify(arr, null, 2) + '\n');
211
+ return;
212
+ }
213
+ logger_1.log.section('🔌 MCP servers');
214
+ const names = Object.keys(all);
215
+ if (names.length === 0) {
216
+ logger_1.log.gray(' (none configured)');
217
+ return;
218
+ }
219
+ for (const name of names) {
220
+ const e = all[name];
221
+ const kind = e._meta?.kind === 'builtin' ? 'builtin' : 'user';
222
+ const enabled = e.enabled === false ? 'disabled' : 'enabled';
223
+ const detail = (0, projectMcp_1.isRemoteMcp)(e) ? e.url : [e.command, ...(e.args ?? [])].join(' ');
224
+ logger_1.log.plain(` ${name.padEnd(20)} ${kind.padEnd(8)} ${enabled.padEnd(9)} ${transportOf(e).padEnd(6)} ${detail}`);
225
+ }
226
+ });
227
+ // autodev mcp add <name> [options] [path]
228
+ cmd
229
+ .command('add <name> [path]')
230
+ .description('Add a user MCP server (stdio via --command, or remote via --url)')
231
+ .option('--command <c>', 'stdio launcher (e.g. uvx, npx, python)')
232
+ .option('--arg <a>', 'stdio argument (repeatable; use --arg=-y for dash-prefixed values)', collect, [])
233
+ .option('--env <kv>', 'stdio env var KEY=VALUE (repeatable)', collect, [])
234
+ .option('--url <u>', 'remote MCP endpoint URL (http/sse)')
235
+ .option('--header <kv>', 'remote header KEY=VALUE (repeatable)', collect, [])
236
+ .option('--sse', 'remote transport is SSE (default http)')
237
+ .action((name, p, opts) => {
238
+ const root = resolveRoot(p);
239
+ if (opts.command && opts.url) {
240
+ logger_1.log.error('Provide EITHER --command (stdio) OR --url (remote), not both.');
241
+ process.exit(1);
242
+ }
243
+ if (!opts.command && !opts.url) {
244
+ logger_1.log.error('Provide --command <c> for a stdio server or --url <u> for a remote server.');
245
+ process.exit(1);
246
+ }
247
+ let entry;
248
+ if (opts.url) {
249
+ entry = {
250
+ type: opts.sse ? 'sse' : 'http',
251
+ url: opts.url,
252
+ ...(parseKvPairs(opts.header) ? { headers: parseKvPairs(opts.header) } : {}),
253
+ };
254
+ }
255
+ else {
256
+ entry = {
257
+ command: opts.command,
258
+ args: opts.arg ?? [],
259
+ ...(parseKvPairs(opts.env) ? { env: parseKvPairs(opts.env) } : {}),
260
+ };
261
+ }
262
+ const user = (0, projectMcp_1.loadProjectUserMcp)(root);
263
+ user[name] = entry;
264
+ (0, projectMcp_1.saveProjectUserMcp)(root, user);
265
+ sync(root);
266
+ logger_1.log.success(`Added MCP server "${name}" and propagated to all providers.`);
267
+ });
268
+ // autodev mcp remove <name> [path]
269
+ cmd
270
+ .command('remove <name> [path]')
271
+ .alias('rm')
272
+ .description('Remove a user MCP server')
273
+ .action((name, p) => {
274
+ const root = resolveRoot(p);
275
+ const removed = (0, projectMcp_1.removeProjectUserMcp)(root, name);
276
+ if (!removed) {
277
+ logger_1.log.error(`No user MCP server named "${name}" (built-ins are managed via enable/disable).`);
278
+ process.exit(1);
279
+ }
280
+ sync(root);
281
+ logger_1.log.success(`Removed MCP server "${name}".`);
282
+ });
283
+ // autodev mcp enable <name> [path]
284
+ cmd
285
+ .command('enable <name> [path]')
286
+ .description('Enable an MCP server (user entry or built-in)')
287
+ .action((name, p) => {
288
+ const root = resolveRoot(p);
289
+ setEnabled(root, name, true);
290
+ });
291
+ // autodev mcp disable <name> [path]
292
+ cmd
293
+ .command('disable <name> [path]')
294
+ .description('Disable an MCP server (kept in config; not synced to providers)')
295
+ .action((name, p) => {
296
+ const root = resolveRoot(p);
297
+ setEnabled(root, name, false);
298
+ });
299
+ // autodev mcp detect [path] [--json] [--enable <app>] [--gimp-client <path>]
300
+ cmd
301
+ .command('detect [path]')
302
+ .description('Detect installed creative apps (Blender / GIMP) and optionally enable their MCP server')
303
+ .option('--json', 'Output the stable detection JSON (consumed by the app + extension)')
304
+ .option('--enable <app>', 'Write + propagate the MCP server for this app (blender | gimp)')
305
+ .option('--gimp-client <path>', 'Path to gimp_mcp_client.py (for --enable gimp)')
306
+ .action((p, opts) => {
307
+ const root = resolveRoot(p);
308
+ if (opts.enable) {
309
+ const app = opts.enable.toLowerCase();
310
+ if (app !== 'blender' && app !== 'gimp') {
311
+ logger_1.log.error(`--enable expects "blender" or "gimp" (got "${opts.enable}").`);
312
+ process.exit(1);
313
+ }
314
+ const code = enableApp(root, app, { gimpClient: opts.gimpClient });
315
+ if (code !== 0) {
316
+ process.exit(code);
317
+ }
318
+ return;
319
+ }
320
+ const result = buildDetect(root);
321
+ if (opts.json) {
322
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
323
+ return;
324
+ }
325
+ logger_1.log.section('🎨 Creative-app MCP detection');
326
+ for (const a of result.apps) {
327
+ const mark = a.installed ? '✅' : '⬜';
328
+ const exp = a.experimental ? ' (experimental)' : '';
329
+ logger_1.log.plain(` ${mark} ${a.name}${exp}`);
330
+ if (a.installed) {
331
+ logger_1.log.gray(` path: ${a.path} [${a.source}]`);
332
+ }
333
+ if (a.alreadyEnabled) {
334
+ logger_1.log.gray(' already configured in this workspace');
335
+ }
336
+ for (const pr of a.prerequisites) {
337
+ if (!pr.installed) {
338
+ logger_1.log.warn(` prerequisite "${pr.id}" missing → ${pr.installHint}`);
339
+ }
340
+ }
341
+ }
342
+ logger_1.log.plain('');
343
+ logger_1.log.gray(' Enable one with: autodev mcp detect --enable blender');
344
+ logger_1.log.gray(' GIMP (experimental): autodev mcp detect --enable gimp --gimp-client <gimp_mcp_client.py>');
345
+ });
346
+ }
347
+ /** Flip enabled state for a user entry, or toggle disabledBuiltinMcp for a built-in. */
348
+ function setEnabled(root, name, enabled) {
349
+ if (isBuiltinName(root, name)) {
350
+ const settings = (0, settingsLoader_1.loadSettingsForRoot)(root);
351
+ const disabled = new Set(settings.disabledBuiltinMcp ?? []);
352
+ if (enabled) {
353
+ disabled.delete(name);
354
+ }
355
+ else {
356
+ disabled.add(name);
357
+ }
358
+ settings.disabledBuiltinMcp = [...disabled];
359
+ saveSettings(root, settings);
360
+ sync(root);
361
+ logger_1.log.success(`${enabled ? 'Enabled' : 'Disabled'} built-in MCP server "${name}".`);
362
+ return;
363
+ }
364
+ const user = (0, projectMcp_1.loadProjectUserMcp)(root);
365
+ const entry = user[name];
366
+ if (!entry) {
367
+ logger_1.log.error(`No MCP server named "${name}" in this workspace.`);
368
+ process.exit(1);
369
+ }
370
+ if (enabled) {
371
+ delete entry.enabled;
372
+ }
373
+ else {
374
+ entry.enabled = false;
375
+ }
376
+ (0, projectMcp_1.saveProjectUserMcp)(root, user);
377
+ sync(root);
378
+ logger_1.log.success(`${enabled ? 'Enabled' : 'Disabled'} MCP server "${name}".`);
379
+ }
380
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface BinDetectDeps {
2
+ platform: NodeJS.Platform;
3
+ env: NodeJS.ProcessEnv;
4
+ homedir: () => string;
5
+ /** Existence probe (stat). Injected so tests can fake a filesystem. */
6
+ fileExists: (p: string) => boolean;
7
+ /** List a directory's immediate children. Returns [] on any error/missing dir. */
8
+ listDir: (p: string) => string[];
9
+ }
10
+ export declare function defaultBinDetectDeps(): BinDetectDeps;
11
+ /**
12
+ * Resolve a bare launcher name against PATH, plus a few well-known install
13
+ * dirs that are frequently missing from a GUI-launched process's PATH
14
+ * (~/.local/bin everywhere; %LOCALAPPDATA%\Programs and %APPDATA%\npm on win).
15
+ * Returns the absolute path of the first match, or null.
16
+ */
17
+ export declare function detectBinOnPath(bin: string, deps?: Partial<BinDetectDeps>): string | null;
18
+ export type AppSource = 'path' | 'program-files' | 'app-bundle' | 'flatpak' | 'snap' | 'known-dir';
19
+ export interface DetectAppResult {
20
+ installed: boolean;
21
+ path: string | null;
22
+ source: AppSource | null;
23
+ }
24
+ /**
25
+ * Detect a known creative app across PATH + platform default install locations.
26
+ * Never throws; never spawns the app.
27
+ */
28
+ export declare function detectApp(app: 'blender' | 'gimp', deps?: Partial<BinDetectDeps>): DetectAppResult;
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // binDetect — cross-platform detection of on-PATH launchers AND creative apps
4
+ // that install OUTSIDE PATH (Blender / GIMP).
5
+ //
6
+ // Everything is dependency-injected ({platform, env, homedir, fileExists}) so
7
+ // the detection logic is unit-testable without the app actually being present:
8
+ // a fake Program Files tree on win32, a PATH hit on linux, etc.
9
+ //
10
+ // We only ever stat / glob directories and read PATH — we never spawn the app.
11
+ // (Node fs/path/os only; no child_process here.)
12
+ // ---------------------------------------------------------------------------
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.defaultBinDetectDeps = defaultBinDetectDeps;
48
+ exports.detectBinOnPath = detectBinOnPath;
49
+ exports.detectApp = detectApp;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const os = __importStar(require("os"));
53
+ function realFileExists(p) {
54
+ try {
55
+ return fs.existsSync(p);
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ function realListDir(p) {
62
+ try {
63
+ return fs.readdirSync(p);
64
+ }
65
+ catch {
66
+ return [];
67
+ }
68
+ }
69
+ function defaultBinDetectDeps() {
70
+ return {
71
+ platform: process.platform,
72
+ env: process.env,
73
+ homedir: os.homedir,
74
+ fileExists: realFileExists,
75
+ listDir: realListDir,
76
+ };
77
+ }
78
+ function mergeDeps(deps) {
79
+ return { ...defaultBinDetectDeps(), ...(deps || {}) };
80
+ }
81
+ /** Windows executable extensions, honoring %PATHEXT% with a sane fallback. */
82
+ function winExts(env) {
83
+ const raw = (env.PATHEXT || '').split(';').map((e) => e.trim()).filter(Boolean);
84
+ const exts = raw.length ? raw : ['.EXE', '.CMD', '.BAT', '.COM'];
85
+ // Always allow the bare name too (e.g. a launcher that already carries an ext).
86
+ return ['', ...exts.map((e) => (e.startsWith('.') ? e : '.' + e))];
87
+ }
88
+ /**
89
+ * Resolve a bare launcher name against PATH, plus a few well-known install
90
+ * dirs that are frequently missing from a GUI-launched process's PATH
91
+ * (~/.local/bin everywhere; %LOCALAPPDATA%\Programs and %APPDATA%\npm on win).
92
+ * Returns the absolute path of the first match, or null.
93
+ */
94
+ function detectBinOnPath(bin, deps) {
95
+ const d = mergeDeps(deps);
96
+ const isWin = d.platform === 'win32';
97
+ // A caller that passes an explicit path (has a separator) just gets probed.
98
+ if (/[\\/]/.test(bin)) {
99
+ return d.fileExists(bin) ? bin : null;
100
+ }
101
+ const exts = isWin ? winExts(d.env) : [''];
102
+ const sep = isWin ? ';' : ':';
103
+ const pathDirs = (d.env.PATH || d.env.Path || '').split(sep).map((s) => s.trim()).filter(Boolean);
104
+ const extraDirs = [];
105
+ const home = d.homedir();
106
+ if (home) {
107
+ extraDirs.push(path.join(home, '.local', 'bin'));
108
+ }
109
+ if (isWin) {
110
+ const local = d.env.LOCALAPPDATA;
111
+ const appdata = d.env.APPDATA;
112
+ if (local) {
113
+ extraDirs.push(path.join(local, 'Programs'));
114
+ }
115
+ if (appdata) {
116
+ extraDirs.push(path.join(appdata, 'npm'));
117
+ }
118
+ }
119
+ for (const dir of [...pathDirs, ...extraDirs]) {
120
+ for (const ext of exts) {
121
+ const full = path.join(dir, bin + ext);
122
+ if (d.fileExists(full)) {
123
+ return full;
124
+ }
125
+ }
126
+ }
127
+ return null;
128
+ }
129
+ /** First candidate whose file exists wins (candidates are pre-ordered by preference). */
130
+ function firstExisting(cands, d) {
131
+ for (const c of cands) {
132
+ if (c.path && d.fileExists(c.path)) {
133
+ return { installed: true, path: c.path, source: c.source };
134
+ }
135
+ }
136
+ return { installed: false, path: null, source: null };
137
+ }
138
+ /** Children of `parent` matching `re`, joined back to absolute paths (safe on missing dirs). */
139
+ function globChildren(parent, re, d) {
140
+ return d.listDir(parent).filter((n) => re.test(n)).sort().map((n) => path.join(parent, n));
141
+ }
142
+ /** Flatpak per-app exported launcher path, checked in the user + system roots. */
143
+ function flatpakExportCandidates(appId, d) {
144
+ const roots = [];
145
+ const home = d.homedir();
146
+ if (home) {
147
+ roots.push(path.join(home, '.local', 'share', 'flatpak'));
148
+ }
149
+ roots.push('/var/lib/flatpak');
150
+ return roots.map((r) => ({ path: path.join(r, 'exports', 'bin', appId), source: 'flatpak' }));
151
+ }
152
+ /** Windows "Program Files" roots we know about (64-bit, 32-bit, and env overrides). */
153
+ function winProgramRoots(d) {
154
+ const roots = new Set();
155
+ for (const v of [d.env.PROGRAMFILES, d.env['ProgramW6432'], d.env['ProgramFiles(x86)']]) {
156
+ if (v) {
157
+ roots.add(v);
158
+ }
159
+ }
160
+ roots.add('C:\\Program Files');
161
+ roots.add('C:\\Program Files (x86)');
162
+ return [...roots];
163
+ }
164
+ function detectBlender(d) {
165
+ // 1) PATH (all platforms) — highest confidence.
166
+ const onPath = detectBinOnPath('blender', d);
167
+ if (onPath) {
168
+ return { installed: true, path: onPath, source: 'path' };
169
+ }
170
+ const cands = [];
171
+ if (d.platform === 'win32') {
172
+ // C:\Program Files\Blender Foundation\Blender X.Y\blender.exe
173
+ for (const root of winProgramRoots(d)) {
174
+ const foundation = path.join(root, 'Blender Foundation');
175
+ for (const verDir of globChildren(foundation, /^Blender/i, d)) {
176
+ cands.push({ path: path.join(verDir, 'blender.exe'), source: 'program-files' });
177
+ }
178
+ }
179
+ // %LOCALAPPDATA%\Programs\Blender Foundation\Blender X.Y\blender.exe
180
+ const local = d.env.LOCALAPPDATA;
181
+ if (local) {
182
+ const foundation = path.join(local, 'Programs', 'Blender Foundation');
183
+ for (const verDir of globChildren(foundation, /^Blender/i, d)) {
184
+ cands.push({ path: path.join(verDir, 'blender.exe'), source: 'program-files' });
185
+ }
186
+ }
187
+ // Steam: ...\Steam\steamapps\common\Blender\blender.exe
188
+ for (const root of winProgramRoots(d)) {
189
+ cands.push({ path: path.join(root, 'Steam', 'steamapps', 'common', 'Blender', 'blender.exe'), source: 'known-dir' });
190
+ }
191
+ }
192
+ else if (d.platform === 'darwin') {
193
+ cands.push({ path: '/Applications/Blender.app/Contents/MacOS/Blender', source: 'app-bundle' });
194
+ const home = d.homedir();
195
+ if (home) {
196
+ cands.push({ path: path.join(home, 'Applications', 'Blender.app', 'Contents', 'MacOS', 'Blender'), source: 'app-bundle' });
197
+ }
198
+ }
199
+ else {
200
+ cands.push({ path: '/usr/bin/blender', source: 'known-dir' });
201
+ cands.push({ path: '/usr/local/bin/blender', source: 'known-dir' });
202
+ cands.push({ path: '/snap/bin/blender', source: 'snap' });
203
+ cands.push(...flatpakExportCandidates('org.blender.Blender', d));
204
+ }
205
+ return firstExisting(cands, d);
206
+ }
207
+ function detectGimp(d) {
208
+ const binNames = ['gimp', 'gimp-3.0', 'gimp-2.99', 'gimp-2.10'];
209
+ // 1) PATH (all platforms).
210
+ for (const b of binNames) {
211
+ const onPath = detectBinOnPath(b, d);
212
+ if (onPath) {
213
+ return { installed: true, path: onPath, source: 'path' };
214
+ }
215
+ }
216
+ const cands = [];
217
+ if (d.platform === 'win32') {
218
+ // C:\Program Files\GIMP 2\bin\gimp-2.10.exe (version dirs + version'd exe)
219
+ for (const root of winProgramRoots(d)) {
220
+ for (const gimpDir of globChildren(root, /^GIMP/i, d)) {
221
+ const bin = path.join(gimpDir, 'bin');
222
+ for (const exe of globChildren(bin, /^gimp.*\.exe$/i, d)) {
223
+ cands.push({ path: exe, source: 'program-files' });
224
+ }
225
+ }
226
+ }
227
+ }
228
+ else if (d.platform === 'darwin') {
229
+ cands.push({ path: '/Applications/GIMP.app/Contents/MacOS/gimp', source: 'app-bundle' });
230
+ cands.push({ path: '/Applications/GIMP.app/Contents/MacOS/GIMP', source: 'app-bundle' });
231
+ // Versioned bundle naming (GIMP-2.10.app).
232
+ for (const appDir of globChildren('/Applications', /^GIMP[-.].*\.app$/i, d)) {
233
+ cands.push({ path: path.join(appDir, 'Contents', 'MacOS', 'gimp'), source: 'app-bundle' });
234
+ cands.push({ path: path.join(appDir, 'Contents', 'MacOS', 'GIMP'), source: 'app-bundle' });
235
+ }
236
+ }
237
+ else {
238
+ for (const b of binNames) {
239
+ cands.push({ path: `/usr/bin/${b}`, source: 'known-dir' });
240
+ cands.push({ path: `/usr/local/bin/${b}`, source: 'known-dir' });
241
+ }
242
+ cands.push({ path: '/snap/bin/gimp', source: 'snap' });
243
+ cands.push(...flatpakExportCandidates('org.gimp.GIMP', d));
244
+ }
245
+ return firstExisting(cands, d);
246
+ }
247
+ /**
248
+ * Detect a known creative app across PATH + platform default install locations.
249
+ * Never throws; never spawns the app.
250
+ */
251
+ function detectApp(app, deps) {
252
+ const d = mergeDeps(deps);
253
+ return app === 'blender' ? detectBlender(d) : detectGimp(d);
254
+ }
255
+ //# sourceMappingURL=binDetect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binDetect.js","sourceRoot":"","sources":["../../src/core/binDetect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { McpJsonEntry } from './projectMcp';
2
+ export type CreativeAppId = 'blender' | 'gimp';
3
+ export interface McpPrerequisiteSpec {
4
+ /** Launcher/interpreter the server needs on PATH (e.g. 'uvx', 'python'). */
5
+ id: string;
6
+ /** Copy-pasteable command to install it, per platform. */
7
+ installHint: string;
8
+ }
9
+ export interface McpCatalogEntry {
10
+ id: CreativeAppId;
11
+ name: string;
12
+ /** True = prototype/best-effort. UIs should surface it as such, never one-click. */
13
+ experimental: boolean;
14
+ /** The name the server is written under in .mcp.json. */
15
+ serverName: string;
16
+ prerequisites: McpPrerequisiteSpec[];
17
+ /** Ordered manual steps the user still performs after the config is written. */
18
+ postSetup: string[];
19
+ /** Caveats worth surfacing (port clashes, upstream bugs). */
20
+ notes: string[];
21
+ }
22
+ /** Placeholder the GIMP stub carries until the user points it at their checkout. */
23
+ export declare const GIMP_CLIENT_PLACEHOLDER = "<GIMP_MCP_CLIENT_PY>";
24
+ /** Per-platform install hint for the `uv`/`uvx` toolchain (never `pip install uv`). */
25
+ export declare function uvInstallHint(platform: NodeJS.Platform): string;
26
+ /** Per-platform install hint for Python 3. */
27
+ export declare function pythonInstallHint(platform: NodeJS.Platform): string;
28
+ /**
29
+ * The McpJsonEntry we would write for an app. Platform-aware.
30
+ * - Blender: `uvx blender-mcp` (wrapped in `cmd /c` on win32 so the .cmd shim resolves).
31
+ * - GIMP: a best-effort stdio stub `python <client.py>`, written enabled:false
32
+ * unless the caller supplies a real client path — GIMP ships no launcher, so
33
+ * we never pretend it's one-click.
34
+ */
35
+ export declare function serverSpecFor(app: CreativeAppId, platform: NodeJS.Platform, opts?: {
36
+ gimpClientPath?: string;
37
+ }): McpJsonEntry;
38
+ /** Build the catalog for a given platform (install hints are platform-specific). */
39
+ export declare function getCatalog(platform: NodeJS.Platform): McpCatalogEntry[];
40
+ /** Lookup a single catalog entry. */
41
+ export declare function catalogEntry(app: CreativeAppId, platform: NodeJS.Platform): McpCatalogEntry;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // mcpCatalog — the known creative-app MCP registry. Single source of truth that
4
+ // BOTH the Electron app and the VS Code extension consume via `autodev mcp
5
+ // detect --json`; the CLI is what actually writes the server into .mcp.json and
6
+ // propagates it to every provider, so the shapes here must stay stable.
7
+ //
8
+ // Each app declares: the McpJsonEntry we would write (platform-aware),
9
+ // prerequisites (with an install hint), and honest post-setup / notes. GIMP is
10
+ // flagged experimental because upstream ships no packaged launcher — see below.
11
+ // ---------------------------------------------------------------------------
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.GIMP_CLIENT_PLACEHOLDER = void 0;
14
+ exports.uvInstallHint = uvInstallHint;
15
+ exports.pythonInstallHint = pythonInstallHint;
16
+ exports.serverSpecFor = serverSpecFor;
17
+ exports.getCatalog = getCatalog;
18
+ exports.catalogEntry = catalogEntry;
19
+ /** Placeholder the GIMP stub carries until the user points it at their checkout. */
20
+ exports.GIMP_CLIENT_PLACEHOLDER = '<GIMP_MCP_CLIENT_PY>';
21
+ /** Per-platform install hint for the `uv`/`uvx` toolchain (never `pip install uv`). */
22
+ function uvInstallHint(platform) {
23
+ if (platform === 'win32') {
24
+ return 'powershell -ExecutionPolicy Bypass -c "irm https://astral.sh/uv/install.ps1 | iex"';
25
+ }
26
+ if (platform === 'darwin') {
27
+ return 'brew install uv (or: curl -LsSf https://astral.sh/uv/install.sh | sh)';
28
+ }
29
+ return 'curl -LsSf https://astral.sh/uv/install.sh | sh';
30
+ }
31
+ /** Per-platform install hint for Python 3. */
32
+ function pythonInstallHint(platform) {
33
+ if (platform === 'win32') {
34
+ return 'Install Python 3 from https://www.python.org/downloads/ (tick "Add to PATH")';
35
+ }
36
+ if (platform === 'darwin') {
37
+ return 'brew install python (or install from https://www.python.org)';
38
+ }
39
+ return 'Install python3 via your package manager (e.g. apt install python3)';
40
+ }
41
+ /**
42
+ * The McpJsonEntry we would write for an app. Platform-aware.
43
+ * - Blender: `uvx blender-mcp` (wrapped in `cmd /c` on win32 so the .cmd shim resolves).
44
+ * - GIMP: a best-effort stdio stub `python <client.py>`, written enabled:false
45
+ * unless the caller supplies a real client path — GIMP ships no launcher, so
46
+ * we never pretend it's one-click.
47
+ */
48
+ function serverSpecFor(app, platform, opts) {
49
+ if (app === 'blender') {
50
+ return platform === 'win32'
51
+ ? { command: 'cmd', args: ['/c', 'uvx', 'blender-mcp'] }
52
+ : { command: 'uvx', args: ['blender-mcp'] };
53
+ }
54
+ // gimp — experimental stub.
55
+ const client = (opts?.gimpClientPath && opts.gimpClientPath.trim()) || exports.GIMP_CLIENT_PLACEHOLDER;
56
+ const isStub = client === exports.GIMP_CLIENT_PLACEHOLDER;
57
+ return {
58
+ command: platform === 'win32' ? 'python' : 'python3',
59
+ args: [client],
60
+ // A stub (no real client path) is written disabled so it is preserved for the
61
+ // user to complete without being spawned as a broken server.
62
+ ...(isStub ? { enabled: false } : {}),
63
+ };
64
+ }
65
+ /** Build the catalog for a given platform (install hints are platform-specific). */
66
+ function getCatalog(platform) {
67
+ return [
68
+ {
69
+ id: 'blender',
70
+ name: 'Blender',
71
+ experimental: false,
72
+ serverName: 'blender',
73
+ prerequisites: [{ id: 'uvx', installHint: uvInstallHint(platform) }],
74
+ postSetup: [
75
+ 'Run `uvx blender-mcp install-addon` to install the Blender addon',
76
+ "In Blender: Preferences → Add-ons → enable 'Interface: MCP for Blender'",
77
+ "In the 3D viewport press N → 'MCP for Blender' → Start MCP Server (listens on localhost:9876)",
78
+ 'Run only one MCP client against Blender at a time',
79
+ ],
80
+ notes: [],
81
+ },
82
+ {
83
+ id: 'gimp',
84
+ name: 'GIMP',
85
+ experimental: true,
86
+ serverName: 'gimp',
87
+ prerequisites: [{ id: 'python', installHint: pythonInstallHint(platform) }],
88
+ postSetup: [
89
+ 'Clone https://github.com/libreearth/gimp-mcp and point the server at its gimp_mcp_client.py',
90
+ '`pip install mcp` (the client needs the MCP Python SDK)',
91
+ gimpPluginStep(platform),
92
+ 'In GIMP 3.0: Filters → Development → Start MCP Server (socket on :9876)',
93
+ 'Re-run `autodev mcp detect --enable gimp --gimp-client <path-to-gimp_mcp_client.py>` once you have the client',
94
+ ],
95
+ notes: [
96
+ 'Experimental prototype: upstream ships NO packaged launcher and the README contradicts its own code — expect manual wiring.',
97
+ 'Port 9876 collides with Blender — do not run both MCP servers at once.',
98
+ ],
99
+ },
100
+ ];
101
+ }
102
+ /** GIMP 3.0 plug-ins directory step, per OS. */
103
+ function gimpPluginStep(platform) {
104
+ const dir = platform === 'win32'
105
+ ? '%APPDATA%\\GIMP\\3.0\\plug-ins\\'
106
+ : platform === 'darwin'
107
+ ? '~/Library/Application Support/GIMP/3.0/plug-ins/'
108
+ : '~/.config/GIMP/3.0/plug-ins/';
109
+ return `Copy gimp_mcp_server.py into the GIMP 3.0 plug-ins dir (${dir}) and make it executable`;
110
+ }
111
+ /** Lookup a single catalog entry. */
112
+ function catalogEntry(app, platform) {
113
+ const e = getCatalog(platform).find((x) => x.id === app);
114
+ if (!e) {
115
+ throw new Error(`Unknown creative app: ${app}`);
116
+ }
117
+ return e;
118
+ }
119
+ //# sourceMappingURL=mcpCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpCatalog.js","sourceRoot":"","sources":["../../src/core/mcpCatalog.ts"],"names":[],"mappings":"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"}
@@ -95,6 +95,14 @@ exports.PROFILE_SECTIONS = [
95
95
  'A task may stay deferred past the sweep ONLY if genuinely blocked (missing input, external dependency, human/peer decision) — and then record BOTH the block reason AND the concrete unblock condition in the living docs so it resurfaces next cycle. "Autodev" means no indefinite parking: a leftover task with no written unblock condition is a DROPPED task and a failure mode, not a normal state ([[00d-turn-end-retrospective]], [[00e-long-horizon-planning]]).',
96
96
  ],
97
97
  },
98
+ {
99
+ id: '00l-compaction-continuity', label: 'Compaction Continuity', file: '00l-compaction-continuity.md',
100
+ keyRules: [
101
+ 'Treat context compaction as a boundary the loop must survive — a handoff to your future self. When the window fills and gets summarized, unwritten in-flight state (the half-done edit, the next step, the decision just made) can be lost; anything living only in the conversation and not in a file is at risk the moment compaction runs.',
102
+ 'BEFORE compaction (only if something important is in flight — else skip it, don\'t write noise): snapshot the MINIMUM needed to resume into PRE_COMPACT.md — what you\'re mid-way through, the current plan + next concrete step, open decisions, the deferred set ([[00j-deferred-task-resolution]]), key handles (paths/ids/verify commands), and anything a lossy summary would drop. It is a bounded SNAPSHOT not a log: OVERWRITE each time, keep it well under 16 KB ([[00g-swarm-living-documents]]) beside the other living docs, complementing (not replacing) durable MEMORY/LESSONS/TODO. If a PreCompact hook/compaction signal exists use it as the trigger, but the discipline is tool-agnostic.',
103
+ 'AFTER compaction: READ PRE_COMPACT.md FIRST — before acting, reconstruct the thread ([[00c-verifiable-threads]]) and continue the loop from where it left off, re-attempting the deferred set ([[00j-deferred-task-resolution]]) and honoring the plan ([[00e-long-horizon-planning]]); then update or clear it as state moves on. Losing track of work because the window rolled over is a failure mode, same class as a leftover deferred task — continuity across compaction is a first-class discipline for a long-horizon loop.',
104
+ ],
105
+ },
98
106
  {
99
107
  id: '00f-swarm-orchestration', label: 'Swarm Orchestration', file: '00f-swarm-orchestration.md',
100
108
  keyRules: [
@@ -1 +1 @@
1
- {"version":3,"file":"profileBuilder.js","sourceRoot":"","sources":["../src/profileBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profileBuilder.js","sourceRoot":"","sources":["../src/profileBuilder.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.138",
3
+ "version": "1.4.140",
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/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"
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/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"
37
37
  },
38
38
  "dependencies": {
39
39
  "@opencode-ai/sdk": "^1.14.41",