@lacneu/wix-openclaw 0.2.0 → 0.2.2

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
@@ -7,6 +7,102 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.2] - 2026-05-03
11
+
12
+ ### Fixed — OpenClaw 2026.5.x compatibility
13
+
14
+ OpenClaw 2026.5.2 introduced a manifest contract for plugin tool
15
+ ownership: tools registered via `api.registerTool(...)` are
16
+ **rejected at runtime** with the error
17
+ `plugin must declare contracts.tools before registering agent tools`
18
+ when the plugin manifest does not declare them.
19
+
20
+ Without this release, `@lacneu/wix-openclaw` loads on 2026.5.x but
21
+ all 50 of its `wix_*` tools are silently rejected at registration —
22
+ the plugin runs hooks but exposes 0 tools to the agent.
23
+
24
+ ### Added — `contracts.tools` (50 entries)
25
+
26
+ `openclaw.plugin.json` now declares every tool the plugin owns
27
+ under `contracts.tools` as a flat array of strings. Mirrors the 50
28
+ tools registered by `registerWixPlugin(api)`:
29
+
30
+ - 11 blog tools (drafts CRUD, publish/unpublish, posts, categories, tags)
31
+ - 6 bookings (services list, query, create, get, cancel, reschedule)
32
+ - 1 business info
33
+ - 6 contacts CRUD + label + query
34
+ - 6 wix data CRUD (collections, items)
35
+ - 1 design brief
36
+ - 3 events (list, get, list_guests)
37
+ - 5 FAQ (list categories/questions, create/update/delete question)
38
+ - 2 forms (list submissions, get submission)
39
+ - 2 media (list, upload)
40
+ - 2 multilingual (list languages, list schemas)
41
+ - 3 reviews (list, get, moderate)
42
+ - 2 sites (list, url get)
43
+
44
+ ### Added — `activation.onStartup: true`
45
+
46
+ Per the OpenClaw 2026.5.x manifest spec, external plugins should
47
+ declare an explicit activation policy. `onStartup: true` ensures
48
+ the plugin is loaded at gateway startup so its tools are
49
+ discoverable when the agent resolves its tool inventory.
50
+
51
+ ### Added — `toolMetadata._default.configSignals`
52
+
53
+ Tells OpenClaw's tool descriptor planner that every tool in this
54
+ plugin requires both `apiKey` and `accountId` to be configured at
55
+ `plugins.entries.wix-openclaw.config`. The platform skips loading
56
+ the plugin runtime when these are missing — cheap availability
57
+ check at reply startup.
58
+
59
+ ### Changed — compat aligned to 2026.5.0
60
+
61
+ - `package.json#openclaw.compat`:
62
+ `pluginApi: ">=2026.4.0"` → `">=2026.5.0"`,
63
+ `minGatewayVersion: "2026.4.0"` → `"2026.5.0"`.
64
+ - `peerDependencies.openclaw` and `devDependencies.openclaw`:
65
+ `">=2026.4.0"` → `">=2026.5.0"`.
66
+
67
+ ### Migration
68
+
69
+ For instance owners on `@lacneu/wix-openclaw@0.2.1` running
70
+ OpenClaw 2026.5.x:
71
+
72
+ 1. `openclaw plugins install @lacneu/wix-openclaw@0.2.2 --force`
73
+ 2. Restart the gateway container.
74
+ 3. Verify in the boot log:
75
+ `wix-openclaw: ready — 50 tool(s) registered`.
76
+ 4. Verify with `openclaw plugins inspect wix-openclaw --runtime --json`:
77
+ `"toolNames"` should list the 50 `wix_*` tools.
78
+
79
+ ### Note on agent tool inventory bug
80
+
81
+ OpenClaw 2026.5.2 has a separate regression (issue #76598) that
82
+ prevents plugin tools from appearing in the per-agent tool
83
+ inventory even when the plugin is correctly installed and registered.
84
+ Fixed in commit `a3b94f39109d` on 2026-05-03 — pending in 2026.5.3.
85
+ Symptom: `tools.alsoAllow` listing the wix tools logs as
86
+ `unknown entries` despite the plugin being loaded. No client-side
87
+ workaround; await the upstream release.
88
+
89
+ ## [0.2.1] - 2026-04-29
90
+
91
+ ### Added
92
+ - `examples/recommended-skill.md` — companion skill template that
93
+ operators can copy into agent workspaces
94
+ (`~/.openclaw/workspace-<agent>/skills/wix/SKILL.md`) to give the LLM
95
+ business context, recipes and guardrails for the plugin. Skills are
96
+ not part of the OpenClaw plugin SDK by design — they live in the
97
+ workspace — so the template ships as a static file and gets included
98
+ in the npm package via the `files` array.
99
+
100
+ ### Changed
101
+ - Added `examples/` to the `files` array of `package.json` so the
102
+ template is shipped with the npm publish.
103
+ - README now has a "Recommended companion skill" section linking to
104
+ the template.
105
+
10
106
  ## [0.2.0] - 2026-04-29
11
107
 
12
108
  ### Added
package/README.md CHANGED
@@ -498,6 +498,31 @@ use an empty array to disable gating entirely (not recommended in production).
498
498
 
499
499
  ---
500
500
 
501
+ ## Recommended companion skill
502
+
503
+ OpenClaw plugins ship code (tools, hooks); they do **not** ship skills.
504
+ Skills live in agent workspaces and carry the business context that makes
505
+ the LLM use the tools correctly (audience, tone, recipes, guardrails).
506
+
507
+ To get an agent up and running with this plugin, copy
508
+ [`examples/recommended-skill.md`](examples/recommended-skill.md) into the
509
+ target workspace at `~/.openclaw/workspace-<agent>/skills/wix/SKILL.md`,
510
+ then replace the `<PLACEHOLDER>` values with your own (organisation name,
511
+ domain, contributors, tone). Duplicate the file for each agent that
512
+ should benefit from the skill.
513
+
514
+ The template covers:
515
+
516
+ - Conversational triggers (encoded in the `description` frontmatter as
517
+ per OpenClaw skill convention)
518
+ - 5 usage recipes (publish article, list real drafts, read leads,
519
+ manage bookings, design request)
520
+ - Behavioural guardrails (approval recap before publish, app-not-installed
521
+ handling, PII rules)
522
+ - Tool mapping (short reference; the README is the source of truth)
523
+
524
+ ---
525
+
501
526
  ## Development
502
527
 
503
528
  ### Project layout
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: wix
3
+ description: Site officiel <YOUR_SITE_NAME> (<your-site.com>) sur Wix — articles de blog, brouillons, médias, formulaires/leads, RDV, services, FAQ, avis. Utilise ce skill quand l'utilisateur dit "publier un article", "brouillon de blog", "ajouter une image au site", "voir les leads", "soumissions de formulaire", "modifier les services", "répondre à un avis", "FAQ", "<your-site.com>", "site officiel".
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Wix — Recommended skill template
8
+
9
+ > **This is a template** — copy it to your workspace
10
+ > (`~/.openclaw/workspace-<agent>/skills/wix/SKILL.md`), then replace every
11
+ > `<PLACEHOLDER>` with values specific to your site and organisation.
12
+ > Skills are loaded per workspace, so duplicate the file for each agent
13
+ > that should benefit from it.
14
+
15
+ This skill gives an OpenClaw agent the business context, recipes and
16
+ behavioural guardrails it needs to operate the
17
+ [`@lacneu/wix-openclaw`](https://www.npmjs.com/package/@lacneu/wix-openclaw)
18
+ plugin correctly. The plugin itself ships generic tools; this skill wraps
19
+ them into your specific site, voice and audience.
20
+
21
+ ## Business context (replace with yours)
22
+
23
+ `<ORGANIZATION>` is `<short pitch — what you do, who you serve>`. The
24
+ public site `<your-site.com>` runs on **Wix Editor classic** (the plugin
25
+ also targets Wix Studio sites — adjust if relevant). It is locked at the
26
+ plugin level to a single `siteId` (set in `allowedSiteIds`).
27
+
28
+ **Tone for site content** — `<sober / playful / formal / informal>`,
29
+ `<language>`, `<audience>`. Preserve the voice of the human contributors
30
+ when they dictate or proofread; do not normalize their phrasing.
31
+
32
+ **Site language** — `<fr / en / ...>`.
33
+
34
+ **Human contributors / collaborators** — list them with their role:
35
+
36
+ - `<Name 1>` — `<role>`
37
+ - `<Name 2>` — `<role>`
38
+ - `<...>`
39
+
40
+ ## Conversational triggers (when this skill is relevant)
41
+
42
+ - "Publish an article about X" / "Publier un article sur X"
43
+ - "Prepare a draft about Y" / "Prépare un brouillon sur Y"
44
+ - "Add this image to the site" / "Ajoute cette image au site"
45
+ - "How many leads this week?" / "Combien de leads cette semaine ?"
46
+ - "Update this service" / "Mets à jour ce service"
47
+ - "What appointments today?" / "Quels RDV aujourd'hui ?"
48
+ - "Reply to this review" / "Réponds à cet avis"
49
+ - "Add this FAQ entry" / "Ajoute cette question à la FAQ"
50
+ - Any mention of `<your-site.com>`, "Wix", "official site", "site officiel"
51
+
52
+ ## When this skill does NOT apply
53
+
54
+ The plugin **cannot** modify the site's design (Wix Editor classic does
55
+ not expose this through any public API):
56
+
57
+ - Colours, typography, page layout
58
+ - Individual graphic components (buttons, sections, backgrounds)
59
+ - Page structure (navigation, header, footer)
60
+
61
+ Pure-design requests should be redirected to the **(e) Design request**
62
+ recipe below.
63
+
64
+ ## Usage patterns
65
+
66
+ ### (a) Draft and publish a blog article
67
+
68
+ 1. **Cover image** — if the user provides a URL (or asks for an
69
+ AI-generated image): use `wix_media_upload` to push it into Wix Media
70
+ Manager. Capture the returned `id` for step 2.
71
+ 2. **Create draft** — `wix_blog_create_draft` with:
72
+ - `title`
73
+ - `richContent` (Wix Ricos format — Wix Blog's native rich-text)
74
+ - `coverMedia.imageId` from step 1
75
+ - `tagIds`, `categoryIds` if appropriate (look them up first via
76
+ `wix_blog_list_tags` / `wix_blog_list_categories`)
77
+ 3. **User-facing recap** — show this in plain business language, NEVER
78
+ mention tool names or HTTP details:
79
+
80
+ > Draft ready:
81
+ > **Title**: <title>
82
+ > **Lead paragraph**: <first ~80 words>
83
+ > **Cover image**: <displayName or short description>
84
+ > **Tags**: <readable list>
85
+ >
86
+ > Reply `publish` to go live, or tell me what to adjust.
87
+
88
+ 4. **Publish on explicit confirmation only** — `wix_blog_publish_draft`
89
+ with the draft id. OpenClaw approval-gates this call; the recap above
90
+ helps the human decide knowingly.
91
+
92
+ ### (b) List actual drafts (not the published-post snapshots)
93
+
94
+ Wix Blog v3 quirk: `wix_blog_list_drafts` without filter returns mirror
95
+ drafts for already-published posts (auto-snapshots).
96
+
97
+ To see only **drafts being actively written**: pass `status: "UNPUBLISHED"`.
98
+ Other useful values: `IN_REVIEW`, `SCHEDULED`.
99
+
100
+ If the user asks "how many drafts do I have?" and the unfiltered count
101
+ looks unexpectedly large, explain in plain words ("some are mirror
102
+ copies of published articles") and re-query with `status: "UNPUBLISHED"`.
103
+
104
+ ### (c) Read form submissions / leads
105
+
106
+ - `wix_forms_list_submissions` with:
107
+ - `namespace: "wix.form_app.form"` (default — keep unless using a
108
+ custom forms app)
109
+ - `paging.limit: 20` (or more)
110
+ - `sort` to put recent first when supported
111
+
112
+ Present leads in business language (name, email, message, date). Do not
113
+ expose technical `id`s.
114
+
115
+ ### (d) Manage bookings
116
+
117
+ - `wix_bookings_services_list` — list bookable services
118
+ - `wix_bookings_query_bookings` with a `startDate` filter (e.g.
119
+ `$gt: "2026-01-01T00:00:00Z"`) for upcoming bookings
120
+ - `wix_bookings_cancel` / `wix_bookings_reschedule` — both gated; ask for
121
+ explicit confirmation before invoking.
122
+
123
+ ### (e) Design request (assumed limitation)
124
+
125
+ If the user asks for a visual change (colour, layout, styled button…),
126
+ respond along these lines:
127
+
128
+ > I can't change the site's visual components directly (Wix Editor
129
+ > classic doesn't expose that via API). I can however prepare a design
130
+ > brief (palette, typography, suggested copy) and generate a mockup
131
+ > image — you'll then apply it manually in the Wix editor. Want to go
132
+ > that route?
133
+
134
+ If yes: use `wix_design_brief` to structure the brief, then
135
+ `image_generate` (or your preferred image-gen tool) for the mockup.
136
+
137
+ ## Behavioural guardrails
138
+
139
+ 1. **Before any publication** (`wix_blog_publish_draft`, modifying
140
+ `wix_bookings_*`, public review replies) — always show a business
141
+ recap and wait for explicit confirmation. OpenClaw gates the HTTP
142
+ call already; the recap helps the human decide.
143
+ 2. **"App not installed" / `428` / `404` / "Wix Code not enabled"** — do
144
+ not insist or retry. Explain in plain terms that the relevant Wix app
145
+ must be activated in the
146
+ [Wix App Market](https://www.wix.com/app-market). Apps concerned: Wix
147
+ Events, Wix Reviews, Wix FAQ, Wix Multilingual, Velo (for
148
+ `wix_data_*`).
149
+ 3. **Site whitelist** — the plugin is locked to `<your_site_id>`. Any
150
+ other `siteId` is rejected before reaching Wix. Do not try to bypass.
151
+ 4. **PII / sensitive data** — form submissions and contacts contain
152
+ names, emails, phone numbers, sometimes confidential messages. **Do
153
+ not log, do not embed in long-term knowledge stores** (vector DB,
154
+ shared memory) without explicit user consent. Surface only what is
155
+ asked.
156
+
157
+ ## Available tools (short mapping)
158
+
159
+ - **Blog** — drafts (create, list, update, publish), posts, categories,
160
+ tags
161
+ - **Media** — upload, list
162
+ - **Site** — `sites_list`, `url_get`, `business_info`
163
+ - **CMS / Wix Data** — collections, items CRUD (requires Velo enabled)
164
+ - **Forms** — `submissions` (list, get)
165
+ - **Contacts** — CRUD + labels + search
166
+ - **Bookings** — services, bookings (CRUD, cancel, reschedule)
167
+ - **Events** (requires Wix Events app)
168
+ - **Reviews** (requires Wix Reviews app) — moderation, replies
169
+ - **FAQ** (requires Wix FAQ app)
170
+ - **Multilingual** (requires Wix Multilingual app)
171
+ - **Design** — `wix_design_brief`
172
+
173
+ Full reference and live signatures:
174
+ <https://github.com/OlivierNeu/wix-openclaw-plugin#tools>
175
+
176
+ ## Operating rules
177
+
178
+ 1. **Voice of `<ORGANIZATION>` first** — preserve phrasings dictated by
179
+ `<contributors>`, do not normalize them.
180
+ 2. **No technical jargon to end-users** — never expose tool names
181
+ (`wix_*`), Wix object ids, or HTTP error codes. Rephrase in business
182
+ terms.
183
+ 3. **Explicit confirmation** before any public-facing publication or
184
+ modification.
185
+ 4. **Single source of truth** — the official site at `<your-site.com>`.
186
+ Do not attempt other `siteId`s.
187
+ 5. **Unexpected behaviour** — escalate to the operator (admin agent /
188
+ maintainer) in a separate session, not in the user-facing channel.
@@ -2,7 +2,74 @@
2
2
  "id": "wix-openclaw",
3
3
  "name": "Wix",
4
4
  "description": "Wix REST API plugin for OpenClaw — manage blog, CMS data, forms, bookings, contacts, events, FAQ on a single Wix site with site_id whitelist and approval gating on destructive ops",
5
- "version": "0.2.0",
5
+ "version": "0.2.2",
6
+ "activation": {
7
+ "onStartup": true
8
+ },
9
+ "contracts": {
10
+ "tools": [
11
+ "wix_blog_create_draft",
12
+ "wix_blog_delete_draft",
13
+ "wix_blog_get_draft",
14
+ "wix_blog_get_post",
15
+ "wix_blog_list_categories",
16
+ "wix_blog_list_drafts",
17
+ "wix_blog_list_published",
18
+ "wix_blog_list_tags",
19
+ "wix_blog_publish_draft",
20
+ "wix_blog_unpublish",
21
+ "wix_blog_update_draft",
22
+ "wix_bookings_cancel",
23
+ "wix_bookings_create",
24
+ "wix_bookings_get_booking",
25
+ "wix_bookings_query_bookings",
26
+ "wix_bookings_reschedule",
27
+ "wix_bookings_services_list",
28
+ "wix_business_info_get",
29
+ "wix_contacts_create",
30
+ "wix_contacts_delete",
31
+ "wix_contacts_get",
32
+ "wix_contacts_label_add",
33
+ "wix_contacts_query",
34
+ "wix_contacts_update",
35
+ "wix_data_get_item",
36
+ "wix_data_insert_item",
37
+ "wix_data_list_collections",
38
+ "wix_data_query_items",
39
+ "wix_data_remove_item",
40
+ "wix_data_update_item",
41
+ "wix_design_brief",
42
+ "wix_events_get",
43
+ "wix_events_list",
44
+ "wix_events_list_guests",
45
+ "wix_faq_create_question",
46
+ "wix_faq_delete_question",
47
+ "wix_faq_list_categories",
48
+ "wix_faq_list_questions",
49
+ "wix_faq_update_question",
50
+ "wix_forms_get_submission",
51
+ "wix_forms_list_submissions",
52
+ "wix_media_list",
53
+ "wix_media_upload",
54
+ "wix_multilingual_list_languages",
55
+ "wix_multilingual_list_schemas",
56
+ "wix_reviews_get",
57
+ "wix_reviews_list",
58
+ "wix_reviews_moderate",
59
+ "wix_site_url_get",
60
+ "wix_sites_list"
61
+ ]
62
+ },
63
+ "toolMetadata": {
64
+ "_default": {
65
+ "configSignals": [
66
+ {
67
+ "rootPath": "plugins.entries.wix-openclaw.config",
68
+ "required": ["apiKey", "accountId"]
69
+ }
70
+ ]
71
+ }
72
+ },
6
73
  "configSchema": {
7
74
  "type": "object",
8
75
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lacneu/wix-openclaw",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "description": "Wix REST API plugin for OpenClaw — manage blog, CMS data, forms, bookings, contacts, events, FAQ on a single Wix site with site_id whitelist and approval gating on destructive ops",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@
29
29
  "types": "./dist/index.d.ts",
30
30
  "files": [
31
31
  "dist",
32
+ "examples",
32
33
  "openclaw.plugin.json",
33
34
  "README.md",
34
35
  "CHANGELOG.md",
@@ -51,8 +52,8 @@
51
52
  "./dist/index.js"
52
53
  ],
53
54
  "compat": {
54
- "pluginApi": ">=2026.4.0",
55
- "minGatewayVersion": "2026.4.0"
55
+ "pluginApi": ">=2026.5.0",
56
+ "minGatewayVersion": "2026.5.0"
56
57
  }
57
58
  },
58
59
  "dependencies": {
@@ -60,11 +61,11 @@
60
61
  },
61
62
  "devDependencies": {
62
63
  "@types/node": "^22.0.0",
63
- "openclaw": ">=2026.4.0",
64
+ "openclaw": ">=2026.5.0",
64
65
  "typescript": "^5.6.0"
65
66
  },
66
67
  "peerDependencies": {
67
- "openclaw": ">=2026.4.0"
68
+ "openclaw": ">=2026.5.0"
68
69
  },
69
70
  "peerDependenciesMeta": {
70
71
  "openclaw": {