@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-receipt-registration-service.js","sourceRoot":"","sources":["../../src/application/mcp-receipt-registration-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { buildMcpEntry } from "../domain/mcp-entry.js";
2
+ import { classifyMcpEntry } from "./mcp-entry-classification.js";
3
+ import { readMcpEntry } from "./mcp-host-reader.js";
4
+ import { removePersistedMcpReceipt } from "./mcp-host-receipts.js";
5
+ /** Keeps descriptor retirement symmetric with registration without touching previews. */
6
+ export async function removeMcpRemoveReceipts(paths, input, result) {
7
+ if (result.dry_run || input.scope !== "global")
8
+ return [];
9
+ const errors = [];
10
+ for (const write of [...result.removed, ...result.skipped]) {
11
+ await removeReceiptForWrite(paths, input, result, write, errors);
12
+ }
13
+ return errors;
14
+ }
15
+ async function removeReceiptForWrite(paths, input, result, write, errors) {
16
+ if (!isEligibleReceiptRemoval(write))
17
+ return;
18
+ const connection = input.connections.find((candidate) => candidate.name === write.name);
19
+ if (connection === undefined)
20
+ return;
21
+ try {
22
+ if (!isRemovedDescriptor(input, result, write, connection)) {
23
+ addReappearedDescriptorError(errors, write, connection.name);
24
+ return;
25
+ }
26
+ await removePersistedMcpReceipt(paths, {
27
+ host: write.host,
28
+ scope: input.scope,
29
+ connection: connection.name,
30
+ });
31
+ }
32
+ catch {
33
+ errors.push({
34
+ host: write.host,
35
+ instance: connection.name,
36
+ target: write.target,
37
+ message: "La entrada MCP se retiró, pero no se pudo retirar su recibo operativo.",
38
+ });
39
+ }
40
+ }
41
+ function isEligibleReceiptRemoval(write) {
42
+ return ((write.action === "removed" || write.action === "skipped-idempotent") &&
43
+ write.partial === undefined);
44
+ }
45
+ function isRemovedDescriptor(input, result, write, connection) {
46
+ const entry = buildMcpEntry(connection.name, connection.dsnVar, {
47
+ host: write.host,
48
+ scope: input.scope,
49
+ ...(input.namespace === undefined ? {} : { namespace: input.namespace }),
50
+ });
51
+ const snapshot = readMcpEntry(write.host, result.scope_dir, entry.name, input.scope);
52
+ return classifyMcpEntry(write.host, snapshot, entry, connection).state === "missing";
53
+ }
54
+ function addReappearedDescriptorError(errors, write, instance) {
55
+ errors.push({
56
+ host: write.host,
57
+ instance,
58
+ target: write.target,
59
+ message: "La entrada MCP reapareció antes de retirar el recibo; se conserva la evidencia operativa.",
60
+ });
61
+ }
62
+ //# sourceMappingURL=mcp-receipt-removal-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-receipt-removal-service.js","sourceRoot":"","sources":["../../src/application/mcp-receipt-removal-service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { buildMcpEntry, } from "../domain/mcp-entry.js";
2
+ import { classifyMcpEntry } from "./mcp-entry-classification.js";
3
+ import { readMcpEntry } from "./mcp-host-reader.js";
2
4
  import { removeMcpEntry } from "./mcp-host-writer.js";
3
5
  import { buildGlobalRefusal, resolveScopeDir, toErrorRecord, } from "./mcp-scope-common.js";
4
6
  export function runMcpRemove(env, input) {
@@ -9,38 +11,95 @@ export function runMcpRemove(env, input) {
9
11
  const opts = {
10
12
  dryRun: input.dryRun ?? false,
11
13
  };
12
- const removed = [];
13
- const skipped = [];
14
- const conflicts = [];
15
- const errors = [];
14
+ const buckets = { removed: [], skipped: [], conflicts: [], errors: [] };
16
15
  for (const host of input.hosts) {
17
16
  for (const connection of input.connections) {
18
- const entry = buildMcpEntry(connection.name, connection.dsnVar);
19
- try {
20
- const result = removeMcpEntry(host, entry, { scopeDir, kind: input.scope }, opts);
21
- if (result.action === "conflict") {
22
- conflicts.push(result);
23
- }
24
- else if (result.action === "skipped-idempotent") {
25
- skipped.push(result);
26
- }
27
- else {
28
- removed.push(result);
29
- }
30
- }
31
- catch (err) {
32
- errors.push(toErrorRecord(host, connection.name, scopeDir, err));
33
- }
17
+ removeEntry(host, connection, input, scopeDir, opts, buckets);
34
18
  }
35
19
  }
20
+ const reloadRequired = reloadRequirements(buckets.removed, input.connections);
36
21
  return {
37
22
  scope: input.scope,
38
23
  scope_dir: scopeDir,
39
24
  dry_run: Boolean(input.dryRun),
40
- removed,
41
- skipped,
42
- conflicts,
43
- errors,
25
+ ...buckets,
26
+ ...(reloadRequired.length === 0 ? {} : { reload_required: reloadRequired }),
44
27
  };
45
28
  }
29
+ function removeEntry(host, connection, input, scopeDir, opts, buckets) {
30
+ const entry = removeEntryDescriptor(host, connection, input);
31
+ try {
32
+ const result = removeMcpEntry(host, entry, { scopeDir, kind: input.scope }, removalOptions(host, entry, connection, scopeDir, input.scope, opts));
33
+ addRemoveWrite(result, buckets);
34
+ reportRemovePartial(result, host, connection, buckets.errors);
35
+ }
36
+ catch (err) {
37
+ buckets.errors.push(toErrorRecord(host, connection.name, scopeDir, err));
38
+ }
39
+ }
40
+ /**
41
+ * Retiring a published descriptor is safe only after its full stored shape was
42
+ * classified as Workline-owned. The writer repeats the exact comparison when
43
+ * it writes, so an external change between this read and the mutation remains
44
+ * a conflict instead of becoming an overwrite.
45
+ */
46
+ function removalOptions(host, entry, connection, scopeDir, scope, opts) {
47
+ const snapshot = readMcpEntry(host, scopeDir, entry.name, scope);
48
+ const classification = classifyMcpEntry(host, snapshot, entry, connection);
49
+ if (classification.state !== "known-legacy" || classification.legacy === undefined)
50
+ return opts;
51
+ return { ...opts, replaceLegacy: classification.legacy };
52
+ }
53
+ function removeEntryDescriptor(host, connection, input) {
54
+ return buildMcpEntry(connection.name, connection.dsnVar, {
55
+ host,
56
+ scope: input.scope,
57
+ ...(input.namespace === undefined ? {} : { namespace: input.namespace }),
58
+ });
59
+ }
60
+ function addRemoveWrite(result, buckets) {
61
+ if (result.action === "conflict")
62
+ buckets.conflicts.push(result);
63
+ else if (result.action === "skipped-idempotent")
64
+ buckets.skipped.push(result);
65
+ else
66
+ buckets.removed.push(result);
67
+ }
68
+ function reportRemovePartial(result, host, connection, errors) {
69
+ if (result.partial === undefined)
70
+ return;
71
+ errors.push({
72
+ host,
73
+ instance: connection.name,
74
+ target: result.partial.target,
75
+ message: result.partial.message,
76
+ });
77
+ }
78
+ function reloadRequirements(writes, connections) {
79
+ return writes.flatMap((write) => {
80
+ if (write.action !== "removed" || write.partial !== undefined)
81
+ return [];
82
+ const connection = connections.find((candidate) => candidate.name === write.name);
83
+ if (connection === undefined)
84
+ return [];
85
+ return [
86
+ {
87
+ host: write.host,
88
+ instance: connection.name,
89
+ reload_required: true,
90
+ next_step: reloadInstruction(write.host),
91
+ },
92
+ ];
93
+ });
94
+ }
95
+ function reloadInstruction(host) {
96
+ switch (host) {
97
+ case "claude":
98
+ return "Abrí /mcp y elegí Reconnect, o iniciá una sesión nueva.";
99
+ case "codex":
100
+ return "Abrí /mcp y elegí Restart.";
101
+ default:
102
+ return "Recargá o reiniciá el host para retirar la tool de la sesión actual.";
103
+ }
104
+ }
46
105
  //# sourceMappingURL=mcp-remove-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-remove-service.js","sourceRoot":"","sources":["../../src/application/mcp-remove-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAIL,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,uBAAuB,CAAC;AAwB/B,MAAM,UAAU,YAAY,CAC1B,GAAY,EACZ,KAAqB;IAErB,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpF,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;KAC9B,CAAC;IAEF,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAa,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;gBAClF,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;oBAClD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9B,OAAO;QACP,OAAO;QACP,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mcp-remove-service.js","sourceRoot":"","sources":["../../src/application/mcp-remove-service.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ export function toErrorRecord(host, instance, scopeDir, err) {
29
29
  host,
30
30
  instance,
31
31
  target: err.target,
32
- message: `${err.message}${err.cause ? ` (${err.cause})` : ""}`,
32
+ message: err.message,
33
33
  };
34
34
  }
35
35
  return { host, instance, target: scopeDir, message: err.message };
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-scope-common.js","sourceRoot":"","sources":["../../src/application/mcp-scope-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0BtD,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,KAAoB;IAChE,yEAAyE;IACzE,yEAAyE;IACzE,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;IACnD,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAoB,CAAC,CAAC;SAC1E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAClF,OAAO,SAAS,KAAK,wFAAwF,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,uBAAuB;QAC9B,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC;QAC5B,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAa,EACb,QAAqB,EACrB,QAAgB,EAChB,GAAY;IAEZ,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"mcp-scope-common.js","sourceRoot":"","sources":["../../src/application/mcp-scope-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0BtD,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,KAAoB;IAChE,yEAAyE;IACzE,yEAAyE;IACzE,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;IACnD,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAoB,CAAC,CAAC;SAC1E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAClF,OAAO,SAAS,KAAK,wFAAwF,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,uBAAuB;QAC9B,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC;QAC5B,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAa,EACb,QAAqB,EACrB,QAAgB,EAChB,GAAY;IAEZ,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;AAC/E,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { buildMcpEntry, } from "../domain/mcp-entry.js";
2
+ import { classifyMcpEntry } from "./mcp-entry-classification.js";
3
+ import { readMcpEntry } from "./mcp-host-reader.js";
2
4
  import { writeMcpEntry } from "./mcp-host-writer.js";
3
5
  import { buildGlobalRefusal, resolveScopeDir, toErrorRecord, } from "./mcp-scope-common.js";
4
6
  export function runMcpSetup(env, input) {
@@ -9,38 +11,71 @@ export function runMcpSetup(env, input) {
9
11
  const opts = {
10
12
  dryRun: input.dryRun ?? false,
11
13
  };
12
- const applied = [];
13
- const skipped = [];
14
- const conflicts = [];
15
- const errors = [];
14
+ const buckets = { applied: [], skipped: [], conflicts: [], errors: [] };
16
15
  for (const host of input.hosts) {
17
16
  for (const connection of input.connections) {
18
- const entry = buildMcpEntry(connection.name, connection.dsnVar);
19
- try {
20
- const result = writeMcpEntry(host, entry, { scopeDir, kind: input.scope }, opts);
21
- if (result.action === "conflict") {
22
- conflicts.push(result);
23
- }
24
- else if (result.action === "skipped-idempotent") {
25
- skipped.push(result);
26
- }
27
- else {
28
- applied.push(result);
29
- }
30
- }
31
- catch (err) {
32
- errors.push(toErrorRecord(host, connection.name, scopeDir, err));
33
- }
17
+ applySetupEntry(host, connection, input, scopeDir, opts, buckets);
34
18
  }
35
19
  }
36
20
  return {
37
21
  scope: input.scope,
38
22
  scope_dir: scopeDir,
39
23
  dry_run: Boolean(input.dryRun),
40
- applied,
41
- skipped,
42
- conflicts,
43
- errors,
24
+ ...buckets,
44
25
  };
45
26
  }
27
+ function applySetupEntry(host, connection, input, scopeDir, opts, buckets) {
28
+ const entry = setupEntry(host, connection, input);
29
+ try {
30
+ const result = writeMcpEntry(host, entry, { scopeDir, kind: input.scope }, opts);
31
+ addSetupWrite(result, buckets);
32
+ reportSetupWriteIssue(result, host, connection, entry, scopeDir, input.scope, buckets.errors);
33
+ }
34
+ catch (err) {
35
+ buckets.errors.push(toErrorRecord(host, connection.name, scopeDir, err));
36
+ }
37
+ }
38
+ function setupEntry(host, connection, input) {
39
+ return buildMcpEntry(connection.name, connection.dsnVar, {
40
+ host,
41
+ scope: input.scope,
42
+ ...(input.namespace === undefined ? {} : { namespace: input.namespace }),
43
+ });
44
+ }
45
+ function addSetupWrite(result, buckets) {
46
+ if (result.action === "conflict")
47
+ buckets.conflicts.push(result);
48
+ else if (result.action === "skipped-idempotent")
49
+ buckets.skipped.push(result);
50
+ else
51
+ buckets.applied.push(result);
52
+ }
53
+ function reportSetupWriteIssue(result, host, connection, entry, scopeDir, scope, errors) {
54
+ if (result.partial !== undefined) {
55
+ errors.push({
56
+ host,
57
+ instance: connection.name,
58
+ target: result.partial.target,
59
+ message: result.partial.message,
60
+ });
61
+ return;
62
+ }
63
+ if (result.action !== "written" || readBackMatches(host, entry, scopeDir, scope, connection))
64
+ return;
65
+ errors.push({
66
+ host,
67
+ instance: connection.name,
68
+ target: result.target,
69
+ message: "La entrada MCP escrita no coincidió al leerla de vuelta; no recargues el host.",
70
+ });
71
+ }
72
+ function readBackMatches(host, entry, scopeDir, scope, connection) {
73
+ try {
74
+ const snapshot = readMcpEntry(host, scopeDir, entry.name, scope);
75
+ return classifyMcpEntry(host, snapshot, entry, connection).state === "current";
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ }
46
81
  //# sourceMappingURL=mcp-setup-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-setup-service.js","sourceRoot":"","sources":["../../src/application/mcp-setup-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAIL,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,uBAAuB,CAAC;AAwB/B,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,KAAoB;IAC5D,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpF,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;KAC9B,CAAC;IAEF,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAa,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;gBACjF,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;oBAClD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9B,OAAO;QACP,OAAO;QACP,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mcp-setup-service.js","sourceRoot":"","sources":["../../src/application/mcp-setup-service.ts"],"names":[],"mappings":"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"}