@respira/wordpress-mcp-server 8.3.5 → 8.3.7

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 CHANGED
@@ -5,6 +5,24 @@ All notable changes to Respira WordPress MCP Server will be documented in this f
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [8.3.7] - 2026-08-19
9
+
10
+ ### Fixed
11
+
12
+ - **`delete_post` answered with an empty response and deleted nothing.** The tool is approval-gated on the site, and the gate replies with a token and HTTP 202. 202 is a success, so the request resolved normally rather than raising, and the client method then discarded the body and returned nothing. What reached the caller was a response carrying only the site block: no error to react to, no token to use, and nothing in the activity log either. The body is now returned, so the token arrives and sending it back finishes the delete. `delete_media` had the same handshake broken one layer lower: the dispatcher never forwarded the token it had been given, so the site saw a first-time call every time and issued a new token, forever. Both dispatch sites now forward every parameter their schemas advertise.
13
+ - **`update_element` and `remove_element` rejected the two things the ambiguity error told you to use.** When several elements matched, the site refused to guess and suggested addressing the element by `path` or narrowing with `match_content`. Neither was in either tool's schema, so a strict client could not send them at all, and `find_element` did not declare `path` either. All three now accept them, and `find_element` also declares `text` and `admin_label`. Requires plugin 8.6.33, which makes both remedies actually resolve the ambiguity rather than merely being accepted.
14
+ - **`bulk_pages_operation` documented a rate limit six times stricter than the real one.** It said three runs an hour; the limit is twenty, and dry runs have never counted. Agents plan their work around that number. Corrected, along with the note that a list of search terms is now a supported shape rather than a 500.
15
+
16
+ ### Changed
17
+
18
+ - **`create_theme_builder_template` no longer assigns anything by default.** Omitting `assignments` used to mean site-wide, which on a body template replaced the content of every page. It now creates the template unassigned, and site-wide has to be requested. The schema documents `confirm_live_edit` for the case where an explicit site-wide assignment would claim a slot on a default template that already exists. Requires plugin 8.6.33.
19
+
20
+ ## [8.3.6] - 2026-08-19
21
+
22
+ ### Added
23
+
24
+ - **`html-to-breakdance`.** The Breakdance counterpart to `html-to-bricks`, for bringing a Webflow, Framer or CodePen export into a Breakdance site. Breakdance keeps nothing in `post_content`: the page lives entirely in the `_breakdance_data` post meta, which is why the workflow checks the stored tree and the public render separately rather than treating one as evidence of the other. It writes fully qualified `EssentialElements` types, because a lowercase generic type persists, reports success and then renders nothing. It reports every `CodeBlock` fallback by name, since forms and tables become raw HTML in a box and that should never pass silently as a native conversion. And it checks a duplicate's baseline snapshot is not empty before converting into it, which matters on a builder that stores its page in meta and did not matter on the shortcode builders. Requires plugin 8.6.32. Bundled skills go from 46 to 47.
25
+
8
26
  ## [8.3.5] - 2026-08-19
9
27
 
10
28
  ### Fixed
package/README.md CHANGED
@@ -7,14 +7,14 @@
7
7
  <h1 align="center">Respira WordPress MCP Server</h1>
8
8
 
9
9
  <p align="center">
10
- <strong>213 MCP tools, 318 with the WooCommerce add-on. 17 page builders and the native Site Editor. MCP 2026-07-28 with legacy-client support.</strong><br>
10
+ <strong>214 MCP tools, 319 with the WooCommerce add-on. 17 page builders and the native Site Editor. MCP 2026-07-28 with legacy-client support.</strong><br>
11
11
  Element-level editing, full page creation, HTML-to-builder conversion with rendering fidelity validation, per-site tool governance, storefront design intelligence, stock images, bulk operations — all through one MCP server.
12
12
  </p>
13
13
 
14
14
  <p align="center">
15
15
  <a href="https://www.npmjs.com/package/@respira/wordpress-mcp-server"><img src="https://img.shields.io/npm/v/@respira/wordpress-mcp-server.svg?style=flat-square&color=10b981" alt="npm version"></a>
16
16
  <a href="https://www.npmjs.com/package/@respira/wordpress-mcp-server"><img src="https://img.shields.io/npm/dm/@respira/wordpress-mcp-server.svg?style=flat-square" alt="npm downloads"></a>
17
- <img src="https://img.shields.io/badge/tools-318-10b981?style=flat-square" alt="318 Tools with WooCommerce">
17
+ <img src="https://img.shields.io/badge/tools-319-10b981?style=flat-square" alt="318 Tools with WooCommerce">
18
18
  <img src="https://img.shields.io/badge/builders-17-10b981?style=flat-square" alt="17 Page Builders">
19
19
  <img src="https://img.shields.io/badge/TypeScript-100%25-blue?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
20
20
  </p>
@@ -247,7 +247,7 @@ Or run the interactive setup wizard: `npx @respira/wordpress-mcp-server --setup`
247
247
 
248
248
  ### Tool Limit? Use `enabledTools`
249
249
 
250
- Some MCP clients (Antigravity, etc.) have a hard limit on active tools (often 100). Respira can expose up to 318 tools when the WooCommerce add-on is active. To stay under the limit, add `enabledTools` to your config — only those tools will appear in the listing:
250
+ Some MCP clients (Antigravity, etc.) have a hard limit on active tools (often 100). Respira can expose up to 319 tools when the WooCommerce add-on is active. To stay under the limit, add `enabledTools` to your config — only those tools will appear in the listing:
251
251
 
252
252
  ```json
253
253
  {
@@ -856,6 +856,6 @@ MIT © [Respira](https://respira.press)
856
856
  ---
857
857
 
858
858
  <p align="center">
859
- <strong>213 core tools, 318 with WooCommerce. 17 builders. The AI infrastructure layer for WordPress.</strong><br>
859
+ <strong>214 core tools, 319 with WooCommerce. 17 builders. The AI infrastructure layer for WordPress.</strong><br>
860
860
  <a href="https://respira.press">respira.press</a>
861
861
  </p>
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Regression test for ticket 429299b5: "respira_delete_post silently does
3
+ * nothing and returns an empty response" (smartgard.ai, plugin 8.6.31 /
4
+ * mcp 8.3.5).
5
+ *
6
+ * Reported symptom: `delete_post` on a genuine Respira-created duplicate came
7
+ * back with a body whose ONLY content was the site block —
8
+ *
9
+ * {"site":{"id":"env-site","name":"WordPress (from env)", ... }}
10
+ *
11
+ * — no success flag, no error, no approval token. The post was untouched, and
12
+ * `list_activity` had no entry for either attempt, which read like the call
13
+ * had been stopped inside the MCP server and never dispatched.
14
+ *
15
+ * Two independent defects, both in this package:
16
+ *
17
+ * 1. `WordPressClient.deletePost()` was `Promise<void>` and threw
18
+ * `response.data` away. The WP approval gate answers a first-time
19
+ * destructive call with `respira_approval_required` at HTTP **202** — a
20
+ * 2xx, so axios resolves rather than throws — carrying
21
+ * `data.approval_request.approval_token`. That entire body was discarded,
22
+ * `undefined` reached `withSiteContext`, which wraps a non-object as
23
+ * `{ result, site }`, and `JSON.stringify` drops the `undefined` key. What
24
+ * the agent received was literally `{"site":{...}}`. This is the same bug
25
+ * `deletePage` had and fixed in v6.11.12; posts were never brought along.
26
+ *
27
+ * 2. `wordpress_delete_media` dispatched as `client.deleteMedia(args.id)`,
28
+ * dropping the `approval_token` the schema advertises and the agent sends.
29
+ * The plugin therefore saw a fresh first call every time and dutifully
30
+ * minted a new token — a token that only ever yields another token.
31
+ * Ticket 927aa7ed fixed the client METHOD and tested the client method, so
32
+ * it passed green against a tool that was still broken end to end. That is
33
+ * why the assertions below run through the dispatcher.
34
+ *
35
+ * The fake site here implements the plugin's real approval semantics
36
+ * (Respira_Tool_Governance): mint on a tokenless call, execute on a call that
37
+ * echoes a known token, and count how many tokens were ever minted so a
38
+ * mint-instead-of-validate loop fails loudly.
39
+ *
40
+ * Mock-adapter plumbing mirrors acf-site-id-routing.test.ts and
41
+ * delete-media-approval-token.test.ts.
42
+ *
43
+ * @since 8.3.7 (ticket 429299b5)
44
+ */
45
+ export {};
46
+ //# sourceMappingURL=429299b5-delete-post-empty-envelope.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"429299b5-delete-post-empty-envelope.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/429299b5-delete-post-empty-envelope.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Regression test for ticket 429299b5: "respira_delete_post silently does
3
+ * nothing and returns an empty response" (smartgard.ai, plugin 8.6.31 /
4
+ * mcp 8.3.5).
5
+ *
6
+ * Reported symptom: `delete_post` on a genuine Respira-created duplicate came
7
+ * back with a body whose ONLY content was the site block —
8
+ *
9
+ * {"site":{"id":"env-site","name":"WordPress (from env)", ... }}
10
+ *
11
+ * — no success flag, no error, no approval token. The post was untouched, and
12
+ * `list_activity` had no entry for either attempt, which read like the call
13
+ * had been stopped inside the MCP server and never dispatched.
14
+ *
15
+ * Two independent defects, both in this package:
16
+ *
17
+ * 1. `WordPressClient.deletePost()` was `Promise<void>` and threw
18
+ * `response.data` away. The WP approval gate answers a first-time
19
+ * destructive call with `respira_approval_required` at HTTP **202** — a
20
+ * 2xx, so axios resolves rather than throws — carrying
21
+ * `data.approval_request.approval_token`. That entire body was discarded,
22
+ * `undefined` reached `withSiteContext`, which wraps a non-object as
23
+ * `{ result, site }`, and `JSON.stringify` drops the `undefined` key. What
24
+ * the agent received was literally `{"site":{...}}`. This is the same bug
25
+ * `deletePage` had and fixed in v6.11.12; posts were never brought along.
26
+ *
27
+ * 2. `wordpress_delete_media` dispatched as `client.deleteMedia(args.id)`,
28
+ * dropping the `approval_token` the schema advertises and the agent sends.
29
+ * The plugin therefore saw a fresh first call every time and dutifully
30
+ * minted a new token — a token that only ever yields another token.
31
+ * Ticket 927aa7ed fixed the client METHOD and tested the client method, so
32
+ * it passed green against a tool that was still broken end to end. That is
33
+ * why the assertions below run through the dispatcher.
34
+ *
35
+ * The fake site here implements the plugin's real approval semantics
36
+ * (Respira_Tool_Governance): mint on a tokenless call, execute on a call that
37
+ * echoes a known token, and count how many tokens were ever minted so a
38
+ * mint-instead-of-validate loop fails loudly.
39
+ *
40
+ * Mock-adapter plumbing mirrors acf-site-id-routing.test.ts and
41
+ * delete-media-approval-token.test.ts.
42
+ *
43
+ * @since 8.3.7 (ticket 429299b5)
44
+ */
45
+ import { test } from 'node:test';
46
+ import assert from 'node:assert/strict';
47
+ import axios from 'axios';
48
+ import { readFileSync } from 'node:fs';
49
+ import { RespiraWordPressServer } from '../server.js';
50
+ const callLog = [];
51
+ let currentHandler = null;
52
+ const originalAdapter = axios.defaults.adapter;
53
+ function installMockAdapter() {
54
+ callLog.length = 0;
55
+ axios.defaults.adapter = ((config) => {
56
+ callLog.push({
57
+ method: (config.method || 'get').toLowerCase(),
58
+ url: config.url,
59
+ params: config.params,
60
+ });
61
+ if (!currentHandler) {
62
+ return Promise.reject(new Error('no mock handler installed'));
63
+ }
64
+ const r = currentHandler(config);
65
+ const response = {
66
+ status: r.status,
67
+ statusText: 'OK',
68
+ headers: { 'content-type': 'application/json' },
69
+ config,
70
+ data: r.data,
71
+ request: {},
72
+ };
73
+ // Mirror axios' own validateStatus default: 2xx resolves, everything else
74
+ // rejects. The 202 approval gate resolving rather than throwing is the
75
+ // whole reason defect 1 was invisible, so the mock must not smooth it over.
76
+ if (r.status >= 200 && r.status < 300) {
77
+ return Promise.resolve(response);
78
+ }
79
+ const err = new Error(`Request failed with status code ${r.status}`);
80
+ err.isAxiosError = true;
81
+ err.response = response;
82
+ err.config = config;
83
+ return Promise.reject(err);
84
+ });
85
+ }
86
+ function restoreAdapter() {
87
+ axios.defaults.adapter = originalAdapter;
88
+ currentHandler = null;
89
+ }
90
+ const SITE = {
91
+ id: 'env-site',
92
+ name: 'WordPress (from env)',
93
+ url: 'https://smartgard.ai',
94
+ apiKey: 'respira_test_key',
95
+ default: true,
96
+ };
97
+ function approvalGatedSite(opts) {
98
+ const site = { minted: [], consumed: [], deleted: [], handler: null };
99
+ site.handler = (config) => {
100
+ const url = config.url || '';
101
+ const method = (config.method || 'get').toLowerCase();
102
+ const params = config.params || {};
103
+ if (method === 'delete' && opts.pathRe.test(url)) {
104
+ const id = Number(url.split('/').pop());
105
+ const token = params.approval_token;
106
+ if (token) {
107
+ if (!site.minted.includes(token)) {
108
+ // The plugin returns 403 respira_invalid_approval_token here.
109
+ return {
110
+ status: 403,
111
+ data: {
112
+ code: 'respira_invalid_approval_token',
113
+ message: 'Approval token is invalid or has expired. Request approval again.',
114
+ data: { status: 403 },
115
+ },
116
+ };
117
+ }
118
+ site.consumed.push(token);
119
+ site.deleted.push(id);
120
+ return { status: 200, data: { success: true, message: 'Post deleted successfully.' } };
121
+ }
122
+ // No token: mint one and refuse. HTTP 202 — a 2xx, deliberately.
123
+ const fresh = `tok-${site.minted.length + 1}`;
124
+ site.minted.push(fresh);
125
+ return {
126
+ status: 202,
127
+ data: {
128
+ code: 'respira_approval_required',
129
+ message: `The "${opts.toolName}" tool requires explicit approval before execution.`,
130
+ data: {
131
+ status: 202,
132
+ approval_request: {
133
+ tool_name: opts.toolName,
134
+ predicted_effect: `Permanently delete ${opts.toolName.replace('delete_', '')} ID ${id}.`,
135
+ approval_token: fresh,
136
+ expires_in: 600,
137
+ },
138
+ },
139
+ },
140
+ };
141
+ }
142
+ // Any probe (version negotiation, compatibility) answers harmlessly.
143
+ return { status: 200, data: {} };
144
+ };
145
+ return site;
146
+ }
147
+ /** Run a tool the way production does: dispatch, then wrap in the site envelope. */
148
+ async function callTool(server, name, args) {
149
+ const result = await server.dispatchToolCall(name, args);
150
+ return server.withSiteContext(result, args);
151
+ }
152
+ /** The exact failure shape the customer saw. */
153
+ function isBareSiteEnvelope(value) {
154
+ if (!value || typeof value !== 'object') {
155
+ return false;
156
+ }
157
+ const serialized = JSON.parse(JSON.stringify(value));
158
+ const keys = Object.keys(serialized);
159
+ return keys.length === 1 && keys[0] === 'site';
160
+ }
161
+ // -----------------------------------------------------------------------------
162
+ // delete_post
163
+ // -----------------------------------------------------------------------------
164
+ test('delete_post never returns a bare site envelope (429299b5)', async () => {
165
+ installMockAdapter();
166
+ try {
167
+ const site = approvalGatedSite({ pathRe: /^\/posts\/\d+$/, toolName: 'delete_post' });
168
+ currentHandler = site.handler;
169
+ const server = new RespiraWordPressServer([SITE]);
170
+ const result = await callTool(server, 'wordpress_delete_post', { id: 102058 });
171
+ assert.equal(isBareSiteEnvelope(result), false, 'delete_post returned {"site":{...}} and nothing else — the exact 429299b5 symptom');
172
+ assert.ok(result.site, 'the site block should still be present');
173
+ }
174
+ finally {
175
+ restoreAdapter();
176
+ }
177
+ });
178
+ test('delete_post surfaces the approval request as an actionable payload (429299b5)', async () => {
179
+ installMockAdapter();
180
+ try {
181
+ const site = approvalGatedSite({ pathRe: /^\/posts\/\d+$/, toolName: 'delete_post' });
182
+ currentHandler = site.handler;
183
+ const server = new RespiraWordPressServer([SITE]);
184
+ const result = await callTool(server, 'wordpress_delete_post', { id: 102058 });
185
+ assert.equal(result.code, 'respira_approval_required');
186
+ assert.ok(result.message, 'a refusal must carry a message an agent can relay');
187
+ const token = result?.data?.approval_request?.approval_token;
188
+ assert.equal(token, 'tok-1', 'the approval token must reach the caller; discarding it is what made the tool unusable');
189
+ assert.equal(result.data.approval_request.tool_name, 'delete_post', 'the payload must name the tool the token is bound to');
190
+ }
191
+ finally {
192
+ restoreAdapter();
193
+ }
194
+ });
195
+ test('the delete_post approval token completes the delete instead of minting another (429299b5)', async () => {
196
+ installMockAdapter();
197
+ try {
198
+ const site = approvalGatedSite({ pathRe: /^\/posts\/\d+$/, toolName: 'delete_post' });
199
+ currentHandler = site.handler;
200
+ const server = new RespiraWordPressServer([SITE]);
201
+ const first = await callTool(server, 'wordpress_delete_post', { id: 102058 });
202
+ const token = first.data.approval_request.approval_token;
203
+ const second = await callTool(server, 'wordpress_delete_post', {
204
+ id: 102058,
205
+ approval_token: token,
206
+ });
207
+ assert.equal(second.success, true, 'the second call must complete the delete');
208
+ assert.equal(isBareSiteEnvelope(second), false);
209
+ assert.deepEqual(site.consumed, [token], 'the site must have executed against the echoed token');
210
+ assert.deepEqual(site.deleted, [102058], 'the post must actually be gone');
211
+ assert.equal(site.minted.length, 1, 'a second token was minted — the token was not forwarded, so this is the unbreakable loop again');
212
+ }
213
+ finally {
214
+ restoreAdapter();
215
+ }
216
+ });
217
+ test('delete_post forwards the token verbatim on the wire (429299b5)', async () => {
218
+ installMockAdapter();
219
+ try {
220
+ const site = approvalGatedSite({ pathRe: /^\/posts\/\d+$/, toolName: 'delete_post' });
221
+ site.minted.push('tok-1'); // pretend an earlier call already handed this out
222
+ currentHandler = site.handler;
223
+ const server = new RespiraWordPressServer([SITE]);
224
+ await callTool(server, 'wordpress_delete_post', { id: 7, approval_token: 'tok-1' });
225
+ const deletes = callLog.filter((c) => c.method === 'delete' && /^\/posts\//.test(c.url));
226
+ assert.equal(deletes.length, 1);
227
+ assert.equal(deletes[0].params?.approval_token, 'tok-1');
228
+ }
229
+ finally {
230
+ restoreAdapter();
231
+ }
232
+ });
233
+ test('delete_post refuses structurally, never silently (429299b5)', async () => {
234
+ installMockAdapter();
235
+ try {
236
+ // A refusal the plugin raises at 403: not a duplicate, direct editing off.
237
+ currentHandler = (config) => {
238
+ if ((config.method || '').toLowerCase() === 'delete') {
239
+ return {
240
+ status: 403,
241
+ data: {
242
+ code: 'respira_not_duplicate',
243
+ message: 'Cannot delete original post (ID: 100952). Only Respira duplicates can be deleted.',
244
+ data: { status: 403, original_id: 100952, instructions: ['Duplicate it first.'] },
245
+ },
246
+ };
247
+ }
248
+ return { status: 200, data: {} };
249
+ };
250
+ const server = new RespiraWordPressServer([SITE]);
251
+ await assert.rejects(() => callTool(server, 'wordpress_delete_post', { id: 100952 }), (err) => {
252
+ // A thrown coded error is a structured refusal: the agent gets the
253
+ // plugin's reason. What must never happen is a resolved empty envelope.
254
+ assert.match(String(err.message), /Only Respira duplicates can be deleted/);
255
+ return true;
256
+ }, 'a 403 refusal must surface as an error, not resolve into an empty envelope');
257
+ }
258
+ finally {
259
+ restoreAdapter();
260
+ }
261
+ });
262
+ test('delete_post does not smuggle confirm_live_edit in behind force (429299b5)', async () => {
263
+ installMockAdapter();
264
+ try {
265
+ const site = approvalGatedSite({ pathRe: /^\/posts\/\d+$/, toolName: 'delete_post' });
266
+ currentHandler = site.handler;
267
+ const server = new RespiraWordPressServer([SITE]);
268
+ await callTool(server, 'wordpress_delete_post', { id: 5, force: true });
269
+ const forced = callLog.filter((c) => c.method === 'delete').pop();
270
+ assert.equal(forced?.params?.force, true);
271
+ assert.equal(forced?.params?.confirm_live_edit, undefined, 'force alone must not be escalated into "yes, delete the live original"');
272
+ await callTool(server, 'wordpress_delete_post', { id: 5, force: true, confirm_live_edit: true });
273
+ const confirmed = callLog.filter((c) => c.method === 'delete').pop();
274
+ assert.equal(confirmed?.params?.confirm_live_edit, true, 'explicit confirmation must reach the site');
275
+ }
276
+ finally {
277
+ restoreAdapter();
278
+ }
279
+ });
280
+ // -----------------------------------------------------------------------------
281
+ // delete_media (the second defect in the same ticket)
282
+ // -----------------------------------------------------------------------------
283
+ test('delete_media completes on the returned token rather than looping (429299b5)', async () => {
284
+ installMockAdapter();
285
+ try {
286
+ const site = approvalGatedSite({ pathRe: /^\/media\/\d+$/, toolName: 'delete_media' });
287
+ currentHandler = site.handler;
288
+ const server = new RespiraWordPressServer([SITE]);
289
+ const first = await callTool(server, 'wordpress_delete_media', { id: 4242 });
290
+ assert.equal(isBareSiteEnvelope(first), false);
291
+ const token = first?.data?.approval_request?.approval_token;
292
+ assert.equal(token, 'tok-1', 'the first call must hand back a token');
293
+ const second = await callTool(server, 'wordpress_delete_media', {
294
+ id: 4242,
295
+ approval_token: token,
296
+ });
297
+ assert.equal(second.success, true);
298
+ assert.equal(site.minted.length, 1, 'the dispatcher dropped approval_token again: the site minted a second token instead of executing');
299
+ assert.deepEqual(site.deleted, [4242]);
300
+ }
301
+ finally {
302
+ restoreAdapter();
303
+ }
304
+ });
305
+ test('delete_media forwards force from the dispatcher (429299b5)', async () => {
306
+ installMockAdapter();
307
+ try {
308
+ const site = approvalGatedSite({ pathRe: /^\/media\/\d+$/, toolName: 'delete_media' });
309
+ site.minted.push('tok-1'); // pretend an earlier call already handed this out
310
+ currentHandler = site.handler;
311
+ const server = new RespiraWordPressServer([SITE]);
312
+ await callTool(server, 'wordpress_delete_media', {
313
+ id: 9,
314
+ force: true,
315
+ approval_token: 'tok-1',
316
+ });
317
+ const del = callLog.filter((c) => c.method === 'delete' && /^\/media\//.test(c.url)).pop();
318
+ assert.equal(del?.params?.force, true, 'force is in the schema and must reach the site');
319
+ assert.equal(del?.params?.approval_token, 'tok-1');
320
+ }
321
+ finally {
322
+ restoreAdapter();
323
+ }
324
+ });
325
+ // -----------------------------------------------------------------------------
326
+ // The envelope rule itself
327
+ // -----------------------------------------------------------------------------
328
+ test('a bodyless 2xx delete still produces a structured result, not an empty envelope (429299b5)', async () => {
329
+ installMockAdapter();
330
+ try {
331
+ currentHandler = (config) => {
332
+ if ((config.method || '').toLowerCase() === 'delete') {
333
+ return { status: 204, data: '' };
334
+ }
335
+ return { status: 200, data: {} };
336
+ };
337
+ const server = new RespiraWordPressServer([SITE]);
338
+ const result = await callTool(server, 'wordpress_delete_post', { id: 1 });
339
+ assert.equal(isBareSiteEnvelope(result), false);
340
+ assert.equal(result.success, true);
341
+ assert.equal(result.body_was_empty, true);
342
+ assert.match(String(result.message), /no response body/);
343
+ }
344
+ finally {
345
+ restoreAdapter();
346
+ }
347
+ });
348
+ // getTools() runs capability negotiation against the live site, so the schema
349
+ // is asserted against the SOURCE instead — same approach as
350
+ // woo-card-tools-forward-fse-params.test.ts.
351
+ test('the delete_post schema documents the approval round-trip (429299b5)', () => {
352
+ const src = readFileSync(`${process.cwd()}/src/server.ts`, 'utf8');
353
+ const start = src.indexOf("name: 'wordpress_delete_post',");
354
+ assert.notEqual(start, -1, 'wordpress_delete_post must be registered');
355
+ const block = src.slice(start, src.indexOf('destructiveHint', start));
356
+ assert.match(block, /approval_token:/, 'the agent cannot complete the handshake without a declared approval_token param');
357
+ assert.match(block, /confirm_live_edit:/, 'the plugin requires confirm_live_edit alongside force; the schema must say so');
358
+ assert.match(block, /respira_approval_required/, 'the description must name the code an agent has to branch on');
359
+ });
360
+ //# sourceMappingURL=429299b5-delete-post-empty-envelope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"429299b5-delete-post-empty-envelope.test.js","sourceRoot":"","sources":["../../src/__tests__/429299b5-delete-post-empty-envelope.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}