@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.
- package/CHANGELOG.md +148 -83
- package/README.md +36 -32
- package/SECURITY.md +15 -6
- package/dist/auth/keychain.d.ts +27 -1
- package/dist/auth/keychain.js +48 -2
- package/dist/auth/keychain.js.map +1 -1
- package/dist/cli-hint.d.ts +22 -0
- package/dist/cli-hint.js +55 -0
- package/dist/cli-hint.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +163 -22
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/modules/apimapper/cache.d.ts +2 -2
- package/dist/modules/apimapper/cache.js +119 -29
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +102 -1
- package/dist/modules/apimapper/client.js +631 -297
- package/dist/modules/apimapper/client.js.map +1 -1
- package/dist/modules/apimapper/connections-format.d.ts +51 -0
- package/dist/modules/apimapper/connections-format.js +261 -0
- package/dist/modules/apimapper/connections-format.js.map +1 -0
- package/dist/modules/apimapper/connections-trim.d.ts +82 -0
- package/dist/modules/apimapper/connections-trim.js +224 -0
- package/dist/modules/apimapper/connections-trim.js.map +1 -0
- package/dist/modules/apimapper/connections.d.ts +14 -2
- package/dist/modules/apimapper/connections.js +612 -153
- package/dist/modules/apimapper/connections.js.map +1 -1
- package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
- package/dist/modules/apimapper/credential-sanitizer.js +60 -1
- package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
- package/dist/modules/apimapper/credentials-format.d.ts +21 -0
- package/dist/modules/apimapper/credentials-format.js +145 -0
- package/dist/modules/apimapper/credentials-format.js.map +1 -0
- package/dist/modules/apimapper/credentials.d.ts +12 -2
- package/dist/modules/apimapper/credentials.js +226 -73
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.d.ts +54 -2
- package/dist/modules/apimapper/diagnose.js +213 -12
- package/dist/modules/apimapper/diagnose.js.map +1 -1
- package/dist/modules/apimapper/elicitation.d.ts +54 -0
- package/dist/modules/apimapper/elicitation.js +90 -0
- package/dist/modules/apimapper/elicitation.js.map +1 -0
- package/dist/modules/apimapper/flows-format.d.ts +50 -0
- package/dist/modules/apimapper/flows-format.js +318 -0
- package/dist/modules/apimapper/flows-format.js.map +1 -0
- package/dist/modules/apimapper/flows.d.ts +13 -2
- package/dist/modules/apimapper/flows.js +312 -122
- package/dist/modules/apimapper/flows.js.map +1 -1
- package/dist/modules/apimapper/gateway/advanced-tool.d.ts +9 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js +265 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -0
- package/dist/modules/apimapper/gateway/capturing-server.d.ts +81 -0
- package/dist/modules/apimapper/gateway/capturing-server.js +87 -0
- package/dist/modules/apimapper/gateway/capturing-server.js.map +1 -0
- package/dist/modules/apimapper/gateway/essentials.d.ts +4 -0
- package/dist/modules/apimapper/gateway/essentials.js +35 -0
- package/dist/modules/apimapper/gateway/essentials.js.map +1 -0
- package/dist/modules/apimapper/gateway/test-support.d.ts +17 -0
- package/dist/modules/apimapper/gateway/test-support.js +43 -0
- package/dist/modules/apimapper/gateway/test-support.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +3 -3
- package/dist/modules/apimapper/get-skill.js +47 -7
- package/dist/modules/apimapper/get-skill.js.map +1 -1
- package/dist/modules/apimapper/graph-builder.js +1 -1
- package/dist/modules/apimapper/graph-builder.js.map +1 -1
- package/dist/modules/apimapper/graph.d.ts +2 -2
- package/dist/modules/apimapper/graph.js +170 -35
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.d.ts +17 -1
- package/dist/modules/apimapper/index.js +68 -17
- package/dist/modules/apimapper/index.js.map +1 -1
- package/dist/modules/apimapper/inspect.d.ts +3 -2
- package/dist/modules/apimapper/inspect.js +97 -13
- package/dist/modules/apimapper/inspect.js.map +1 -1
- package/dist/modules/apimapper/library.d.ts +2 -2
- package/dist/modules/apimapper/library.js +665 -80
- package/dist/modules/apimapper/library.js.map +1 -1
- package/dist/modules/apimapper/license-format.d.ts +22 -0
- package/dist/modules/apimapper/license-format.js +149 -0
- package/dist/modules/apimapper/license-format.js.map +1 -0
- package/dist/modules/apimapper/license.d.ts +16 -2
- package/dist/modules/apimapper/license.js +62 -38
- package/dist/modules/apimapper/license.js.map +1 -1
- package/dist/modules/apimapper/local-sources.d.ts +2 -2
- package/dist/modules/apimapper/local-sources.js +44 -30
- package/dist/modules/apimapper/local-sources.js.map +1 -1
- package/dist/modules/apimapper/misc.d.ts +30 -2
- package/dist/modules/apimapper/misc.js +114 -49
- package/dist/modules/apimapper/misc.js.map +1 -1
- package/dist/modules/apimapper/node-schema.d.ts +52 -0
- package/dist/modules/apimapper/node-schema.js +70 -2
- package/dist/modules/apimapper/node-schema.js.map +1 -1
- package/dist/modules/apimapper/normalizers.d.ts +1 -0
- package/dist/modules/apimapper/normalizers.js +51 -0
- package/dist/modules/apimapper/normalizers.js.map +1 -1
- package/dist/modules/apimapper/onboarding.d.ts +78 -3
- package/dist/modules/apimapper/onboarding.js +428 -26
- package/dist/modules/apimapper/onboarding.js.map +1 -1
- package/dist/modules/apimapper/read-cache.d.ts +31 -2
- package/dist/modules/apimapper/read-cache.js +20 -6
- package/dist/modules/apimapper/read-cache.js.map +1 -1
- package/dist/modules/apimapper/render/_shared.d.ts +24 -0
- package/dist/modules/apimapper/render/_shared.js +84 -0
- package/dist/modules/apimapper/render/_shared.js.map +1 -0
- package/dist/modules/apimapper/render/dag.d.ts +18 -0
- package/dist/modules/apimapper/render/dag.js +70 -0
- package/dist/modules/apimapper/render/dag.js.map +1 -0
- package/dist/modules/apimapper/render/index.d.ts +2 -0
- package/dist/modules/apimapper/render/index.js +112 -0
- package/dist/modules/apimapper/render/index.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.js +70 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/chart-line.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/chart-line.js +71 -0
- package/dist/modules/apimapper/render/renderers/chart-line.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/diff.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/diff.js +154 -0
- package/dist/modules/apimapper/render/renderers/diff.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.d.ts +1 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.js +180 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/json-tree.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/json-tree.js +87 -0
- package/dist/modules/apimapper/render/renderers/json-tree.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.js +83 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/table.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/table.js +75 -0
- package/dist/modules/apimapper/render/renderers/table.js.map +1 -0
- package/dist/modules/apimapper/render/schemas.d.ts +23 -0
- package/dist/modules/apimapper/render/schemas.js +56 -0
- package/dist/modules/apimapper/render/schemas.js.map +1 -0
- package/dist/modules/apimapper/render/secret-masking.d.ts +5 -0
- package/dist/modules/apimapper/render/secret-masking.js +51 -0
- package/dist/modules/apimapper/render/secret-masking.js.map +1 -0
- package/dist/modules/apimapper/render/sidecar.d.ts +21 -0
- package/dist/modules/apimapper/render/sidecar.js +66 -0
- package/dist/modules/apimapper/render/sidecar.js.map +1 -0
- package/dist/modules/apimapper/render/token-cap.d.ts +21 -0
- package/dist/modules/apimapper/render/token-cap.js +57 -0
- package/dist/modules/apimapper/render/token-cap.js.map +1 -0
- package/dist/modules/apimapper/schema.d.ts +2 -2
- package/dist/modules/apimapper/schema.js +92 -33
- package/dist/modules/apimapper/schema.js.map +1 -1
- package/dist/modules/apimapper/settings-format.d.ts +23 -0
- package/dist/modules/apimapper/settings-format.js +135 -0
- package/dist/modules/apimapper/settings-format.js.map +1 -0
- package/dist/modules/apimapper/settings.d.ts +2 -2
- package/dist/modules/apimapper/settings.js +100 -42
- package/dist/modules/apimapper/settings.js.map +1 -1
- package/dist/modules/apimapper/sites-tools.d.ts +29 -0
- package/dist/modules/apimapper/sites-tools.js +165 -0
- package/dist/modules/apimapper/sites-tools.js.map +1 -0
- package/dist/modules/apimapper/skill-resources.d.ts +2 -2
- package/dist/modules/apimapper/skill-resources.js.map +1 -1
- package/dist/modules/apimapper/token-baseline.harness.d.ts +91 -0
- package/dist/modules/apimapper/token-baseline.harness.js +291 -0
- package/dist/modules/apimapper/token-baseline.harness.js.map +1 -0
- package/dist/modules/apimapper/tool-result.d.ts +46 -0
- package/dist/modules/apimapper/tool-result.js +63 -0
- package/dist/modules/apimapper/tool-result.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +56 -0
- package/dist/modules/apimapper/toolslist-size.js +192 -0
- package/dist/modules/apimapper/toolslist-size.js.map +1 -0
- package/dist/modules/apimapper/types.d.ts +44 -8
- package/dist/modules/apimapper/types.js +26 -1
- package/dist/modules/apimapper/types.js.map +1 -1
- package/dist/modules/apimapper/use-profile.d.ts +21 -0
- package/dist/modules/apimapper/use-profile.js +56 -2
- package/dist/modules/apimapper/use-profile.js.map +1 -1
- package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
- package/dist/modules/apimapper/whitelist-drift.js +360 -0
- package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
- package/dist/modules/apimapper/workflows.d.ts +2 -2
- package/dist/modules/apimapper/workflows.js +202 -20
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
- package/dist/modules/apimapper/yootheme-binding.js +186 -0
- package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
- package/dist/platform/index.d.ts +56 -0
- package/dist/platform/index.js +195 -7
- package/dist/platform/index.js.map +1 -1
- package/dist/setup/detect-clients.d.ts +40 -1
- package/dist/setup/detect-clients.js +148 -1
- package/dist/setup/detect-clients.js.map +1 -1
- package/dist/setup/probe-handshake.js +40 -7
- package/dist/setup/probe-handshake.js.map +1 -1
- package/dist/setup/remove-config.d.ts +8 -0
- package/dist/setup/remove-config.js +145 -0
- package/dist/setup/remove-config.js.map +1 -0
- package/dist/setup/uninstall.d.ts +34 -0
- package/dist/setup/uninstall.js +147 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup-cli.d.ts +60 -0
- package/dist/setup-cli.js +155 -5
- package/dist/setup-cli.js.map +1 -1
- package/dist/sites/loader.d.ts +41 -0
- package/dist/sites/loader.js +119 -0
- package/dist/sites/loader.js.map +1 -0
- package/dist/sites/schema.d.ts +69 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +47 -0
- package/dist/sites/secret-resolver.js +150 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/skill-instructions.d.ts +1 -1
- package/dist/skill-instructions.js +5 -0
- package/dist/skill-instructions.js.map +1 -1
- package/dist/transports/stdio.js +4 -4
- package/dist/transports/stdio.js.map +1 -1
- package/dist/uninstall-skill.d.ts +27 -0
- package/dist/uninstall-skill.js +89 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/docs/architecture.md +22 -22
- package/docs/customgraph-internal-migration.md +4 -4
- package/docs/security.md +2 -21
- package/docs/tools.md +40 -12
- package/manifest.json +77 -70
- package/package.json +68 -60
- package/skills/apimapper/SKILL.md +53 -7
- package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
- package/skills/apimapper/reference/jmespath-pitfalls.md +108 -0
- package/skills/apimapper/reference/joomla.md +1 -1
- package/skills/apimapper/reference/library-template-discovery.md +65 -0
- package/skills/apimapper/reference/merge-two-sources-on-key.md +99 -0
- package/skills/apimapper/reference/render.md +132 -0
- package/skills/apimapper/reference/troubleshooting.md +21 -1
- package/skills/apimapper/reference/yootheme.md +1 -1
- package/dist/auth/oauth-provider.d.ts +0 -68
- package/dist/auth/oauth-provider.js +0 -232
- package/dist/auth/oauth-provider.js.map +0 -1
- package/dist/server-http.d.ts +0 -22
- package/dist/server-http.js +0 -159
- package/dist/server-http.js.map +0 -1
- package/dist/transports/http.d.ts +0 -29
- package/dist/transports/http.js +0 -267
- package/dist/transports/http.js.map +0 -1
package/dist/platform/index.d.ts
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
export type PlatformKind = "wordpress" | "joomla" | "standalone";
|
|
2
2
|
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
|
|
3
|
+
/**
|
|
4
|
+
* Thrown by `parseResponse()` when a platform envelope reports a semantic
|
|
5
|
+
* failure (e.g. Joomla `com_ajax` returns HTTP 200 with
|
|
6
|
+
* `{success:false, error_code, library_suggestion}`). Unlike a bare `Error`,
|
|
7
|
+
* it carries the *full parsed envelope* in `body` so the HTTP client can
|
|
8
|
+
* thread the structured payload through to `ExtApiResponse.errorBody` — the
|
|
9
|
+
* same field the WordPress non-2xx branch already populates.
|
|
10
|
+
*
|
|
11
|
+
* R2 HIGH (MCP-relay parity): without this, the Joomla `success:false` path
|
|
12
|
+
* discarded `error_code` + `library_suggestion`, so the library-first guard
|
|
13
|
+
* block surfaced its machine-readable contract on WordPress only. Carrying the
|
|
14
|
+
* envelope makes the structured block platform-symmetric. The change is
|
|
15
|
+
* strictly additive — callers that only read `error.message` (every existing
|
|
16
|
+
* call site) keep working unchanged; new code may narrow with `instanceof`
|
|
17
|
+
* to recover `body`.
|
|
18
|
+
*/
|
|
19
|
+
export declare class PlatformResponseError extends Error {
|
|
20
|
+
/** The parsed failure envelope (e.g. `{success:false, error_code, ...}`). */
|
|
21
|
+
readonly body?: Record<string, unknown>;
|
|
22
|
+
constructor(message: string, body?: Record<string, unknown>);
|
|
23
|
+
}
|
|
24
|
+
/** Type-guard: narrow an unknown thrown value to `PlatformResponseError`. */
|
|
25
|
+
export declare function isPlatformResponseError(e: unknown): e is PlatformResponseError;
|
|
26
|
+
/**
|
|
27
|
+
* Thrown by `JoomlaPlatform.translateRestPath()` for a REST path that is a
|
|
28
|
+
* legitimate WordPress feature but has NO Joomla `com_ajax` arm — i.e. the
|
|
29
|
+
* tool is genuinely WordPress-only on this platform.
|
|
30
|
+
*
|
|
31
|
+
* History: a Wave-B audit (2026-06-03) flagged four advanced tools
|
|
32
|
+
* (`apimapper_library_categories`, `apimapper_library_activated`,
|
|
33
|
+
* `apimapper_library_connection_detail`, `apimapper_license_beta_channel`)
|
|
34
|
+
* that called REST paths with no Joomla dispatcher arm. Each path raised this
|
|
35
|
+
* dedicated error (a clean "not available on Joomla" message) instead of the
|
|
36
|
+
* opaque `Error("no joomla mapping … (unknown rest path)")` used for typos.
|
|
37
|
+
*
|
|
38
|
+
* As of the WP↔Joomla parity fix (2026-06-07) all FOUR of those paths now have
|
|
39
|
+
* real Joomla com_ajax handlers and are MAPPED by `translateRestPath`
|
|
40
|
+
* (`libraryCategories` / `libraryActivated` / `libraryConnectionDetail` /
|
|
41
|
+
* `toggleBetaChannel`), so this error is no longer raised by the current
|
|
42
|
+
* mapping table. It is RETAINED as defensive infra: the type + the
|
|
43
|
+
* `isJoomlaUnsupportedPathError` guard in `joomlaRequest()` (client.ts) still
|
|
44
|
+
* give any FUTURE WP-only path a clean structured `errorResult` (with
|
|
45
|
+
* `errorBody.unsupported = true`) rather than an opaque internal string, while
|
|
46
|
+
* genuine unknown/typo paths keep throwing a bare `Error` carrying
|
|
47
|
+
* "unknown rest path" — the two cases stay distinguishable for both the client
|
|
48
|
+
* and the drift-guard test.
|
|
49
|
+
*/
|
|
50
|
+
export declare class JoomlaUnsupportedPathError extends Error {
|
|
51
|
+
/** The REST path that has no Joomla arm (e.g. `/library/categories`). */
|
|
52
|
+
readonly path: string;
|
|
53
|
+
/** Always `"joomla"` — the platform on which the feature is unsupported. */
|
|
54
|
+
readonly platform: "joomla";
|
|
55
|
+
constructor(path: string, feature: string);
|
|
56
|
+
}
|
|
57
|
+
/** Type-guard: narrow an unknown thrown value to `JoomlaUnsupportedPathError`. */
|
|
58
|
+
export declare function isJoomlaUnsupportedPathError(e: unknown): e is JoomlaUnsupportedPathError;
|
|
3
59
|
export interface PlatformConfig {
|
|
4
60
|
baseUrl: string;
|
|
5
61
|
token: string;
|
package/dist/platform/index.js
CHANGED
|
@@ -10,6 +10,80 @@
|
|
|
10
10
|
//
|
|
11
11
|
// All three share the same Bearer-token auth header. Tools never inspect
|
|
12
12
|
// the platform-specific wire shape; they only see `parseResponse<T>()` output.
|
|
13
|
+
/**
|
|
14
|
+
* Thrown by `parseResponse()` when a platform envelope reports a semantic
|
|
15
|
+
* failure (e.g. Joomla `com_ajax` returns HTTP 200 with
|
|
16
|
+
* `{success:false, error_code, library_suggestion}`). Unlike a bare `Error`,
|
|
17
|
+
* it carries the *full parsed envelope* in `body` so the HTTP client can
|
|
18
|
+
* thread the structured payload through to `ExtApiResponse.errorBody` — the
|
|
19
|
+
* same field the WordPress non-2xx branch already populates.
|
|
20
|
+
*
|
|
21
|
+
* R2 HIGH (MCP-relay parity): without this, the Joomla `success:false` path
|
|
22
|
+
* discarded `error_code` + `library_suggestion`, so the library-first guard
|
|
23
|
+
* block surfaced its machine-readable contract on WordPress only. Carrying the
|
|
24
|
+
* envelope makes the structured block platform-symmetric. The change is
|
|
25
|
+
* strictly additive — callers that only read `error.message` (every existing
|
|
26
|
+
* call site) keep working unchanged; new code may narrow with `instanceof`
|
|
27
|
+
* to recover `body`.
|
|
28
|
+
*/
|
|
29
|
+
export class PlatformResponseError extends Error {
|
|
30
|
+
/** The parsed failure envelope (e.g. `{success:false, error_code, ...}`). */
|
|
31
|
+
body;
|
|
32
|
+
constructor(message, body) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.name = "PlatformResponseError";
|
|
35
|
+
this.body = body;
|
|
36
|
+
// Restore prototype chain for `instanceof` after transpilation to ES5/ES2015.
|
|
37
|
+
Object.setPrototypeOf(this, PlatformResponseError.prototype);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Type-guard: narrow an unknown thrown value to `PlatformResponseError`. */
|
|
41
|
+
export function isPlatformResponseError(e) {
|
|
42
|
+
return e instanceof PlatformResponseError;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Thrown by `JoomlaPlatform.translateRestPath()` for a REST path that is a
|
|
46
|
+
* legitimate WordPress feature but has NO Joomla `com_ajax` arm — i.e. the
|
|
47
|
+
* tool is genuinely WordPress-only on this platform.
|
|
48
|
+
*
|
|
49
|
+
* History: a Wave-B audit (2026-06-03) flagged four advanced tools
|
|
50
|
+
* (`apimapper_library_categories`, `apimapper_library_activated`,
|
|
51
|
+
* `apimapper_library_connection_detail`, `apimapper_license_beta_channel`)
|
|
52
|
+
* that called REST paths with no Joomla dispatcher arm. Each path raised this
|
|
53
|
+
* dedicated error (a clean "not available on Joomla" message) instead of the
|
|
54
|
+
* opaque `Error("no joomla mapping … (unknown rest path)")` used for typos.
|
|
55
|
+
*
|
|
56
|
+
* As of the WP↔Joomla parity fix (2026-06-07) all FOUR of those paths now have
|
|
57
|
+
* real Joomla com_ajax handlers and are MAPPED by `translateRestPath`
|
|
58
|
+
* (`libraryCategories` / `libraryActivated` / `libraryConnectionDetail` /
|
|
59
|
+
* `toggleBetaChannel`), so this error is no longer raised by the current
|
|
60
|
+
* mapping table. It is RETAINED as defensive infra: the type + the
|
|
61
|
+
* `isJoomlaUnsupportedPathError` guard in `joomlaRequest()` (client.ts) still
|
|
62
|
+
* give any FUTURE WP-only path a clean structured `errorResult` (with
|
|
63
|
+
* `errorBody.unsupported = true`) rather than an opaque internal string, while
|
|
64
|
+
* genuine unknown/typo paths keep throwing a bare `Error` carrying
|
|
65
|
+
* "unknown rest path" — the two cases stay distinguishable for both the client
|
|
66
|
+
* and the drift-guard test.
|
|
67
|
+
*/
|
|
68
|
+
export class JoomlaUnsupportedPathError extends Error {
|
|
69
|
+
/** The REST path that has no Joomla arm (e.g. `/library/categories`). */
|
|
70
|
+
path;
|
|
71
|
+
/** Always `"joomla"` — the platform on which the feature is unsupported. */
|
|
72
|
+
platform;
|
|
73
|
+
constructor(path, feature) {
|
|
74
|
+
super(`${feature} is not available on Joomla (WordPress-only feature). ` +
|
|
75
|
+
`The REST path "${path}" has no Joomla com_ajax handler.`);
|
|
76
|
+
this.name = "JoomlaUnsupportedPathError";
|
|
77
|
+
this.path = path;
|
|
78
|
+
this.platform = "joomla";
|
|
79
|
+
// Restore prototype chain for `instanceof` after transpilation.
|
|
80
|
+
Object.setPrototypeOf(this, JoomlaUnsupportedPathError.prototype);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Type-guard: narrow an unknown thrown value to `JoomlaUnsupportedPathError`. */
|
|
84
|
+
export function isJoomlaUnsupportedPathError(e) {
|
|
85
|
+
return e instanceof JoomlaUnsupportedPathError;
|
|
86
|
+
}
|
|
13
87
|
// ── helpers ────────────────────────────────────────────────────────────
|
|
14
88
|
function stripTrailingSlash(url) {
|
|
15
89
|
return url.replace(/\/+$/, "");
|
|
@@ -82,7 +156,12 @@ export class JoomlaPlatform {
|
|
|
82
156
|
const msg = typeof env.error === "string" && env.error.length > 0
|
|
83
157
|
? env.error
|
|
84
158
|
: "Joomla operation reported success:false";
|
|
85
|
-
|
|
159
|
+
// R2 HIGH: carry the full parsed envelope so the client can populate
|
|
160
|
+
// `errorBody` (parity with the WP non-2xx branch). Some dispatchers put
|
|
161
|
+
// the structured failure (error_code, library_suggestion, ...) directly
|
|
162
|
+
// on the outer envelope rather than inside `data[]`; passing `env`
|
|
163
|
+
// preserves those fields. Additive: existing call sites read `.message`.
|
|
164
|
+
throw new PlatformResponseError(msg, env);
|
|
86
165
|
}
|
|
87
166
|
// com_ajax invokes plugin event handlers and collects each handler's
|
|
88
167
|
// return value into an array. Since only `apimapper` responds, data
|
|
@@ -104,7 +183,13 @@ export class JoomlaPlatform {
|
|
|
104
183
|
const innerMsg = typeof inner.error === "string" && inner.error.length > 0
|
|
105
184
|
? inner.error
|
|
106
185
|
: "Joomla inner envelope reported success:false";
|
|
107
|
-
|
|
186
|
+
// R2 HIGH: this is the canonical Joomla guard-block path — com_ajax
|
|
187
|
+
// wraps the handler return value into `data[]`, so the structured
|
|
188
|
+
// failure (`{success:false, error_code:'library_template_available',
|
|
189
|
+
// library_suggestion}`) lands at `data[0]` and is unwrapped into
|
|
190
|
+
// `payload` above. Carry it so the client surfaces `errorBody` and
|
|
191
|
+
// connections.ts `isLibraryBlock` fires on Joomla too.
|
|
192
|
+
throw new PlatformResponseError(innerMsg, inner);
|
|
108
193
|
}
|
|
109
194
|
}
|
|
110
195
|
return payload;
|
|
@@ -127,11 +212,39 @@ export class JoomlaPlatform {
|
|
|
127
212
|
*/
|
|
128
213
|
translateRestPath(path, method) {
|
|
129
214
|
// Normalise — strip any leading slash so callers can pass either form.
|
|
130
|
-
|
|
215
|
+
// Also split off the query-string BEFORE segment-matching: callers
|
|
216
|
+
// legitimately pass `/library?page=1&limit=100` (the WP-REST-shape URL
|
|
217
|
+
// that `URLSearchParams` builds), but a naive `split("/")` would treat
|
|
218
|
+
// the whole thing as one segment ("library?page=1&limit=100") and miss
|
|
219
|
+
// every library mapping. Query params are surfaced via the returned
|
|
220
|
+
// `params` map so `buildUrl()` re-attaches them to the `com_ajax`
|
|
221
|
+
// envelope. Wave-1 C-6 (2026-05-27): closed `apimapper_library_list`
|
|
222
|
+
// "no joomla mapping for GET /library?..." surface bug.
|
|
223
|
+
const rawWithoutLeadingSlash = path.startsWith("/") ? path.slice(1) : path;
|
|
224
|
+
const queryIdx = rawWithoutLeadingSlash.indexOf("?");
|
|
225
|
+
const clean = queryIdx === -1
|
|
226
|
+
? rawWithoutLeadingSlash
|
|
227
|
+
: rawWithoutLeadingSlash.slice(0, queryIdx);
|
|
228
|
+
const queryParams = {};
|
|
229
|
+
if (queryIdx !== -1) {
|
|
230
|
+
const qs = rawWithoutLeadingSlash.slice(queryIdx + 1);
|
|
231
|
+
// URLSearchParams handles repeated keys by keeping the last value when
|
|
232
|
+
// copied through a plain string-map: that is the same shape the WP
|
|
233
|
+
// REST router would deliver to `$_GET`, so consumers see identical
|
|
234
|
+
// behaviour either side of the wrapper.
|
|
235
|
+
for (const [k, v] of new URLSearchParams(qs).entries()) {
|
|
236
|
+
queryParams[k] = v;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
131
239
|
const segments = clean.split("/").filter((s) => s.length > 0);
|
|
132
240
|
const fail = () => {
|
|
133
|
-
throw new Error(`no joomla mapping for ${method} /${
|
|
241
|
+
throw new Error(`no joomla mapping for ${method} /${rawWithoutLeadingSlash} (unknown rest path)`);
|
|
134
242
|
};
|
|
243
|
+
// Helper: merges path-derived `params` with parsed query-string params.
|
|
244
|
+
// Path params (id, typeId, …) take precedence; query params fill the
|
|
245
|
+
// rest. This is what `LibraryAjaxHandler::catalog($page, $limit, $search)`
|
|
246
|
+
// expects to read out of `$app->input` on the Joomla side.
|
|
247
|
+
const withQuery = (pathParams) => ({ ...queryParams, ...pathParams });
|
|
135
248
|
// ── Two-segment + literal sub-resource (CHECK FIRST: more specific) ──
|
|
136
249
|
if (segments.length === 2) {
|
|
137
250
|
const [resource, sub] = segments;
|
|
@@ -141,6 +254,16 @@ export class JoomlaPlatform {
|
|
|
141
254
|
if (resource === "connections" && sub === "health-check" && method === "POST") {
|
|
142
255
|
return { action: "healthCheckConnections", params: {} };
|
|
143
256
|
}
|
|
257
|
+
// YOOtheme schema-cache flush — the autofix stage of
|
|
258
|
+
// flow_full_recompile_publish POSTs /cache/flush-yt. The Joomla handler
|
|
259
|
+
// EXISTS (CacheFlushAjaxHandler, dispatcher task `cacheFlushYt`) but this
|
|
260
|
+
// arm was missing, so on Joomla the flush threw "no joomla mapping for
|
|
261
|
+
// POST /cache/flush-yt" and the YT schema cache was never busted → stale
|
|
262
|
+
// source schema → empty binding fields downstream. (Bug found in the
|
|
263
|
+
// 2026-06-04 Claude Desktop Joomla session.)
|
|
264
|
+
if (resource === "cache" && sub === "flush-yt" && method === "POST") {
|
|
265
|
+
return { action: "cacheFlushYt", params: {} };
|
|
266
|
+
}
|
|
144
267
|
if (resource === "flows" && sub === "import" && method === "POST") {
|
|
145
268
|
return { action: "importFlow", params: {} };
|
|
146
269
|
}
|
|
@@ -160,13 +283,27 @@ export class JoomlaPlatform {
|
|
|
160
283
|
return { action: "localSourceQuery", params: {} };
|
|
161
284
|
}
|
|
162
285
|
if (resource === "library" && sub === "featured" && method === "GET") {
|
|
163
|
-
return { action: "libraryFeatured", params: {} };
|
|
286
|
+
return { action: "libraryFeatured", params: withQuery({}) };
|
|
164
287
|
}
|
|
165
288
|
if (resource === "library" && sub === "popular" && method === "GET") {
|
|
166
|
-
return { action: "libraryPopular", params: {} };
|
|
289
|
+
return { action: "libraryPopular", params: withQuery({}) };
|
|
167
290
|
}
|
|
168
291
|
if (resource === "library" && sub === "catalog" && method === "GET") {
|
|
169
|
-
return { action: "libraryCatalog", params: {} };
|
|
292
|
+
return { action: "libraryCatalog", params: withQuery({}) };
|
|
293
|
+
}
|
|
294
|
+
// ── Library categories + activated (WP↔Joomla parity fix 2026-06-07) ──
|
|
295
|
+
// These two GET routes are wired on WordPress (LibraryController::categories
|
|
296
|
+
// / ::activated). The matching Joomla com_ajax handlers (dispatcher tasks
|
|
297
|
+
// `libraryCategories` / `libraryActivated`) now EXIST, so we map them
|
|
298
|
+
// directly (was: clean JoomlaUnsupportedPathError reject). Query params
|
|
299
|
+
// are propagated via withQuery so e.g. category/limit filters reach the
|
|
300
|
+
// handler's `$app->input`. (`apimapper_library_categories` /
|
|
301
|
+
// `apimapper_library_activated`.)
|
|
302
|
+
if (resource === "library" && sub === "categories" && method === "GET") {
|
|
303
|
+
return { action: "libraryCategories", params: withQuery({}) };
|
|
304
|
+
}
|
|
305
|
+
if (resource === "library" && sub === "activated" && method === "GET") {
|
|
306
|
+
return { action: "libraryActivated", params: withQuery({}) };
|
|
170
307
|
}
|
|
171
308
|
if (resource === "settings" && sub === "reset-demo" && method === "POST") {
|
|
172
309
|
return { action: "resetDemoData", params: {} };
|
|
@@ -186,6 +323,15 @@ export class JoomlaPlatform {
|
|
|
186
323
|
if (resource === "license" && sub === "refresh" && method === "POST") {
|
|
187
324
|
return { action: "refreshLicense", params: {} };
|
|
188
325
|
}
|
|
326
|
+
// ── License beta-channel toggle (WP↔Joomla parity fix 2026-06-07) ──
|
|
327
|
+
// `LicenseAjaxHandler::toggleBetaChannel()` is now wired into
|
|
328
|
+
// AjaxDispatcher::handle()'s match() under the `toggleBetaChannel` task,
|
|
329
|
+
// so we map it (was: clean JoomlaUnsupportedPathError reject). The request
|
|
330
|
+
// body `{enabled}` flows through the HTTP client untouched — it is NOT a
|
|
331
|
+
// path/query param — so `params` is empty. (`apimapper_license_beta_channel`.)
|
|
332
|
+
if (resource === "license" && sub === "beta-channel" && method === "POST") {
|
|
333
|
+
return { action: "toggleBetaChannel", params: {} };
|
|
334
|
+
}
|
|
189
335
|
if (resource === "releases" && sub === "download" && method === "POST") {
|
|
190
336
|
return { action: "downloadRelease", params: {} };
|
|
191
337
|
}
|
|
@@ -251,6 +397,37 @@ export class JoomlaPlatform {
|
|
|
251
397
|
if (resource === "library" && sub === "activate" && method === "POST") {
|
|
252
398
|
return { action: "activateLibraryConnection", params: { id } };
|
|
253
399
|
}
|
|
400
|
+
// ── Library deactivate (WP↔Joomla parity fix 2026-06-07) ───────────
|
|
401
|
+
// DELETE /library/{slug}/activate tears down an activated library
|
|
402
|
+
// connection. Disambiguated from the POST activate arm above by method.
|
|
403
|
+
// Previously a DELETE on this path fell through to the opaque `fail()`.
|
|
404
|
+
//
|
|
405
|
+
// ⚠ Like libraryConnectionDetail, the Joomla dispatcher's
|
|
406
|
+
// `deactivateLibraryConnection` arm reads the SLUG from `library_id`
|
|
407
|
+
// (AjaxDispatcher.php), NOT `id` — because a slug like "airtable" is not a
|
|
408
|
+
// valid IdGenerator id and a global `id` query param would trip the
|
|
409
|
+
// dispatcher's early `IdGenerator::isValid($id)` gate ("Invalid ID
|
|
410
|
+
// format") before the arm is reached. So the param key MUST be
|
|
411
|
+
// `library_id` and the value is the 2nd path segment (`id` here = slug).
|
|
412
|
+
if (resource === "library" && sub === "activate" && method === "DELETE") {
|
|
413
|
+
return { action: "deactivateLibraryConnection", params: { library_id: id } };
|
|
414
|
+
}
|
|
415
|
+
// ── Per-id library detail (WP↔Joomla parity fix 2026-06-07) ────────
|
|
416
|
+
// WordPress wires GET /library/connections/{slug}
|
|
417
|
+
// (LibraryController::connection). The Joomla com_ajax handler
|
|
418
|
+
// (dispatcher task `libraryConnectionDetail`) now EXISTS, so we map it
|
|
419
|
+
// (was: clean JoomlaUnsupportedPathError reject). Hit by
|
|
420
|
+
// `apimapper_library_connection_detail`, the `apimapper_library_catalog`
|
|
421
|
+
// single-template filter, AND the `apimapper_library_activate` pre-fetch.
|
|
422
|
+
//
|
|
423
|
+
// ⚠ The 3rd segment (`sub`) is the template SLUG, and the backend reads
|
|
424
|
+
// it from input under the key `library_id` (NOT `id`) to bypass its
|
|
425
|
+
// IdGenerator gate. So the param key MUST be `library_id` and the value
|
|
426
|
+
// is `sub`. Disambiguated from POST /library/{id}/activate by `id ===
|
|
427
|
+
// "connections"` + GET (the activate arm has `sub === "activate"` + POST).
|
|
428
|
+
if (resource === "library" && id === "connections" && method === "GET") {
|
|
429
|
+
return { action: "libraryConnectionDetail", params: { library_id: sub } };
|
|
430
|
+
}
|
|
254
431
|
if (resource === "cache" && id === "admin" && sub === "invalidate" && method === "POST") {
|
|
255
432
|
return { action: "cacheInvalidate", params: {} };
|
|
256
433
|
}
|
|
@@ -285,6 +462,17 @@ export class JoomlaPlatform {
|
|
|
285
462
|
if (resource === "node-snapshots" && method === "GET") {
|
|
286
463
|
return { action: "nodeSnapshotList", params: {} };
|
|
287
464
|
}
|
|
465
|
+
// Wave-1 C-6 (2026-05-27): `apimapper_library_list` MCP-tool calls
|
|
466
|
+
// `/library?page=1&limit=100`. On WP this hits `LibraryController::browse`;
|
|
467
|
+
// the Joomla counterpart is `LibraryAjaxHandler::catalog($page, $limit,
|
|
468
|
+
// $search)` registered under the `libraryCatalog` task arm in
|
|
469
|
+
// AjaxDispatcher. Same paginated catalogue payload, same wire-shape:
|
|
470
|
+
// route the one-segment `/library` GET through `libraryCatalog` and
|
|
471
|
+
// pass `page`/`limit`/`search`/`category` through query-params so the
|
|
472
|
+
// handler can read them via `$app->input`.
|
|
473
|
+
if (resource === "library" && method === "GET") {
|
|
474
|
+
return { action: "libraryCatalog", params: withQuery({}) };
|
|
475
|
+
}
|
|
288
476
|
if (resource === "cache-stats" && method === "GET") {
|
|
289
477
|
return { action: "cacheStats", params: {} };
|
|
290
478
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,13 +10,21 @@ export interface DetectedClient {
|
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Injectable environment surface. `existsSync` is the only file-system
|
|
13
|
-
* dependency;
|
|
13
|
+
* dependency for path discovery; `readFile` is additionally consumed by
|
|
14
|
+
* {@link detectInstalledClients} (uninstall) to inspect config contents.
|
|
15
|
+
* Everything else is pure-data lookup of OS/env.
|
|
14
16
|
*/
|
|
15
17
|
export interface DetectEnv {
|
|
16
18
|
platform: () => NodeJS.Platform;
|
|
17
19
|
homedir: () => string;
|
|
18
20
|
env: Partial<Record<string, string>>;
|
|
19
21
|
existsSync: (p: string) => boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Read a config file as UTF-8 text. Only used by the uninstall scan; the
|
|
24
|
+
* default REAL_ENV plugs in `fs.readFileSync`. Optional so existing
|
|
25
|
+
* DetectEnv producers (setup path) need not provide it.
|
|
26
|
+
*/
|
|
27
|
+
readFile?: (p: string) => string;
|
|
20
28
|
}
|
|
21
29
|
interface ClientDef {
|
|
22
30
|
id: ClientId;
|
|
@@ -36,4 +44,35 @@ interface PathCtx {
|
|
|
36
44
|
declare function joinPath(home: string, ...parts: string[]): string;
|
|
37
45
|
export declare const CLIENT_DEFS: readonly ClientDef[];
|
|
38
46
|
export declare function detectClients(env?: DetectEnv): Promise<DetectedClient[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Canonical + legacy keys this CLI has ever written for the MCP server
|
|
49
|
+
* entry. The setup wizard currently writes "API Mapper MCP" and migrates
|
|
50
|
+
* away from the two legacy keys; the uninstall scan checks all three plus a
|
|
51
|
+
* command/args substring match (below) to catch arbitrarily-renamed
|
|
52
|
+
* leftovers.
|
|
53
|
+
*
|
|
54
|
+
* Keep in sync with setup-cli.ts's write key + `legacyKeys`.
|
|
55
|
+
*/
|
|
56
|
+
export declare const OUR_SERVER_KEYS: readonly string[];
|
|
57
|
+
/** The npm package substring that identifies our entry by command/args. */
|
|
58
|
+
export declare const OUR_PACKAGE_SUBSTRING = "@wootsup/mcp";
|
|
59
|
+
/**
|
|
60
|
+
* A detected, installed-with-our-entry client. Superset of the path/format
|
|
61
|
+
* fields plus the concrete keys (JSON keys or TOML table names) that matched.
|
|
62
|
+
*/
|
|
63
|
+
export interface InstalledClient {
|
|
64
|
+
id: ClientId;
|
|
65
|
+
label: string;
|
|
66
|
+
configPath: string;
|
|
67
|
+
format: ClientFormat;
|
|
68
|
+
/** The mcpServers/mcp_servers keys under this config that are ours. */
|
|
69
|
+
matchedKeys: string[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Scan every known client config for OUR server entries. Returns one
|
|
73
|
+
* {@link InstalledClient} per config that has ≥1 matching entry, with the
|
|
74
|
+
* matched key names. Missing files, unreadable files, and malformed configs
|
|
75
|
+
* are skipped silently (they simply contribute no matches).
|
|
76
|
+
*/
|
|
77
|
+
export declare function detectInstalledClients(env?: DetectEnv): Promise<InstalledClient[]>;
|
|
39
78
|
export { joinPath, dirname };
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// The module accepts an injectable DetectEnv so that tests can pretend
|
|
8
8
|
// to be running on any OS without touching the real filesystem.
|
|
9
|
-
import { existsSync as realExistsSync } from "node:fs";
|
|
9
|
+
import { existsSync as realExistsSync, readFileSync as realReadFileSync } from "node:fs";
|
|
10
10
|
import { platform as realPlatform, homedir as realHomedir } from "node:os";
|
|
11
11
|
import { dirname } from "node:path";
|
|
12
12
|
const PSEP = (home) => (home.includes("\\") ? "\\" : "/");
|
|
@@ -130,6 +130,7 @@ const REAL_ENV = {
|
|
|
130
130
|
homedir: () => realHomedir(),
|
|
131
131
|
env: process.env,
|
|
132
132
|
existsSync: (p) => realExistsSync(p),
|
|
133
|
+
readFile: (p) => realReadFileSync(p, "utf8"),
|
|
133
134
|
};
|
|
134
135
|
export async function detectClients(env = REAL_ENV) {
|
|
135
136
|
const plat = env.platform();
|
|
@@ -147,6 +148,152 @@ export async function detectClients(env = REAL_ENV) {
|
|
|
147
148
|
});
|
|
148
149
|
return out;
|
|
149
150
|
}
|
|
151
|
+
// ── uninstall detection ──────────────────────────────────────────────────
|
|
152
|
+
//
|
|
153
|
+
// detectInstalledClients() is the reverse-of-setup discovery: instead of
|
|
154
|
+
// "where COULD a client live", it answers "which client configs actually
|
|
155
|
+
// contain one of OUR server entries", returning the matched key names so
|
|
156
|
+
// the remover knows exactly what to delete.
|
|
157
|
+
/**
|
|
158
|
+
* Canonical + legacy keys this CLI has ever written for the MCP server
|
|
159
|
+
* entry. The setup wizard currently writes "API Mapper MCP" and migrates
|
|
160
|
+
* away from the two legacy keys; the uninstall scan checks all three plus a
|
|
161
|
+
* command/args substring match (below) to catch arbitrarily-renamed
|
|
162
|
+
* leftovers.
|
|
163
|
+
*
|
|
164
|
+
* Keep in sync with setup-cli.ts's write key + `legacyKeys`.
|
|
165
|
+
*/
|
|
166
|
+
export const OUR_SERVER_KEYS = [
|
|
167
|
+
"API Mapper MCP",
|
|
168
|
+
"apimapper-mcp",
|
|
169
|
+
"apimapper",
|
|
170
|
+
"WootsUp!? - API Mapper",
|
|
171
|
+
];
|
|
172
|
+
/** The npm package substring that identifies our entry by command/args. */
|
|
173
|
+
export const OUR_PACKAGE_SUBSTRING = "@wootsup/mcp";
|
|
174
|
+
/** True iff a JSON server-entry value references our package by command/args. */
|
|
175
|
+
function jsonEntryIsOurs(value) {
|
|
176
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
177
|
+
return false;
|
|
178
|
+
const v = value;
|
|
179
|
+
if (typeof v.command === "string" && v.command.includes(OUR_PACKAGE_SUBSTRING)) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
if (Array.isArray(v.args)) {
|
|
183
|
+
return v.args.some((a) => typeof a === "string" && a.includes(OUR_PACKAGE_SUBSTRING));
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
/** Collect matched server keys from a JSON config string. */
|
|
188
|
+
function matchedKeysInJson(text) {
|
|
189
|
+
let parsed;
|
|
190
|
+
try {
|
|
191
|
+
parsed = JSON.parse(text);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
197
|
+
return [];
|
|
198
|
+
const servers = parsed.mcpServers;
|
|
199
|
+
if (!servers || typeof servers !== "object" || Array.isArray(servers)) {
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
const ourKeys = new Set(OUR_SERVER_KEYS);
|
|
203
|
+
const matched = [];
|
|
204
|
+
for (const [key, value] of Object.entries(servers)) {
|
|
205
|
+
if (ourKeys.has(key) || jsonEntryIsOurs(value)) {
|
|
206
|
+
matched.push(key);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return matched;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Collect matched table names from a Codex TOML config string. A block runs
|
|
213
|
+
* from its `[mcp_servers.<name>]` header to the next top-level `[...]` header
|
|
214
|
+
* (sub-tables like `[mcp_servers.<name>.env]` belong to the block). A block
|
|
215
|
+
* matches if its name is one of OUR_SERVER_KEYS OR any line in the block
|
|
216
|
+
* references our package substring.
|
|
217
|
+
*/
|
|
218
|
+
function matchedKeysInToml(text) {
|
|
219
|
+
const lines = text.split("\n");
|
|
220
|
+
const ourKeys = new Set(OUR_SERVER_KEYS);
|
|
221
|
+
const matched = [];
|
|
222
|
+
const headerRe = /^\s*\[mcp_servers\.(.+?)\]\s*$/;
|
|
223
|
+
let i = 0;
|
|
224
|
+
while (i < lines.length) {
|
|
225
|
+
const m = headerRe.exec(lines[i]);
|
|
226
|
+
if (!m) {
|
|
227
|
+
i += 1;
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const name = m[1];
|
|
231
|
+
// Skip sub-tables (name contains a dot we treat as <key>.<sub>); the
|
|
232
|
+
// base block is captured when its own header is seen first. We still
|
|
233
|
+
// collect the body to scan for the package substring.
|
|
234
|
+
const baseName = name.includes(".") ? name.slice(0, name.indexOf(".")) : name;
|
|
235
|
+
let body = lines[i];
|
|
236
|
+
let j = i + 1;
|
|
237
|
+
for (; j < lines.length; j++) {
|
|
238
|
+
const t = lines[j].trim();
|
|
239
|
+
if (t.startsWith("[") && t.endsWith("]")) {
|
|
240
|
+
// A nested `[mcp_servers.<base>.x]` belongs to this block.
|
|
241
|
+
const sub = headerRe.exec(lines[j]);
|
|
242
|
+
if (sub && sub[1].startsWith(`${baseName}.`)) {
|
|
243
|
+
body += `\n${lines[j]}`;
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
body += `\n${lines[j]}`;
|
|
249
|
+
}
|
|
250
|
+
if (!name.includes(".")) {
|
|
251
|
+
if (ourKeys.has(baseName) || body.includes(OUR_PACKAGE_SUBSTRING)) {
|
|
252
|
+
matched.push(baseName);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
i = j;
|
|
256
|
+
}
|
|
257
|
+
return matched;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Scan every known client config for OUR server entries. Returns one
|
|
261
|
+
* {@link InstalledClient} per config that has ≥1 matching entry, with the
|
|
262
|
+
* matched key names. Missing files, unreadable files, and malformed configs
|
|
263
|
+
* are skipped silently (they simply contribute no matches).
|
|
264
|
+
*/
|
|
265
|
+
export async function detectInstalledClients(env = REAL_ENV) {
|
|
266
|
+
const plat = env.platform();
|
|
267
|
+
const home = env.homedir();
|
|
268
|
+
const ctx = { home, appdata: getAppdata(env, home) };
|
|
269
|
+
const readFile = env.readFile ?? ((p) => realReadFileSync(p, "utf8"));
|
|
270
|
+
const out = [];
|
|
271
|
+
for (const def of CLIENT_DEFS) {
|
|
272
|
+
const configPath = pickPath(def, plat, ctx);
|
|
273
|
+
if (!env.existsSync(configPath))
|
|
274
|
+
continue;
|
|
275
|
+
let text;
|
|
276
|
+
try {
|
|
277
|
+
text = readFile(configPath);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
const matchedKeys = def.format === "toml"
|
|
283
|
+
? matchedKeysInToml(text)
|
|
284
|
+
: matchedKeysInJson(text);
|
|
285
|
+
if (matchedKeys.length > 0) {
|
|
286
|
+
out.push({
|
|
287
|
+
id: def.id,
|
|
288
|
+
label: def.label,
|
|
289
|
+
configPath,
|
|
290
|
+
format: def.format,
|
|
291
|
+
matchedKeys,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return out;
|
|
296
|
+
}
|
|
150
297
|
// Re-export the helper for use by other setup modules (write-config etc.).
|
|
151
298
|
export { joinPath, dirname };
|
|
152
299
|
//# sourceMappingURL=detect-clients.js.map
|