@lacneu/wix-openclaw 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,99 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.4.0] - 2026-08-29
11
+
12
+ Ten more `wix_seo_*` tools, still **off by default**, close the other half of
13
+ the SEO gap: 0.3.x could audit a site's tags and never correct them. Writing
14
+ them is a different destructiveness from deleting a redirect — a tag write
15
+ replaces **the previous value of what it writes** — so the guard is different
16
+ too, and most of this entry is about that.
17
+
18
+ ### Added — SEO: writing tags, and the patterns behind them
19
+
20
+ > Same warning as the audit tools: these endpoints are in Developer Preview,
21
+ > Wix states they should not be used on live sites, and **every tool here
22
+ > replaces what it writes**. They register only with `enableSeoTools: true`.
23
+
24
+ Ten tools complete the SEO surface: you could audit tags but not correct them.
25
+
26
+ **Per-item and site-wide tags.** `wix_seo_set_item_tags`,
27
+ `wix_seo_bulk_set_item_tags`, `wix_seo_reset_item_tags` and
28
+ `wix_seo_set_site_tags`.
29
+
30
+ **Patterns.** `wix_seo_list_patterns`, `wix_seo_get_pattern`,
31
+ `wix_seo_list_pattern_variables` (read-only) plus `wix_seo_set_pattern`,
32
+ `wix_seo_create_pattern` and `wix_seo_reset_pattern`.
33
+
34
+ ### The destructiveness is a different shape, so the guard is too
35
+
36
+ A redirect delete destroys another row — it can be listed and named. A tag write
37
+ destroys **the previous value of what it writes**: `tags` replaces the item's set
38
+ in full, so a caller that sets a title wipes the description it never mentioned,
39
+ gets exactly what it asked for, and loses something it never saw. That is this
40
+ half's "redirects do not chain".
41
+
42
+ The pre-flight therefore reports what **disappears** — the tags held today whose
43
+ slot the incoming set does not fill — never an echo of the input. A caller
44
+ reading its own request back learns nothing. Nothing is lost, nothing is
45
+ refused: the ceremony exists for the unannounced loss, not for its own sake.
46
+
47
+ A pattern write earns the heaviest pre-flight in the plugin. It re-renders
48
+ **every page of its type**, it has no revision, and the Wix dashboard writes to
49
+ the same object — last write wins. So the refusal reports the page count
50
+ downstream alongside the templates, and the token is bound to the pattern read
51
+ immediately before — **and to that page count**, because the radius is part of
52
+ what was accepted: a token minted while a type held twelve pages does not
53
+ authorise the same write once it holds four hundred.
54
+
55
+ Every refusal in this family carries the **value** of what it names, not only
56
+ its slot.
57
+ Editing `{{title}}` into `{{title}} — Ataraxis` loses no tag, so a report by
58
+ slot alone read identically before and after — an operator signing a rewrite of
59
+ every page of a type without seeing either version.
60
+
61
+ ### Three contract facts that live in code, not in prose
62
+
63
+ - **`fieldMask` is a comma-separated STRING over REST.** The SDK takes an array,
64
+ which is what a model reaches for. It is built here, never accepted.
65
+ - **`language` is actively dropped.** Tags can only be written for the item's
66
+ primary language, and sending one fails `LANGUAGE_NOT_SUPPORTED` *even when
67
+ the field mask omits it* — so not declaring the field is not enough, TypeBox
68
+ passes undeclared properties through.
69
+ - **Site SEO Tags accepts only `meta`.** Wix rejects `title`, `script` and
70
+ `link` there despite the shared tag shape listing them, and there is no way to
71
+ set site-wide structured data through any Wix API — a per-page `script` tag is
72
+ the route.
73
+
74
+ `BLOG_POST` bulk writes are capped at 20 entries, not 100, and Wix rejects the
75
+ **whole call** past an item type's limit — a 40-post batch would write nothing —
76
+ so the cap is enforced before the request leaves.
77
+
78
+ ### The `publish` split, stated where a model will read it
79
+
80
+ For a static page, `publish: true` updates **only** the published revision. The
81
+ read tools always return the **saved** one, so after such a write they keep
82
+ showing the old values — that is not a failed write, and re-sending will not
83
+ change it. The method's own response is not a read of the published page either.
84
+ A caller following the description literally converges instead of retrying.
85
+
86
+ ## [0.3.1] - 2026-08-28
87
+
88
+ **The version that actually reached npm for the 0.3 line.** `v0.3.0` was
89
+ tagged, failed to compile in the release workflow and was never published, so
90
+ `0.3.1` carries the whole 0.3.0 entry below plus the fix that unblocked it.
91
+
92
+ ### Fixed
93
+
94
+ - **The build imported a type from a subpath that does not exist across the
95
+ supported range.** `openclaw/plugin-sdk/agent-core` only appeared in
96
+ 2026.5.28, while this plugin declares `>=2026.5.0`, so CI failed on the lower
97
+ bound. The shared tool-result type is declared locally instead — verified at
98
+ both ends of the supported range rather than at the version that happened to
99
+ be installed.
100
+
8
101
  ## [0.3.0] - 2026-08-28
9
102
 
10
103
  Nine `wix_seo_*` tools, **off by default**, close the gap that made this plugin
@@ -402,7 +495,7 @@ For instance owners on `@lacneu/wix-openclaw@0.2.2`:
402
495
  3. Verify in the boot log:
403
496
  `wix-openclaw: ready — 50 tool(s) registered`.
404
497
 
405
- Fifty, not fifty-nine: the SEO tools are not registered until you opt in. Nothing
498
+ Fifty, not sixty-nine: the SEO tools are not registered until you opt in. Nothing
406
499
  else changes, and the approval fix applies as soon as the plugin loads — a gated
407
500
  tool that used to fail without asking will now put its prompt to the operator.
408
501
 
@@ -418,7 +511,7 @@ To add the SEO tools:
418
511
  `openclaw config set plugins.entries.wix-openclaw.config.enableSeoTools true`.
419
512
  `update` carries your existing config forward and the new field simply
420
513
  defaults to `false`, so nothing turns on by surprise.
421
- 3. Restart, and expect `59 tool(s) registered`.
514
+ 3. Restart, and expect `69 tool(s) registered`.
422
515
  4. Read the Developer Preview warning at the top of this section before pointing
423
516
  any of the four writing tools at a live site.
424
517
 
package/README.md CHANGED
@@ -176,8 +176,10 @@ Tick these only if the corresponding Wix product is actually in use on
176
176
  the target site:
177
177
 
178
178
  - [ ] **Manage SEO** (`SCOPE.PROMOTE.MANAGE-SEO`) — **only if you set
179
- `enableSeoTools: true`.** In the default configuration the SEO tools are not
180
- registered at all, so granting this scope would hand the key the power to
179
+ `enableSeoTools: true`**, which registers **nineteen** tools of which
180
+ **eleven write irreversibly** (four on redirects, seven on tags and
181
+ patterns; a pattern write re-renders every page of its type). In the default
182
+ configuration the SEO tools are not registered at all, so granting this scope would hand the key the power to
181
183
  delete redirects for tools that cannot run. Wix exposes a **single** SEO
182
184
  scope, not a read/write pair: ticking it grants redirect creation and deletion
183
185
  along with the read-only audit, so there is no such thing as an audit-only SEO
@@ -185,8 +187,8 @@ the target site:
185
187
  *Social Posts* and *Import orders*; its label is currently untranslated and
186
188
  renders literally as `site.scope.SCOPE.PROMOTE.MANAGE-SEO.name`. Since Wix
187
189
  cannot narrow it, the read/write boundary is enforced by this plugin instead —
188
- the four writing tools require an approval naming every redirect they would
189
- destroy.
190
+ each of the eleven writing tools refuses until what it would destroy, be it a
191
+ redirect, a tag or a template, has been named and acknowledged.
190
192
 
191
193
  - [ ] **Pricing Plans** — if you sell subscription packages
192
194
  - [ ] **Wix Stores** + **Wix eCommerce** — if you sell physical/digital
@@ -238,7 +240,7 @@ columns and remove the matching tools from your agent's allow-list.
238
240
  | `wix_reviews_*` | Wix Reviews | Reviews moderation |
239
241
  | `wix_faq_*` | Manage FAQ | FAQ tooling |
240
242
  | `wix_multilingual_*` | Multilingual Translation Schema Read | Translation reads |
241
- | `wix_seo_*` (all nine) | Manage SEO (`SCOPE.PROMOTE.MANAGE-SEO`) | SEO audit **and** redirect changes — Wix has no read-only SEO scope, so this one permission covers both |
243
+ | `wix_seo_*` (all nineteen) | Manage SEO (`SCOPE.PROMOTE.MANAGE-SEO`) | SEO audit **and** redirect changes — Wix has no read-only SEO scope, so this one permission covers both |
242
244
  | `wix_design_brief` | _(none — no API call)_ | Always |
243
245
 
244
246
  ### Wix app installation requirements
@@ -487,19 +489,22 @@ neither answer has been tested.
487
489
  ### SEO
488
490
 
489
491
  > **Developer Preview, and OFF by default.** Every Wix endpoint behind these
490
- > nine tools is listed in Wix's
492
+ > nineteen tools is listed in Wix's
491
493
  > [Developer Preview](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/platform/about-developer-preview)
492
- > — Item SEO Tags, Site SEO Tags and all six Redirects methods. Wix may change
494
+ > — Item SEO Tags, Site SEO Tags, SEO Patterns and all six Redirects methods.
495
+ > Wix may change
493
496
  > them at any time, and states plainly that you **shouldn't use them on live
494
497
  > sites**: they are for testing and feedback. An API stays in preview for at
495
498
  > most six months.
496
499
  >
497
500
  > Nothing here registers unless you set `enableSeoTools: true` in the plugin
498
- > config. Four of the tools write irreversibly to the live site the moment they
499
- > succeed, so opting in is the operator saying they accept both risks.
501
+ > config. Eleven of the tools write irreversibly to the live site the moment
502
+ > they succeed and a pattern write re-renders every page of its type — so
503
+ > opting in is the operator saying they accept both risks.
500
504
  > _Preview status verified against the Wix reference on 2026-08-28._
501
505
 
502
- Auditing a site's SEO, and managing its URL redirects.
506
+ Auditing a site's SEO, correcting its tags, and managing its URL redirects and
507
+ tag patterns.
503
508
 
504
509
  | Tool | What it does | Approval | Validated |
505
510
  |---|---|---|---|
@@ -512,6 +517,16 @@ Auditing a site's SEO, and managing its URL redirects.
512
517
  | `wix_seo_delete_redirect` | Delete one redirect (re-reads it and refuses until its token is acknowledged) | **required** | schema |
513
518
  | `wix_seo_bulk_create_redirects` | Create 1–100 redirects | **required** | schema |
514
519
  | `wix_seo_bulk_delete_redirects` | Delete 1–500 redirects | **required** | schema |
520
+ | `wix_seo_set_item_tags` | Set one item's tags — REPLACES its own set in full; refuses until the tags it would drop are acknowledged | **required** | schema |
521
+ | `wix_seo_bulk_set_item_tags` | Set tags for many items of one type (100 max, 20 for `BLOG_POST`); per-entry results | **required** | schema |
522
+ | `wix_seo_reset_item_tags` | Give an item back the tags it inherits, discarding its own (all or nothing) | **required** | schema |
523
+ | `wix_seo_set_site_tags` | Set the site-wide tags — `meta` only; Wix rejects `title`/`script`/`link` here | **required** | schema |
524
+ | `wix_seo_list_patterns` | The site's tag templates, per page type | — | schema |
525
+ | `wix_seo_get_pattern` | One page type's pattern; read `source` to know whose it is — an owned pattern may hold zero templates, so empty ≠ absent | — | schema |
526
+ | `wix_seo_list_pattern_variables` | The variables a page type's pattern may reference | — | schema |
527
+ | `wix_seo_set_pattern` | Change an existing pattern — re-renders EVERY page of the type | **required** | schema |
528
+ | `wix_seo_create_pattern` | Give a page type its first pattern (same path as the set, `POST` not `PATCH`) | **required** | schema |
529
+ | `wix_seo_reset_pattern` | Return a page type to the Wix default pattern | **required** | schema |
515
530
 
516
531
  **Three things to know before using these.**
517
532
 
package/dist/config.js CHANGED
@@ -34,6 +34,15 @@ export const DEFAULT_APPROVAL_REQUIRED = [
34
34
  "wix_seo_delete_redirect",
35
35
  "wix_seo_bulk_create_redirects",
36
36
  "wix_seo_bulk_delete_redirects",
37
+ // Tranche 2 — writing tags. Each REPLACES what it writes: the previous
38
+ // value is gone, and a pattern write re-renders every page of its type.
39
+ "wix_seo_set_item_tags",
40
+ "wix_seo_bulk_set_item_tags",
41
+ "wix_seo_reset_item_tags",
42
+ "wix_seo_set_site_tags",
43
+ "wix_seo_set_pattern",
44
+ "wix_seo_create_pattern",
45
+ "wix_seo_reset_pattern",
37
46
  ];
38
47
  const VALID_LOG_LEVELS = ["debug", "info", "warn", "error"];
39
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAQ7D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAI,KAAQ;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC,CAAiB,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,sEAAsE;IACtE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,6DAA6D;IAC7D,yBAAyB;IACzB,yBAAyB;IACzB,+BAA+B;IAC/B,+BAA+B;CAChC,CAAC;AAEF,MAAM,gBAAgB,GAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,aAAa,GACjB,eAAe,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;IAE3E,MAAM,QAAQ,GAAgB,gBAAgB,CAAC,QAAQ,CACrD,GAAG,CAAC,QAAuB,CAC5B;QACC,CAAC,CAAE,GAAG,CAAC,QAAwB;QAC/B,CAAC,CAAC,MAAM,CAAC;IAEX,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;QAC9B,sEAAsE;QACtE,mEAAmE;QACnE,oEAAoE;QACpE,0EAA0E;QAC1E,0EAA0E;QAC1E,cAAc,EAAE,GAAG,CAAC,cAAc,KAAK,IAAI;QAC3C,MAAM;QACN,SAAS;QACT,cAAc;QACd,aAAa;QACb,gBAAgB,EAAE,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAC3C,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAQ7D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAI,KAAQ;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC,CAAiB,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,sEAAsE;IACtE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,6DAA6D;IAC7D,yBAAyB;IACzB,yBAAyB;IACzB,+BAA+B;IAC/B,+BAA+B;IAC/B,uEAAuE;IACvE,wEAAwE;IACxE,uBAAuB;IACvB,4BAA4B;IAC5B,yBAAyB;IACzB,uBAAuB;IACvB,qBAAqB;IACrB,wBAAwB;IACxB,uBAAuB;CACxB,CAAC;AAEF,MAAM,gBAAgB,GAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,aAAa,GACjB,eAAe,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;IAE3E,MAAM,QAAQ,GAAgB,gBAAgB,CAAC,QAAQ,CACrD,GAAG,CAAC,QAAuB,CAC5B;QACC,CAAC,CAAE,GAAG,CAAC,QAAwB;QAC/B,CAAC,CAAC,MAAM,CAAC;IAEX,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;QAC9B,sEAAsE;QACtE,mEAAmE;QACnE,oEAAoE;QACpE,0EAA0E;QAC1E,0EAA0E;QAC1E,cAAc,EAAE,GAAG,CAAC,cAAc,KAAK,IAAI;QAC3C,MAAM;QACN,SAAS;QACT,cAAc;QACd,aAAa;QACb,gBAAgB,EAAE,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAC3C,QAAQ;KACT,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1308,6 +1308,244 @@ export declare function buildAllTools(client: WixClient, options?: {
1308
1308
  data?: unknown;
1309
1309
  error?: string;
1310
1310
  }>>;
1311
+ } | {
1312
+ name: string;
1313
+ description: string;
1314
+ label: string;
1315
+ parameters: import("@sinclair/typebox").TObject<{
1316
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1317
+ itemType: import("@sinclair/typebox").TString;
1318
+ itemId: import("@sinclair/typebox").TString;
1319
+ tags: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1320
+ type: import("@sinclair/typebox").TString;
1321
+ props: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1322
+ children: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1323
+ meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1324
+ custom: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1325
+ disabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1326
+ }>>;
1327
+ publish: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1328
+ acknowledgeReplacement: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1329
+ }>;
1330
+ execute: (toolCallId: string, params: {
1331
+ siteId?: string | undefined;
1332
+ publish?: boolean | undefined;
1333
+ acknowledgeReplacement?: string | undefined;
1334
+ tags: {
1335
+ custom?: boolean | undefined;
1336
+ props?: {
1337
+ [x: string]: unknown;
1338
+ } | undefined;
1339
+ children?: string | undefined;
1340
+ meta?: {
1341
+ [x: string]: unknown;
1342
+ } | undefined;
1343
+ disabled?: boolean | undefined;
1344
+ type: string;
1345
+ }[];
1346
+ itemType: string;
1347
+ itemId: string;
1348
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1349
+ status: "ok" | "failed";
1350
+ data?: unknown;
1351
+ error?: string;
1352
+ }>>;
1353
+ } | {
1354
+ name: string;
1355
+ description: string;
1356
+ label: string;
1357
+ parameters: import("@sinclair/typebox").TObject<{
1358
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1359
+ itemType: import("@sinclair/typebox").TString;
1360
+ itemId: import("@sinclair/typebox").TString;
1361
+ acknowledgeReplacement: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1362
+ }>;
1363
+ execute: (toolCallId: string, params: {
1364
+ siteId?: string | undefined;
1365
+ acknowledgeReplacement?: string | undefined;
1366
+ itemType: string;
1367
+ itemId: string;
1368
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1369
+ status: "ok" | "failed";
1370
+ data?: unknown;
1371
+ error?: string;
1372
+ }>>;
1373
+ } | {
1374
+ name: string;
1375
+ description: string;
1376
+ label: string;
1377
+ parameters: import("@sinclair/typebox").TObject<{
1378
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1379
+ tags: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1380
+ type: import("@sinclair/typebox").TString;
1381
+ props: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1382
+ children: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1383
+ meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1384
+ custom: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1385
+ disabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1386
+ }>>;
1387
+ acknowledgeReplacement: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1388
+ }>;
1389
+ execute: (toolCallId: string, params: {
1390
+ siteId?: string | undefined;
1391
+ acknowledgeReplacement?: string | undefined;
1392
+ tags: {
1393
+ custom?: boolean | undefined;
1394
+ props?: {
1395
+ [x: string]: unknown;
1396
+ } | undefined;
1397
+ children?: string | undefined;
1398
+ meta?: {
1399
+ [x: string]: unknown;
1400
+ } | undefined;
1401
+ disabled?: boolean | undefined;
1402
+ type: string;
1403
+ }[];
1404
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1405
+ status: "ok" | "failed";
1406
+ data?: unknown;
1407
+ error?: string;
1408
+ }>>;
1409
+ } | {
1410
+ name: string;
1411
+ description: string;
1412
+ label: string;
1413
+ parameters: import("@sinclair/typebox").TObject<{
1414
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1415
+ itemType: import("@sinclair/typebox").TString;
1416
+ entries: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1417
+ itemId: import("@sinclair/typebox").TString;
1418
+ tags: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1419
+ type: import("@sinclair/typebox").TString;
1420
+ props: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1421
+ children: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1422
+ meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1423
+ custom: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1424
+ disabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1425
+ }>>;
1426
+ }>>;
1427
+ publish: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1428
+ acknowledgeReplacement: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1429
+ }>;
1430
+ execute: (toolCallId: string, params: {
1431
+ siteId?: string | undefined;
1432
+ publish?: boolean | undefined;
1433
+ acknowledgeReplacement?: string | undefined;
1434
+ entries: {
1435
+ tags: {
1436
+ custom?: boolean | undefined;
1437
+ props?: {
1438
+ [x: string]: unknown;
1439
+ } | undefined;
1440
+ children?: string | undefined;
1441
+ meta?: {
1442
+ [x: string]: unknown;
1443
+ } | undefined;
1444
+ disabled?: boolean | undefined;
1445
+ type: string;
1446
+ }[];
1447
+ itemId: string;
1448
+ }[];
1449
+ itemType: string;
1450
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1451
+ status: "ok" | "failed";
1452
+ data?: unknown;
1453
+ error?: string;
1454
+ }>>;
1455
+ } | {
1456
+ name: string;
1457
+ description: string;
1458
+ label: string;
1459
+ parameters: import("@sinclair/typebox").TObject<{
1460
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1461
+ pageType: import("@sinclair/typebox").TString;
1462
+ pageId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1463
+ }>;
1464
+ execute: (toolCallId: string, params: {
1465
+ siteId?: string | undefined;
1466
+ pageId?: string | undefined;
1467
+ pageType: string;
1468
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1469
+ status: "ok" | "failed";
1470
+ data?: unknown;
1471
+ error?: string;
1472
+ }>>;
1473
+ } | {
1474
+ name: string;
1475
+ description: string;
1476
+ label: string;
1477
+ parameters: import("@sinclair/typebox").TObject<{
1478
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1479
+ pageType: import("@sinclair/typebox").TString;
1480
+ }>;
1481
+ execute: (toolCallId: string, params: {
1482
+ siteId?: string | undefined;
1483
+ pageType: string;
1484
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1485
+ status: "ok" | "failed";
1486
+ data?: unknown;
1487
+ error?: string;
1488
+ }>>;
1489
+ } | {
1490
+ name: string;
1491
+ description: string;
1492
+ label: string;
1493
+ parameters: import("@sinclair/typebox").TObject<{
1494
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1495
+ pageType: import("@sinclair/typebox").TString;
1496
+ tags: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1497
+ type: import("@sinclair/typebox").TString;
1498
+ props: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1499
+ children: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1500
+ meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
1501
+ custom: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1502
+ disabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1503
+ }>>;
1504
+ pageId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1505
+ acknowledgeReplacement: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1506
+ }>;
1507
+ execute: (toolCallId: string, params: {
1508
+ siteId?: string | undefined;
1509
+ pageId?: string | undefined;
1510
+ acknowledgeReplacement?: string | undefined;
1511
+ tags: {
1512
+ custom?: boolean | undefined;
1513
+ props?: {
1514
+ [x: string]: unknown;
1515
+ } | undefined;
1516
+ children?: string | undefined;
1517
+ meta?: {
1518
+ [x: string]: unknown;
1519
+ } | undefined;
1520
+ disabled?: boolean | undefined;
1521
+ type: string;
1522
+ }[];
1523
+ pageType: string;
1524
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1525
+ status: "ok" | "failed";
1526
+ data?: unknown;
1527
+ error?: string;
1528
+ }>>;
1529
+ } | {
1530
+ name: string;
1531
+ description: string;
1532
+ label: string;
1533
+ parameters: import("@sinclair/typebox").TObject<{
1534
+ siteId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1535
+ pageType: import("@sinclair/typebox").TString;
1536
+ pageId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1537
+ acknowledgeReplacement: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1538
+ }>;
1539
+ execute: (toolCallId: string, params: {
1540
+ siteId?: string | undefined;
1541
+ pageId?: string | undefined;
1542
+ acknowledgeReplacement?: string | undefined;
1543
+ pageType: string;
1544
+ }, signal?: AbortSignal) => Promise<import("./tools/_factory.js").WixToolResult<{
1545
+ status: "ok" | "failed";
1546
+ data?: unknown;
1547
+ error?: string;
1548
+ }>>;
1311
1549
  } | {
1312
1550
  name: string;
1313
1551
  description: string;
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@
16
16
  // plugin config (with `${ENV_VAR}` substitution), never from the
17
17
  // LLM's parameter space.
18
18
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
19
- import { resolveConfig } from "./config.js";
19
+ import { DEFAULT_APPROVAL_REQUIRED, resolveConfig } from "./config.js";
20
20
  import { createApprovalHook } from "./hooks/approval.js";
21
21
  import { buildBlogTools } from "./tools/blog.js";
22
22
  import { buildBookingsTools } from "./tools/bookings.js";
@@ -108,6 +108,21 @@ export function registerWixPlugin(api) {
108
108
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
109
  api.on("before_tool_call", approvalHandler);
110
110
  api.logger.info(`wix-openclaw: ready — ${allTools.length} tools registered, ${config.approvalRequired.size} approval-gated, ${config.allowedSiteIds.length} allowed site(s)`);
111
+ // SAID, NOT SILENTLY FIXED. An install that carries an explicit
112
+ // `approvalRequired` keeps it — that list may be a deliberate choice (a
113
+ // client that cannot render approval prompts has to empty it). But an
114
+ // upgrade also inherits a list written before these tools existed, and the
115
+ // difference between the two is invisible from here. So the gap is named at
116
+ // boot rather than closed behind the operator's back or left unmentioned.
117
+ const ungated = allTools
118
+ .map((t) => t.name)
119
+ .filter((name) => DEFAULT_APPROVAL_REQUIRED.includes(name) &&
120
+ !config.approvalRequired.has(name));
121
+ if (ungated.length > 0) {
122
+ api.logger.warn(`wix-openclaw: ${ungated.length} destructive tool(s) registered WITHOUT approval — ` +
123
+ `${ungated.join(", ")}. They are gated by default; this instance's ` +
124
+ "`approvalRequired` does not list them.");
125
+ }
111
126
  }
112
127
  // ANNOTATED, NOT INFERRED. The inferred type of this default export reaches
113
128
  // into an openclaw build-internal chunk (`plugin-entry-*.js`), which TypeScript
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}