@tacuchi/agent-workflow-cli 23.0.0 → 24.0.0

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 (105) hide show
  1. package/README.md +37 -1
  2. package/dist/adapters/postgres-readonly-tools.js +277 -0
  3. package/dist/adapters/postgres-readonly-tools.js.map +1 -0
  4. package/dist/application/database-mcp-server.js +168 -0
  5. package/dist/application/database-mcp-server.js.map +1 -0
  6. package/dist/application/database-mcp-stdio.js +137 -0
  7. package/dist/application/database-mcp-stdio.js.map +1 -0
  8. package/dist/application/database-tool-catalog.js +226 -0
  9. package/dist/application/database-tool-catalog.js.map +1 -0
  10. package/dist/application/dsn-reader-service.js +1 -1
  11. package/dist/application/lock-service.js +96 -31
  12. package/dist/application/lock-service.js.map +1 -1
  13. package/dist/application/logging/log-events.js +19 -3
  14. package/dist/application/logging/log-events.js.map +1 -1
  15. package/dist/application/logging/logger.js +2 -2
  16. package/dist/application/logging/logger.js.map +1 -1
  17. package/dist/application/mcp-connections-service.js +115 -41
  18. package/dist/application/mcp-connections-service.js.map +1 -1
  19. package/dist/application/mcp-doctor-service.js +98 -54
  20. package/dist/application/mcp-doctor-service.js.map +1 -1
  21. package/dist/application/mcp-entry-classification.js +60 -0
  22. package/dist/application/mcp-entry-classification.js.map +1 -0
  23. package/dist/application/mcp-host-reader.js +102 -86
  24. package/dist/application/mcp-host-reader.js.map +1 -1
  25. package/dist/application/mcp-host-receipt-service.js +399 -0
  26. package/dist/application/mcp-host-receipt-service.js.map +1 -0
  27. package/dist/application/mcp-host-receipt-store.js +122 -0
  28. package/dist/application/mcp-host-receipt-store.js.map +1 -0
  29. package/dist/application/mcp-host-receipts.js +28 -0
  30. package/dist/application/mcp-host-receipts.js.map +1 -0
  31. package/dist/application/mcp-host-writer.js +209 -38
  32. package/dist/application/mcp-host-writer.js.map +1 -1
  33. package/dist/application/mcp-launch-probe-service.js +142 -0
  34. package/dist/application/mcp-launch-probe-service.js.map +1 -0
  35. package/dist/application/mcp-migration-service.js +351 -0
  36. package/dist/application/mcp-migration-service.js.map +1 -0
  37. package/dist/application/mcp-native-host-check-service.js +154 -0
  38. package/dist/application/mcp-native-host-check-service.js.map +1 -0
  39. package/dist/application/mcp-receipt-registration-service.js +105 -0
  40. package/dist/application/mcp-receipt-registration-service.js.map +1 -0
  41. package/dist/application/mcp-receipt-removal-service.js +62 -0
  42. package/dist/application/mcp-receipt-removal-service.js.map +1 -0
  43. package/dist/application/mcp-remove-service.js +83 -24
  44. package/dist/application/mcp-remove-service.js.map +1 -1
  45. package/dist/application/mcp-scope-common.js +1 -1
  46. package/dist/application/mcp-scope-common.js.map +1 -1
  47. package/dist/application/mcp-setup-service.js +59 -24
  48. package/dist/application/mcp-setup-service.js.map +1 -1
  49. package/dist/application/mcp-stdio-probe.js +526 -0
  50. package/dist/application/mcp-stdio-probe.js.map +1 -0
  51. package/dist/application/mcp-test-connection-service.js +23 -50
  52. package/dist/application/mcp-test-connection-service.js.map +1 -1
  53. package/dist/application/self/host-states.js.map +1 -1
  54. package/dist/application/self/install-skill.js +4 -34
  55. package/dist/application/self/install-skill.js.map +1 -1
  56. package/dist/application/self/mcp-config.js +369 -59
  57. package/dist/application/self/mcp-config.js.map +1 -1
  58. package/dist/application/self/mcp-via-state.js +9 -6
  59. package/dist/application/self/mcp-via-state.js.map +1 -1
  60. package/dist/application/self/uninstall-skill.js +3 -18
  61. package/dist/application/self/uninstall-skill.js.map +1 -1
  62. package/dist/application/self/uninstall.js +4 -23
  63. package/dist/application/self/uninstall.js.map +1 -1
  64. package/dist/application/workspace-init-service.js +4 -6
  65. package/dist/application/workspace-init-service.js.map +1 -1
  66. package/dist/cli/commands/index.js +2 -0
  67. package/dist/cli/commands/index.js.map +1 -1
  68. package/dist/cli/commands/mcp.js +642 -55
  69. package/dist/cli/commands/mcp.js.map +1 -1
  70. package/dist/cli/commands/tool.js +141 -0
  71. package/dist/cli/commands/tool.js.map +1 -0
  72. package/dist/cli/help-groups.js +1 -1
  73. package/dist/cli/help-groups.js.map +1 -1
  74. package/dist/cli/main.js +189 -57
  75. package/dist/cli/main.js.map +1 -1
  76. package/dist/cli/parser.js +5 -1
  77. package/dist/cli/parser.js.map +1 -1
  78. package/dist/cli/registry.js.map +1 -1
  79. package/dist/cli/render.js +15 -2
  80. package/dist/cli/render.js.map +1 -1
  81. package/dist/cli/tui/components/host-admin-section.js +2 -46
  82. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  83. package/dist/cli/tui/tabs/mcp-tab-helpers.js +71 -0
  84. package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
  85. package/dist/cli/tui/tabs/mcp-tab.js +101 -42
  86. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  87. package/dist/domain/database-tools.js +445 -0
  88. package/dist/domain/database-tools.js.map +1 -0
  89. package/dist/domain/flow/authority.js +4 -0
  90. package/dist/domain/flow/authority.js.map +1 -1
  91. package/dist/domain/mcp-entry.js +131 -17
  92. package/dist/domain/mcp-entry.js.map +1 -1
  93. package/dist/domain/postgres-object-search.js +320 -0
  94. package/dist/domain/postgres-object-search.js.map +1 -0
  95. package/dist/domain/redaction.js +47 -0
  96. package/dist/domain/redaction.js.map +1 -0
  97. package/dist/domain/workline-mcp-entry.js +6 -9
  98. package/dist/domain/workline-mcp-entry.js.map +1 -1
  99. package/dist/ports/postgres-tools.js +10 -0
  100. package/dist/ports/postgres-tools.js.map +1 -0
  101. package/package.json +5 -1
  102. package/dist/application/mcp-dbhub-launcher.js +0 -216
  103. package/dist/application/mcp-dbhub-launcher.js.map +0 -1
  104. package/dist/application/self/mcp-offer.js +0 -96
  105. package/dist/application/self/mcp-offer.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
1
+ import { closeSync, existsSync, fchmodSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { isDeepStrictEqual } from "node:util";
4
4
  import { parse as parseToml } from "smol-toml";
@@ -9,25 +9,77 @@ import { resolveWarpGlobalMcpPath, resolveWarpProjectMcpPath } from "./multiroot
9
9
  // Atomic replace: stage to a tmp sibling and rename over the target. At global
10
10
  // scope the targets are live user files (~/.claude.json is rewritten by any
11
11
  // running Claude Code session); rename keeps a concurrent reader from seeing a
12
- // truncated/half-written file. Lost-update between two writers remains possible
13
- // (would need locking) — accepted residual risk.
14
- let atomicWriteCounter = 0;
12
+ // truncated/half-written file. `withHostConfigLock` serializes Workline
13
+ // writers; an external host can still race, so every caller must read back.
14
+ const MAX_ATOMIC_TEMP_ATTEMPTS = 64;
15
15
  function atomicWriteFileSync(path, content) {
16
- const tmp = `${path}.${process.pid}.${++atomicWriteCounter}.tmp`;
16
+ let descriptor;
17
+ let tmp;
17
18
  try {
18
- writeFileSync(tmp, content, "utf-8");
19
+ const staged = reserveAtomicTempFile(path);
20
+ descriptor = staged.descriptor;
21
+ tmp = staged.path;
22
+ // The temporary file is exclusively created with 0600. Tighten it again
23
+ // where POSIX permissions exist; Windows ACL filesystems can reject
24
+ // fchmod, and that must not turn an otherwise safe atomic replacement
25
+ // into a platform-specific setup failure.
26
+ try {
27
+ fchmodSync(descriptor, 0o600);
28
+ }
29
+ catch {
30
+ // The exclusive create mode above remains the only portable guarantee.
31
+ }
32
+ writeFileSync(descriptor, content, "utf-8");
33
+ closeSync(descriptor);
34
+ descriptor = undefined;
19
35
  renameSync(tmp, path);
36
+ tmp = undefined;
20
37
  }
21
38
  catch (err) {
39
+ if (descriptor !== undefined)
40
+ closeAtomicTempFile(descriptor);
41
+ if (tmp !== undefined)
42
+ discardAtomicTempFile(tmp);
43
+ throw err;
44
+ }
45
+ }
46
+ function reserveAtomicTempFile(path) {
47
+ for (let attempt = 0; attempt < MAX_ATOMIC_TEMP_ATTEMPTS; attempt += 1) {
48
+ const tmp = `${path}.${process.pid}.${attempt + 1}.tmp`;
22
49
  try {
23
- unlinkSync(tmp);
50
+ return { path: tmp, descriptor: openSync(tmp, "wx", 0o600) };
24
51
  }
25
- catch {
26
- // tmp may not exist if writeFileSync failed before creating it
52
+ catch (error) {
53
+ if (filesystemErrorCode(error) === "EEXIST")
54
+ continue;
55
+ throw error;
27
56
  }
28
- throw err;
57
+ }
58
+ throw new McpWriterError("no se pudo reservar un archivo temporal seguro para la configuración MCP", path);
59
+ }
60
+ function closeAtomicTempFile(descriptor) {
61
+ try {
62
+ closeSync(descriptor);
63
+ }
64
+ catch {
65
+ // The failed write is reported below; cleanup is best-effort.
66
+ }
67
+ }
68
+ function discardAtomicTempFile(path) {
69
+ try {
70
+ unlinkSync(path);
71
+ }
72
+ catch {
73
+ // Only an exclusively-created temp reaches this branch. It may already
74
+ // have been removed by the filesystem after a failed write.
29
75
  }
30
76
  }
77
+ function filesystemErrorCode(error) {
78
+ if (error === null || typeof error !== "object")
79
+ return undefined;
80
+ const code = error.code;
81
+ return typeof code === "string" ? code : undefined;
82
+ }
31
83
  function claudeMcpFile(scope) {
32
84
  return scope.kind === "global"
33
85
  ? join(scope.scopeDir, ".claude.json")
@@ -43,7 +95,7 @@ function legacyClaudeSettingsFile(scope) {
43
95
  * location while one cannot be safely interpreted would make the operation
44
96
  * partially mutate the user's configuration.
45
97
  */
46
- function inspectLegacyClaudeMcpEntry(scope, entry) {
98
+ function inspectLegacyClaudeMcpEntry(scope, entry, replaceLegacy) {
47
99
  const target = legacyClaudeSettingsFile(scope);
48
100
  if (!existsSync(target))
49
101
  return { state: "absent", target };
@@ -67,15 +119,18 @@ function inspectLegacyClaudeMcpEntry(scope, entry) {
67
119
  return { state: "conflict", target };
68
120
  if (!(entry.name in current))
69
121
  return { state: "absent", target };
70
- if (!isDeepStrictEqual(current[entry.name], mcpEntryShapeForHost("claude", entry))) {
122
+ const expected = mcpEntryShapeForHost("claude", entry);
123
+ const legacy = replaceLegacy === undefined ? undefined : mcpEntryShapeForHost("claude", replaceLegacy);
124
+ if (!isDeepStrictEqual(current[entry.name], expected) &&
125
+ !isDeepStrictEqual(current[entry.name], legacy)) {
71
126
  return { state: "conflict", target };
72
127
  }
73
128
  return { state: "owned", target, data, servers: current };
74
129
  }
75
- function cleanupLegacyClaudeMcpEntry(scope, entry, dryRun) {
130
+ function cleanupLegacyClaudeMcpEntry(scope, entry, dryRun, replaceLegacy) {
76
131
  if (dryRun)
77
132
  return;
78
- const legacy = inspectLegacyClaudeMcpEntry(scope, entry);
133
+ const legacy = inspectLegacyClaudeMcpEntry(scope, entry, replaceLegacy);
79
134
  if (legacy.state !== "owned")
80
135
  return;
81
136
  legacy.servers[entry.name] = undefined;
@@ -93,11 +148,9 @@ function cleanupLegacyClaudeMcpEntry(scope, entry, dryRun) {
93
148
  }
94
149
  export class McpWriterError extends Error {
95
150
  target;
96
- cause;
97
- constructor(message, target, cause) {
151
+ constructor(message, target) {
98
152
  super(message);
99
153
  this.target = target;
100
- this.cause = cause;
101
154
  this.name = "McpWriterError";
102
155
  }
103
156
  }
@@ -110,6 +163,16 @@ export class McpWriterError extends Error {
110
163
  * `assertNeverHost` default turns that into a compile error instead.
111
164
  */
112
165
  export function writeMcpEntry(host, entry, scope, opts = {}) {
166
+ if (opts.dryRun)
167
+ return writeMcpEntryUnlocked(host, entry, scope, opts);
168
+ return withHostConfigLock(hostConfigTarget(host, scope), () => writeMcpEntryUnlocked(host, entry, scope, opts));
169
+ }
170
+ export function removeMcpEntry(host, entry, scope, opts = {}) {
171
+ if (opts.dryRun)
172
+ return removeMcpEntryUnlocked(host, entry, scope, opts);
173
+ return withHostConfigLock(hostConfigTarget(host, scope), () => removeMcpEntryUnlocked(host, entry, scope, opts));
174
+ }
175
+ function writeMcpEntryUnlocked(host, entry, scope, opts) {
113
176
  switch (host) {
114
177
  case "claude":
115
178
  return writeClaudeMcpEntry(entry, scope, opts);
@@ -129,7 +192,7 @@ export function writeMcpEntry(host, entry, scope, opts = {}) {
129
192
  return assertNeverHost(host);
130
193
  }
131
194
  }
132
- export function removeMcpEntry(host, entry, scope, opts = {}) {
195
+ function removeMcpEntryUnlocked(host, entry, scope, opts) {
133
196
  switch (host) {
134
197
  case "claude":
135
198
  return removeClaudeMcpEntry(entry, scope, opts);
@@ -149,6 +212,62 @@ export function removeMcpEntry(host, entry, scope, opts = {}) {
149
212
  return assertNeverHost(host);
150
213
  }
151
214
  }
215
+ function hostConfigTarget(host, scope) {
216
+ switch (host) {
217
+ case "claude":
218
+ return claudeMcpFile(scope);
219
+ case "codex":
220
+ return join(scope.scopeDir, ".codex", "config.toml");
221
+ case "warp":
222
+ return warpMcpFile(scope);
223
+ case "gemini":
224
+ return geminiMcpFile(scope);
225
+ case "kimi":
226
+ return kimiMcpFile(scope);
227
+ case "opencode":
228
+ return opencodeMcpFile(scope);
229
+ case "crush":
230
+ return crushMcpFile(scope);
231
+ default:
232
+ return assertNeverHost(host);
233
+ }
234
+ }
235
+ /**
236
+ * Serializes the whole read-modify-write window, not merely the final rename.
237
+ * A competing writer fails explicitly instead of silently dropping one host
238
+ * entry. A stale lock is intentionally not guessed away: removing it requires
239
+ * an operator decision because it may belong to another live process.
240
+ */
241
+ function withHostConfigLock(target, work) {
242
+ const lock = `${target}.agent-workflow.lock`;
243
+ mkdirSync(dirname(lock), { recursive: true });
244
+ let descriptor;
245
+ try {
246
+ descriptor = openSync(lock, "wx", 0o600);
247
+ }
248
+ catch (error) {
249
+ if (filesystemErrorCode(error) === "EEXIST") {
250
+ throw new McpWriterError("otro proceso está actualizando esta configuración MCP; reintentá cuando termine", target);
251
+ }
252
+ throw error;
253
+ }
254
+ try {
255
+ return work();
256
+ }
257
+ finally {
258
+ try {
259
+ closeSync(descriptor);
260
+ }
261
+ finally {
262
+ try {
263
+ unlinkSync(lock);
264
+ }
265
+ catch {
266
+ // A remaining lock is safer than claiming a concurrent write succeeded.
267
+ }
268
+ }
269
+ }
270
+ }
152
271
  /** Compile-time exhaustiveness; at runtime it refuses instead of writing somewhere wrong. */
153
272
  function assertNeverHost(host) {
154
273
  const id = String(host);
@@ -188,19 +307,22 @@ function writeJsonMcpEntry(host, file, topKey, entry, opts) {
188
307
  const bag = recordContainer(data, topKey, file) ?? {};
189
308
  const existing = bag[entry.name];
190
309
  const expected = mcpEntryShapeForHost(host, entry);
310
+ const legacy = opts.replaceLegacy === undefined ? undefined : mcpEntryShapeForHost(host, opts.replaceLegacy);
191
311
  if (isDeepStrictEqual(existing, expected)) {
192
312
  return resultSkipped(host, file, entry.name);
193
313
  }
194
314
  // A matching name is not enough to establish ownership. Replacing a server
195
315
  // whose shape differs would overwrite somebody else's configuration.
196
- if (existing !== undefined) {
316
+ if (existing !== undefined && !isDeepStrictEqual(existing, legacy)) {
197
317
  return resultConflict(host, file, entry.name);
198
318
  }
199
319
  bag[entry.name] = expected;
200
320
  data[topKey] = bag;
201
321
  const newJson = `${JSON.stringify(data, null, 2)}\n`;
202
322
  if (opts.dryRun) {
203
- return resultDryRun(host, file, entry.name, [`${topKey}.${entry.name}: add`]);
323
+ return resultDryRun(host, file, entry.name, [
324
+ `${topKey}.${entry.name}: ${existing === undefined ? "add" : "replace known legacy"}`,
325
+ ]);
204
326
  }
205
327
  mkdirSync(dirname(file), { recursive: true });
206
328
  purgeStaleBackups(file);
@@ -216,10 +338,11 @@ function removeJsonMcpEntry(host, file, topKey, entry, opts) {
216
338
  return resultSkipped(host, file, entry.name);
217
339
  const existing = bag[entry.name];
218
340
  const expected = mcpEntryShapeForHost(host, entry);
341
+ const legacy = opts.replaceLegacy === undefined ? undefined : mcpEntryShapeForHost(host, opts.replaceLegacy);
219
342
  if (existing === undefined) {
220
343
  return resultSkipped(host, file, entry.name);
221
344
  }
222
- if (!isDeepStrictEqual(existing, expected)) {
345
+ if (!isDeepStrictEqual(existing, expected) && !isDeepStrictEqual(existing, legacy)) {
223
346
  return resultConflict(host, file, entry.name);
224
347
  }
225
348
  bag[entry.name] = undefined;
@@ -240,7 +363,7 @@ function removeJsonMcpEntry(host, file, topKey, entry, opts) {
240
363
  // .claude/settings.json sweep. A foreign or malformed legacy entry stops before
241
364
  // the primary file changes; an exact own entry is swept on a real write/remove.
242
365
  function writeClaudeMcpEntry(entry, scope, opts) {
243
- const legacy = inspectLegacyClaudeMcpEntry(scope, entry);
366
+ const legacy = inspectLegacyClaudeMcpEntry(scope, entry, opts.replaceLegacy);
244
367
  if (legacy.state === "conflict")
245
368
  return resultConflict("claude", legacy.target, entry.name);
246
369
  const res = writeJsonMcpEntry("claude", claudeMcpFile(scope), "mcpServers", entry, opts);
@@ -252,11 +375,26 @@ function writeClaudeMcpEntry(entry, scope, opts) {
252
375
  return resultDryRun("claude", legacy.target, entry.name, [
253
376
  `mcpServers.${entry.name}: remove legacy entry`,
254
377
  ]);
255
- cleanupLegacyClaudeMcpEntry(scope, entry, false);
256
- return resultWritten("claude", legacy.target, entry.name, null);
378
+ try {
379
+ cleanupLegacyClaudeMcpEntry(scope, entry, false, opts.replaceLegacy);
380
+ return resultWritten("claude", legacy.target, entry.name, null);
381
+ }
382
+ catch {
383
+ return partialLegacyCleanup(res, legacy.target);
384
+ }
385
+ }
386
+ if (legacy.state === "owned" && res.action === "written") {
387
+ try {
388
+ cleanupLegacyClaudeMcpEntry(scope, entry, false, opts.replaceLegacy);
389
+ }
390
+ catch {
391
+ // The primary descriptor is already durable. Do not hide that mutation
392
+ // or roll it back blindly: the old location might have been changed by a
393
+ // host meanwhile. The caller will fail readback, withhold the receipt,
394
+ // and a later explicit setup/migration can retry exact cleanup.
395
+ return partialLegacyCleanup(res, legacy.target);
396
+ }
257
397
  }
258
- if (legacy.state === "owned" && res.action === "written")
259
- cleanupLegacyClaudeMcpEntry(scope, entry, false);
260
398
  return res;
261
399
  }
262
400
  function writeCodexMcpEntry(entry, scope, opts) {
@@ -266,10 +404,13 @@ function writeCodexMcpEntry(entry, scope, opts) {
266
404
  const mcpServers = recordContainer(parsed, "mcp_servers", configFile) ?? {};
267
405
  const existing = mcpServers[entry.name];
268
406
  const expected = mcpEntryShapeForHost("codex", entry);
407
+ const legacy = opts.replaceLegacy === undefined
408
+ ? undefined
409
+ : mcpEntryShapeForHost("codex", opts.replaceLegacy);
269
410
  if (isDeepStrictEqual(existing, expected)) {
270
411
  return resultSkipped("codex", configFile, entry.name);
271
412
  }
272
- if (existing !== undefined) {
413
+ if (existing !== undefined && !isDeepStrictEqual(existing, legacy)) {
273
414
  return resultConflict("codex", configFile, entry.name);
274
415
  }
275
416
  const cleaned = removeCodexMcpBlocks(oldContent, entry.name);
@@ -279,7 +420,7 @@ function writeCodexMcpEntry(entry, scope, opts) {
279
420
  }
280
421
  if (opts.dryRun) {
281
422
  return resultDryRun("codex", configFile, entry.name, [
282
- `[mcp_servers.${entry.name}]: add`,
423
+ `[mcp_servers.${entry.name}]: ${existing === undefined ? "add" : "replace known legacy"}`,
283
424
  `[mcp_servers.${entry.name}.env]: add`,
284
425
  ]);
285
426
  }
@@ -291,7 +432,7 @@ function writeCodexMcpEntry(entry, scope, opts) {
291
432
  return resultWritten("codex", configFile, entry.name, null);
292
433
  }
293
434
  function removeClaudeMcpEntry(entry, scope, opts) {
294
- const legacy = inspectLegacyClaudeMcpEntry(scope, entry);
435
+ const legacy = inspectLegacyClaudeMcpEntry(scope, entry, opts.replaceLegacy);
295
436
  if (legacy.state === "conflict")
296
437
  return resultConflict("claude", legacy.target, entry.name);
297
438
  const res = removeJsonMcpEntry("claude", claudeMcpFile(scope), "mcpServers", entry, opts);
@@ -302,11 +443,25 @@ function removeClaudeMcpEntry(entry, scope, opts) {
302
443
  return resultDryRun("claude", legacy.target, entry.name, [
303
444
  `mcpServers.${entry.name}: remove legacy entry`,
304
445
  ]);
305
- cleanupLegacyClaudeMcpEntry(scope, entry, false);
306
- return resultRemoved("claude", legacy.target, entry.name, null);
446
+ try {
447
+ cleanupLegacyClaudeMcpEntry(scope, entry, false, opts.replaceLegacy);
448
+ return resultRemoved("claude", legacy.target, entry.name, null);
449
+ }
450
+ catch {
451
+ return partialLegacyCleanup(res, legacy.target);
452
+ }
453
+ }
454
+ if (legacy.state === "owned" && res.action === "removed") {
455
+ try {
456
+ cleanupLegacyClaudeMcpEntry(scope, entry, false, opts.replaceLegacy);
457
+ }
458
+ catch {
459
+ // As in setup, the primary removal is real but legacy retirement is not
460
+ // complete. Keep the receipt and registry through the caller's partial
461
+ // error path so the next explicit remove can recover safely.
462
+ return partialLegacyCleanup(res, legacy.target);
463
+ }
307
464
  }
308
- if (legacy.state === "owned" && res.action === "removed")
309
- cleanupLegacyClaudeMcpEntry(scope, entry, false);
310
465
  return res;
311
466
  }
312
467
  function removeCodexMcpEntry(entry, scope, opts) {
@@ -320,7 +475,11 @@ function removeCodexMcpEntry(entry, scope, opts) {
320
475
  if (existing === undefined) {
321
476
  return resultSkipped("codex", configFile, entry.name);
322
477
  }
323
- if (!isDeepStrictEqual(existing, mcpEntryShapeForHost("codex", entry))) {
478
+ const legacy = opts.replaceLegacy === undefined
479
+ ? undefined
480
+ : mcpEntryShapeForHost("codex", opts.replaceLegacy);
481
+ if (!isDeepStrictEqual(existing, mcpEntryShapeForHost("codex", entry)) &&
482
+ !isDeepStrictEqual(existing, legacy)) {
324
483
  return resultConflict("codex", configFile, entry.name);
325
484
  }
326
485
  const newContent = removeCodexMcpBlocks(oldContent, entry.name);
@@ -365,8 +524,8 @@ function readJsonFile(file) {
365
524
  return parsed;
366
525
  throw new Error("contenido no es un objeto JSON");
367
526
  }
368
- catch (err) {
369
- throw new McpWriterError(`JSON inválido en ${file}`, file, err.message);
527
+ catch {
528
+ throw new McpWriterError(`JSON inválido en ${file}`, file);
370
529
  }
371
530
  }
372
531
  function parseCodexConfig(content, configFile) {
@@ -378,8 +537,8 @@ function parseCodexConfig(content, configFile) {
378
537
  return parsed;
379
538
  throw new Error("contenido TOML no es un objeto");
380
539
  }
381
- catch (err) {
382
- throw new McpWriterError(`config.toml inválido en ${configFile}`, configFile, err.message);
540
+ catch {
541
+ throw new McpWriterError(`config.toml inválido en ${configFile}`, configFile);
383
542
  }
384
543
  }
385
544
  /**
@@ -441,6 +600,8 @@ export function appendCodexMcpBlocks(text, entry) {
441
600
  buffer.push(`[mcp_servers.${entry.name}]`);
442
601
  buffer.push(`command = ${tomlString(entry.command)}`);
443
602
  buffer.push(`args = [${entry.args.map(tomlString).join(", ")}]`);
603
+ if (entry.optional)
604
+ buffer.push("required = false");
444
605
  buffer.push("");
445
606
  buffer.push(`[mcp_servers.${entry.name}.env]`);
446
607
  for (const [k, v] of Object.entries(entry.env)) {
@@ -468,6 +629,16 @@ function resultDryRun(host, target, name, diff) {
468
629
  function resultConflict(host, target, name) {
469
630
  return action(host, target, name, "conflict", null);
470
631
  }
632
+ function partialLegacyCleanup(result, target) {
633
+ return {
634
+ ...result,
635
+ partial: {
636
+ code: "MCP_LEGACY_CLEANUP_FAILED",
637
+ target,
638
+ message: "No se pudo retirar la ubicación legacy de Claude; no recargues el host y reintentá la operación.",
639
+ },
640
+ };
641
+ }
471
642
  function action(host, target, name, status, backup) {
472
643
  return { host, target, name, action: status, backup };
473
644
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-host-writer.js","sourceRoot":"","sources":["../../src/application/mcp-host-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-host-writer.js","sourceRoot":"","sources":["../../src/application/mcp-host-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAML,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAO1F,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,wEAAwE;AACxE,4EAA4E;AAC5E,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC,SAAS,mBAAmB,CAAC,IAAY,EAAE,OAAe;IACxD,IAAI,UAA8B,CAAC;IACnC,IAAI,GAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QAClB,wEAAwE;QACxE,oEAAoE;QACpE,sEAAsE;QACtE,0CAA0C;QAC1C,IAAI,CAAC;YACH,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;QACD,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,UAAU,GAAG,SAAS,CAAC;QACvB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,GAAG,GAAG,SAAS,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,UAAU,KAAK,SAAS;YAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,GAAG,KAAK,SAAS;YAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,wBAAwB,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,SAAS;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,IAAI,cAAc,CACtB,0EAA0E,EAC1E,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,IAAI,CAAC;QACH,SAAS,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAiB;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC;AAYD;;;;;;GAMG;AACH,SAAS,2BAA2B,CAClC,KAAiB,EACjB,KAAe,EACf,aAAwB;IAExB,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAE5D,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAC5D,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;IAChC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAC7D,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,MAAM,GACV,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC1F,IACE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;QACjD,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAC/C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,2BAA2B,CAClC,KAAiB,EACjB,KAAe,EACf,MAAe,EACf,aAAwB;IAExB,IAAI,MAAM;QAAE,OAAO;IACnB,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACxE,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;QAAE,OAAO;IACrC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC1E,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IACrC,CAAC;IACD,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,aAAa,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGrB;IAFlB,YACE,OAAe,EACC,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAa,EACb,KAAe,EACf,KAAiB,EACjB,OAAqB,EAAE;IAEvB,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACxE,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAC5D,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAa,EACb,KAAe,EACf,KAAiB,EACjB,OAAqB,EAAE;IAEvB,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAC5D,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAa,EACb,KAAe,EACf,KAAiB,EACjB,IAAkB;IAElB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACjD,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChD,KAAK,MAAM;YACT,OAAO,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAClF,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACtF,KAAK,MAAM;YACT,OAAO,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAClF,KAAK,UAAU;YACb,OAAO,iBAAiB,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnF,KAAK,OAAO;YACV,OAAO,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7E;YACE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAa,EACb,KAAe,EACf,KAAiB,EACjB,IAAkB;IAElB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,KAAK,OAAO;YACV,OAAO,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACjD,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnF,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACvF,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnF,KAAK,UAAU;YACb,OAAO,kBAAkB,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACpF,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9E;YACE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,KAAiB;IACxD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvD,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,UAAU;YACb,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B;YACE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAI,MAAc,EAAE,IAAa;IAC1D,MAAM,IAAI,GAAG,GAAG,MAAM,sBAAsB,CAAC;IAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,cAAc,CACtB,iFAAiF,EACjF,MAAM,CACP,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,SAAS,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,wEAAwE;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,SAAS,eAAe,CAAC,IAAW;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,cAAc,CAAC,iCAAiC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,sCAAsC;AACtC,yEAAyE;AACzE,+EAA+E;AAC/E,mEAAmE;AACnE,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC;AACD,SAAS,eAAe,CAAC,KAAiB;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC5C,CAAC;AACD,SAAS,YAAY,CAAC,KAAiB;IACrC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACzC,CAAC;AACD,mFAAmF;AACnF,0EAA0E;AAC1E,sEAAsE;AACtE,6EAA6E;AAC7E,wCAAwC;AACxC,SAAS,WAAW,CAAC,KAAiB;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,gFAAgF;AAChF,sCAAsC;AACtC,SAAS,iBAAiB,CACxB,IAAa,EACb,IAAY,EACZ,MAAc,EACd,KAAe,EACf,IAAkB;IAElB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEhG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACnB,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAErD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC1C,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,EAAE;SACtF,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAa,EACb,IAAY,EACZ,MAAc,EACd,KAAe,EACf,IAAkB;IAElB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAChG,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACnF,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAErD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,oEAAoE;AACpE,gFAAgF;AAChF,gFAAgF;AAChF,SAAS,mBAAmB,CAC1B,KAAe,EACf,KAAiB,EACjB,IAAkB;IAElB,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5F,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzF,0EAA0E;IAC1E,2EAA2E;IAC3E,4EAA4E;IAC5E,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;QACpE,IAAI,IAAI,CAAC,MAAM;YACb,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE;gBACvD,cAAc,KAAK,CAAC,IAAI,uBAAuB;aAChD,CAAC,CAAC;QACL,IAAI,CAAC;YACH,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrE,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,yEAAyE;YACzE,uEAAuE;YACvE,gEAAgE;YAChE,OAAO,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAe,EACf,KAAiB,EACjB,IAAkB;IAElB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,KAAK,SAAS;QAC9B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAExD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE;YACnD,gBAAgB,KAAK,CAAC,IAAI,MAAM,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,EAAE;YACzF,gBAAgB,KAAK,CAAC,IAAI,YAAY;SACvC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5C,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAe,EACf,KAAiB,EACjB,IAAkB;IAElB,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5F,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1F,4EAA4E;IAC5E,oDAAoD;IACpD,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;QACpE,IAAI,IAAI,CAAC,MAAM;YACb,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE;gBACvD,cAAc,KAAK,CAAC,IAAI,uBAAuB;aAChD,CAAC,CAAC;QACL,IAAI,CAAC;YACH,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrE,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,uEAAuE;YACvE,6DAA6D;YAC7D,OAAO,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAe,EACf,KAAiB,EACjB,IAAkB;IAElB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACtE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,KAAK,SAAS;QAC9B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxD,IACE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EACpC,CAAC;QACD,OAAO,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE;YACnD,gBAAgB,KAAK,CAAC,IAAI,WAAW;YACrC,gBAAgB,KAAK,CAAC,IAAI,eAAe;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5C,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAiB;IACpC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpF,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;IACpC,CAAC;IACD,OAAO,yBAAyB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,oBAAoB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,UAAkB;IAC3D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,2BAA2B,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,MAA+B,EAC/B,GAAW,EACX,IAAY;IAEZ,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACtC,MAAM,IAAI,cAAc,CAAC,eAAe,GAAG,iBAAiB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AAEzE,SAAS,aAAa,CAAC,UAAyB;IAC9C,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO;IAChC,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC;YAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAAY;IAC7D,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,MAAM,IAAI,CAAC,gBAAgB,IAAI,OAAO,EAAE,gBAAgB,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5E,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,aAAqB;IACtD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAe;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,IAAI,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,IAAI,CAAC;IAClE,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,iFAAiF;IACjF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CACpB,IAAa,EACb,MAAc,EACd,IAAY,EACZ,MAAqB;IAErB,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CACpB,IAAa,EACb,MAAc,EACd,IAAY,EACZ,MAAqB;IAErB,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,IAAa,EAAE,MAAc,EAAE,IAAY;IAChE,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,YAAY,CAAC,IAAa,EAAE,MAAc,EAAE,IAAY,EAAE,IAAc;IAC/E,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,IAAa,EAAE,MAAc,EAAE,IAAY;IACjE,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAsB,EAAE,MAAc;IAClE,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE;YACP,IAAI,EAAE,2BAA2B;YACjC,MAAM;YACN,OAAO,EACL,kGAAkG;SACrG;KACF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CACb,IAAa,EACb,MAAc,EACd,IAAY,EACZ,MAAsB,EACtB,MAAqB;IAErB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACxD,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { DATABASE_TOOL_DESCRIPTORS } from "../domain/database-tools.js";
2
+ import { classifyMcpEntry } from "./mcp-entry-classification.js";
3
+ import { readMcpEntry } from "./mcp-host-reader.js";
4
+ import { digestMcpReceiptDescriptor } from "./mcp-host-receipt-service.js";
5
+ import { openMcpHostReceiptService } from "./mcp-host-receipts.js";
6
+ import { runMcpStdioProbe } from "./mcp-stdio-probe.js";
7
+ /**
8
+ * Executes the descriptor read back from disk after a successful install. It
9
+ * deliberately proves only launchability (initialize → initialized → tools/list),
10
+ * never a live database connection or a host reload.
11
+ */
12
+ export async function probePersistedMcpSetupEntries(paths, result, additionalTargets = []) {
13
+ const probes = [];
14
+ const errors = [];
15
+ // Only global descriptors have the absolute command/entrypoint guarantee
16
+ // that this lifecycle probe proves. Workspace descriptors are deliberately
17
+ // portable and PATH-dependent, so their doctor state remains actionable.
18
+ if (result.dry_run || result.scope !== "global")
19
+ return { probes, errors };
20
+ const receipts = openMcpHostReceiptService(paths);
21
+ const targets = dedupeProbeTargets(additionalTargets);
22
+ for (const target of targets) {
23
+ const snapshot = readProbeSnapshot(target, result.scope_dir, result.scope);
24
+ if (snapshot === undefined || !isCurrentProbeDescriptor(target, snapshot)) {
25
+ probes.push({
26
+ host: target.host,
27
+ instance: target.instance,
28
+ outcome: "failed",
29
+ phase: "spawn",
30
+ code: "DESCRIPTOR_READBACK_MISMATCH",
31
+ });
32
+ errors.push(probeError(target.host, target.instance, target.target));
33
+ continue;
34
+ }
35
+ const receipt = await receipts.find({
36
+ host: target.host,
37
+ scope: result.scope,
38
+ connection: target.instance,
39
+ });
40
+ let descriptorDigest;
41
+ try {
42
+ descriptorDigest = digestMcpReceiptDescriptor({
43
+ command: snapshot.command,
44
+ args: snapshot.args,
45
+ });
46
+ }
47
+ catch {
48
+ descriptorDigest = undefined;
49
+ }
50
+ if (descriptorDigest === undefined || receipt?.descriptor_digest !== descriptorDigest) {
51
+ probes.push({
52
+ host: target.host,
53
+ instance: target.instance,
54
+ outcome: "failed",
55
+ phase: "spawn",
56
+ code: "DESCRIPTOR_READBACK_MISMATCH",
57
+ });
58
+ errors.push(probeError(target.host, target.instance, target.target));
59
+ continue;
60
+ }
61
+ const probe = await runMcpStdioProbe({
62
+ descriptor: {
63
+ command: snapshot.command,
64
+ args: snapshot.args,
65
+ ...(snapshot.env === undefined ? {} : { env: snapshot.env }),
66
+ },
67
+ mode: "launch",
68
+ expectedTools: DATABASE_TOOL_DESCRIPTORS,
69
+ });
70
+ if (!probe.ok) {
71
+ probes.push({
72
+ host: target.host,
73
+ instance: target.instance,
74
+ outcome: "failed",
75
+ phase: probe.phase,
76
+ code: probe.code,
77
+ });
78
+ errors.push(probeError(target.host, target.instance, target.target));
79
+ await recordProbe(receipts, result.scope_dir, result.scope, target, descriptorDigest, "failed", probe.phase);
80
+ continue;
81
+ }
82
+ probes.push({
83
+ host: target.host,
84
+ instance: target.instance,
85
+ outcome: "passed",
86
+ phase: "tools/list",
87
+ });
88
+ await recordProbe(receipts, result.scope_dir, result.scope, target, descriptorDigest, "passed", "tools/list");
89
+ }
90
+ return { probes, errors };
91
+ }
92
+ function readProbeSnapshot(target, scopeDir, scope) {
93
+ try {
94
+ return readMcpEntry(target.host, scopeDir, target.instance, scope);
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ function isCurrentProbeDescriptor(target, snapshot) {
101
+ if (target.entry === undefined || snapshot.command === undefined || snapshot.args === undefined) {
102
+ return false;
103
+ }
104
+ // The DSN variable is irrelevant when the entry is current; it is only used
105
+ // to recognize an old DBHub shape, which is deliberately not launchable.
106
+ return (classifyMcpEntry(target.host, snapshot, target.entry, {
107
+ name: target.instance,
108
+ dsnVar: "",
109
+ }).state === "current");
110
+ }
111
+ function dedupeProbeTargets(targets) {
112
+ const byIdentity = new Map();
113
+ for (const target of targets) {
114
+ byIdentity.set(`${target.host}:${target.instance}`, target);
115
+ }
116
+ return [...byIdentity.values()];
117
+ }
118
+ async function recordProbe(receipts, scopeDir, scope, target, descriptorDigest, outcome, phase) {
119
+ try {
120
+ const snapshot = readMcpEntry(target.host, scopeDir, target.instance, scope);
121
+ if (!isCurrentProbeDescriptor(target, snapshot))
122
+ return;
123
+ const identity = { host: target.host, scope, connection: target.instance };
124
+ const receipt = await receipts.find(identity);
125
+ if (receipt?.descriptor_digest !== descriptorDigest)
126
+ return;
127
+ await receipts.recordLaunchProbe({ ...identity, descriptorDigest, outcome, phase });
128
+ }
129
+ catch {
130
+ // The config write remains truthful; doctor can re-run the probe if receipt
131
+ // persistence was busy. Never expose child stderr or descriptor details.
132
+ }
133
+ }
134
+ function probeError(host, instance, target) {
135
+ return {
136
+ host,
137
+ instance,
138
+ target,
139
+ message: "El descriptor MCP se escribió, pero no completó initialize → tools/list.",
140
+ };
141
+ }
142
+ //# sourceMappingURL=mcp-launch-probe-service.js.map