@respira/wordpress-mcp-server 8.3.7 → 8.3.8
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/__tests__/agent-signature-clientinfo.test.js +11 -0
- package/dist/__tests__/agent-signature-clientinfo.test.js.map +1 -1
- package/dist/__tests__/stale-build-and-refresh-silence.test.d.ts +2 -0
- package/dist/__tests__/stale-build-and-refresh-silence.test.d.ts.map +1 -0
- package/dist/__tests__/stale-build-and-refresh-silence.test.js +76 -0
- package/dist/__tests__/stale-build-and-refresh-silence.test.js.map +1 -0
- package/dist/agent-signature.d.ts.map +1 -1
- package/dist/agent-signature.js +13 -0
- package/dist/agent-signature.js.map +1 -1
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +68 -1
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +52 -3
- package/dist/setup.js.map +1 -1
- package/dist/version-checker.d.ts +8 -0
- package/dist/version-checker.d.ts.map +1 -1
- package/dist/version-checker.js +39 -0
- package/dist/version-checker.js.map +1 -1
- package/package.json +1 -1
|
@@ -21,6 +21,17 @@ test('claude-code self-identification stays claude-code', () => {
|
|
|
21
21
|
setMcpClientInfo('claude-code', '2.0.0');
|
|
22
22
|
assert.strictEqual(detectRespiraAgentSignature().client, 'claude-code');
|
|
23
23
|
});
|
|
24
|
+
test('hermes agent normalizes to hermes however it names itself', () => {
|
|
25
|
+
setMcpClientInfo('hermes', '0.1');
|
|
26
|
+
assert.strictEqual(detectRespiraAgentSignature().client, 'hermes');
|
|
27
|
+
setMcpClientInfo('Hermes Agent 0.5 (desktop)', '0.5');
|
|
28
|
+
const sig = detectRespiraAgentSignature();
|
|
29
|
+
assert.strictEqual(sig.client, 'hermes');
|
|
30
|
+
assert.strictEqual(sig.source, 'client-info');
|
|
31
|
+
assert.strictEqual(sig.version, '0.5');
|
|
32
|
+
setMcpClientInfo('hermes-probe', '0.1');
|
|
33
|
+
assert.strictEqual(detectRespiraAgentSignature().client, 'hermes');
|
|
34
|
+
});
|
|
24
35
|
test('unknown but self-declared clients keep their sanitized name', () => {
|
|
25
36
|
setMcpClientInfo('SomeNew Agent!', null);
|
|
26
37
|
const sig = detectRespiraAgentSignature();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-signature-clientinfo.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-signature-clientinfo.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAEnC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;IACvE,gBAAgB,CAAC,gBAAgB,EAAE,IAAW,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,eAAe,CAAC;IACnD,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC1C,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent-signature-clientinfo.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-signature-clientinfo.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAEnC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEnE,gBAAgB,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEvC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;IACvE,gBAAgB,CAAC,gBAAgB,EAAE,IAAW,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,eAAe,CAAC;IACnD,MAAM,GAAG,GAAG,2BAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC1C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stale-build-and-refresh-silence.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/stale-build-and-refresh-silence.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { RespiraVersionChecker } from '../version-checker.js';
|
|
5
|
+
/**
|
|
6
|
+
* Two silences that cost a customer an afternoon, reported 2026-08-20.
|
|
7
|
+
*
|
|
8
|
+
* She added sites on the dashboard and Claude never saw them. Only deleting
|
|
9
|
+
* and reinstalling the connector worked, so she and her AI concluded the
|
|
10
|
+
* connector had a bug. They were right, and it had been fixed eleven days
|
|
11
|
+
* earlier in 8.2.4. She was running 7.1.2.
|
|
12
|
+
*
|
|
13
|
+
* The update notice fired on every single tool call the whole time. It said
|
|
14
|
+
* "a newer MCP version is available", which is true, generic, and ignorable.
|
|
15
|
+
* It never said that the thing she was fighting was the thing the update
|
|
16
|
+
* fixed, so there was nothing to connect the two.
|
|
17
|
+
*
|
|
18
|
+
* The second silence is the same shape one layer down: when the site list
|
|
19
|
+
* cannot be refreshed at all, the refresh returned 0 exactly as it does when
|
|
20
|
+
* there is genuinely nothing new. "Your new site is missing" and "I never
|
|
21
|
+
* looked" were indistinguishable.
|
|
22
|
+
*/
|
|
23
|
+
const PKG = '@respira/wordpress-mcp-server';
|
|
24
|
+
test('a build predating the site-refresh fix is told what it is missing', () => {
|
|
25
|
+
const checker = new RespiraVersionChecker(PKG, '7.1.2');
|
|
26
|
+
const missing = checker.missingFixesFor('7.1.2');
|
|
27
|
+
assert.ok(missing.length > 0, 'a 7.1.2 build must be told it is missing behaviour');
|
|
28
|
+
const joined = missing.join(' ');
|
|
29
|
+
// Phrased as the symptom she would recognise, not as a changelog entry.
|
|
30
|
+
assert.match(joined, /added on the dashboard do not appear/i);
|
|
31
|
+
assert.match(joined, /deleted and reinstalled/i);
|
|
32
|
+
});
|
|
33
|
+
test('the symptom is named, not just the version number', () => {
|
|
34
|
+
const checker = new RespiraVersionChecker(PKG, '7.1.2');
|
|
35
|
+
const joined = checker.missingFixesFor('7.1.2').join(' ');
|
|
36
|
+
// The whole failure was a notice that described itself instead of the user's
|
|
37
|
+
// problem. Guard against sliding back to that.
|
|
38
|
+
assert.ok(!/^\s*a newer (mcp )?version is available/i.test(joined), 'the gap text must describe the user-visible symptom, not restate that an update exists');
|
|
39
|
+
});
|
|
40
|
+
test('a current build is told nothing, so the notice stays meaningful', () => {
|
|
41
|
+
const checker = new RespiraVersionChecker(PKG, '99.0.0');
|
|
42
|
+
assert.deepEqual(checker.missingFixesFor('99.0.0'), []);
|
|
43
|
+
});
|
|
44
|
+
test('gaps apply by version order, not by listing order', () => {
|
|
45
|
+
const checker = new RespiraVersionChecker(PKG, '8.2.4');
|
|
46
|
+
const at824 = checker.missingFixesFor('8.2.4');
|
|
47
|
+
const at712 = checker.missingFixesFor('7.1.2');
|
|
48
|
+
// 8.2.4 already HAS the site-refresh fix, so it must not be told it lacks it.
|
|
49
|
+
assert.ok(!at824.join(' ').match(/added on the dashboard do not appear/i), '8.2.4 must not be told it is missing its own fix');
|
|
50
|
+
assert.ok(at712.length > at824.length, 'an older build is missing strictly more');
|
|
51
|
+
});
|
|
52
|
+
test('the notice leads with the missing behaviour when there is any', () => {
|
|
53
|
+
const src = readFileSync(new URL('../../src/server.ts', import.meta.url), 'utf8');
|
|
54
|
+
assert.match(src, /missing behaviour you may be working around right now/, 'the message must lead with consequence, not with the version delta');
|
|
55
|
+
assert.match(src, /missing_fixes: update\.missingFixes/, 'the payload must carry the list');
|
|
56
|
+
});
|
|
57
|
+
test('a refresh that could not run is reported, not silently treated as empty', () => {
|
|
58
|
+
const src = readFileSync(new URL('../../src/server.ts', import.meta.url), 'utf8');
|
|
59
|
+
// Every bail-out branch must record a cause.
|
|
60
|
+
for (const status of ['no_account_token', 'unreachable', 'backend_error', 'disabled']) {
|
|
61
|
+
assert.ok(src.includes(`this.lastSiteRefreshStatus = '${status}'`), `the ${status} branch must record why the refresh produced nothing`);
|
|
62
|
+
}
|
|
63
|
+
// And the success path must clear it, or one failure would poison every
|
|
64
|
+
// later response.
|
|
65
|
+
assert.ok(src.includes("this.lastSiteRefreshStatus = 'ok'"), 'a successful refresh must clear the status');
|
|
66
|
+
});
|
|
67
|
+
test('list_sites explains the silence, and stays quiet when healthy', () => {
|
|
68
|
+
const src = readFileSync(new URL('../../src/server.ts', import.meta.url), 'utf8');
|
|
69
|
+
assert.ok(src.includes('describeSiteRefreshStatus()'), 'list_sites must consult the refresh status');
|
|
70
|
+
assert.ok(src.includes('...(refreshNotice ? { site_refresh: refreshNotice } : {})'), 'the notice must be attached only when there is something to say');
|
|
71
|
+
// A healthy refresh must add no noise, or the signal stops being read.
|
|
72
|
+
assert.match(src, /case 'never_run':\s*\n\s*case 'ok':\s*\n\s*default:\s*\n\s*return null;/, 'ok and never_run must produce no notice');
|
|
73
|
+
// The no-token case is the permanent one, so it must name the fix.
|
|
74
|
+
assert.match(src, /npx @respira\/wordpress-mcp-server --setup/, 'the permanent case must name the action');
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=stale-build-and-refresh-silence.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stale-build-and-refresh-silence.test.js","sourceRoot":"","sources":["../../src/__tests__/stale-build-and-refresh-silence.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,GAAG,GAAG,+BAA+B,CAAC;AAE5C,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;IAC7E,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,oDAAoD,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,wEAAwE;IACxE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,6EAA6E;IAC7E,+CAA+C;IAC/C,MAAM,CAAC,EAAE,CACP,CAAC,0CAA0C,CAAC,IAAI,CAAC,MAAM,CAAC,EACxD,wFAAwF,CACzF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/C,8EAA8E;IAC9E,MAAM,CAAC,EAAE,CACP,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,EAC/D,kDAAkD,CACnD,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;AACpF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACzE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAClF,MAAM,CAAC,KAAK,CACV,GAAG,EACH,uDAAuD,EACvD,oEAAoE,CACrE,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,qCAAqC,EAAE,iCAAiC,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACnF,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAElF,6CAA6C;IAC7C,KAAK,MAAM,MAAM,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC;QACtF,MAAM,CAAC,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,iCAAiC,MAAM,GAAG,CAAC,EACxD,OAAO,MAAM,sDAAsD,CACpE,CAAC;IACJ,CAAC;IACD,wEAAwE;IACxE,kBAAkB;IAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,4CAA4C,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACzE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAElF,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,4CAA4C,CAAC,CAAC;IACrG,MAAM,CAAC,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,2DAA2D,CAAC,EACzE,iEAAiE,CAClE,CAAC;IACF,uEAAuE;IACvE,MAAM,CAAC,KAAK,CACV,GAAG,EACH,yEAAyE,EACzE,yCAAyC,CAC1C,CAAC;IACF,mEAAmE;IACnE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,4CAA4C,EAAE,yCAAyC,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-signature.d.ts","sourceRoot":"","sources":["../src/agent-signature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;CACzD;
|
|
1
|
+
{"version":3,"file":"agent-signature.d.ts","sourceRoot":"","sources":["../src/agent-signature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;CACzD;AAuCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAQvE;AAuHD,wBAAgB,2BAA2B,IAAI,qBAAqB,CA4BnE;AAiBD,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB/D"}
|
package/dist/agent-signature.js
CHANGED
|
@@ -43,6 +43,12 @@ function normalizeClientInfoName(raw) {
|
|
|
43
43
|
return n.includes('antigravity') ? 'antigravity' : 'gemini';
|
|
44
44
|
if (n.includes('opencode'))
|
|
45
45
|
return 'opencode';
|
|
46
|
+
// Hermes Agent (Nous Research). It already arrives as a bare "hermes" over
|
|
47
|
+
// stdio, so this branch is not what makes it attributable today: it is what
|
|
48
|
+
// keeps it attributable when the name grows ("Hermes Agent 0.5 (desktop)",
|
|
49
|
+
// "hermes-probe"), instead of minting a new slug per release.
|
|
50
|
+
if (n.includes('hermes'))
|
|
51
|
+
return 'hermes';
|
|
46
52
|
// Unknown but self-declared: keep the sanitized raw name rather than
|
|
47
53
|
// guessing. It surfaces new clients in telemetry instead of hiding them.
|
|
48
54
|
return sanitizeHeaderToken(n);
|
|
@@ -142,6 +148,13 @@ function detectClientFromHeuristics() {
|
|
|
142
148
|
return 'copilot';
|
|
143
149
|
if (fingerprint.includes('gemini'))
|
|
144
150
|
return 'gemini';
|
|
151
|
+
// No hermes branch on purpose. Hermes Agent spawns stdio MCP servers through
|
|
152
|
+
// _build_safe_env(), which copies only PATH/HOME/USER/LANG/LC_ALL/TERM/SHELL/
|
|
153
|
+
// TMPDIR, XDG_*, Windows location vars, and user-declared secrets: no
|
|
154
|
+
// HERMES_* marker survives. It also rewrites argv to
|
|
155
|
+
// `python -m tools.mcp_stdio_watchdog <real command>`, so the ps parent does
|
|
156
|
+
// not name Hermes either. There is nothing real to match on, and inventing a
|
|
157
|
+
// pattern would only mislabel someone else. clientInfo covers it instead.
|
|
145
158
|
return 'unknown';
|
|
146
159
|
}
|
|
147
160
|
function detectVersion(client) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-signature.js","sourceRoot":"","sources":["../src/agent-signature.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-signature.js","sourceRoot":"","sources":["../src/agent-signature.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -81,6 +81,11 @@ export declare class RespiraWordPressServer {
|
|
|
81
81
|
private versionWarningShown;
|
|
82
82
|
/** Epoch ms of the last site-list self-heal against respira.press (throttle). */
|
|
83
83
|
private lastSiteRefreshAt;
|
|
84
|
+
/**
|
|
85
|
+
* Why the last site refresh produced what it produced. Surfaced by
|
|
86
|
+
* list_sites so "your new site is not here" always comes with a reason.
|
|
87
|
+
*/
|
|
88
|
+
private lastSiteRefreshStatus;
|
|
84
89
|
/** Dedupe concurrent self-heals so parallel list_sites calls share one fetch. */
|
|
85
90
|
private siteRefreshInFlight;
|
|
86
91
|
/**
|
|
@@ -201,6 +206,15 @@ export declare class RespiraWordPressServer {
|
|
|
201
206
|
* @returns number of newly added sites.
|
|
202
207
|
*/
|
|
203
208
|
private maybeSelfHealSiteList;
|
|
209
|
+
/**
|
|
210
|
+
* Explain a site refresh that did not confirm the list, or stay quiet.
|
|
211
|
+
*
|
|
212
|
+
* Returns null on the happy path, so a healthy response carries no noise.
|
|
213
|
+
* Every other branch names the cause and the one action that resolves it,
|
|
214
|
+
* because the symptom the user reports is always the same sentence: the site
|
|
215
|
+
* I added is not here.
|
|
216
|
+
*/
|
|
217
|
+
private describeSiteRefreshStatus;
|
|
204
218
|
private performSiteRefresh;
|
|
205
219
|
/** Normalize a site URL for cross-config dedupe: scheme/host only, no www, lowercase. */
|
|
206
220
|
private normalizeSiteUrl;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAwCzE,MAAM,MAAM,eAAe,GAAG;IAC5B,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAkBf;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,eAAe,CAUjB;AAqFD;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAoBhF;AAyJD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,YAAY,CAA4B;IAChD,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAA4B;IAChD,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB,CAAS;IACpC,iFAAiF;IACjF,OAAO,CAAC,iBAAiB,CAAK;IAC9B,iFAAiF;IACjF,OAAO,CAAC,mBAAmB,CAAgC;IAC3D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IAEhE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;gBA4Bb,WAAW,EAAE,mBAAmB,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE;IAgWvE,OAAO,CAAC,cAAc;IAItB;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAiCrB,gEAAgE;IAChE,OAAO,CAAC,aAAa;IAUrB;;;;;;OAMG;YACW,UAAU;IA2CxB;;;;;;;;;;;;;;OAcG;YACW,WAAW;IAiJzB;;;;;;;;;OASG;YACW,kBAAkB;IA4OhC;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAgE7B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;YACW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAwCzE,MAAM,MAAM,eAAe,GAAG;IAC5B,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAkBf;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,eAAe,CAUjB;AAqFD;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAoBhF;AAyJD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,YAAY,CAA4B;IAChD,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAA4B;IAChD,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB,CAAS;IACpC,iFAAiF;IACjF,OAAO,CAAC,iBAAiB,CAAK;IAC9B;;;OAGG;IACH,OAAO,CAAC,qBAAqB,CAMK;IAClC,iFAAiF;IACjF,OAAO,CAAC,mBAAmB,CAAgC;IAC3D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IAEhE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;gBA4Bb,WAAW,EAAE,mBAAmB,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE;IAgWvE,OAAO,CAAC,cAAc;IAItB;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAiCrB,gEAAgE;IAChE,OAAO,CAAC,aAAa;IAUrB;;;;;;OAMG;YACW,UAAU;IA2CxB;;;;;;;;;;;;;;OAcG;YACW,WAAW;IAiJzB;;;;;;;;;OASG;YACW,kBAAkB;IA4OhC;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAgE7B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;YACW,qBAAqB;IAkBnC;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;YAiCnB,kBAAkB;IAwGhC,yFAAyF;IACzF,OAAO,CAAC,gBAAgB;IASxB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,6BAA6B;IA6CrC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,aAAa;YAmQP,kBAAkB;YAsClB,yBAAyB;IASvC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;YAyBd,QAAQ;IA8nHtB;;;;;;OAMG;IACH;;;;;;;;;;;;;oDAagD;IAChD,OAAO,CAAC,mBAAmB,CAAoD;IAC/E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAU;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IAC1D;;mDAE+C;IAC/C,OAAO,CAAC,0BAA0B,CAAoC;IAEtE;;;;;;;;OAQG;YACW,0BAA0B;YAyC1B,oBAAoB;YA6CpB,2BAA2B;IAQzC;;;;OAIG;YACW,cAAc;IAQ5B,OAAO,CAAC,mBAAmB;IA09C3B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAe3C;IAEF;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;YAmCpB,cAAc;IAuH5B,oEAAoE;IACpE,OAAO,CAAC,iBAAiB;IAoBzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,eAAe;YAuCT,gBAAgB;IA68C9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+azB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+UxB,GAAG;CA+CV"}
|
package/dist/server.js
CHANGED
|
@@ -380,6 +380,11 @@ export class RespiraWordPressServer {
|
|
|
380
380
|
versionWarningShown = false;
|
|
381
381
|
/** Epoch ms of the last site-list self-heal against respira.press (throttle). */
|
|
382
382
|
lastSiteRefreshAt = 0;
|
|
383
|
+
/**
|
|
384
|
+
* Why the last site refresh produced what it produced. Surfaced by
|
|
385
|
+
* list_sites so "your new site is not here" always comes with a reason.
|
|
386
|
+
*/
|
|
387
|
+
lastSiteRefreshStatus = 'never_run';
|
|
383
388
|
/** Dedupe concurrent self-heals so parallel list_sites calls share one fetch. */
|
|
384
389
|
siteRefreshInFlight = null;
|
|
385
390
|
/**
|
|
@@ -1402,6 +1407,7 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
1402
1407
|
*/
|
|
1403
1408
|
async maybeSelfHealSiteList(force = false) {
|
|
1404
1409
|
if (process.env.RESPIRA_DISABLE_SITE_REFRESH === '1') {
|
|
1410
|
+
this.lastSiteRefreshStatus = 'disabled';
|
|
1405
1411
|
return 0;
|
|
1406
1412
|
}
|
|
1407
1413
|
const throttleMs = Number(process.env.RESPIRA_SITE_REFRESH_THROTTLE_MS) || 60_000;
|
|
@@ -1416,6 +1422,42 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
1416
1422
|
});
|
|
1417
1423
|
return this.siteRefreshInFlight;
|
|
1418
1424
|
}
|
|
1425
|
+
/**
|
|
1426
|
+
* Explain a site refresh that did not confirm the list, or stay quiet.
|
|
1427
|
+
*
|
|
1428
|
+
* Returns null on the happy path, so a healthy response carries no noise.
|
|
1429
|
+
* Every other branch names the cause and the one action that resolves it,
|
|
1430
|
+
* because the symptom the user reports is always the same sentence: the site
|
|
1431
|
+
* I added is not here.
|
|
1432
|
+
*/
|
|
1433
|
+
describeSiteRefreshStatus() {
|
|
1434
|
+
switch (this.lastSiteRefreshStatus) {
|
|
1435
|
+
case 'no_account_token':
|
|
1436
|
+
return {
|
|
1437
|
+
status: 'no_account_token',
|
|
1438
|
+
detail: 'The site list could not be checked against your account, because none of the configured sites holds a dashboard-issued token (respira_site_...). Sites added on the dashboard will not appear here until this config is refreshed. Run: npx @respira/wordpress-mcp-server --setup, or reconnect a site from https://www.respira.press/dashboard/sites.',
|
|
1439
|
+
};
|
|
1440
|
+
case 'unreachable':
|
|
1441
|
+
return {
|
|
1442
|
+
status: 'unreachable',
|
|
1443
|
+
detail: 'respira.press could not be reached to confirm the site list, so this is the list this server started with. A site added recently may be missing. Usually a network, proxy, or firewall issue; it retries by itself.',
|
|
1444
|
+
};
|
|
1445
|
+
case 'backend_error':
|
|
1446
|
+
return {
|
|
1447
|
+
status: 'backend_error',
|
|
1448
|
+
detail: 'respira.press was reached but did not return a usable site list, so this is the list this server started with. A site added recently may be missing.',
|
|
1449
|
+
};
|
|
1450
|
+
case 'disabled':
|
|
1451
|
+
return {
|
|
1452
|
+
status: 'disabled',
|
|
1453
|
+
detail: 'Automatic site-list refresh is switched off by RESPIRA_DISABLE_SITE_REFRESH=1, so newly added sites will not appear here until this server restarts with an updated config.',
|
|
1454
|
+
};
|
|
1455
|
+
case 'never_run':
|
|
1456
|
+
case 'ok':
|
|
1457
|
+
default:
|
|
1458
|
+
return null;
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1419
1461
|
async performSiteRefresh() {
|
|
1420
1462
|
// Any one live dashboard site token identifies the account. OAuth
|
|
1421
1463
|
// per-site tokens (rsp_at_) are not account-wide and are skipped.
|
|
@@ -1431,6 +1473,11 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
1431
1473
|
// retry the loop on every single list_sites call.
|
|
1432
1474
|
this.lastSiteRefreshAt = Date.now();
|
|
1433
1475
|
if (!token) {
|
|
1476
|
+
// Returning 0 here used to be indistinguishable from "checked, nothing
|
|
1477
|
+
// new". On an OAuth-only or hand-edited config that silence is permanent:
|
|
1478
|
+
// the list can never grow and nothing ever says why. Record it so
|
|
1479
|
+
// list_sites can explain instead of just looking wrong.
|
|
1480
|
+
this.lastSiteRefreshStatus = 'no_account_token';
|
|
1434
1481
|
return 0;
|
|
1435
1482
|
}
|
|
1436
1483
|
const apiBase = process.env.RESPIRA_API_BASE || 'https://www.respira.press';
|
|
@@ -1445,18 +1492,24 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
1445
1492
|
signal: AbortSignal.timeout(timeoutMs),
|
|
1446
1493
|
});
|
|
1447
1494
|
if (!response.ok) {
|
|
1495
|
+
this.lastSiteRefreshStatus = 'backend_error';
|
|
1448
1496
|
return 0;
|
|
1449
1497
|
}
|
|
1450
1498
|
payload = await response.json();
|
|
1451
1499
|
}
|
|
1452
1500
|
catch {
|
|
1501
|
+
this.lastSiteRefreshStatus = 'unreachable';
|
|
1453
1502
|
// Offline / proxy / firewall / timeout: never block list_sites on this.
|
|
1454
1503
|
return 0;
|
|
1455
1504
|
}
|
|
1456
1505
|
const sites = payload?.config?.sites;
|
|
1457
1506
|
if (!Array.isArray(sites)) {
|
|
1507
|
+
this.lastSiteRefreshStatus = 'backend_error';
|
|
1458
1508
|
return 0;
|
|
1459
1509
|
}
|
|
1510
|
+
// Reached the account inventory. Anything not added past this point is
|
|
1511
|
+
// genuinely "nothing new", which is a different thing from "could not look".
|
|
1512
|
+
this.lastSiteRefreshStatus = 'ok';
|
|
1460
1513
|
const knownUrls = new Set();
|
|
1461
1514
|
for (const client of this.sites.values()) {
|
|
1462
1515
|
knownUrls.add(this.normalizeSiteUrl(client.getSiteUrl()));
|
|
@@ -1876,12 +1929,20 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
1876
1929
|
if (!update) {
|
|
1877
1930
|
return result;
|
|
1878
1931
|
}
|
|
1932
|
+
// Lead with what this build is missing, not with the fact that a number
|
|
1933
|
+
// changed. A customer on 7.1.2 received the old generic sentence on every
|
|
1934
|
+
// call for weeks while fighting a bug that a newer build had already fixed,
|
|
1935
|
+
// and neither she nor her AI had any reason to connect the two.
|
|
1936
|
+
const message = update.missingFixes.length > 0
|
|
1937
|
+
? `This MCP build (${update.currentVersion}) is behind ${update.latestVersion} and is missing behaviour you may be working around right now: ${update.missingFixes.join(' ')} Update with: npm i -g @respira/wordpress-mcp-server@latest`
|
|
1938
|
+
: `A newer MCP version is available (${update.currentVersion} -> ${update.latestVersion}). Please update your local MCP package.`;
|
|
1879
1939
|
const noticePayload = {
|
|
1880
1940
|
package: update.packageName,
|
|
1881
1941
|
current_version: update.currentVersion,
|
|
1882
1942
|
latest_version: update.latestVersion,
|
|
1883
1943
|
checked_at: update.checkedAt,
|
|
1884
|
-
|
|
1944
|
+
...(update.missingFixes.length > 0 ? { missing_fixes: update.missingFixes } : {}),
|
|
1945
|
+
message,
|
|
1885
1946
|
upgrade_command: 'npm i -g @respira/wordpress-mcp-server@latest',
|
|
1886
1947
|
rerun_setup_command: 'npx @respira/wordpress-mcp-server --setup',
|
|
1887
1948
|
};
|
|
@@ -7474,6 +7535,7 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
7474
7535
|
// started shows up here without a reinstall or re-paste (throttled,
|
|
7475
7536
|
// best-effort, never throws).
|
|
7476
7537
|
await this.maybeSelfHealSiteList();
|
|
7538
|
+
const refreshNotice = this.describeSiteRefreshStatus();
|
|
7477
7539
|
const allSites = Array.from(this.sites.values());
|
|
7478
7540
|
const visibleSites = allSites.filter((site) => this.isSiteAllowed(site));
|
|
7479
7541
|
// v6.17.2: surface hidden sites so the AI can explain
|
|
@@ -7492,6 +7554,11 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
7492
7554
|
filter_note: `${hiddenSites.length} site${hiddenSites.length === 1 ? '' : 's'} hidden by RESPIRA_SITES env var (allow-list: ${this.allowedSites ? [...this.allowedSites].join(', ') : 'none'}). To show, remove or update RESPIRA_SITES in claude_desktop_config.json.`,
|
|
7493
7555
|
}
|
|
7494
7556
|
: {}),
|
|
7557
|
+
// Present only when the list could NOT be confirmed against the
|
|
7558
|
+
// account. "A site I just added is missing" and "the refresh never
|
|
7559
|
+
// ran" look identical without this, and the user is left concluding
|
|
7560
|
+
// the connector is broken when it simply never looked.
|
|
7561
|
+
...(refreshNotice ? { site_refresh: refreshNotice } : {}),
|
|
7495
7562
|
};
|
|
7496
7563
|
}
|
|
7497
7564
|
case 'wordpress_get_active_site':
|