@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.
Files changed (164) 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/checkpoint/markdown.js +85 -5
  5. package/dist/application/checkpoint/markdown.js.map +1 -1
  6. package/dist/application/checkpoint-service.js +7 -6
  7. package/dist/application/checkpoint-service.js.map +1 -1
  8. package/dist/application/checkpoint-write-service.js +270 -16
  9. package/dist/application/checkpoint-write-service.js.map +1 -1
  10. package/dist/application/database-mcp-server.js +168 -0
  11. package/dist/application/database-mcp-server.js.map +1 -0
  12. package/dist/application/database-mcp-stdio.js +137 -0
  13. package/dist/application/database-mcp-stdio.js.map +1 -0
  14. package/dist/application/database-tool-catalog.js +226 -0
  15. package/dist/application/database-tool-catalog.js.map +1 -0
  16. package/dist/application/dsn-reader-service.js +1 -1
  17. package/dist/application/flow/advance.js +60 -10
  18. package/dist/application/flow/advance.js.map +1 -1
  19. package/dist/application/flow/internal-actions.js +1 -1
  20. package/dist/application/flow/internal-actions.js.map +1 -1
  21. package/dist/application/flow/submit.js +256 -9
  22. package/dist/application/flow/submit.js.map +1 -1
  23. package/dist/application/lifecycle-target.js +16 -19
  24. package/dist/application/lifecycle-target.js.map +1 -1
  25. package/dist/application/lock-service.js +96 -31
  26. package/dist/application/lock-service.js.map +1 -1
  27. package/dist/application/logging/log-events.js +19 -3
  28. package/dist/application/logging/log-events.js.map +1 -1
  29. package/dist/application/logging/logger.js +2 -2
  30. package/dist/application/logging/logger.js.map +1 -1
  31. package/dist/application/markdown.js +6 -2
  32. package/dist/application/markdown.js.map +1 -1
  33. package/dist/application/mcp-connections-service.js +115 -41
  34. package/dist/application/mcp-connections-service.js.map +1 -1
  35. package/dist/application/mcp-doctor-service.js +98 -54
  36. package/dist/application/mcp-doctor-service.js.map +1 -1
  37. package/dist/application/mcp-entry-classification.js +60 -0
  38. package/dist/application/mcp-entry-classification.js.map +1 -0
  39. package/dist/application/mcp-host-reader.js +102 -86
  40. package/dist/application/mcp-host-reader.js.map +1 -1
  41. package/dist/application/mcp-host-receipt-service.js +399 -0
  42. package/dist/application/mcp-host-receipt-service.js.map +1 -0
  43. package/dist/application/mcp-host-receipt-store.js +122 -0
  44. package/dist/application/mcp-host-receipt-store.js.map +1 -0
  45. package/dist/application/mcp-host-receipts.js +28 -0
  46. package/dist/application/mcp-host-receipts.js.map +1 -0
  47. package/dist/application/mcp-host-writer.js +209 -38
  48. package/dist/application/mcp-host-writer.js.map +1 -1
  49. package/dist/application/mcp-launch-probe-service.js +142 -0
  50. package/dist/application/mcp-launch-probe-service.js.map +1 -0
  51. package/dist/application/mcp-migration-service.js +351 -0
  52. package/dist/application/mcp-migration-service.js.map +1 -0
  53. package/dist/application/mcp-native-host-check-service.js +154 -0
  54. package/dist/application/mcp-native-host-check-service.js.map +1 -0
  55. package/dist/application/mcp-receipt-registration-service.js +105 -0
  56. package/dist/application/mcp-receipt-registration-service.js.map +1 -0
  57. package/dist/application/mcp-receipt-removal-service.js +62 -0
  58. package/dist/application/mcp-receipt-removal-service.js.map +1 -0
  59. package/dist/application/mcp-remove-service.js +83 -24
  60. package/dist/application/mcp-remove-service.js.map +1 -1
  61. package/dist/application/mcp-scope-common.js +1 -1
  62. package/dist/application/mcp-scope-common.js.map +1 -1
  63. package/dist/application/mcp-setup-service.js +59 -24
  64. package/dist/application/mcp-setup-service.js.map +1 -1
  65. package/dist/application/mcp-stdio-probe.js +526 -0
  66. package/dist/application/mcp-stdio-probe.js.map +1 -0
  67. package/dist/application/mcp-test-connection-service.js +23 -50
  68. package/dist/application/mcp-test-connection-service.js.map +1 -1
  69. package/dist/application/parsers/spec-functional.js +220 -0
  70. package/dist/application/parsers/spec-functional.js.map +1 -0
  71. package/dist/application/parsers/spec-relation.js +142 -5
  72. package/dist/application/parsers/spec-relation.js.map +1 -1
  73. package/dist/application/paths-service.js +13 -0
  74. package/dist/application/paths-service.js.map +1 -1
  75. package/dist/application/plan-exec-decision-service.js +57 -4
  76. package/dist/application/plan-exec-decision-service.js.map +1 -1
  77. package/dist/application/reseal-service.js +300 -0
  78. package/dist/application/reseal-service.js.map +1 -0
  79. package/dist/application/self/host-states.js.map +1 -1
  80. package/dist/application/self/install-skill.js +4 -34
  81. package/dist/application/self/install-skill.js.map +1 -1
  82. package/dist/application/self/mcp-config.js +369 -59
  83. package/dist/application/self/mcp-config.js.map +1 -1
  84. package/dist/application/self/mcp-via-state.js +9 -6
  85. package/dist/application/self/mcp-via-state.js.map +1 -1
  86. package/dist/application/self/uninstall-skill.js +3 -18
  87. package/dist/application/self/uninstall-skill.js.map +1 -1
  88. package/dist/application/self/uninstall.js +4 -23
  89. package/dist/application/self/uninstall.js.map +1 -1
  90. package/dist/application/workline-index-service.js +64 -6
  91. package/dist/application/workline-index-service.js.map +1 -1
  92. package/dist/application/workspace-init-service.js +4 -6
  93. package/dist/application/workspace-init-service.js.map +1 -1
  94. package/dist/cli/commands/checkpoint-write.js +24 -22
  95. package/dist/cli/commands/checkpoint-write.js.map +1 -1
  96. package/dist/cli/commands/index.js +7 -0
  97. package/dist/cli/commands/index.js.map +1 -1
  98. package/dist/cli/commands/mcp.js +642 -55
  99. package/dist/cli/commands/mcp.js.map +1 -1
  100. package/dist/cli/commands/reseal.js +140 -0
  101. package/dist/cli/commands/reseal.js.map +1 -0
  102. package/dist/cli/commands/status.js +5 -1
  103. package/dist/cli/commands/status.js.map +1 -1
  104. package/dist/cli/commands/tool.js +141 -0
  105. package/dist/cli/commands/tool.js.map +1 -0
  106. package/dist/cli/help-groups.js +7 -1
  107. package/dist/cli/help-groups.js.map +1 -1
  108. package/dist/cli/main.js +189 -57
  109. package/dist/cli/main.js.map +1 -1
  110. package/dist/cli/parser.js +5 -1
  111. package/dist/cli/parser.js.map +1 -1
  112. package/dist/cli/registry.js.map +1 -1
  113. package/dist/cli/render.js +15 -2
  114. package/dist/cli/render.js.map +1 -1
  115. package/dist/cli/tui/components/host-admin-section.js +2 -46
  116. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  117. package/dist/cli/tui/tabs/mcp-tab-helpers.js +71 -0
  118. package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
  119. package/dist/cli/tui/tabs/mcp-tab.js +101 -42
  120. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  121. package/dist/domain/database-tools.js +445 -0
  122. package/dist/domain/database-tools.js.map +1 -0
  123. package/dist/domain/effective-contract.js +10 -2
  124. package/dist/domain/effective-contract.js.map +1 -1
  125. package/dist/domain/flow/answer.js +4 -0
  126. package/dist/domain/flow/answer.js.map +1 -1
  127. package/dist/domain/flow/authority.js +103 -14
  128. package/dist/domain/flow/authority.js.map +1 -1
  129. package/dist/domain/flow/directive.js +2 -0
  130. package/dist/domain/flow/directive.js.map +1 -1
  131. package/dist/domain/flow/run-state.js +42 -0
  132. package/dist/domain/flow/run-state.js.map +1 -1
  133. package/dist/domain/lineage.js +38 -11
  134. package/dist/domain/lineage.js.map +1 -1
  135. package/dist/domain/mcp-entry.js +131 -17
  136. package/dist/domain/mcp-entry.js.map +1 -1
  137. package/dist/domain/postgres-object-search.js +320 -0
  138. package/dist/domain/postgres-object-search.js.map +1 -0
  139. package/dist/domain/redaction.js +47 -0
  140. package/dist/domain/redaction.js.map +1 -0
  141. package/dist/domain/workline-mcp-entry.js +6 -9
  142. package/dist/domain/workline-mcp-entry.js.map +1 -1
  143. package/dist/ports/postgres-tools.js +10 -0
  144. package/dist/ports/postgres-tools.js.map +1 -0
  145. package/package.json +5 -1
  146. package/skills/w/commands/plan-exec.md +1 -1
  147. package/skills/w/commands/spec-new.md +6 -5
  148. package/skills/w/context/MANIFEST.json +1 -1
  149. package/skills/w/harness/HARNESS.md +1 -1
  150. package/skills/w/hooks/README.md +13 -9
  151. package/skills/w/hooks/hooks.template.json +2 -2
  152. package/skills/w/loops/CHASSIS.md +1 -1
  153. package/skills/w/loops/plan-exec-loop/LOOP.md +7 -5
  154. package/skills/w/loops/plan-new-loop/LOOP.md +46 -41
  155. package/skills/w/loops/plan-refine-loop/LOOP.md +4 -4
  156. package/skills/w/loops/quick-loop/LOOP.md +12 -13
  157. package/skills/w/loops/spec-refine-loop/LOOP.md +7 -3
  158. package/skills/w/modules/COMPACTION.md +1 -1
  159. package/skills/w/modules/PLAN-INPUT.md +3 -3
  160. package/skills/w/modules/PROMPT-CONTINUITY.md +1 -1
  161. package/dist/application/mcp-dbhub-launcher.js +0 -216
  162. package/dist/application/mcp-dbhub-launcher.js.map +0 -1
  163. package/dist/application/self/mcp-offer.js +0 -96
  164. package/dist/application/self/mcp-offer.js.map +0 -1
@@ -1,216 +0,0 @@
1
- // Launcher that resolves the DSN and spawns `npx -y @bytebase/dbhub`.
2
- // stdin/stderr are inherited; stdout is piped so the dbhub startup banner never
3
- // reaches the MCP JSON-RPC channel (see DbhubBannerFilter).
4
- import { spawn } from "node:child_process";
5
- import { resolveExactDsn } from "./dsn-reader-service.js";
6
- import { resolveMcpConnectionSelection, } from "./mcp-connections-service.js";
7
- export class DbhubLauncherError extends Error {
8
- constructor(message) {
9
- super(message);
10
- this.name = "DbhubLauncherError";
11
- }
12
- }
13
- export function resolveDsn(instance, deps) {
14
- const connection = resolveRegisteredConnection(instance, deps);
15
- let resolved = null;
16
- let fileError = null;
17
- try {
18
- resolved = resolveExactDsn(connection.dsnVar, deps.env, deps.paths);
19
- }
20
- catch (err) {
21
- // An unreadable dsn.env (a directory in its place, a permission or race
22
- // error) surfaces as this launcher's own diagnostic naming the cause,
23
- // never as a raw fs throw and never as a silent "not found".
24
- fileError = err instanceof Error ? err.message : String(err);
25
- }
26
- if (resolved === null) {
27
- throw new DbhubLauncherError(buildUnresolvedDsnMessage(connection, deps, fileError));
28
- }
29
- return resolved;
30
- }
31
- function resolveRegisteredConnection(instance, deps) {
32
- const selection = resolveMcpConnectionSelection(deps.paths, {
33
- ...(instance !== undefined ? { instance } : {}),
34
- });
35
- if (!selection.ok)
36
- throw new DbhubLauncherError(`[dbhub-mcp-runner] ${selection.message}`);
37
- const connection = selection.connections[0];
38
- if (connection === undefined) {
39
- throw new DbhubLauncherError("[dbhub-mcp-runner] la selección MCP no produjo una conexión");
40
- }
41
- return connection;
42
- }
43
- function buildUnresolvedDsnMessage(connection, deps, fileError) {
44
- const dsnFile = deps.paths.userDsnFile();
45
- const where = fileError === null
46
- ? `primero en process.env y después en ${dsnFile}`
47
- : `primero en process.env; ${dsnFile} no se pudo leer (${fileError})`;
48
- return [
49
- `[dbhub-mcp-runner] no encontré el DSN de la conexión registrada '${connection.name}'.`,
50
- `La conexión exige ${connection.dsnVar} — ${where}.`,
51
- `Exportá ${connection.dsnVar} en ~/.zshenv (macOS/Linux) o System Environment (Windows)`,
52
- `y reabrí el host desde una terminal donde 'echo $${connection.dsnVar}' devuelva valor;`,
53
- `o actualizá su registro con 'aw self mcp use-env --name ${connection.name} --dsn-var <VARIABLE>'.`,
54
- ].join(" ");
55
- }
56
- function stderrWriter(deps) {
57
- return (deps.stderr ??
58
- ((chunk) => {
59
- process.stderr.write(chunk);
60
- }));
61
- }
62
- const NEWLINE = 0x0a;
63
- const OPEN_BRACE = 0x7b;
64
- const EMPTY_CHUNK = Buffer.alloc(0);
65
- /** Narrow enough that a banner containing it verbatim is not a realistic risk. */
66
- const JSONRPC_MARKER = Buffer.from('{"jsonrpc"');
67
- /**
68
- * Splits dbhub's stdout into banner (stderr) and protocol (stdout).
69
- *
70
- * `@bytebase/dbhub` prints an ASCII banner on stdout before speaking JSON-RPC,
71
- * which corrupts the stdio channel every MCP client reads. Complete lines are
72
- * routed to stderr until the first one whose first non-blank byte is `{`; from
73
- * that line on the filter is `started` and the caller must hand the pipe over
74
- * raw, so the protocol is never re-sliced. Pure on purpose: testable without
75
- * spawning a process.
76
- */
77
- export class DbhubBannerFilter {
78
- pending = EMPTY_CHUNK;
79
- jsonStarted = false;
80
- /** True once the JSON-RPC stream began: the caller switches to raw passthrough. */
81
- get started() {
82
- return this.jsonStarted;
83
- }
84
- push(chunk) {
85
- if (this.jsonStarted)
86
- return { stdout: chunk, stderr: EMPTY_CHUNK };
87
- this.pending = this.pending.length === 0 ? chunk : Buffer.concat([this.pending, chunk]);
88
- // A banner that does not end in a newline would otherwise swallow the first
89
- // message glued to its tail, so the protocol marker is a second and narrower
90
- // cut point: bytes before it are banner, bytes from it on are protocol.
91
- const marker = this.pending.indexOf(JSONRPC_MARKER);
92
- const banner = [];
93
- let consumed = 0;
94
- let newline = this.pending.indexOf(NEWLINE, consumed);
95
- while (newline !== -1) {
96
- const line = this.pending.subarray(consumed, newline + 1);
97
- // A line that already opens the protocol is handed over from its first
98
- // byte, blanks included: the marker cut is for a banner glued to the
99
- // message, never an excuse to re-slice bytes that are already protocol.
100
- if (startsJsonRpc(line))
101
- return this.startAt(consumed, consumed, banner);
102
- if (marker !== -1 && marker < newline)
103
- return this.startAt(marker, consumed, banner);
104
- banner.push(line);
105
- consumed = newline + 1;
106
- newline = this.pending.indexOf(NEWLINE, consumed);
107
- }
108
- if (marker !== -1)
109
- return this.startAt(marker, consumed, banner);
110
- this.pending = Buffer.from(this.pending.subarray(consumed));
111
- return { stdout: EMPTY_CHUNK, stderr: Buffer.concat(banner) };
112
- }
113
- /** Protocol starts at `cut`: [consumed, cut) is banner, [cut, …) goes out verbatim. */
114
- startAt(cut, consumed, banner) {
115
- this.jsonStarted = true;
116
- if (cut > consumed)
117
- banner.push(this.pending.subarray(consumed, cut));
118
- const stdout = Buffer.from(this.pending.subarray(cut));
119
- this.pending = EMPTY_CHUNK;
120
- return { stdout, stderr: Buffer.concat(banner) };
121
- }
122
- /** Stream ended: anything still buffered never became a JSON line, so it is banner. */
123
- end() {
124
- const stderr = this.pending;
125
- this.pending = EMPTY_CHUNK;
126
- return { stdout: EMPTY_CHUNK, stderr };
127
- }
128
- }
129
- function startsJsonRpc(line) {
130
- for (const byte of line) {
131
- // Skip leading blanks (space, tab, CR, LF); a fully blank line is banner.
132
- if (byte === 0x20 || byte === 0x09 || byte === 0x0d || byte === NEWLINE)
133
- continue;
134
- return byte === OPEN_BRACE;
135
- }
136
- return false;
137
- }
138
- /**
139
- * Resolves the DSN and spawns `npx -y @bytebase/dbhub`.
140
- * Resolves only when the spawned child exits.
141
- */
142
- export async function runDbhubLauncher(input) {
143
- const { dsn } = resolveDsn(input.instance, input.deps);
144
- const isWin = input.deps.platform === "win32";
145
- const cmd = isWin ? "npx.cmd" : "npx";
146
- const protocol = input.deps.stdout ?? process.stdout;
147
- return new Promise((resolve, reject) => {
148
- const child = spawn(cmd, ["-y", "@bytebase/dbhub"], {
149
- stdio: ["inherit", "pipe", "inherit"],
150
- env: { ...input.deps.env, DSN: dsn },
151
- shell: isWin,
152
- });
153
- if (child.stdout === null) {
154
- reject(new DbhubLauncherError("[dbhub-mcp-runner] no pude capturar el stdout de dbhub"));
155
- return;
156
- }
157
- forwardDbhubStdout(child.stdout, {
158
- protocol,
159
- diagnostics: stderrWriter(input.deps),
160
- });
161
- child.on("error", (err) => reject(new DbhubLauncherError(`[dbhub-mcp-runner] ${err.message}`)));
162
- // `close`, not `exit`: `exit` fires before the child's stdout is drained, so
163
- // the tail of the protocol would still be in flight. And piping made a second
164
- // loss possible that `stdio: "inherit"` ruled out structurally — the child
165
- // used to write fd 1 itself, whereas now every byte is re-written through OUR
166
- // stdout, and the CLI ends with process.exit(), which drops whatever is still
167
- // queued on a pipe. The zero-length write is a drain barrier: its callback
168
- // runs once everything before it reached the OS.
169
- child.on("close", (code, signal) => {
170
- // Honor signal: emulate `process.kill(process.pid, signal)` from JS launcher
171
- // by mapping to a non-zero exit. The CLI command will exit with that code.
172
- const exitCode = signal ? 128 + (signalToNumber(signal) ?? 0) : (code ?? 0);
173
- protocol.write(EMPTY_CHUNK, () => resolve({ exitCode }));
174
- });
175
- });
176
- }
177
- /**
178
- * Wires a dbhub stdout stream to this process's channels: banner lines to
179
- * diagnostics, protocol bytes to the protocol channel. Takes its channels as
180
- * parameters so the handover can be exercised without spawning anything.
181
- */
182
- export function forwardDbhubStdout(source, channels) {
183
- const filter = new DbhubBannerFilter();
184
- const onData = (chunk) => {
185
- const routed = filter.push(chunk);
186
- if (routed.stderr.length > 0)
187
- channels.diagnostics(routed.stderr.toString("utf-8"));
188
- if (routed.stdout.length > 0)
189
- channels.protocol.write(routed.stdout);
190
- if (!filter.started)
191
- return;
192
- // Protocol started: pause before detaching, so no chunk can be emitted
193
- // between removing the listener and attaching the pipe. `end: false` keeps
194
- // the child's EOF from closing our own stdout.
195
- source.pause();
196
- source.removeListener("data", onData);
197
- source.pipe(channels.protocol, { end: false });
198
- };
199
- source.on("data", onData);
200
- source.on("end", () => {
201
- const rest = filter.end();
202
- if (rest.stderr.length > 0)
203
- channels.diagnostics(rest.stderr.toString("utf-8"));
204
- });
205
- }
206
- function signalToNumber(signal) {
207
- // Common signals; fallback to null (will produce exitCode 128 + 0 = 128).
208
- const map = {
209
- SIGINT: 2,
210
- SIGQUIT: 3,
211
- SIGKILL: 9,
212
- SIGTERM: 15,
213
- };
214
- return map[signal] ?? null;
215
- }
216
- //# sourceMappingURL=mcp-dbhub-launcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-dbhub-launcher.js","sourceRoot":"","sources":["../../src/application/mcp-dbhub-launcher.ts"],"names":[],"mappings":"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"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Ofrecer y retirar el servidor propio en los hosts donde se instalan superficies.
3
- *
4
- * Por qué la instalación lo deja ofrecido en vez de exigir un comando aparte: ya
5
- * escribe hooks y envoltorios en esos mismos hosts, así que esto no estrena una
6
- * clase de efecto — y una vía que hay que activar a mano es una vía que la mayoría
7
- * no tiene. Lo que sí obliga esa decisión es la simetría: la retirada tiene que
8
- * quitarlo, y ni una ni otra pueden rozar un servidor que la persona ya tenía.
9
- *
10
- * Se ofrece SÓLO donde el catálogo declara la vía disponible con evidencia
11
- * fechada. Escribirla en un host donde nadie la observó dejaría una entrada que
12
- * apunta a un selector que quizá no existe, y el estampado de ese host tampoco la
13
- * nombra: serían dos superficies diciendo cosas distintas.
14
- */
15
- import { harnessByInstallTarget } from "../../domain/harnesses.js";
16
- import { WORKLINE_MCP_ENTRY_NAME, worklineMcpEntry } from "../../domain/workline-mcp-entry.js";
17
- import { removeMcpEntry, writeMcpEntry } from "../mcp-host-writer.js";
18
- /** Los hosts de esos destinos que declaran la vía, sin repetir ninguno. */
19
- function hostsWithVia(targets) {
20
- const hosts = new Set();
21
- for (const target of targets) {
22
- const spec = harnessByInstallTarget(target);
23
- if (spec === null || spec.mcpHostId === null)
24
- continue;
25
- if (!spec.structuredChoice.mcpElicitation.available)
26
- continue;
27
- hosts.add(spec.mcpHostId);
28
- }
29
- return [...hosts];
30
- }
31
- /**
32
- * Deja el servidor ofrecido donde corresponde.
33
- *
34
- * No es fatal: un host cuya configuración no se pudo escribir se REPORTA y la
35
- * instalación sigue. Abortarla entera por una entrada MCP dejaría a la persona sin
36
- * las superficies que sí pedía, y la vía es una mejora sobre un mecanismo que en
37
- * el peor caso degrada a markdown, no un requisito para trabajar.
38
- */
39
- export function offerWorklineServer(input) {
40
- return hostsWithVia(input.targets).map((host) => {
41
- const entry = worklineMcpEntry(host, input.platform);
42
- try {
43
- const result = writeMcpEntry(host, entry, { scopeDir: input.scopeDir, kind: "global" }, { dryRun: input.dryRun === true });
44
- return { host, state: describe(result, "offered") };
45
- }
46
- catch (error) {
47
- return { host, state: "failed", error: message(error) };
48
- }
49
- });
50
- }
51
- /**
52
- * Quita exactamente la entrada propia.
53
- *
54
- * Recorre TODOS los hosts de los destinos, no sólo los que hoy declaran la vía: si
55
- * la disponibilidad de un host se retirara del catálogo después de una instalación,
56
- * mirar sólo los vigentes dejaría su entrada abandonada para siempre.
57
- */
58
- export function withdrawWorklineServer(input) {
59
- const hosts = new Set();
60
- for (const target of input.targets) {
61
- const host = harnessByInstallTarget(target)?.mcpHostId ?? null;
62
- if (host !== null)
63
- hosts.add(host);
64
- }
65
- return [...hosts].map((host) => {
66
- const entry = worklineMcpEntry(host, input.platform);
67
- try {
68
- const result = removeMcpEntry(host, entry, { scopeDir: input.scopeDir, kind: "global" }, { dryRun: input.dryRun === true });
69
- return { host, state: describe(result, "withdrawn") };
70
- }
71
- catch (error) {
72
- return { host, state: "failed", error: message(error) };
73
- }
74
- });
75
- }
76
- export { WORKLINE_MCP_ENTRY_NAME };
77
- /**
78
- * Qué hizo la escritura, dicho en el vocabulario de esta operación.
79
- *
80
- * Un `skipped-idempotent` es una entrada que ya estaba como se quería: informarlo como cambio
81
- * haría que una reinstalación pareciera haber tocado la configuración de la
82
- * persona cuando no tocó nada.
83
- */
84
- function describe(result, changedState) {
85
- if (result.action === "skipped-idempotent")
86
- return "unchanged";
87
- if (result.action === "dry-run")
88
- return "dry-run";
89
- if (result.action === "conflict")
90
- return "conflict";
91
- return changedState;
92
- }
93
- function message(error) {
94
- return error instanceof Error ? error.message : String(error);
95
- }
96
- //# sourceMappingURL=mcp-offer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-offer.js","sourceRoot":"","sources":["../../../src/application/self/mcp-offer.ts"],"names":[],"mappings":"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"}