@aligndottech/cli 0.46.1 → 0.47.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.
Files changed (163) hide show
  1. package/README.md +10 -8
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +14 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/connect-agents.d.ts +3 -1
  6. package/dist/commands/connect-agents.d.ts.map +1 -1
  7. package/dist/commands/connect-agents.js +24 -4
  8. package/dist/commands/connect-agents.js.map +1 -1
  9. package/dist/commands/default-action.d.ts +5 -5
  10. package/dist/commands/default-action.d.ts.map +1 -1
  11. package/dist/commands/default-action.js +40 -13
  12. package/dist/commands/default-action.js.map +1 -1
  13. package/dist/commands/mcp.d.ts.map +1 -1
  14. package/dist/commands/mcp.js +12 -4
  15. package/dist/commands/mcp.js.map +1 -1
  16. package/dist/commands/registry.d.ts.map +1 -1
  17. package/dist/commands/registry.js +2 -0
  18. package/dist/commands/registry.js.map +1 -1
  19. package/dist/commands/setup.d.ts +3 -1
  20. package/dist/commands/setup.d.ts.map +1 -1
  21. package/dist/commands/setup.js +91 -116
  22. package/dist/commands/setup.js.map +1 -1
  23. package/dist/commands/use.d.ts +32 -0
  24. package/dist/commands/use.d.ts.map +1 -0
  25. package/dist/commands/use.js +94 -0
  26. package/dist/commands/use.js.map +1 -0
  27. package/dist/lib/agent-rules.d.ts +18 -5
  28. package/dist/lib/agent-rules.d.ts.map +1 -1
  29. package/dist/lib/agent-rules.js +81 -22
  30. package/dist/lib/agent-rules.js.map +1 -1
  31. package/dist/lib/config.d.ts +14 -10
  32. package/dist/lib/config.d.ts.map +1 -1
  33. package/dist/lib/config.js +64 -17
  34. package/dist/lib/config.js.map +1 -1
  35. package/dist/lib/foreign-env.d.ts +34 -0
  36. package/dist/lib/foreign-env.d.ts.map +1 -0
  37. package/dist/lib/foreign-env.js +50 -0
  38. package/dist/lib/foreign-env.js.map +1 -0
  39. package/dist/lib/gateway-client.d.ts +5 -1
  40. package/dist/lib/gateway-client.d.ts.map +1 -1
  41. package/dist/lib/gateway-client.js +10 -2
  42. package/dist/lib/gateway-client.js.map +1 -1
  43. package/dist/lib/launch/adapters/args.d.ts +7 -0
  44. package/dist/lib/launch/adapters/args.d.ts.map +1 -0
  45. package/dist/lib/launch/adapters/args.js +10 -0
  46. package/dist/lib/launch/adapters/args.js.map +1 -0
  47. package/dist/lib/launch/adapters/claude-code.d.ts +39 -0
  48. package/dist/lib/launch/adapters/claude-code.d.ts.map +1 -0
  49. package/dist/lib/launch/adapters/claude-code.js +39 -0
  50. package/dist/lib/launch/adapters/claude-code.js.map +1 -0
  51. package/dist/lib/launch/adapters/cursor.d.ts +18 -0
  52. package/dist/lib/launch/adapters/cursor.d.ts.map +1 -0
  53. package/dist/lib/launch/adapters/cursor.js +27 -0
  54. package/dist/lib/launch/adapters/cursor.js.map +1 -0
  55. package/dist/lib/launch/adapters/opencode.d.ts +21 -0
  56. package/dist/lib/launch/adapters/opencode.d.ts.map +1 -0
  57. package/dist/lib/launch/adapters/opencode.js +64 -0
  58. package/dist/lib/launch/adapters/opencode.js.map +1 -0
  59. package/dist/lib/launch/adapters/pi.d.ts +23 -0
  60. package/dist/lib/launch/adapters/pi.d.ts.map +1 -0
  61. package/dist/lib/launch/adapters/pi.js +35 -0
  62. package/dist/lib/launch/adapters/pi.js.map +1 -0
  63. package/dist/lib/launch/agents.d.ts +24 -0
  64. package/dist/lib/launch/agents.d.ts.map +1 -0
  65. package/dist/lib/launch/agents.js +16 -0
  66. package/dist/lib/launch/agents.js.map +1 -0
  67. package/dist/lib/launch/config-writes.d.ts +37 -0
  68. package/dist/lib/launch/config-writes.d.ts.map +1 -0
  69. package/dist/lib/launch/config-writes.js +26 -0
  70. package/dist/lib/launch/config-writes.js.map +1 -0
  71. package/dist/lib/launch/cursor-state.d.ts +14 -0
  72. package/dist/lib/launch/cursor-state.d.ts.map +1 -0
  73. package/dist/lib/launch/cursor-state.js +26 -0
  74. package/dist/lib/launch/cursor-state.js.map +1 -0
  75. package/dist/lib/launch/detect.d.ts +7 -0
  76. package/dist/lib/launch/detect.d.ts.map +1 -0
  77. package/dist/lib/launch/detect.js +34 -0
  78. package/dist/lib/launch/detect.js.map +1 -0
  79. package/dist/lib/launch/launch-files.d.ts +15 -0
  80. package/dist/lib/launch/launch-files.d.ts.map +1 -0
  81. package/dist/lib/launch/launch-files.js +56 -0
  82. package/dist/lib/launch/launch-files.js.map +1 -0
  83. package/dist/lib/launch/launch.d.ts +63 -0
  84. package/dist/lib/launch/launch.d.ts.map +1 -0
  85. package/dist/lib/launch/launch.js +188 -0
  86. package/dist/lib/launch/launch.js.map +1 -0
  87. package/dist/lib/launch/opencode-state.d.ts +16 -0
  88. package/dist/lib/launch/opencode-state.d.ts.map +1 -0
  89. package/dist/lib/launch/opencode-state.js +103 -0
  90. package/dist/lib/launch/opencode-state.js.map +1 -0
  91. package/dist/lib/launch/pi-state.d.ts +23 -0
  92. package/dist/lib/launch/pi-state.d.ts.map +1 -0
  93. package/dist/lib/launch/pi-state.js +112 -0
  94. package/dist/lib/launch/pi-state.js.map +1 -0
  95. package/dist/lib/launch/pick-agent.d.ts +28 -0
  96. package/dist/lib/launch/pick-agent.d.ts.map +1 -0
  97. package/dist/lib/launch/pick-agent.js +63 -0
  98. package/dist/lib/launch/pick-agent.js.map +1 -0
  99. package/dist/lib/launch/project-state.d.ts +21 -0
  100. package/dist/lib/launch/project-state.d.ts.map +1 -0
  101. package/dist/lib/launch/project-state.js +100 -0
  102. package/dist/lib/launch/project-state.js.map +1 -0
  103. package/dist/lib/launch/registry/agents/claude-code.d.ts +3 -0
  104. package/dist/lib/launch/registry/agents/claude-code.d.ts.map +1 -0
  105. package/dist/lib/launch/registry/agents/claude-code.js +11 -0
  106. package/dist/lib/launch/registry/agents/claude-code.js.map +1 -0
  107. package/dist/lib/launch/registry/agents/codex.d.ts +3 -0
  108. package/dist/lib/launch/registry/agents/codex.d.ts.map +1 -0
  109. package/dist/lib/launch/registry/agents/codex.js +9 -0
  110. package/dist/lib/launch/registry/agents/codex.js.map +1 -0
  111. package/dist/lib/launch/registry/agents/cursor.d.ts +3 -0
  112. package/dist/lib/launch/registry/agents/cursor.d.ts.map +1 -0
  113. package/dist/lib/launch/registry/agents/cursor.js +11 -0
  114. package/dist/lib/launch/registry/agents/cursor.js.map +1 -0
  115. package/dist/lib/launch/registry/agents/gemini-cli.d.ts +3 -0
  116. package/dist/lib/launch/registry/agents/gemini-cli.d.ts.map +1 -0
  117. package/dist/lib/launch/registry/agents/gemini-cli.js +9 -0
  118. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -0
  119. package/dist/lib/launch/registry/agents/opencode.d.ts +3 -0
  120. package/dist/lib/launch/registry/agents/opencode.d.ts.map +1 -0
  121. package/dist/lib/launch/registry/agents/opencode.js +11 -0
  122. package/dist/lib/launch/registry/agents/opencode.js.map +1 -0
  123. package/dist/lib/launch/registry/agents/pi.d.ts +3 -0
  124. package/dist/lib/launch/registry/agents/pi.d.ts.map +1 -0
  125. package/dist/lib/launch/registry/agents/pi.js +11 -0
  126. package/dist/lib/launch/registry/agents/pi.js.map +1 -0
  127. package/dist/lib/launch/registry/index.d.ts +5 -0
  128. package/dist/lib/launch/registry/index.d.ts.map +1 -0
  129. package/dist/lib/launch/registry/index.js +12 -0
  130. package/dist/lib/launch/registry/index.js.map +1 -0
  131. package/dist/lib/launch/registry/types.d.ts +20 -0
  132. package/dist/lib/launch/registry/types.d.ts.map +1 -0
  133. package/dist/lib/launch/registry/types.js +2 -0
  134. package/dist/lib/launch/registry/types.js.map +1 -0
  135. package/dist/lib/launch/run-agent.d.ts +21 -0
  136. package/dist/lib/launch/run-agent.d.ts.map +1 -0
  137. package/dist/lib/launch/run-agent.js +69 -0
  138. package/dist/lib/launch/run-agent.js.map +1 -0
  139. package/dist/lib/local-gateway-client.d.ts +4 -4
  140. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  141. package/dist/lib/local-gateway-client.js +3 -1
  142. package/dist/lib/local-gateway-client.js.map +1 -1
  143. package/dist/lib/mcp-setup.d.ts +9 -2
  144. package/dist/lib/mcp-setup.d.ts.map +1 -1
  145. package/dist/lib/mcp-setup.js +104 -28
  146. package/dist/lib/mcp-setup.js.map +1 -1
  147. package/dist/lib/safe-config-write.d.ts +140 -0
  148. package/dist/lib/safe-config-write.d.ts.map +1 -0
  149. package/dist/lib/safe-config-write.js +701 -0
  150. package/dist/lib/safe-config-write.js.map +1 -0
  151. package/dist/lib/setup-route.d.ts +26 -0
  152. package/dist/lib/setup-route.d.ts.map +1 -0
  153. package/dist/lib/setup-route.js +36 -0
  154. package/dist/lib/setup-route.js.map +1 -0
  155. package/dist/lib/usage-telemetry.d.ts +6 -2
  156. package/dist/lib/usage-telemetry.d.ts.map +1 -1
  157. package/dist/lib/usage-telemetry.js +6 -2
  158. package/dist/lib/usage-telemetry.js.map +1 -1
  159. package/dist/lib/user-hooks.d.ts +2 -1
  160. package/dist/lib/user-hooks.d.ts.map +1 -1
  161. package/dist/lib/user-hooks.js +42 -10
  162. package/dist/lib/user-hooks.js.map +1 -1
  163. package/package.json +1 -1
@@ -1,6 +1,8 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import path from 'node:path';
3
+ import { carriesLocalEnv } from './foreign-env.js';
3
4
  import os from 'node:os';
5
+ import { safeWriteJson, safeWriteText } from './safe-config-write.js';
4
6
  import { removeUserHooks, writeUserHooks } from './user-hooks.js';
5
7
  function alignArgs(env) {
6
8
  return env ? ['mcp', '--env', env] : ['mcp'];
@@ -56,6 +58,9 @@ export function alignServerEntry(format, env, opts = {}) {
56
58
  // Copilot CLI requires `type` and a `tools` allowlist; without `tools` the server is
57
59
  // configured and none of its tools are callable (GitHub's MCP configuration docs).
58
60
  return { type: 'local', command, args, tools: ['*'] };
61
+ case 'opencode':
62
+ // OpenCode takes the executable and its arguments as a single `command` array.
63
+ return { type: 'local', command: [command, ...args] };
59
64
  default:
60
65
  return { command, args };
61
66
  }
@@ -66,6 +71,8 @@ function jsonTopKey(format) {
66
71
  return 'servers';
67
72
  case 'zed':
68
73
  return 'context_servers';
74
+ case 'opencode':
75
+ return 'mcp';
69
76
  default:
70
77
  return 'mcpServers';
71
78
  }
@@ -164,6 +171,15 @@ export function detectEditors() {
164
171
  if (existsSync(path.join(home, '.gemini'))) {
165
172
  found.push({ name: 'Gemini CLI', configPath: path.join(home, '.gemini', 'settings.json'), format: 'mcpServers' });
166
173
  }
174
+ // OpenCode. Global config is ~/.config/opencode/opencode.json (opencode.ai/docs/config:
175
+ // "~/.config/opencode/opencode.json for the main config"), honouring an absolute
176
+ // $XDG_CONFIG_HOME like the rest of the XDG-based tools. A user who keeps opencode.jsonc
177
+ // instead is fine: OpenCode merges every config it finds, so our file simply sits beside it.
178
+ const xdgConfig = process.env['XDG_CONFIG_HOME'];
179
+ const openCodeDir = path.join(xdgConfig && path.isAbsolute(xdgConfig) ? xdgConfig : path.join(home, '.config'), 'opencode');
180
+ if (existsSync(openCodeDir)) {
181
+ found.push({ name: 'OpenCode', configPath: path.join(openCodeDir, 'opencode.json'), format: 'opencode' });
182
+ }
167
183
  return found;
168
184
  }
169
185
  // Codex uses TOML, not JSON. We manage only the `align` table via a marker-delimited
@@ -205,25 +221,85 @@ function ensureDir(configPath) {
205
221
  if (!existsSync(dir))
206
222
  mkdirSync(dir, { recursive: true });
207
223
  }
208
- function writeCodexConfig(configPath, env) {
209
- const existing = readConfig(configPath, 'codex');
224
+ function writeCodexConfig(configPath, env, onForeign) {
210
225
  const block = codexBlock(env);
211
- let content;
226
+ let foreign = false;
227
+ // C4: the file is the user's own, so it goes through the safe writer (backup, change
228
+ // detection, atomic rename, no symlinks). The decision runs inside it, on the text it read.
229
+ const status = safeWriteText(configPath, (cur) => {
230
+ const existing = cur ?? '';
231
+ // Opt-in: only a caller that passes onForeign (the wizard's local wiring) preserves a team
232
+ // entry. Explicit `align mcp --setup --env local` passes none, and overwrites by design.
233
+ if (onForeign && env === 'local' && codexAlignTargetsElsewhere(existing)) {
234
+ foreign = true;
235
+ return undefined;
236
+ }
237
+ const start = existing.indexOf(CODEX_BLOCK_START);
238
+ const end = existing.indexOf(CODEX_BLOCK_END);
239
+ if (start !== -1 && end !== -1 && end > start) {
240
+ return `${existing.slice(0, start)}${block}${existing.slice(end + CODEX_BLOCK_END.length)}`;
241
+ }
242
+ return existing.trim() ? `${existing.replace(/\s*$/, '')}\n\n${block}\n` : `${block}\n`;
243
+ }, { markers: { start: CODEX_BLOCK_START, end: CODEX_BLOCK_END } });
244
+ if (foreign) {
245
+ onForeign(configPath);
246
+ return false;
247
+ }
248
+ return status !== 'symlink';
249
+ }
250
+ /**
251
+ * An `[mcp_servers.align]` table that is not our managed local block: hand-written, or our
252
+ * block written for a team env. The local wizard leaves both alone.
253
+ */
254
+ function codexAlignTargetsElsewhere(existing) {
255
+ if (!/^\s*\[mcp_servers\.align\]/m.test(existing))
256
+ return false;
212
257
  const start = existing.indexOf(CODEX_BLOCK_START);
213
258
  const end = existing.indexOf(CODEX_BLOCK_END);
214
- if (start !== -1 && end !== -1 && end > start) {
215
- content = `${existing.slice(0, start)}${block}${existing.slice(end + CODEX_BLOCK_END.length)}`;
216
- }
217
- else if (existing.trim()) {
218
- content = `${existing.replace(/\s*$/, '')}\n\n${block}\n`;
259
+ if (start === -1 || end === -1 || end < start)
260
+ return true;
261
+ return !carriesLocalEnv(existing.slice(start, end));
262
+ }
263
+ /**
264
+ * Whether this agent already has an `align` entry that is not pointed at the local graph. Used
265
+ * by `align mcp --setup --env local` to say it REPLACED one. Never throws: an unreadable file
266
+ * reads as "no".
267
+ */
268
+ export function alignEntryTargetsElsewhere(target) {
269
+ try {
270
+ const raw = readConfig(target.configPath, target.format);
271
+ if (!raw.trim())
272
+ return false;
273
+ if (target.format === 'codex')
274
+ return codexAlignTargetsElsewhere(raw);
275
+ const servers = JSON.parse(raw)[jsonTopKey(target.format)];
276
+ return servers?.['align'] !== undefined && !carriesLocalEnv(JSON.stringify(servers['align']));
219
277
  }
220
- else {
221
- content = `${block}\n`;
278
+ catch {
279
+ return false;
222
280
  }
223
- ensureDir(configPath);
224
- writeFileSync(configPath, content, 'utf8');
225
281
  }
226
- function writeJsonConfig(target, env) {
282
+ /** Cursor's config is the user's own, in a dir align does not own: it gets the safe writer (C4). */
283
+ const usesSafeWriter = (target) => target.name === 'Cursor';
284
+ function writeJsonConfig(target, env, onForeign) {
285
+ const key = jsonTopKey(target.format);
286
+ const merge = (existing) => {
287
+ const servers = (existing[key] ?? {});
288
+ if (onForeign && env === 'local' && servers['align'] !== undefined && !carriesLocalEnv(JSON.stringify(servers['align']))) {
289
+ return undefined;
290
+ }
291
+ servers['align'] = alignServerEntry(target.format, env);
292
+ existing[key] = servers;
293
+ return existing;
294
+ };
295
+ if (usesSafeWriter(target)) {
296
+ const status = safeWriteJson(target.configPath, merge, { invalidJsonAdvice: ' before running align mcp --setup' });
297
+ if (status === 'declined') {
298
+ onForeign(target.configPath);
299
+ return false;
300
+ }
301
+ return status !== 'symlink';
302
+ }
227
303
  const raw = readConfig(target.configPath, target.format);
228
304
  let existing = {};
229
305
  if (raw.trim()) {
@@ -234,12 +310,13 @@ function writeJsonConfig(target, env) {
234
310
  throw new Error(`${target.configPath} contains invalid JSON - fix it manually before running align mcp --setup`);
235
311
  }
236
312
  }
237
- const key = jsonTopKey(target.format);
238
- const servers = (existing[key] ?? {});
239
- servers['align'] = alignServerEntry(target.format, env);
240
- existing[key] = servers;
313
+ if (merge(existing) === undefined) {
314
+ onForeign(target.configPath);
315
+ return false;
316
+ }
241
317
  ensureDir(target.configPath);
242
318
  writeFileSync(target.configPath, JSON.stringify(existing, null, 2), 'utf8');
319
+ return true;
243
320
  }
244
321
  /**
245
322
  * Take Align back out of an agent's MCP config (ALI-776).
@@ -300,17 +377,16 @@ function removeMcpEntry(target) {
300
377
  * one (ALI-952). Returns every file it wrote, in order, for the caller to disclose - the
301
378
  * hook file is the one a user would not expect to have been touched.
302
379
  */
303
- export function writeMcpConfig(target, env) {
304
- if (target.format === 'codex') {
305
- writeCodexConfig(target.configPath, env);
306
- }
307
- else {
308
- writeJsonConfig(target, env);
309
- }
310
- if (!target.hooks)
311
- return [target.configPath];
312
- writeUserHooks(target.hooks, env);
313
- return [target.configPath, target.hooks.path];
380
+ export function writeMcpConfig(target, env, onForeign) {
381
+ const written = [];
382
+ const wroteMcp = target.format === 'codex'
383
+ ? writeCodexConfig(target.configPath, env, onForeign)
384
+ : writeJsonConfig(target, env, onForeign);
385
+ if (wroteMcp)
386
+ written.push(target.configPath);
387
+ if (target.hooks && writeUserHooks(target.hooks, env, onForeign))
388
+ written.push(target.hooks.path);
389
+ return written;
314
390
  }
315
391
  /**
316
392
  * ALI-950: is Align already in this agent's config? The second-run card names the agents
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import { chmodSync, copyFileSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
2
+ export declare const BACKUP_SUFFIX = ".align-backup";
3
+ export type SafeWriteStatus = 'written' | 'unchanged' | 'declined' | 'symlink';
4
+ /** The fs calls the writer makes. A parameter so a test can change the file mid-write. */
5
+ export interface SafeFs {
6
+ readFileSync: typeof readFileSync;
7
+ writeFileSync: typeof writeFileSync;
8
+ renameSync: typeof renameSync;
9
+ copyFileSync: typeof copyFileSync;
10
+ lstatSync: typeof lstatSync;
11
+ readlinkSync: typeof readlinkSync;
12
+ chmodSync: typeof chmodSync;
13
+ unlinkSync: typeof unlinkSync;
14
+ mkdirSync: typeof mkdirSync;
15
+ readdirSync: typeof readdirSync;
16
+ }
17
+ type Json = Record<string, unknown>;
18
+ /** One value or array element align put in a JSON config. Hashes only, never the value. */
19
+ export interface OwnedItem {
20
+ path: string[];
21
+ kind: 'value' | 'array-item';
22
+ sha256: string;
23
+ /** Prune ancestors back to this path length if they end up empty (the parents align created). */
24
+ createdDepth: number;
25
+ /**
26
+ * The key existed before align's first write and align overwrote it. `beforeSha256` is the
27
+ * hash of the user's value; the value itself comes back from align's backup.
28
+ */
29
+ replaced?: boolean;
30
+ beforeSha256?: string;
31
+ /** Which snapshot holds the user's value: 0 is `<file>.align-backup`, n is `<file>.align-backup.<n>`. */
32
+ snapshot?: number;
33
+ /** align's write took this key (or this whole array) away; undo puts the user's original back when it is still gone. */
34
+ removed?: boolean;
35
+ }
36
+ /** One file align wrote, as the manifest remembers it. */
37
+ export interface WrittenConfig {
38
+ /** The file did not exist before align's first write. */
39
+ created: boolean;
40
+ /** sha256 of what align last wrote. */
41
+ sha256: string;
42
+ /**
43
+ * sha256 of what align wrote FIRST. A whole-file undo needs the file to equal this AND the last
44
+ * write: a later align rewrite folds the user's edits into the file, so matching only the last
45
+ * write proves nothing about whether they edited it in between.
46
+ */
47
+ firstSha256: string;
48
+ /** 'made': align made the backup. 'foreign': one was already there and is not trusted. 'none': no original to keep. */
49
+ backup: 'made' | 'foreign' | 'none';
50
+ backupSha256?: string;
51
+ owned?: OwnedItem[];
52
+ /**
53
+ * Extra copies of the file taken just before a write that found it changed by someone else
54
+ * (`<file>.align-backup.<n>`, 0600). Hashes only: the manifest never holds config values.
55
+ */
56
+ snapshots?: Array<{
57
+ n: number;
58
+ sha256: string;
59
+ }>;
60
+ /** Text files: the managed block align wrote. */
61
+ block?: {
62
+ start: string;
63
+ end: string;
64
+ sha256: string; /** a block was already there, and align's replaced it: the original is in the backup */
65
+ replaced?: boolean;
66
+ snapshot?: number;
67
+ };
68
+ }
69
+ /** Fold one write into what the manifest already holds for that file. */
70
+ export declare function mergeWrittenConfig(prev: WrittenConfig | undefined, next: WrittenConfig): WrittenConfig;
71
+ /**
72
+ * Where the writer reports each file it wrote (`record`, handed only what THIS write added;
73
+ * the store merges) and how it reads back what is already recorded (`get`). Installed once by
74
+ * the CLI (cli.ts), never by a test, so a test that writes a config does not touch the real store.
75
+ */
76
+ export declare function setWriteRecorder(record: ((file: string, entry: WrittenConfig) => void) | undefined, get?: (file: string) => WrittenConfig | undefined): void;
77
+ export interface SafeWriteOptions {
78
+ /** One line to the user, stderr. Defaults to console.error. */
79
+ note?: (line: string) => void;
80
+ fs?: SafeFs;
81
+ /** JSON only: end the file with a newline (default false, matching the older writers). */
82
+ trailingNewline?: boolean;
83
+ /** Directories at or above this are the user's own and are not checked for links. Default: the home dir. */
84
+ root?: string;
85
+ /** Text only: the markers of the block align manages, so undo can take just that block out. */
86
+ markers?: {
87
+ start: string;
88
+ end: string;
89
+ };
90
+ /** The tail of the invalid-JSON message: what to do about it. */
91
+ invalidJsonAdvice?: string;
92
+ }
93
+ export declare class SafeWriteConflictError extends Error {
94
+ constructor(file: string);
95
+ }
96
+ /** The text form. `compute` gets the current text (null when missing) and returns the new text, or undefined to leave it. */
97
+ export declare function safeWriteText(file: string, compute: (current: string | null) => string | undefined, opts?: SafeWriteOptions): SafeWriteStatus;
98
+ /**
99
+ * What align changed in a JSON config. Containers (the root and its direct children, such as
100
+ * `mcpServers` or `hooks`) are walked; a server entry one level further down is a unit:
101
+ * - new key: one `value` item (or, under a new container, one item per new entry);
102
+ * - existing key whose value changed: ONE `replaced` item holding the hash of the user's value,
103
+ * never a diff into it (a diff into `args` would "undo" half an entry);
104
+ * - existing array: if align only added elements, those elements; if it REMOVED or changed any
105
+ * element it did not put there itself, the whole array is one `replaced` unit;
106
+ * - an existing key align took away: a `removed` unit.
107
+ * `prev` is what an earlier write already recorded, so align's own earlier output is never
108
+ * mistaken for the user's.
109
+ */
110
+ export declare function ownedOf(before: Json, after: Json, prev?: OwnedItem[], snapshot?: number): OwnedItem[];
111
+ /**
112
+ * The JSON form. `update` gets the parsed object ({} for a missing or empty file) and returns
113
+ * the object to write, or undefined to leave the file alone. A file that does not parse is an
114
+ * error, never overwritten.
115
+ */
116
+ export declare function safeWriteJson(file: string, update: (current: Json) => Json | undefined, opts?: SafeWriteOptions): SafeWriteStatus;
117
+ export interface UndoReport {
118
+ /** Whole file put back from align's own backup. */
119
+ restored: string[];
120
+ /** A file align created, removed (it still held exactly what align wrote). */
121
+ removed: string[];
122
+ /** Only align's own entries taken out; the rest of the file kept. */
123
+ cleaned: string[];
124
+ /** Files left as they are, one line each, with what to do by hand. */
125
+ skipped: string[];
126
+ /** The manifest entries that are finished. Skipped files are NOT in here. */
127
+ done: string[];
128
+ }
129
+ /**
130
+ * Take align back out of every recorded file.
131
+ * - If the file still holds exactly what align last wrote, the whole file goes back: a file
132
+ * align created is removed, any other comes back from align's own backup (a regular file
133
+ * align made, whose hash matches; anything else at that path is not trusted).
134
+ * - Otherwise the user has touched it since, and only align's own entries come out. An entry
135
+ * the user edited, or one align overwrote, is left and named.
136
+ * Skipped files keep their manifest entry and their backup.
137
+ */
138
+ export declare function undoWrittenConfigs(manifest: Record<string, WrittenConfig>, fs?: SafeFs): UndoReport;
139
+ export {};
140
+ //# sourceMappingURL=safe-config-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-config-write.d.ts","sourceRoot":"","sources":["../../src/lib/safe-config-write.ts"],"names":[],"mappings":"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"}