@tacuchi/agent-workflow-cli 23.0.0 → 25.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.
- package/README.md +37 -1
- package/dist/adapters/postgres-readonly-tools.js +277 -0
- package/dist/adapters/postgres-readonly-tools.js.map +1 -0
- package/dist/application/checkpoint/markdown.js +85 -5
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint-service.js +7 -6
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +270 -16
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/database-mcp-server.js +168 -0
- package/dist/application/database-mcp-server.js.map +1 -0
- package/dist/application/database-mcp-stdio.js +137 -0
- package/dist/application/database-mcp-stdio.js.map +1 -0
- package/dist/application/database-tool-catalog.js +226 -0
- package/dist/application/database-tool-catalog.js.map +1 -0
- package/dist/application/dsn-reader-service.js +1 -1
- package/dist/application/flow/advance.js +60 -10
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/internal-actions.js +1 -1
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/submit.js +256 -9
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/lifecycle-target.js +16 -19
- package/dist/application/lifecycle-target.js.map +1 -1
- package/dist/application/lock-service.js +96 -31
- package/dist/application/lock-service.js.map +1 -1
- package/dist/application/logging/log-events.js +19 -3
- package/dist/application/logging/log-events.js.map +1 -1
- package/dist/application/logging/logger.js +2 -2
- package/dist/application/logging/logger.js.map +1 -1
- package/dist/application/markdown.js +6 -2
- package/dist/application/markdown.js.map +1 -1
- package/dist/application/mcp-connections-service.js +115 -41
- package/dist/application/mcp-connections-service.js.map +1 -1
- package/dist/application/mcp-doctor-service.js +98 -54
- package/dist/application/mcp-doctor-service.js.map +1 -1
- package/dist/application/mcp-entry-classification.js +60 -0
- package/dist/application/mcp-entry-classification.js.map +1 -0
- package/dist/application/mcp-host-reader.js +102 -86
- package/dist/application/mcp-host-reader.js.map +1 -1
- package/dist/application/mcp-host-receipt-service.js +399 -0
- package/dist/application/mcp-host-receipt-service.js.map +1 -0
- package/dist/application/mcp-host-receipt-store.js +122 -0
- package/dist/application/mcp-host-receipt-store.js.map +1 -0
- package/dist/application/mcp-host-receipts.js +28 -0
- package/dist/application/mcp-host-receipts.js.map +1 -0
- package/dist/application/mcp-host-writer.js +209 -38
- package/dist/application/mcp-host-writer.js.map +1 -1
- package/dist/application/mcp-launch-probe-service.js +142 -0
- package/dist/application/mcp-launch-probe-service.js.map +1 -0
- package/dist/application/mcp-migration-service.js +351 -0
- package/dist/application/mcp-migration-service.js.map +1 -0
- package/dist/application/mcp-native-host-check-service.js +154 -0
- package/dist/application/mcp-native-host-check-service.js.map +1 -0
- package/dist/application/mcp-receipt-registration-service.js +105 -0
- package/dist/application/mcp-receipt-registration-service.js.map +1 -0
- package/dist/application/mcp-receipt-removal-service.js +62 -0
- package/dist/application/mcp-receipt-removal-service.js.map +1 -0
- package/dist/application/mcp-remove-service.js +83 -24
- package/dist/application/mcp-remove-service.js.map +1 -1
- package/dist/application/mcp-scope-common.js +1 -1
- package/dist/application/mcp-scope-common.js.map +1 -1
- package/dist/application/mcp-setup-service.js +59 -24
- package/dist/application/mcp-setup-service.js.map +1 -1
- package/dist/application/mcp-stdio-probe.js +526 -0
- package/dist/application/mcp-stdio-probe.js.map +1 -0
- package/dist/application/mcp-test-connection-service.js +23 -50
- package/dist/application/mcp-test-connection-service.js.map +1 -1
- package/dist/application/parsers/spec-functional.js +220 -0
- package/dist/application/parsers/spec-functional.js.map +1 -0
- package/dist/application/parsers/spec-relation.js +142 -5
- package/dist/application/parsers/spec-relation.js.map +1 -1
- package/dist/application/paths-service.js +13 -0
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/plan-exec-decision-service.js +57 -4
- package/dist/application/plan-exec-decision-service.js.map +1 -1
- package/dist/application/reseal-service.js +300 -0
- package/dist/application/reseal-service.js.map +1 -0
- package/dist/application/self/host-states.js.map +1 -1
- package/dist/application/self/install-skill.js +4 -34
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/mcp-config.js +369 -59
- package/dist/application/self/mcp-config.js.map +1 -1
- package/dist/application/self/mcp-via-state.js +9 -6
- package/dist/application/self/mcp-via-state.js.map +1 -1
- package/dist/application/self/uninstall-skill.js +3 -18
- package/dist/application/self/uninstall-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +4 -23
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/workline-index-service.js +64 -6
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +4 -6
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/checkpoint-write.js +24 -22
- package/dist/cli/commands/checkpoint-write.js.map +1 -1
- package/dist/cli/commands/index.js +7 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +642 -55
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/reseal.js +140 -0
- package/dist/cli/commands/reseal.js.map +1 -0
- package/dist/cli/commands/status.js +5 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tool.js +141 -0
- package/dist/cli/commands/tool.js.map +1 -0
- package/dist/cli/help-groups.js +7 -1
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/main.js +189 -57
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/parser.js +5 -1
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/render.js +15 -2
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/tui/components/host-admin-section.js +2 -46
- package/dist/cli/tui/components/host-admin-section.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab-helpers.js +71 -0
- package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab.js +101 -42
- package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
- package/dist/domain/database-tools.js +445 -0
- package/dist/domain/database-tools.js.map +1 -0
- package/dist/domain/effective-contract.js +10 -2
- package/dist/domain/effective-contract.js.map +1 -1
- package/dist/domain/flow/answer.js +4 -0
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +103 -14
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/directive.js +2 -0
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/run-state.js +42 -0
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/lineage.js +38 -11
- package/dist/domain/lineage.js.map +1 -1
- package/dist/domain/mcp-entry.js +131 -17
- package/dist/domain/mcp-entry.js.map +1 -1
- package/dist/domain/postgres-object-search.js +320 -0
- package/dist/domain/postgres-object-search.js.map +1 -0
- package/dist/domain/redaction.js +47 -0
- package/dist/domain/redaction.js.map +1 -0
- package/dist/domain/workline-mcp-entry.js +6 -9
- package/dist/domain/workline-mcp-entry.js.map +1 -1
- package/dist/ports/postgres-tools.js +10 -0
- package/dist/ports/postgres-tools.js.map +1 -0
- package/package.json +5 -1
- package/skills/w/commands/plan-exec.md +1 -1
- package/skills/w/commands/spec-new.md +6 -5
- package/skills/w/context/MANIFEST.json +1 -1
- package/skills/w/harness/HARNESS.md +1 -1
- package/skills/w/hooks/README.md +13 -9
- package/skills/w/hooks/hooks.template.json +2 -2
- package/skills/w/loops/CHASSIS.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +7 -5
- package/skills/w/loops/plan-new-loop/LOOP.md +46 -41
- package/skills/w/loops/plan-refine-loop/LOOP.md +4 -4
- package/skills/w/loops/quick-loop/LOOP.md +12 -13
- package/skills/w/loops/spec-refine-loop/LOOP.md +7 -3
- package/skills/w/modules/COMPACTION.md +1 -1
- package/skills/w/modules/PLAN-INPUT.md +3 -3
- package/skills/w/modules/PROMPT-CONTINUITY.md +1 -1
- package/dist/application/mcp-dbhub-launcher.js +0 -216
- package/dist/application/mcp-dbhub-launcher.js.map +0 -1
- package/dist/application/self/mcp-offer.js +0 -96
- 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.
|
|
13
|
-
//
|
|
14
|
-
|
|
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
|
-
|
|
16
|
+
let descriptor;
|
|
17
|
+
let tmp;
|
|
17
18
|
try {
|
|
18
|
-
|
|
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
|
-
|
|
50
|
+
return { path: tmp, descriptor: openSync(tmp, "wx", 0o600) };
|
|
24
51
|
}
|
|
25
|
-
catch {
|
|
26
|
-
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (filesystemErrorCode(error) === "EEXIST")
|
|
54
|
+
continue;
|
|
55
|
+
throw error;
|
|
27
56
|
}
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, [
|
|
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
|
-
|
|
256
|
-
|
|
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
|
-
|
|
306
|
-
|
|
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
|
-
|
|
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
|
|
369
|
-
throw new McpWriterError(`JSON inválido en ${file}`, file
|
|
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
|
|
382
|
-
throw new McpWriterError(`config.toml inválido en ${configFile}`, configFile
|
|
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":"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"}
|
|
@@ -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
|