@wootsup/yt-builder-mcp 1.4.0 → 1.5.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/dist/cli/doctor-command.d.ts.map +1 -1
- package/dist/cli/doctor-command.js +51 -6
- package/dist/cli/doctor-command.js.map +1 -1
- package/dist/diagnostics/doctor.d.ts +50 -1
- package/dist/diagnostics/doctor.d.ts.map +1 -1
- package/dist/diagnostics/doctor.js +162 -8
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/proxy/bridge.d.ts +27 -2
- package/dist/proxy/bridge.d.ts.map +1 -1
- package/dist/proxy/bridge.js +83 -3
- package/dist/proxy/bridge.js.map +1 -1
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +58 -1
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/handlers.d.ts +43 -0
- package/dist/tools/elements/handlers.d.ts.map +1 -1
- package/dist/tools/elements/handlers.js +130 -0
- package/dist/tools/elements/handlers.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts +19 -0
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +15 -0
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/multi-items/clean-implode-handler.d.ts +2 -1
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/clean-implode-handler.js +9 -1
- package/dist/tools/multi-items/clean-implode-handler.js.map +1 -1
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +11 -2
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +1 -1
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +53 -5
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +2 -0
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +8 -0
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +36 -0
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/yt-builder-mcp/SKILL.md +165 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-command.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"doctor-command.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAA+C,KAAK,UAAU,EAAmB,MAAM,0BAA0B,CAAC;AA2BzH,UAAU,gBAAgB;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAczE;AAwFD,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB/G"}
|
|
@@ -2,15 +2,29 @@
|
|
|
2
2
|
import { installGlobalProxyDispatcher } from '../net/proxy-dispatcher.js';
|
|
3
3
|
import { SERVER_VERSION } from '../server.js';
|
|
4
4
|
import { fetchLatestFromNpm } from '../update/update-check.js';
|
|
5
|
-
import { runDoctor, formatDoctorReport } from '../diagnostics/doctor.js';
|
|
5
|
+
import { runDoctor, formatDoctorReport, asHostCompat } from '../diagnostics/doctor.js';
|
|
6
6
|
const MCP_PACKAGE_NAME = '@wootsup/yt-builder-mcp';
|
|
7
7
|
const PROBE_TIMEOUT_MS = 8_000;
|
|
8
8
|
/** WP + Joomla health endpoints — doctor is platform-agnostic. */
|
|
9
9
|
const HEALTH_PATHS = ['/wp-json/yt-builder-mcp/v1/health', '/api/index.php/v1/yt-builder-mcp/health'];
|
|
10
10
|
const BEARER_PATHS = ['/wp-json/yt-builder-mcp/v1/etag', '/api/index.php/v1/yt-builder-mcp/etag'];
|
|
11
|
+
/** Platform REST roots — for pre-install mode (plugin /health 404 but site up). */
|
|
12
|
+
const REST_ROOT_PATHS = ['/wp-json/', '/api/index.php/'];
|
|
11
13
|
function joinUrl(base, path) {
|
|
12
14
|
return base.replace(/\/+$/, '') + path;
|
|
13
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Peel the `host` field off a /health body and validate it as {@link HostCompat}
|
|
18
|
+
* at the **network boundary**. The block only appears on the authed payload; a
|
|
19
|
+
* malformed/partial bag is discarded. The shape validation is delegated to the
|
|
20
|
+
* single source of truth — `asHostCompat` in doctor.ts — so this boundary and
|
|
21
|
+
* the consumption boundary in `runDoctor` can never diverge.
|
|
22
|
+
*/
|
|
23
|
+
function parseHost(body) {
|
|
24
|
+
if (body === null || typeof body !== 'object')
|
|
25
|
+
return undefined;
|
|
26
|
+
return asHostCompat(body.host);
|
|
27
|
+
}
|
|
14
28
|
/** Parse `--url <x> --token <y>` from the doctor argv tail. */
|
|
15
29
|
export function parseDoctorArgs(argv) {
|
|
16
30
|
const parsed = {};
|
|
@@ -28,20 +42,31 @@ export function parseDoctorArgs(argv) {
|
|
|
28
42
|
}
|
|
29
43
|
return parsed;
|
|
30
44
|
}
|
|
31
|
-
/**
|
|
32
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Real network probes — try the WP path, then the Joomla path.
|
|
47
|
+
*
|
|
48
|
+
* The token is threaded in via closure: when present, `probeHealth`
|
|
49
|
+
* authenticates so the server returns the Bearer-tiered `host` block (Task
|
|
50
|
+
* 2.3). Without a token the probe is plain (host stays undefined — the doctor
|
|
51
|
+
* still reports reachability + plugin version, no regression).
|
|
52
|
+
*/
|
|
53
|
+
function defaultDoctorDeps(token) {
|
|
54
|
+
const authHeaders = token !== undefined && token !== '' ? { Authorization: `Bearer ${token}` } : undefined;
|
|
33
55
|
return {
|
|
34
56
|
async probeHealth(url) {
|
|
35
57
|
let lastError = null;
|
|
36
58
|
for (const path of HEALTH_PATHS) {
|
|
37
59
|
try {
|
|
38
|
-
const res = await fetch(joinUrl(url, path), {
|
|
60
|
+
const res = await fetch(joinUrl(url, path), {
|
|
61
|
+
headers: authHeaders,
|
|
62
|
+
signal: AbortSignal.timeout(PROBE_TIMEOUT_MS),
|
|
63
|
+
});
|
|
39
64
|
if (res.ok) {
|
|
40
65
|
const body = await res.json().catch(() => ({}));
|
|
41
66
|
const pluginVersion = body !== null && typeof body === 'object' && typeof body.plugin_version === 'string'
|
|
42
67
|
? body.plugin_version
|
|
43
68
|
: undefined;
|
|
44
|
-
return { ok: true, pluginVersion };
|
|
69
|
+
return { ok: true, pluginVersion, host: parseHost(body) };
|
|
45
70
|
}
|
|
46
71
|
lastError = { status: res.status };
|
|
47
72
|
}
|
|
@@ -51,6 +76,24 @@ function defaultDoctorDeps() {
|
|
|
51
76
|
}
|
|
52
77
|
return { ok: false, error: lastError };
|
|
53
78
|
},
|
|
79
|
+
// Task 2.3 pre-install mode — REST root reachability, plugin-independent.
|
|
80
|
+
async probeRestRoot(url) {
|
|
81
|
+
let lastError = null;
|
|
82
|
+
for (const path of REST_ROOT_PATHS) {
|
|
83
|
+
try {
|
|
84
|
+
const res = await fetch(joinUrl(url, path), { signal: AbortSignal.timeout(PROBE_TIMEOUT_MS) });
|
|
85
|
+
// The WP REST index returns 200; any HTTP response means the
|
|
86
|
+
// REST surface is up (the host answered), so the site is live.
|
|
87
|
+
if (res.status < 500)
|
|
88
|
+
return { ok: true };
|
|
89
|
+
lastError = { status: res.status };
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
lastError = err;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return { ok: false, error: lastError };
|
|
96
|
+
},
|
|
54
97
|
async probeBearer(url, token) {
|
|
55
98
|
let lastError = null;
|
|
56
99
|
let lastStatus;
|
|
@@ -98,12 +141,14 @@ function defaultDoctorDeps() {
|
|
|
98
141
|
export async function doctorCommand(argv, overrides = {}) {
|
|
99
142
|
const env = overrides.env ?? process.env;
|
|
100
143
|
const log = overrides.log ?? ((line) => process.stdout.write(`${line}\n`));
|
|
101
|
-
const deps = overrides.deps ?? defaultDoctorDeps();
|
|
102
144
|
// Honor a corporate proxy for doctor's own probes (CA via NODE_EXTRA_CA_CERTS).
|
|
103
145
|
installGlobalProxyDispatcher({ env });
|
|
104
146
|
const parsed = parseDoctorArgs(argv);
|
|
105
147
|
const url = parsed.url ?? env.YTB_MCP_SITE_URL ?? env.YTB_MCP_WP_URL;
|
|
106
148
|
const token = parsed.token ?? env.YTB_MCP_BEARER_TOKEN;
|
|
149
|
+
// Thread the token into the default probes so `probeHealth` authenticates
|
|
150
|
+
// and the server returns the Bearer-tiered host-compat block (Task 2.3).
|
|
151
|
+
const deps = overrides.deps ?? defaultDoctorDeps(token);
|
|
107
152
|
const report = await runDoctor({ url, token, env, currentVersion: SERVER_VERSION, packageName: MCP_PACKAGE_NAME }, deps);
|
|
108
153
|
log(formatDoctorReport(report));
|
|
109
154
|
return report.ok ? 0 : 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAoC,MAAM,0BAA0B,CAAC;AAEzH,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AACnD,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,kEAAkE;AAClE,MAAM,YAAY,GAAG,CAAC,mCAAmC,EAAE,yCAAyC,CAAU,CAAC;AAC/G,MAAM,YAAY,GAAG,CAAC,iCAAiC,EAAE,uCAAuC,CAAU,CAAC;AAC3G,mFAAmF;AACnF,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAU,CAAC;AAElE,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAa;IAC5B,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChE,OAAO,YAAY,CAAE,IAA2B,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAOD,+DAA+D;AAC/D,MAAM,UAAU,eAAe,CAAC,IAAuB;IACnD,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;YAClB,CAAC,EAAE,CAAC;QACR,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACrC,MAAM,WAAW,GACb,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,OAAO;QACH,KAAK,CAAC,WAAW,CAAC,GAAG;YACjB,IAAI,SAAS,GAAY,IAAI,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;wBACxC,OAAO,EAAE,WAAW;wBACpB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;qBAChD,CAAC,CAAC;oBACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;wBACT,MAAM,IAAI,GAAY,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzD,MAAM,aAAa,GACf,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAQ,IAAqC,CAAC,cAAc,KAAK,QAAQ;4BAClH,CAAC,CAAE,IAAmC,CAAC,cAAc;4BACrD,CAAC,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9D,CAAC;oBACD,SAAS,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,SAAS,GAAG,GAAG,CAAC;gBACpB,CAAC;YACL,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC3C,CAAC;QACD,0EAA0E;QAC1E,KAAK,CAAC,aAAa,CAAC,GAAG;YACnB,IAAI,SAAS,GAAY,IAAI,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;oBAC/F,6DAA6D;oBAC7D,+DAA+D;oBAC/D,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;wBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;oBAC1C,SAAS,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,SAAS,GAAG,GAAG,CAAC;gBACpB,CAAC;YACL,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK;YACxB,IAAI,SAAS,GAAY,IAAI,CAAC;YAC9B,IAAI,UAA8B,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;wBACxC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;wBAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;qBAChD,CAAC,CAAC;oBACH,IAAI,GAAG,CAAC,EAAE;wBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;oBAChC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;oBACxB,wDAAwD;oBACxD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;wBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACrE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,SAAS,GAAG,GAAG,CAAC;gBACpB,CAAC;YACL,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC/D,CAAC;QACD,yEAAyE;QACzE,yEAAyE;QACzE,KAAK,CAAC,aAAa;YACf,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mCAAmC,EAAE;oBACzD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;iBAChD,CAAC,CAAC;gBACH,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YAChF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACrC,CAAC;QACL,CAAC;QACD,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC;KAChD,CAAC;AACN,CAAC;AAQD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB,EAAE,YAA+B,EAAE;IAC1F,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACzC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IAEnF,gFAAgF;IAChF,4BAA4B,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,cAAc,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,oBAAoB,CAAC;IAEvD,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,SAAS,CAC1B,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAClF,IAAI,CACP,CAAC;IAEF,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -22,11 +22,36 @@ export interface DoctorConfig {
|
|
|
22
22
|
readonly currentVersion: string;
|
|
23
23
|
readonly packageName: string;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* WordPress host install-readiness facts, surfaced on the **Bearer-authenticated**
|
|
27
|
+
* `/health` payload (Task 2.1/2.2b PHP side). These diagnose the "some files
|
|
28
|
+
* could not be copied" install-failure class — the Glöckle stress-test failure
|
|
29
|
+
* where a non-`direct` filesystem transport silently blocks plugin
|
|
30
|
+
* updates/uninstalls. Mirrors the canonical PHP shape in
|
|
31
|
+
* `src/modules/rest-bridge/src/HealthController::collectHostCompat()`.
|
|
32
|
+
*/
|
|
33
|
+
export interface HostCompat {
|
|
34
|
+
/** WP filesystem transport: 'direct' | 'ftpext' | 'ssh2' | ''. 'direct' = PHP writes files itself. */
|
|
35
|
+
readonly fs_method: string;
|
|
36
|
+
/** Whether the plugin-dir owner matches the web-server user; null when undeterminable (no posix). */
|
|
37
|
+
readonly plugin_dir_owner_matches_web_user: boolean | null;
|
|
38
|
+
/** Whether OPcache is on (stale bytecode can linger after an in-place .php overwrite). */
|
|
39
|
+
readonly opcache_enabled: boolean;
|
|
40
|
+
/** Whether PHP can write into the plugin directory at all. */
|
|
41
|
+
readonly plugin_dir_writable: boolean;
|
|
42
|
+
}
|
|
25
43
|
export interface DoctorDeps {
|
|
26
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Probe `<url>/wp-json/yt-builder-mcp/v1/health` (then the Joomla path).
|
|
46
|
+
* When a bearer token is available the probe authenticates, so the success
|
|
47
|
+
* return can carry the {@link HostCompat} `host` block (authed-tier only —
|
|
48
|
+
* without a token `host` is simply undefined and the doctor still reports
|
|
49
|
+
* reachability + plugin version, no regression).
|
|
50
|
+
*/
|
|
27
51
|
probeHealth: (url: string) => Promise<{
|
|
28
52
|
ok: true;
|
|
29
53
|
pluginVersion?: string;
|
|
54
|
+
host?: HostCompat;
|
|
30
55
|
} | {
|
|
31
56
|
ok: false;
|
|
32
57
|
error: unknown;
|
|
@@ -51,7 +76,31 @@ export interface DoctorDeps {
|
|
|
51
76
|
ok: boolean;
|
|
52
77
|
error?: unknown;
|
|
53
78
|
}>;
|
|
79
|
+
/**
|
|
80
|
+
* Task 2.3 pre-install mode — probe the platform REST ROOT (`/wp-json/`)
|
|
81
|
+
* reachability, independent of the plugin endpoint. Optional (back-compat).
|
|
82
|
+
* When `/health` 404s (plugin not installed yet) but the REST root IS
|
|
83
|
+
* reachable, the doctor downgrades reachability to an advisory "plugin not
|
|
84
|
+
* yet installed" hint (exit 0) instead of a hard failure — the operator
|
|
85
|
+
* very likely hit an install-upload failure (FS_METHOD / ownership / FTP).
|
|
86
|
+
*/
|
|
87
|
+
probeRestRoot?: (url: string) => Promise<{
|
|
88
|
+
ok: boolean;
|
|
89
|
+
error?: unknown;
|
|
90
|
+
}>;
|
|
54
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Validate an **already-peeled** value as {@link HostCompat} — the single source
|
|
94
|
+
* of truth for the host-compat shape. Both validation boundaries call this:
|
|
95
|
+
* • the network boundary (`parseHost` in doctor-command.ts peels `body.host`
|
|
96
|
+
* off the wire response, then delegates here), and
|
|
97
|
+
* • the consumption boundary (`runDoctor` re-validates `health.host` so a
|
|
98
|
+
* directly injected / future probe can't feed it a malformed host).
|
|
99
|
+
* Keeping the shape check in one place means a future `HostCompat` field can't
|
|
100
|
+
* be validated in one boundary but silently skipped in the other. A
|
|
101
|
+
* partial/typo'd bag is discarded (treated as absent), never crashed on.
|
|
102
|
+
*/
|
|
103
|
+
export declare function asHostCompat(value: unknown): HostCompat | undefined;
|
|
55
104
|
/**
|
|
56
105
|
* Run the self-diagnostic. Pure decision core — all network probes are
|
|
57
106
|
* injected via {@link DoctorDeps}, so the logic is fully testable offline.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/diagnostics/doctor.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACvB,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/diagnostics/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,110 @@ function meetsFloor(v, floor) {
|
|
|
19
19
|
function proxyOf(env) {
|
|
20
20
|
return env.HTTPS_PROXY ?? env.https_proxy ?? env.HTTP_PROXY ?? env.http_proxy ?? null;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate an **already-peeled** value as {@link HostCompat} — the single source
|
|
24
|
+
* of truth for the host-compat shape. Both validation boundaries call this:
|
|
25
|
+
* • the network boundary (`parseHost` in doctor-command.ts peels `body.host`
|
|
26
|
+
* off the wire response, then delegates here), and
|
|
27
|
+
* • the consumption boundary (`runDoctor` re-validates `health.host` so a
|
|
28
|
+
* directly injected / future probe can't feed it a malformed host).
|
|
29
|
+
* Keeping the shape check in one place means a future `HostCompat` field can't
|
|
30
|
+
* be validated in one boundary but silently skipped in the other. A
|
|
31
|
+
* partial/typo'd bag is discarded (treated as absent), never crashed on.
|
|
32
|
+
*/
|
|
33
|
+
export function asHostCompat(value) {
|
|
34
|
+
if (value === null || typeof value !== 'object')
|
|
35
|
+
return undefined;
|
|
36
|
+
const v = value;
|
|
37
|
+
const owner = v.plugin_dir_owner_matches_web_user;
|
|
38
|
+
if (typeof v.fs_method !== 'string')
|
|
39
|
+
return undefined;
|
|
40
|
+
if (!(owner === null || typeof owner === 'boolean'))
|
|
41
|
+
return undefined;
|
|
42
|
+
if (typeof v.opcache_enabled !== 'boolean')
|
|
43
|
+
return undefined;
|
|
44
|
+
if (typeof v.plugin_dir_writable !== 'boolean')
|
|
45
|
+
return undefined;
|
|
46
|
+
return {
|
|
47
|
+
fs_method: v.fs_method,
|
|
48
|
+
plugin_dir_owner_matches_web_user: owner,
|
|
49
|
+
opcache_enabled: v.opcache_enabled,
|
|
50
|
+
plugin_dir_writable: v.plugin_dir_writable,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Read a numeric `.status` off a health-probe error (RestError-like), or null. */
|
|
54
|
+
function statusOf(value) {
|
|
55
|
+
if (value !== null && typeof value === 'object' && 'status' in value) {
|
|
56
|
+
const s = value.status;
|
|
57
|
+
if (typeof s === 'number' && Number.isFinite(s))
|
|
58
|
+
return s;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
/** Manual FS_METHOD guidance — the copy-pasteable fix for the Glöckle install-failure class. */
|
|
63
|
+
const FS_METHOD_FIX = "plugin updates/uninstalls need FTP credentials or define('FS_METHOD','direct') in wp-config.php so PHP writes files directly.";
|
|
64
|
+
/**
|
|
65
|
+
* Append the "Host readiness" checks for a {@link HostCompat} block (authed
|
|
66
|
+
* /health only). One line per fact with an actionable hint; warnings are
|
|
67
|
+
* tolerated (they never fail the doctor).
|
|
68
|
+
*/
|
|
69
|
+
function pushHostChecks(checks, host) {
|
|
70
|
+
// fs_method — the Glöckle class. Non-'direct' transports (ftpext/ssh2)
|
|
71
|
+
// mean WordPress can't write plugin files itself on an upgrade/uninstall.
|
|
72
|
+
if (host.fs_method === 'direct') {
|
|
73
|
+
checks.push({ name: 'host_fs_method', label: 'Host · FS method', status: 'ok', detail: "FS_METHOD=direct — PHP writes files directly." });
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const method = host.fs_method === '' ? '(unset)' : host.fs_method;
|
|
77
|
+
checks.push({
|
|
78
|
+
name: 'host_fs_method',
|
|
79
|
+
label: 'Host · FS method',
|
|
80
|
+
status: 'warn',
|
|
81
|
+
detail: `FS_METHOD=${method} — ${FS_METHOD_FIX}`,
|
|
82
|
+
fix: `FS_METHOD=${method} → ${FS_METHOD_FIX}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// plugin_dir_owner_matches_web_user — a mismatch can block file ops.
|
|
86
|
+
if (host.plugin_dir_owner_matches_web_user === false) {
|
|
87
|
+
checks.push({
|
|
88
|
+
name: 'host_owner',
|
|
89
|
+
label: 'Host · Dir ownership',
|
|
90
|
+
status: 'warn',
|
|
91
|
+
detail: 'Plugin-dir owner does not match the web-server user — file ops (update/uninstall) may be blocked.',
|
|
92
|
+
fix: 'chown the plugin directory to the web-server user (e.g. www-data), or fix the upload via FTP credentials.',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else if (host.plugin_dir_owner_matches_web_user === true) {
|
|
96
|
+
checks.push({ name: 'host_owner', label: 'Host · Dir ownership', status: 'ok', detail: 'Plugin-dir owner matches the web-server user.' });
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
checks.push({ name: 'host_owner', label: 'Host · Dir ownership', status: 'info', detail: 'Ownership could not be determined on this host.' });
|
|
100
|
+
}
|
|
101
|
+
// plugin_dir_writable — can PHP write into the plugin directory at all.
|
|
102
|
+
if (host.plugin_dir_writable) {
|
|
103
|
+
checks.push({ name: 'host_writable', label: 'Host · Dir writable', status: 'ok', detail: 'Plugin directory is writable.' });
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
checks.push({
|
|
107
|
+
name: 'host_writable',
|
|
108
|
+
label: 'Host · Dir writable',
|
|
109
|
+
status: 'warn',
|
|
110
|
+
detail: 'Plugin directory is NOT writable — updates/uninstalls will fail.',
|
|
111
|
+
fix: 'Grant the web-server user write access to the plugin directory, or use FTP credentials for file ops.',
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// opcache_enabled — informational, surfaced ONLY when enabled (the
|
|
115
|
+
// stale-bytecode-after-upgrade hint per the brief). When OPcache is off
|
|
116
|
+
// there is nothing to warn about, so we emit no line (no noise).
|
|
117
|
+
if (host.opcache_enabled) {
|
|
118
|
+
checks.push({
|
|
119
|
+
name: 'host_opcache',
|
|
120
|
+
label: 'Host · OPcache',
|
|
121
|
+
status: 'info',
|
|
122
|
+
detail: 'OPcache is enabled — after an in-place upgrade, reload PHP-FPM (or flush OPcache) so old bytecode does not linger.',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
22
126
|
/**
|
|
23
127
|
* Run the self-diagnostic. Pure decision core — all network probes are
|
|
24
128
|
* injected via {@link DoctorDeps}, so the logic is fully testable offline.
|
|
@@ -69,16 +173,55 @@ export async function runDoctor(config, deps) {
|
|
|
69
173
|
status: 'ok',
|
|
70
174
|
detail: health.pluginVersion !== undefined ? `OK — plugin ${health.pluginVersion}` : 'OK',
|
|
71
175
|
});
|
|
176
|
+
// 4b. Host readiness — only present on the authed payload (with a
|
|
177
|
+
// token). Absent host = no token / pre-install → no host section,
|
|
178
|
+
// no failure. Validate at consumption (a malformed bag is ignored).
|
|
179
|
+
const host = asHostCompat(health.host);
|
|
180
|
+
if (host !== undefined) {
|
|
181
|
+
pushHostChecks(checks, host);
|
|
182
|
+
}
|
|
72
183
|
}
|
|
73
184
|
else {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
185
|
+
// Task 2.3 — pre-install mode. A 404 means the plugin endpoint is
|
|
186
|
+
// not there (plugin not installed at this URL). If the platform
|
|
187
|
+
// REST ROOT is still reachable, the site is up and the upload very
|
|
188
|
+
// likely failed (FS_METHOD / ownership / FTP) — surface advisory
|
|
189
|
+
// guidance and DO NOT fail the doctor.
|
|
190
|
+
const healthStatus = statusOf(health.error);
|
|
191
|
+
const restRoot = healthStatus === 404 && deps.probeRestRoot !== undefined ? await deps.probeRestRoot(url) : null;
|
|
192
|
+
// `restRoot.ok` reflects the same `< 500` "REST surface is up"
|
|
193
|
+
// boundary as `probeRestRoot` (doctor-command.ts): any < 500 means
|
|
194
|
+
// the host answered, so the site is live and only the plugin is
|
|
195
|
+
// missing → advisory pre-install. A 5xx site is NOT "up" for install
|
|
196
|
+
// purposes, so the probe reports not-ok and we hard-fail below (this
|
|
197
|
+
// is reachability triage, not a pre-install case).
|
|
198
|
+
if (healthStatus === 404 && restRoot !== null && restRoot.ok) {
|
|
199
|
+
checks.push({
|
|
200
|
+
name: 'reachability',
|
|
201
|
+
label: 'Plugin reachable',
|
|
202
|
+
status: 'info',
|
|
203
|
+
detail: 'Plugin /health not found (HTTP 404), but the REST root is reachable.',
|
|
204
|
+
});
|
|
205
|
+
checks.push({
|
|
206
|
+
name: 'preinstall',
|
|
207
|
+
label: 'Pre-install',
|
|
208
|
+
status: 'info',
|
|
209
|
+
detail: 'Plugin not yet installed at this URL — the REST root responded, so the site is up. ' +
|
|
210
|
+
'If the plugin ZIP upload failed, this is the install-readiness check.',
|
|
211
|
+
fix: 'Check FS_METHOD (a non-direct transport blocks the file copy) / plugin-dir ownership / FTP credentials. ' +
|
|
212
|
+
`Manual fix: ${FS_METHOD_FIX}`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
const diag = diagnoseNetworkError(health.error, env);
|
|
217
|
+
checks.push({
|
|
218
|
+
name: 'reachability',
|
|
219
|
+
label: 'Plugin reachable',
|
|
220
|
+
status: 'fail',
|
|
221
|
+
detail: diag !== null ? diag.summary : 'Could not reach the plugin health endpoint.',
|
|
222
|
+
fix: diag !== null ? diag.fix : 'Verify the site URL and that the yt-builder-mcp plugin is active.',
|
|
223
|
+
});
|
|
224
|
+
}
|
|
82
225
|
}
|
|
83
226
|
// 5. Bearer validity (only meaningful if the site was reachable).
|
|
84
227
|
if (health.ok) {
|
|
@@ -153,7 +296,18 @@ const GLYPH = { ok: '✓', warn: '!', fail: '✗', info: 'ℹ' };
|
|
|
153
296
|
/** Render a {@link DoctorReport} as a readable, fixed-width-ish text block. */
|
|
154
297
|
export function formatDoctorReport(report) {
|
|
155
298
|
const lines = ['yt-builder-mcp doctor', ''];
|
|
299
|
+
let hostSectionOpen = false;
|
|
156
300
|
for (const c of report.checks) {
|
|
301
|
+
const isHost = c.name.startsWith('host_');
|
|
302
|
+
// Group the host-compat facts under a "Host readiness" heading so the
|
|
303
|
+
// install-readiness block reads as one unit (Task 2.3).
|
|
304
|
+
if (isHost && !hostSectionOpen) {
|
|
305
|
+
lines.push('', ' Host readiness:');
|
|
306
|
+
hostSectionOpen = true;
|
|
307
|
+
}
|
|
308
|
+
else if (!isHost && hostSectionOpen) {
|
|
309
|
+
hostSectionOpen = false;
|
|
310
|
+
}
|
|
157
311
|
lines.push(` ${GLYPH[c.status]} ${c.label}: ${c.detail}`);
|
|
158
312
|
if (c.fix !== undefined)
|
|
159
313
|
lines.push(` → ${c.fix}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/diagnostics/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/diagnostics/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy/bridge.d.ts
CHANGED
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
2
|
+
/**
|
|
3
|
+
* Normalise the WordPress↔Joomla `/mcp` envelope asymmetry for `tools/call`
|
|
4
|
+
* responses.
|
|
5
|
+
*
|
|
6
|
+
* The WP mcp-adapter (`ToolsHandler`) treats an Ability's return value as raw
|
|
7
|
+
* data and `wp_json_encode`s our already-final `CallToolResult` into a fresh
|
|
8
|
+
* text-content block. Over the wire that yields a DOUBLE-wrapped result —
|
|
9
|
+
* `result.content[0].text` is itself a serialised `CallToolResult`
|
|
10
|
+
* (`{"content":[{"type":"text","text":"<real-data-json>"}],"isError":…}`).
|
|
11
|
+
* Joomla's `/api/` handler single-wraps: `result.content[0].text` is already
|
|
12
|
+
* the real data JSON. The proxy bridge is a verbatim pipe, so a WP customer
|
|
13
|
+
* would receive doubly-nested tool output while a Joomla customer would not.
|
|
14
|
+
*
|
|
15
|
+
* Strip EXACTLY ONE level of that nesting, and ONLY when the inner payload is
|
|
16
|
+
* unmistakably a nested `CallToolResult`. Every shape check is defensive
|
|
17
|
+
* (try/catch around the parse, strict block typing) so a genuine Joomla data
|
|
18
|
+
* payload is never touched. Non-`tools/call` frames (initialize, tools/list,
|
|
19
|
+
* JSON-RPC errors, notifications) are returned by reference, unchanged.
|
|
20
|
+
*
|
|
21
|
+
* Exported for unit tests.
|
|
22
|
+
*/
|
|
23
|
+
export declare function normalizeProxyResponse(msg: unknown): unknown;
|
|
2
24
|
/**
|
|
3
25
|
* Wire two MCP transports into a transparent pipe: every message from one side
|
|
4
|
-
* is relayed
|
|
5
|
-
*
|
|
26
|
+
* is relayed to the other, and a close/error on either side tears down the
|
|
27
|
+
* other. The local→remote direction is verbatim; the remote→local direction
|
|
28
|
+
* normalises the WP double-wrap (see `normalizeProxyResponse`) so WP and Joomla
|
|
29
|
+
* customers receive identical, spec-clean tool results. The PHP server otherwise
|
|
30
|
+
* owns the protocol semantics.
|
|
6
31
|
* The caller is responsible for start()ing both transports.
|
|
7
32
|
*
|
|
8
33
|
* `StreamableHTTPClientTransport.send()` re-throws on any upstream failure
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/proxy/bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/proxy/bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAgE/E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAoC5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAuD1E;AAED;;mDAEmD;AACnD,UAAU,WAAW;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKpF;AAcD,iFAAiF;AACjF,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IACJ,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK;QACnC,KAAK,EAAE,SAAS,CAAC;QACjB,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACE,GACL,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,qFAAqF;AACrF,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GAC1D,OAAO,CAAC,OAAO,CAAC,CAalB"}
|
package/dist/proxy/bridge.js
CHANGED
|
@@ -28,10 +28,87 @@ function requestId(msg) {
|
|
|
28
28
|
}
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
|
+
function isTextContentBlock(v) {
|
|
32
|
+
return (v !== null &&
|
|
33
|
+
typeof v === 'object' &&
|
|
34
|
+
typeof v.type === 'string' &&
|
|
35
|
+
typeof v.text === 'string');
|
|
36
|
+
}
|
|
37
|
+
function isNestedCallToolResult(v) {
|
|
38
|
+
if (v === null || typeof v !== 'object')
|
|
39
|
+
return false;
|
|
40
|
+
const content = v.content;
|
|
41
|
+
return Array.isArray(content) && content.length > 0 && isTextContentBlock(content[0]);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Normalise the WordPress↔Joomla `/mcp` envelope asymmetry for `tools/call`
|
|
45
|
+
* responses.
|
|
46
|
+
*
|
|
47
|
+
* The WP mcp-adapter (`ToolsHandler`) treats an Ability's return value as raw
|
|
48
|
+
* data and `wp_json_encode`s our already-final `CallToolResult` into a fresh
|
|
49
|
+
* text-content block. Over the wire that yields a DOUBLE-wrapped result —
|
|
50
|
+
* `result.content[0].text` is itself a serialised `CallToolResult`
|
|
51
|
+
* (`{"content":[{"type":"text","text":"<real-data-json>"}],"isError":…}`).
|
|
52
|
+
* Joomla's `/api/` handler single-wraps: `result.content[0].text` is already
|
|
53
|
+
* the real data JSON. The proxy bridge is a verbatim pipe, so a WP customer
|
|
54
|
+
* would receive doubly-nested tool output while a Joomla customer would not.
|
|
55
|
+
*
|
|
56
|
+
* Strip EXACTLY ONE level of that nesting, and ONLY when the inner payload is
|
|
57
|
+
* unmistakably a nested `CallToolResult`. Every shape check is defensive
|
|
58
|
+
* (try/catch around the parse, strict block typing) so a genuine Joomla data
|
|
59
|
+
* payload is never touched. Non-`tools/call` frames (initialize, tools/list,
|
|
60
|
+
* JSON-RPC errors, notifications) are returned by reference, unchanged.
|
|
61
|
+
*
|
|
62
|
+
* Exported for unit tests.
|
|
63
|
+
*/
|
|
64
|
+
export function normalizeProxyResponse(msg) {
|
|
65
|
+
if (msg === null || typeof msg !== 'object')
|
|
66
|
+
return msg;
|
|
67
|
+
const result = msg.result;
|
|
68
|
+
if (result === null || typeof result !== 'object')
|
|
69
|
+
return msg;
|
|
70
|
+
// Only tools/call responses carry a `result.content` array.
|
|
71
|
+
const content = result.content;
|
|
72
|
+
if (!Array.isArray(content))
|
|
73
|
+
return msg;
|
|
74
|
+
// A double-wrap is EXACTLY one text block whose text is a serialised result.
|
|
75
|
+
if (content.length !== 1)
|
|
76
|
+
return msg;
|
|
77
|
+
const block = content[0];
|
|
78
|
+
if (!isTextContentBlock(block) || block.type !== 'text')
|
|
79
|
+
return msg;
|
|
80
|
+
let inner;
|
|
81
|
+
try {
|
|
82
|
+
inner = JSON.parse(block.text);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Joomla single-wrap (text is the real data JSON, not nested) or plain
|
|
86
|
+
// prose — leave the frame untouched.
|
|
87
|
+
return msg;
|
|
88
|
+
}
|
|
89
|
+
if (!isNestedCallToolResult(inner))
|
|
90
|
+
return msg;
|
|
91
|
+
// Unpack one level: keep the outer result's fields, swap in the inner
|
|
92
|
+
// content, and let the inner isError / structuredContent win when present
|
|
93
|
+
// (the inner is the REAL tool result; the outer is the adapter's wrapper).
|
|
94
|
+
const normalizedResult = {
|
|
95
|
+
...result,
|
|
96
|
+
content: inner.content,
|
|
97
|
+
};
|
|
98
|
+
if (inner.isError !== undefined)
|
|
99
|
+
normalizedResult.isError = inner.isError;
|
|
100
|
+
if (inner.structuredContent !== undefined) {
|
|
101
|
+
normalizedResult.structuredContent = inner.structuredContent;
|
|
102
|
+
}
|
|
103
|
+
return { ...msg, result: normalizedResult };
|
|
104
|
+
}
|
|
31
105
|
/**
|
|
32
106
|
* Wire two MCP transports into a transparent pipe: every message from one side
|
|
33
|
-
* is relayed
|
|
34
|
-
*
|
|
107
|
+
* is relayed to the other, and a close/error on either side tears down the
|
|
108
|
+
* other. The local→remote direction is verbatim; the remote→local direction
|
|
109
|
+
* normalises the WP double-wrap (see `normalizeProxyResponse`) so WP and Joomla
|
|
110
|
+
* customers receive identical, spec-clean tool results. The PHP server otherwise
|
|
111
|
+
* owns the protocol semantics.
|
|
35
112
|
* The caller is responsible for start()ing both transports.
|
|
36
113
|
*
|
|
37
114
|
* `StreamableHTTPClientTransport.send()` re-throws on any upstream failure
|
|
@@ -75,7 +152,10 @@ export function bridgeTransports(local, remote) {
|
|
|
75
152
|
});
|
|
76
153
|
};
|
|
77
154
|
remote.onmessage = (msg) => {
|
|
78
|
-
|
|
155
|
+
// Normalise the WP-only double-wrap so the client sees the same shape it
|
|
156
|
+
// would from Joomla. Non-tools/call frames pass through by reference.
|
|
157
|
+
const normalized = normalizeProxyResponse(msg);
|
|
158
|
+
local.send(normalized).catch((err) => {
|
|
79
159
|
console.error('[yt-builder-proxy] downstream send failed:', errorMessage(err));
|
|
80
160
|
});
|
|
81
161
|
};
|
package/dist/proxy/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/proxy/bridge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,6EAA6E;AAC7E,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QAC3D,MAAM,EAAE,GAAI,GAAuB,CAAC,EAAE,CAAC;QACvC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/proxy/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIH,KAAK,mBAAmB,EAU3B,MAAM,eAAe,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,SAAS,iBAAiB,EAAE,CA2V9B"}
|