@wootsup/mcp 0.1.0-rc.9 → 0.3.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 (240) hide show
  1. package/CHANGELOG.md +148 -83
  2. package/README.md +36 -32
  3. package/SECURITY.md +15 -6
  4. package/dist/auth/keychain.d.ts +27 -1
  5. package/dist/auth/keychain.js +48 -2
  6. package/dist/auth/keychain.js.map +1 -1
  7. package/dist/cli-hint.d.ts +22 -0
  8. package/dist/cli-hint.js +55 -0
  9. package/dist/cli-hint.js.map +1 -0
  10. package/dist/index.d.ts +19 -0
  11. package/dist/index.js +163 -22
  12. package/dist/index.js.map +1 -1
  13. package/dist/install-skill.js +1 -1
  14. package/dist/modules/apimapper/cache.d.ts +2 -2
  15. package/dist/modules/apimapper/cache.js +119 -29
  16. package/dist/modules/apimapper/cache.js.map +1 -1
  17. package/dist/modules/apimapper/client.d.ts +102 -1
  18. package/dist/modules/apimapper/client.js +631 -297
  19. package/dist/modules/apimapper/client.js.map +1 -1
  20. package/dist/modules/apimapper/connections-format.d.ts +51 -0
  21. package/dist/modules/apimapper/connections-format.js +261 -0
  22. package/dist/modules/apimapper/connections-format.js.map +1 -0
  23. package/dist/modules/apimapper/connections-trim.d.ts +82 -0
  24. package/dist/modules/apimapper/connections-trim.js +224 -0
  25. package/dist/modules/apimapper/connections-trim.js.map +1 -0
  26. package/dist/modules/apimapper/connections.d.ts +14 -2
  27. package/dist/modules/apimapper/connections.js +612 -153
  28. package/dist/modules/apimapper/connections.js.map +1 -1
  29. package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
  30. package/dist/modules/apimapper/credential-sanitizer.js +60 -1
  31. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
  32. package/dist/modules/apimapper/credentials-format.d.ts +21 -0
  33. package/dist/modules/apimapper/credentials-format.js +145 -0
  34. package/dist/modules/apimapper/credentials-format.js.map +1 -0
  35. package/dist/modules/apimapper/credentials.d.ts +12 -2
  36. package/dist/modules/apimapper/credentials.js +226 -73
  37. package/dist/modules/apimapper/credentials.js.map +1 -1
  38. package/dist/modules/apimapper/diagnose.d.ts +54 -2
  39. package/dist/modules/apimapper/diagnose.js +213 -12
  40. package/dist/modules/apimapper/diagnose.js.map +1 -1
  41. package/dist/modules/apimapper/elicitation.d.ts +54 -0
  42. package/dist/modules/apimapper/elicitation.js +90 -0
  43. package/dist/modules/apimapper/elicitation.js.map +1 -0
  44. package/dist/modules/apimapper/flows-format.d.ts +50 -0
  45. package/dist/modules/apimapper/flows-format.js +318 -0
  46. package/dist/modules/apimapper/flows-format.js.map +1 -0
  47. package/dist/modules/apimapper/flows.d.ts +13 -2
  48. package/dist/modules/apimapper/flows.js +312 -122
  49. package/dist/modules/apimapper/flows.js.map +1 -1
  50. package/dist/modules/apimapper/gateway/advanced-tool.d.ts +9 -0
  51. package/dist/modules/apimapper/gateway/advanced-tool.js +265 -0
  52. package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -0
  53. package/dist/modules/apimapper/gateway/capturing-server.d.ts +81 -0
  54. package/dist/modules/apimapper/gateway/capturing-server.js +87 -0
  55. package/dist/modules/apimapper/gateway/capturing-server.js.map +1 -0
  56. package/dist/modules/apimapper/gateway/essentials.d.ts +4 -0
  57. package/dist/modules/apimapper/gateway/essentials.js +35 -0
  58. package/dist/modules/apimapper/gateway/essentials.js.map +1 -0
  59. package/dist/modules/apimapper/gateway/test-support.d.ts +17 -0
  60. package/dist/modules/apimapper/gateway/test-support.js +43 -0
  61. package/dist/modules/apimapper/gateway/test-support.js.map +1 -0
  62. package/dist/modules/apimapper/get-skill.d.ts +3 -3
  63. package/dist/modules/apimapper/get-skill.js +47 -7
  64. package/dist/modules/apimapper/get-skill.js.map +1 -1
  65. package/dist/modules/apimapper/graph-builder.js +1 -1
  66. package/dist/modules/apimapper/graph-builder.js.map +1 -1
  67. package/dist/modules/apimapper/graph.d.ts +2 -2
  68. package/dist/modules/apimapper/graph.js +170 -35
  69. package/dist/modules/apimapper/graph.js.map +1 -1
  70. package/dist/modules/apimapper/index.d.ts +17 -1
  71. package/dist/modules/apimapper/index.js +68 -17
  72. package/dist/modules/apimapper/index.js.map +1 -1
  73. package/dist/modules/apimapper/inspect.d.ts +3 -2
  74. package/dist/modules/apimapper/inspect.js +97 -13
  75. package/dist/modules/apimapper/inspect.js.map +1 -1
  76. package/dist/modules/apimapper/library.d.ts +2 -2
  77. package/dist/modules/apimapper/library.js +665 -80
  78. package/dist/modules/apimapper/library.js.map +1 -1
  79. package/dist/modules/apimapper/license-format.d.ts +22 -0
  80. package/dist/modules/apimapper/license-format.js +149 -0
  81. package/dist/modules/apimapper/license-format.js.map +1 -0
  82. package/dist/modules/apimapper/license.d.ts +16 -2
  83. package/dist/modules/apimapper/license.js +62 -38
  84. package/dist/modules/apimapper/license.js.map +1 -1
  85. package/dist/modules/apimapper/local-sources.d.ts +2 -2
  86. package/dist/modules/apimapper/local-sources.js +44 -30
  87. package/dist/modules/apimapper/local-sources.js.map +1 -1
  88. package/dist/modules/apimapper/misc.d.ts +30 -2
  89. package/dist/modules/apimapper/misc.js +114 -49
  90. package/dist/modules/apimapper/misc.js.map +1 -1
  91. package/dist/modules/apimapper/node-schema.d.ts +52 -0
  92. package/dist/modules/apimapper/node-schema.js +70 -2
  93. package/dist/modules/apimapper/node-schema.js.map +1 -1
  94. package/dist/modules/apimapper/normalizers.d.ts +1 -0
  95. package/dist/modules/apimapper/normalizers.js +51 -0
  96. package/dist/modules/apimapper/normalizers.js.map +1 -1
  97. package/dist/modules/apimapper/onboarding.d.ts +78 -3
  98. package/dist/modules/apimapper/onboarding.js +428 -26
  99. package/dist/modules/apimapper/onboarding.js.map +1 -1
  100. package/dist/modules/apimapper/read-cache.d.ts +31 -2
  101. package/dist/modules/apimapper/read-cache.js +20 -6
  102. package/dist/modules/apimapper/read-cache.js.map +1 -1
  103. package/dist/modules/apimapper/render/_shared.d.ts +24 -0
  104. package/dist/modules/apimapper/render/_shared.js +84 -0
  105. package/dist/modules/apimapper/render/_shared.js.map +1 -0
  106. package/dist/modules/apimapper/render/dag.d.ts +18 -0
  107. package/dist/modules/apimapper/render/dag.js +70 -0
  108. package/dist/modules/apimapper/render/dag.js.map +1 -0
  109. package/dist/modules/apimapper/render/index.d.ts +2 -0
  110. package/dist/modules/apimapper/render/index.js +112 -0
  111. package/dist/modules/apimapper/render/index.js.map +1 -0
  112. package/dist/modules/apimapper/render/renderers/chart-bar.d.ts +2 -0
  113. package/dist/modules/apimapper/render/renderers/chart-bar.js +70 -0
  114. package/dist/modules/apimapper/render/renderers/chart-bar.js.map +1 -0
  115. package/dist/modules/apimapper/render/renderers/chart-line.d.ts +2 -0
  116. package/dist/modules/apimapper/render/renderers/chart-line.js +71 -0
  117. package/dist/modules/apimapper/render/renderers/chart-line.js.map +1 -0
  118. package/dist/modules/apimapper/render/renderers/diff.d.ts +2 -0
  119. package/dist/modules/apimapper/render/renderers/diff.js +154 -0
  120. package/dist/modules/apimapper/render/renderers/diff.js.map +1 -0
  121. package/dist/modules/apimapper/render/renderers/flow-diagram.d.ts +1 -0
  122. package/dist/modules/apimapper/render/renderers/flow-diagram.js +180 -0
  123. package/dist/modules/apimapper/render/renderers/flow-diagram.js.map +1 -0
  124. package/dist/modules/apimapper/render/renderers/json-tree.d.ts +2 -0
  125. package/dist/modules/apimapper/render/renderers/json-tree.js +87 -0
  126. package/dist/modules/apimapper/render/renderers/json-tree.js.map +1 -0
  127. package/dist/modules/apimapper/render/renderers/schema-diagram.d.ts +2 -0
  128. package/dist/modules/apimapper/render/renderers/schema-diagram.js +83 -0
  129. package/dist/modules/apimapper/render/renderers/schema-diagram.js.map +1 -0
  130. package/dist/modules/apimapper/render/renderers/table.d.ts +2 -0
  131. package/dist/modules/apimapper/render/renderers/table.js +75 -0
  132. package/dist/modules/apimapper/render/renderers/table.js.map +1 -0
  133. package/dist/modules/apimapper/render/schemas.d.ts +23 -0
  134. package/dist/modules/apimapper/render/schemas.js +56 -0
  135. package/dist/modules/apimapper/render/schemas.js.map +1 -0
  136. package/dist/modules/apimapper/render/secret-masking.d.ts +5 -0
  137. package/dist/modules/apimapper/render/secret-masking.js +51 -0
  138. package/dist/modules/apimapper/render/secret-masking.js.map +1 -0
  139. package/dist/modules/apimapper/render/sidecar.d.ts +21 -0
  140. package/dist/modules/apimapper/render/sidecar.js +66 -0
  141. package/dist/modules/apimapper/render/sidecar.js.map +1 -0
  142. package/dist/modules/apimapper/render/token-cap.d.ts +21 -0
  143. package/dist/modules/apimapper/render/token-cap.js +57 -0
  144. package/dist/modules/apimapper/render/token-cap.js.map +1 -0
  145. package/dist/modules/apimapper/schema.d.ts +2 -2
  146. package/dist/modules/apimapper/schema.js +92 -33
  147. package/dist/modules/apimapper/schema.js.map +1 -1
  148. package/dist/modules/apimapper/settings-format.d.ts +23 -0
  149. package/dist/modules/apimapper/settings-format.js +135 -0
  150. package/dist/modules/apimapper/settings-format.js.map +1 -0
  151. package/dist/modules/apimapper/settings.d.ts +2 -2
  152. package/dist/modules/apimapper/settings.js +100 -42
  153. package/dist/modules/apimapper/settings.js.map +1 -1
  154. package/dist/modules/apimapper/sites-tools.d.ts +29 -0
  155. package/dist/modules/apimapper/sites-tools.js +165 -0
  156. package/dist/modules/apimapper/sites-tools.js.map +1 -0
  157. package/dist/modules/apimapper/skill-resources.d.ts +2 -2
  158. package/dist/modules/apimapper/skill-resources.js.map +1 -1
  159. package/dist/modules/apimapper/token-baseline.harness.d.ts +91 -0
  160. package/dist/modules/apimapper/token-baseline.harness.js +291 -0
  161. package/dist/modules/apimapper/token-baseline.harness.js.map +1 -0
  162. package/dist/modules/apimapper/tool-result.d.ts +46 -0
  163. package/dist/modules/apimapper/tool-result.js +63 -0
  164. package/dist/modules/apimapper/tool-result.js.map +1 -0
  165. package/dist/modules/apimapper/toolslist-size.d.ts +56 -0
  166. package/dist/modules/apimapper/toolslist-size.js +192 -0
  167. package/dist/modules/apimapper/toolslist-size.js.map +1 -0
  168. package/dist/modules/apimapper/types.d.ts +44 -8
  169. package/dist/modules/apimapper/types.js +26 -1
  170. package/dist/modules/apimapper/types.js.map +1 -1
  171. package/dist/modules/apimapper/use-profile.d.ts +21 -0
  172. package/dist/modules/apimapper/use-profile.js +56 -2
  173. package/dist/modules/apimapper/use-profile.js.map +1 -1
  174. package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
  175. package/dist/modules/apimapper/whitelist-drift.js +360 -0
  176. package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
  177. package/dist/modules/apimapper/workflows.d.ts +2 -2
  178. package/dist/modules/apimapper/workflows.js +202 -20
  179. package/dist/modules/apimapper/workflows.js.map +1 -1
  180. package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
  181. package/dist/modules/apimapper/yootheme-binding.js +186 -0
  182. package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
  183. package/dist/platform/index.d.ts +56 -0
  184. package/dist/platform/index.js +195 -7
  185. package/dist/platform/index.js.map +1 -1
  186. package/dist/setup/detect-clients.d.ts +40 -1
  187. package/dist/setup/detect-clients.js +148 -1
  188. package/dist/setup/detect-clients.js.map +1 -1
  189. package/dist/setup/probe-handshake.js +40 -7
  190. package/dist/setup/probe-handshake.js.map +1 -1
  191. package/dist/setup/remove-config.d.ts +8 -0
  192. package/dist/setup/remove-config.js +145 -0
  193. package/dist/setup/remove-config.js.map +1 -0
  194. package/dist/setup/uninstall.d.ts +34 -0
  195. package/dist/setup/uninstall.js +147 -0
  196. package/dist/setup/uninstall.js.map +1 -0
  197. package/dist/setup-cli.d.ts +60 -0
  198. package/dist/setup-cli.js +155 -5
  199. package/dist/setup-cli.js.map +1 -1
  200. package/dist/sites/loader.d.ts +41 -0
  201. package/dist/sites/loader.js +119 -0
  202. package/dist/sites/loader.js.map +1 -0
  203. package/dist/sites/schema.d.ts +69 -0
  204. package/dist/sites/schema.js +71 -0
  205. package/dist/sites/schema.js.map +1 -0
  206. package/dist/sites/secret-resolver.d.ts +47 -0
  207. package/dist/sites/secret-resolver.js +150 -0
  208. package/dist/sites/secret-resolver.js.map +1 -0
  209. package/dist/skill-instructions.d.ts +1 -1
  210. package/dist/skill-instructions.js +5 -0
  211. package/dist/skill-instructions.js.map +1 -1
  212. package/dist/transports/stdio.js +4 -4
  213. package/dist/transports/stdio.js.map +1 -1
  214. package/dist/uninstall-skill.d.ts +27 -0
  215. package/dist/uninstall-skill.js +89 -0
  216. package/dist/uninstall-skill.js.map +1 -0
  217. package/docs/architecture.md +22 -22
  218. package/docs/customgraph-internal-migration.md +4 -4
  219. package/docs/security.md +2 -21
  220. package/docs/tools.md +40 -12
  221. package/manifest.json +77 -70
  222. package/package.json +68 -60
  223. package/skills/apimapper/SKILL.md +53 -7
  224. package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
  225. package/skills/apimapper/reference/jmespath-pitfalls.md +108 -0
  226. package/skills/apimapper/reference/joomla.md +1 -1
  227. package/skills/apimapper/reference/library-template-discovery.md +65 -0
  228. package/skills/apimapper/reference/merge-two-sources-on-key.md +99 -0
  229. package/skills/apimapper/reference/render.md +132 -0
  230. package/skills/apimapper/reference/troubleshooting.md +21 -1
  231. package/skills/apimapper/reference/yootheme.md +1 -1
  232. package/dist/auth/oauth-provider.d.ts +0 -68
  233. package/dist/auth/oauth-provider.js +0 -232
  234. package/dist/auth/oauth-provider.js.map +0 -1
  235. package/dist/server-http.d.ts +0 -22
  236. package/dist/server-http.js +0 -159
  237. package/dist/server-http.js.map +0 -1
  238. package/dist/transports/http.d.ts +0 -29
  239. package/dist/transports/http.js +0 -267
  240. package/dist/transports/http.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/setup/detect-clients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/setup/detect-clients.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,12 @@ async function runHandshake(proc, timeoutMs) {
33
33
  const pending = new Map();
34
34
  let nextId = 1;
35
35
  let buf = "";
36
- proc.stdout.on("data", (chunk) => {
36
+ // DEF-LOW-3 (Wave-B audit, 2026-06-03): keep a reference to the data listener
37
+ // + the deadline timer so the deadline branch can detach the listener, clear
38
+ // the timer, and reject every still-pending resolver. Without this, a timeout
39
+ // left the stdout "data" listener attached and the pending Promises' resolvers
40
+ // dangling until proc.kill() (in the caller's finally) tore the stream down.
41
+ const onData = (chunk) => {
37
42
  buf += chunk.toString("utf8");
38
43
  // Process newline-delimited JSON.
39
44
  // (MCP stdio transport uses newline-delimited JSONRPC.)
@@ -64,7 +69,25 @@ async function runHandshake(proc, timeoutMs) {
64
69
  }
65
70
  }
66
71
  }
67
- });
72
+ };
73
+ proc.stdout.on("data", onData);
74
+ let deadlineTimer;
75
+ // Cleanup is idempotent: detach the stdout listener, clear the deadline timer,
76
+ // and reject any resolver still in the pending map so no Promise is left
77
+ // hanging. Called from both the success and the deadline/error paths.
78
+ const cleanup = (rejectPendingWith) => {
79
+ proc.stdout.off("data", onData);
80
+ if (deadlineTimer !== undefined) {
81
+ clearTimeout(deadlineTimer);
82
+ deadlineTimer = undefined;
83
+ }
84
+ if (rejectPendingWith) {
85
+ for (const [id, p] of pending) {
86
+ pending.delete(id);
87
+ p.reject(rejectPendingWith);
88
+ }
89
+ }
90
+ };
68
91
  function send(method, params) {
69
92
  const id = nextId++;
70
93
  const message = { jsonrpc: "2.0", id, method, params };
@@ -73,11 +96,16 @@ async function runHandshake(proc, timeoutMs) {
73
96
  proc.stdin.write(`${JSON.stringify(message)}\n`);
74
97
  });
75
98
  }
76
- // Wrap the whole handshake in a deadline.
99
+ // Wrap the whole handshake in a deadline. On fire, the cleanup detaches the
100
+ // listener, clears the timer, and rejects every pending request.
77
101
  const deadline = new Promise((_, reject) => {
78
- setTimeout(() => reject(new Error("Handshake timed out")), timeoutMs);
102
+ deadlineTimer = setTimeout(() => {
103
+ const err = new Error("Handshake timed out");
104
+ cleanup(err);
105
+ reject(err);
106
+ }, timeoutMs);
79
107
  });
80
- const handshake = (async () => {
108
+ try {
81
109
  // 1. initialize
82
110
  await Promise.race([
83
111
  send("initialize", {
@@ -99,8 +127,13 @@ async function runHandshake(proc, timeoutMs) {
99
127
  .map((t) => (typeof t?.name === "string" ? t.name : null))
100
128
  .filter((n) => n !== null);
101
129
  return names;
102
- })();
103
- return handshake;
130
+ }
131
+ finally {
132
+ // Success or thrown error (other than the deadline, which already cleaned
133
+ // up): detach the listener + clear the timer. Pending resolvers from the
134
+ // deadline path are already rejected; on the happy path the map is empty.
135
+ cleanup();
136
+ }
104
137
  }
105
138
  export async function probeHandshake(opts) {
106
139
  const spawnFn = opts.spawn ?? defaultSpawn;
@@ -1 +1 @@
1
- {"version":3,"file":"probe-handshake.js","sourceRoot":"","sources":["../../src/setup/probe-handshake.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"probe-handshake.js","sourceRoot":"","sources":["../../src/setup/probe-handshake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface RemoveConfigResult {
2
+ /** True iff at least one matching entry/table was deleted. */
3
+ removed: boolean;
4
+ /** The keys actually removed (subset of the requested keys). */
5
+ removedKeys: string[];
6
+ }
7
+ export declare function removeJsonConfig(path: string, keys: string[]): Promise<RemoveConfigResult>;
8
+ export declare function removeTomlConfig(path: string, keys: string[]): Promise<RemoveConfigResult>;
@@ -0,0 +1,145 @@
1
+ // src/setup/remove-config.ts — uninstall (reverse of write-config.ts).
2
+ //
3
+ // Idempotent JSON + TOML config removers. Each remover:
4
+ //
5
+ // • deletes ONLY the named `mcpServers.<key>` entries (JSON) or
6
+ // `[mcp_servers.<key>]` tables (TOML), including TOML `.env` sub-tables
7
+ // • PRESERVES every other server + unrelated top-level config
8
+ // • drops an emptied `mcpServers` object (JSON) so we don't leave a
9
+ // dangling `{}`
10
+ // • writes atomically via tmp-then-rename
11
+ // • is a no-op (removed=false) when the file is missing or no key matched
12
+ //
13
+ // We reuse the same hand-rolled TOML block scanner shape as write-config so
14
+ // the two stay in lockstep without a TOML parser dependency.
15
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
16
+ import { dirname } from "node:path";
17
+ // ── shared fs helpers (kept local to avoid cross-module coupling) ─────────
18
+ function ensureDir(path) {
19
+ const dir = dirname(path);
20
+ if (!existsSync(dir))
21
+ mkdirSync(dir, { recursive: true });
22
+ }
23
+ function atomicWrite(path, contents) {
24
+ ensureDir(path);
25
+ const tmp = `${path}.${process.pid}.tmp`;
26
+ try {
27
+ writeFileSync(tmp, contents, "utf8");
28
+ renameSync(tmp, path);
29
+ }
30
+ catch (err) {
31
+ try {
32
+ if (existsSync(tmp))
33
+ unlinkSync(tmp);
34
+ }
35
+ catch {
36
+ /* ignore */
37
+ }
38
+ throw err;
39
+ }
40
+ }
41
+ // ── JSON remover ──────────────────────────────────────────────────────────
42
+ export async function removeJsonConfig(path, keys) {
43
+ if (!existsSync(path))
44
+ return { removed: false, removedKeys: [] };
45
+ let parsed;
46
+ const before = readFileSync(path, "utf8");
47
+ try {
48
+ const raw = JSON.parse(before);
49
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
50
+ return { removed: false, removedKeys: [] };
51
+ }
52
+ parsed = raw;
53
+ }
54
+ catch {
55
+ return { removed: false, removedKeys: [] };
56
+ }
57
+ const servers = parsed.mcpServers;
58
+ if (!servers || typeof servers !== "object" || Array.isArray(servers)) {
59
+ return { removed: false, removedKeys: [] };
60
+ }
61
+ const serverMap = servers;
62
+ const removedKeys = [];
63
+ for (const key of keys) {
64
+ if (key in serverMap) {
65
+ delete serverMap[key];
66
+ removedKeys.push(key);
67
+ }
68
+ }
69
+ if (removedKeys.length === 0)
70
+ return { removed: false, removedKeys: [] };
71
+ // Drop an emptied mcpServers object entirely.
72
+ if (Object.keys(serverMap).length === 0) {
73
+ delete parsed.mcpServers;
74
+ }
75
+ else {
76
+ parsed.mcpServers = serverMap;
77
+ }
78
+ atomicWrite(path, `${JSON.stringify(parsed, null, 2)}\n`);
79
+ return { removed: true, removedKeys };
80
+ }
81
+ // ── TOML remover ──────────────────────────────────────────────────────────
82
+ const TOML_MANAGED_COMMENT = "# @apimapper-managed";
83
+ /**
84
+ * Find the `[mcp_servers.<key>]` block span (incl. `.env` sub-tables and a
85
+ * directly-preceding managed marker comment). Trailing blank lines belonging
86
+ * to the block are folded into the span so removal does not leave a double
87
+ * blank gap.
88
+ */
89
+ function findTomlBlock(lines, key) {
90
+ const headerExact = `[mcp_servers.${key}]`;
91
+ const subPrefix = `[mcp_servers.${key}.`;
92
+ let headerIdx = -1;
93
+ for (let i = 0; i < lines.length; i++) {
94
+ if (lines[i].trim() === headerExact) {
95
+ headerIdx = i;
96
+ break;
97
+ }
98
+ }
99
+ if (headerIdx === -1)
100
+ return null;
101
+ let endExclusive = lines.length;
102
+ for (let i = headerIdx + 1; i < lines.length; i++) {
103
+ const trimmed = lines[i].trim();
104
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
105
+ if (trimmed.startsWith(subPrefix))
106
+ continue;
107
+ endExclusive = i;
108
+ break;
109
+ }
110
+ }
111
+ let start = headerIdx;
112
+ if (headerIdx > 0 && lines[headerIdx - 1].trim() === TOML_MANAGED_COMMENT) {
113
+ start = headerIdx - 1;
114
+ }
115
+ while (endExclusive > start &&
116
+ lines[endExclusive - 1] !== undefined &&
117
+ lines[endExclusive - 1].trim() === "") {
118
+ endExclusive--;
119
+ }
120
+ return { start, endExclusive };
121
+ }
122
+ export async function removeTomlConfig(path, keys) {
123
+ if (!existsSync(path))
124
+ return { removed: false, removedKeys: [] };
125
+ const before = readFileSync(path, "utf8");
126
+ let lines = before.length === 0 ? [] : before.split("\n");
127
+ const removedKeys = [];
128
+ for (const key of keys) {
129
+ const span = findTomlBlock(lines, key);
130
+ if (!span)
131
+ continue;
132
+ lines = [...lines.slice(0, span.start), ...lines.slice(span.endExclusive)];
133
+ removedKeys.push(key);
134
+ }
135
+ if (removedKeys.length === 0)
136
+ return { removed: false, removedKeys: [] };
137
+ let nextText = lines.join("\n");
138
+ // Collapse any double-blank seam left where a block was excised.
139
+ nextText = nextText.replace(/\n{3,}/g, "\n\n");
140
+ if (nextText.length > 0 && !nextText.endsWith("\n"))
141
+ nextText += "\n";
142
+ atomicWrite(path, nextText);
143
+ return { removed: true, removedKeys };
144
+ }
145
+ //# sourceMappingURL=remove-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-config.js","sourceRoot":"","sources":["../../src/setup/remove-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type InstalledClient } from "./detect-clients.js";
2
+ import { type RemoveConfigResult } from "./remove-config.js";
3
+ import { type UninstallSkillResult } from "../uninstall-skill.js";
4
+ export interface UninstallOptions {
5
+ /** Non-interactive: remove from EVERY detected client + skill, no prompts. */
6
+ all?: boolean;
7
+ /** Skip the final confirm in interactive mode. */
8
+ yes?: boolean;
9
+ }
10
+ export interface UninstallSelection {
11
+ /** IDs of clients the user wants cleaned. */
12
+ selectedClientIds: string[];
13
+ /** Whether to also remove the installed skill. */
14
+ removeSkill: boolean;
15
+ }
16
+ export interface UninstallDeps {
17
+ detectInstalledClients: () => Promise<InstalledClient[]>;
18
+ skillIsInstalled: () => boolean;
19
+ removeJsonConfig: (path: string, keys: string[]) => Promise<RemoveConfigResult>;
20
+ removeTomlConfig: (path: string, keys: string[]) => Promise<RemoveConfigResult>;
21
+ uninstallSkill: () => Promise<UninstallSkillResult>;
22
+ /**
23
+ * Drive the selection prompts. Returns the user's choices, or `null` if
24
+ * they cancelled. The real impl uses @clack/prompts; tests inject a fake.
25
+ */
26
+ prompt: (input: {
27
+ installed: InstalledClient[];
28
+ skillInstalled: boolean;
29
+ skipConfirm: boolean;
30
+ }) => Promise<UninstallSelection | null>;
31
+ /** Sink for human-facing status lines. Default writes to stderr. */
32
+ log?: (line: string) => void;
33
+ }
34
+ export declare function runUninstall(options?: UninstallOptions, deps?: UninstallDeps): Promise<number>;
@@ -0,0 +1,147 @@
1
+ // src/setup/uninstall.ts — interactive uninstall orchestration.
2
+ //
3
+ // runUninstall() is the reverse of runWizard(): it detects which AI clients
4
+ // still carry one of OUR MCP server entries (+ whether the skill is
5
+ // installed), lets the user pick what to remove via a clack multiselect
6
+ // (ALL pre-checked = complete uninstall) plus a skill-removal toggle, then
7
+ // atomically removes the matched entries + (optionally) the skill.
8
+ //
9
+ // The deps bag mirrors WizardDeps so unit tests drive a deterministic
10
+ // detect/select/remove sequence without touching real disk or prompts.
11
+ import { intro, outro, multiselect, confirm, cancel, isCancel, note } from "@clack/prompts";
12
+ import { detectInstalledClients as defaultDetectInstalledClients, } from "./detect-clients.js";
13
+ import { removeJsonConfig as defaultRemoveJsonConfig, removeTomlConfig as defaultRemoveTomlConfig, } from "./remove-config.js";
14
+ import { uninstallSkill as defaultUninstallSkill, isSkillInstalled as defaultIsSkillInstalled, } from "../uninstall-skill.js";
15
+ // ── default @clack/prompts driver ─────────────────────────────────────────
16
+ async function defaultPromptDriver(input) {
17
+ intro("🧹 API Mapper MCP uninstall");
18
+ if (input.installed.length > 0) {
19
+ note(input.installed
20
+ .map((c) => `${c.label}: ${c.matchedKeys.join(", ")} (${c.configPath})`)
21
+ .join("\n"), "Found these API Mapper MCP entries");
22
+ }
23
+ let selectedClientIds = [];
24
+ if (input.installed.length > 0) {
25
+ const clientAns = await multiselect({
26
+ message: "Which AI clients to remove the API Mapper MCP entry from?",
27
+ options: input.installed.map((c) => ({
28
+ value: c.id,
29
+ label: `${c.label} (${c.configPath})`,
30
+ })),
31
+ // ALL pre-selected = complete uninstall by default.
32
+ initialValues: input.installed.map((c) => c.id),
33
+ required: false,
34
+ });
35
+ if (isCancel(clientAns)) {
36
+ cancel("Uninstall cancelled. Nothing was removed.");
37
+ return null;
38
+ }
39
+ selectedClientIds = clientAns;
40
+ }
41
+ let removeSkill = false;
42
+ if (input.skillInstalled) {
43
+ const skillAns = await confirm({
44
+ message: "Also remove the installed skill (~/.claude/skills/apimapper/) + the AGENTS.md marker block?",
45
+ initialValue: true,
46
+ });
47
+ if (isCancel(skillAns)) {
48
+ cancel("Uninstall cancelled. Nothing was removed.");
49
+ return null;
50
+ }
51
+ removeSkill = skillAns;
52
+ }
53
+ if (!input.skipConfirm &&
54
+ (selectedClientIds.length > 0 || removeSkill)) {
55
+ const proceed = await confirm({
56
+ message: `Remove from ${selectedClientIds.length} client(s)${removeSkill ? " + the skill" : ""}?`,
57
+ initialValue: true,
58
+ });
59
+ if (isCancel(proceed) || proceed === false) {
60
+ cancel("Uninstall cancelled. Nothing was removed.");
61
+ return null;
62
+ }
63
+ }
64
+ return { selectedClientIds, removeSkill };
65
+ }
66
+ const DEFAULT_DEPS = {
67
+ detectInstalledClients: () => defaultDetectInstalledClients(),
68
+ skillIsInstalled: () => defaultIsSkillInstalled(),
69
+ removeJsonConfig: (p, k) => defaultRemoveJsonConfig(p, k),
70
+ removeTomlConfig: (p, k) => defaultRemoveTomlConfig(p, k),
71
+ uninstallSkill: () => defaultUninstallSkill(),
72
+ prompt: defaultPromptDriver,
73
+ };
74
+ // ── orchestration ──────────────────────────────────────────────────────────
75
+ export async function runUninstall(options = {}, deps = DEFAULT_DEPS) {
76
+ const log = deps.log ?? ((line) => process.stderr.write(`${line}\n`));
77
+ const installed = await deps.detectInstalledClients();
78
+ const skillInstalled = deps.skillIsInstalled();
79
+ if (installed.length === 0 && !skillInstalled) {
80
+ log("Nothing to uninstall. No API Mapper MCP entries or skill found.");
81
+ return 0;
82
+ }
83
+ // Decide the selection: --all bypasses the prompt entirely.
84
+ let selection;
85
+ if (options.all) {
86
+ selection = {
87
+ selectedClientIds: installed.map((c) => c.id),
88
+ removeSkill: skillInstalled,
89
+ };
90
+ }
91
+ else {
92
+ selection = await deps.prompt({
93
+ installed,
94
+ skillInstalled,
95
+ skipConfirm: Boolean(options.yes),
96
+ });
97
+ if (!selection)
98
+ return 130; // user cancelled
99
+ }
100
+ const selectedSet = new Set(selection.selectedClientIds);
101
+ let anyRemoved = false;
102
+ for (const client of installed) {
103
+ if (!selectedSet.has(client.id))
104
+ continue;
105
+ try {
106
+ const remover = client.format === "toml" ? deps.removeTomlConfig : deps.removeJsonConfig;
107
+ const res = await remover(client.configPath, client.matchedKeys);
108
+ if (res.removed) {
109
+ anyRemoved = true;
110
+ log(`✓ ${client.label}: removed ${res.removedKeys.join(", ")} from ${client.configPath}`);
111
+ }
112
+ else {
113
+ log(`! ${client.label}: no matching entry found (already clean).`);
114
+ }
115
+ }
116
+ catch (err) {
117
+ log(`✗ ${client.label}: removal failed: ${err instanceof Error ? err.message : String(err)}`);
118
+ }
119
+ }
120
+ let skillRemovedLine = "skill: kept";
121
+ if (selection.removeSkill && skillInstalled) {
122
+ try {
123
+ const res = await deps.uninstallSkill();
124
+ anyRemoved = anyRemoved || res.skillRemoved || res.markerRemoved;
125
+ skillRemovedLine = res.skillRemoved
126
+ ? "skill: removed (~/.claude/skills/apimapper/)"
127
+ : res.markerRemoved
128
+ ? "skill: marker removed (dir was already gone)"
129
+ : "skill: nothing to remove";
130
+ }
131
+ catch (err) {
132
+ skillRemovedLine = `skill: removal failed: ${err instanceof Error ? err.message : String(err)}`;
133
+ }
134
+ }
135
+ log(skillRemovedLine);
136
+ const summary = anyRemoved
137
+ ? "✅ Uninstall complete. Restart your AI client to drop the server."
138
+ : "Nothing was removed (all selected entries were already clean).";
139
+ // Always log the summary (scripts / CI / tests read the log sink). In the
140
+ // interactive path, also render the clack outro chrome for a polished TTY
141
+ // close — but never in `--all` (non-interactive) mode.
142
+ log(summary);
143
+ if (!options.all)
144
+ outro(summary);
145
+ return 0;
146
+ }
147
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/setup/uninstall.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { type TokenPayload } from "./auth/token.js";
4
4
  import { type DetectedClient } from "./setup/detect-clients.js";
5
5
  import { type McpEntry, type WriteConfigResult, type WriteConfigOptions } from "./setup/write-config.js";
6
6
  import { type ProbeOptions, type ProbeResult } from "./setup/probe-handshake.js";
7
+ import { type UninstallOptions } from "./setup/uninstall.js";
7
8
  export interface IdentityResponse {
8
9
  platform: "wordpress" | "joomla" | "unknown";
9
10
  siteurl: string;
@@ -43,7 +44,66 @@ export interface WizardDeps {
43
44
  interface RunCliDeps {
44
45
  installSkill: typeof defaultInstallSkill;
45
46
  runWizard: () => Promise<number>;
47
+ runUninstall: (options: UninstallOptions) => Promise<number>;
46
48
  }
49
+ export declare function inferDistTag(token: string, options?: {
50
+ override?: string;
51
+ }): string;
52
+ /**
53
+ * Heuristic: are ALL given errors "HTTP 404" probe failures?
54
+ *
55
+ * Used by {@link probeIdentity} to distinguish the customer-friendly
56
+ * "plugin not installed" case (every leg of the parallel probe got a 404)
57
+ * from the generic "probe failed" case (mixed statuses, 5xx, network
58
+ * errors, etc.). A 404 from both the WordPress and Joomla identity
59
+ * endpoints is the canonical signature of "plugin not installed at the
60
+ * target site" — every other failure shape should retain the existing
61
+ * generic error path so support gets the full status detail.
62
+ *
63
+ * Guards against the empty-array edge case explicitly: an empty input
64
+ * returns `false`, even though `Array.prototype.every` returns `true`
65
+ * for an empty array by spec. An empty `AggregateError.errors` means
66
+ * "no failures observed" — that is structurally NOT the "all 404"
67
+ * scenario and must not trigger the plugin-not-installed branch.
68
+ *
69
+ * @param errors The error array (typically `AggregateError.errors`).
70
+ * @returns `true` iff `errors` is non-empty AND every entry's message
71
+ * matches `/\bHTTP 404\b/` (word-boundary anchored to avoid
72
+ * false-positives on substrings like `"HTTP 4040"`).
73
+ */
74
+ export declare function isAllHttp404(errors: unknown[]): boolean;
75
+ /**
76
+ * Probe both WP and Joomla identity endpoints. Throws on any failure —
77
+ * see error-shape contract below.
78
+ *
79
+ * Error-shape contract (two distinct cases, both surface as `Error`):
80
+ *
81
+ * 1. **Plugin not installed** — when BOTH the WordPress and Joomla
82
+ * identity probes return HTTP 404. The thrown error's message
83
+ * starts with `"API Mapper plugin is not installed at <siteUrl>"`
84
+ * and includes remediation guidance (WP/Joomla install paths).
85
+ * This is the typical customer scenario — they pasted a valid
86
+ * key but haven't installed the plugin yet.
87
+ *
88
+ * 2. **Generic probe failure** — every other failure mode (mixed
89
+ * statuses, 5xx, 401/403, network errors, timeouts). The thrown
90
+ * error's message starts with `"Identity probe failed"` and
91
+ * includes the per-leg failure messages so support can triage.
92
+ *
93
+ * Non-`AggregateError` exceptions thrown during the probe (e.g. an
94
+ * `AbortError` after the {@link PROBE_TIMEOUT_MS} deadline) propagate
95
+ * unchanged.
96
+ *
97
+ * @param siteUrl Customer's site URL (trailing slashes are trimmed).
98
+ * @returns The first successful identity response (WP or Joomla).
99
+ * @throws {Error} See the two error-shape cases above.
100
+ */
101
+ export declare function probeIdentity(siteUrl: string): Promise<IdentityResponse>;
47
102
  export declare function runWizard(deps?: WizardDeps): Promise<number>;
103
+ /**
104
+ * Parse the `uninstall` flag tail. Recognises `--all`, `--yes`, and `-y`.
105
+ * Unknown flags are ignored (forward-compatible). Order-independent.
106
+ */
107
+ export declare function parseUninstallFlags(args: string[]): UninstallOptions;
48
108
  export declare function runCli(argv: string[], deps?: Partial<RunCliDeps>): Promise<number>;
49
109
  export {};