@wix/agent-skills 1.32.0 → 1.33.1
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/README.md +21 -0
- package/package.json +2 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +40 -41
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +11 -6
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +2 -3
- package/skills/wix-app/references/editor-react-component/DISABLED-INVALID.md +31 -0
- package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +14 -1
- package/skills/wix-app/references/editor-react-component/PARTS.md +32 -3
- package/skills/wix-app/references/editor-react-component/SSR.md +6 -3
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-manage/SKILL.md +25 -7
- package/skills/wix-manage/references/automations/actions.md +11 -11
- package/skills/wix-manage/references/automations/activation-status.md +6 -9
- package/skills/wix-manage/references/automations/api-catalog.md +48 -32
- package/skills/wix-manage/references/automations/automation-model.md +97 -22
- package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
- package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
- package/skills/wix-manage/references/automations/conditions.md +187 -0
- package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
- package/skills/wix-manage/references/automations/special-actions.md +210 -0
- package/skills/wix-manage/references/automations/triggers.md +47 -10
- package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
- package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
- package/skills/wix-manage/references/events/create-wix-event.md +136 -73
- package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
- package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
- package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
- package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
package/README.md
CHANGED
|
@@ -39,6 +39,16 @@ Install using [Gemini CLI](https://geminicli.com):
|
|
|
39
39
|
gemini extensions install https://github.com/wix/skills
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
### Antigravity Plugin
|
|
43
|
+
|
|
44
|
+
In [Antigravity](https://antigravity.google), open **Customizations → Plugins**, click **+ Install from URL**, and enter `https://github.com/wix/skills/tree/main/antigravity/wix`. Or, from a terminal:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
agy plugin install https://github.com/wix/skills/tree/main/antigravity/wix
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The Wix MCP server signs you in to your Wix account the first time a Wix tool is used.
|
|
51
|
+
|
|
42
52
|
### Skills CLI
|
|
43
53
|
|
|
44
54
|
Install using [skills CLI](https://github.com/vercel-labs/skills):
|
|
@@ -93,6 +103,17 @@ When a major bump is required (a breaking change in the underlying `wix-cli`), t
|
|
|
93
103
|
|
|
94
104
|
Besides the npm package, skills are served as raw markdown / `.tgz` at `https://www.wix.com/skills/<name>` (also `dev.wix.com/skills`), directly from the `main` branch of `wix/skills` with no build step. Responses are cached, so a change reflects there within a few minutes of reaching that branch.
|
|
95
105
|
|
|
106
|
+
## Privacy and telemetry
|
|
107
|
+
|
|
108
|
+
Only `wix-replatform` collects telemetry. The other skills send nothing of their own; calls they make to Wix APIs and the Wix MCP are covered by the [Wix Privacy Policy](https://www.wix.com/about/privacy).
|
|
109
|
+
|
|
110
|
+
During a migration run, `wix-replatform`:
|
|
111
|
+
|
|
112
|
+
- **Sends run telemetry to Wix** (`https://frog.wix.com/migration-data-validator`): stage timings and outcomes, migrated record counts, errors and gaps by type (never record contents), the source platform and site URL, the destination site ID and the operator's Wix user ID. Turn it off with `RP_TELEMETRY_BI_DISABLED=1`.
|
|
113
|
+
- **Reads the agent's Claude Code session transcripts** (`~/.claude/projects/`) at the end of the run, copies them compressed into the migration project's `telemetry/transcripts/` folder on your machine, and adds a summary (token cost, turn counts, tool failures, retry loops) to the run telemetry. The transcripts themselves stay local. Turn it off with `RP_TELEMETRY_TRANSCRIPT_DISABLED=1`.
|
|
114
|
+
|
|
115
|
+
Set the variables in the environment the agent runs in. See [wix-replatform/README.md](wix-replatform/README.md).
|
|
116
|
+
|
|
96
117
|
## Contributing
|
|
97
118
|
|
|
98
119
|
To report a problem with a skill or suggest a change, [open an issue](https://github.com/wix/skills/issues/new). Pull requests are not merged in this repository; accepted changes are made by the maintainers. See [CONTRIBUTING.md](CONTRIBUTING.md) for what makes a useful report.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/agent-skills",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.33.1",
|
|
4
4
|
"description": "Wix Skills for AI coding agents — versioned npm distribution of the wix/skills content.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"url": "https://github.com/wix/skills/issues"
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
|
-
"version": "node .github/scripts/sync-plugin-versions.mjs && git add .claude-plugin/plugin.json .codex-plugin/plugin.json .cursor-plugin/plugin.json plugin.json gemini-extension.json skills/wix-headless-kit/install/pins.json"
|
|
15
|
+
"version": "node .github/scripts/sync-plugin-versions.mjs && git add .claude-plugin/plugin.json .codex-plugin/plugin.json .cursor-plugin/plugin.json plugin.json gemini-extension.json antigravity/wix/plugin.json skills/wix-headless-kit/install/pins.json"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"skills/**",
|
|
@@ -33,7 +33,7 @@ The CLI generates the folder, the page's component file (`<page>.tsx`, the build
|
|
|
33
33
|
|
|
34
34
|
**After scaffolding, check `routePath`:** use `support-tickets`, not `/support-tickets`; a leading slash fails registration even if the build passes. Internal router paths stay `/`, `/:id`, `/new`, never prefixed with `<route>` — see `<pkgRoot>/dist/docs/Collection to Entity Flow.md`.
|
|
35
35
|
|
|
36
|
-
**Before writing
|
|
36
|
+
**Before writing UI:** copy the [template](dashboard-page/DRAFT_TEMPLATE.md). Make sure `WixPatternsProvider` remains at the extension root, inside `BusinessManagerTheme` and above all components calling Patterns hooks.
|
|
37
37
|
|
|
38
38
|
**Then, for whatever the template doesn't cover:** list every patterns name you'll add, and resolve them all in one `node <pkgRoot>/bin/patterns-lookup.cjs <name…>` call ([WIX_PATTERNS_DOCS.md § 1](WIX_PATTERNS_DOCS.md#1--the-index)). Its import, examples and props file decide whether you open anything else. Each Bash call is a fresh shell — re-set the path variable every time.
|
|
39
39
|
|
|
@@ -19,6 +19,24 @@ Keep the Wix CLI scaffold and file roles:
|
|
|
19
19
|
|
|
20
20
|
Supplementary files are allowed; keep scaffold roles intact.
|
|
21
21
|
|
|
22
|
+
## Required Reading (blocking)
|
|
23
|
+
|
|
24
|
+
Before writing code, open and read in full every reference in the matching
|
|
25
|
+
row. An unopened one is a failed run. Open paths directly; never skim or
|
|
26
|
+
grep instead.
|
|
27
|
+
|
|
28
|
+
| Scope | Required references |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| Creating a component | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md), [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md), [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md), [`OVERFLOW.md`](editor-react-component/OVERFLOW.md) |
|
|
31
|
+
| Editing React or JSX | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md) |
|
|
32
|
+
| Changing public contract, semantic root, or named parts | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) |
|
|
33
|
+
| Changing public data props or elected root global class | [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) |
|
|
34
|
+
| Item array where only one body is visible | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) |
|
|
35
|
+
| Creating or changing CSS | [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md) |
|
|
36
|
+
| Creating or changing layout/content | [`OVERFLOW.md`](editor-react-component/OVERFLOW.md) |
|
|
37
|
+
| Root direction contract, direction-sensitive behavior, or `ReactNode` slot | [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) |
|
|
38
|
+
| Sizing, installation, or manifest overrides | [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md) |
|
|
39
|
+
|
|
22
40
|
## Workflow
|
|
23
41
|
|
|
24
42
|
1. **Scaffold only when creating.** Run in the Wix app (`wix.config.json`).
|
|
@@ -31,9 +49,9 @@ Supplementary files are allowed; keep scaffold roles intact.
|
|
|
31
49
|
Never rerun the scaffold for an existing component.
|
|
32
50
|
Write a meaningful `description` in 1-2 plain sentences (max 300 chars): what
|
|
33
51
|
the user sees, when to use it, and capabilities that affect that choice.
|
|
34
|
-
Don't repeat the
|
|
52
|
+
Don't repeat the name or add implementation details.
|
|
35
53
|
|
|
36
|
-
2. **Run the dependency preflight.**
|
|
54
|
+
2. **Run the dependency preflight.**
|
|
37
55
|
|
|
38
56
|
```bash
|
|
39
57
|
deps=(@wix/react-component-schema @wix/react-component-utils @wix/editor-react-types)
|
|
@@ -56,16 +74,15 @@ Supplementary files are allowed; keep scaffold roles intact.
|
|
|
56
74
|
}
|
|
57
75
|
```
|
|
58
76
|
|
|
59
|
-
3. **Plan.** Identify props, root, parts, and states;
|
|
60
|
-
Use the scaffold
|
|
61
|
-
|
|
62
|
-
|
|
77
|
+
3. **Plan.** Identify props, root, parts, and states; open all required references first.
|
|
78
|
+
Use them and the scaffold before inspecting package declarations; inspect
|
|
79
|
+
only for undocumented APIs or fields, or typecheck failures. Declarations
|
|
80
|
+
govern API shapes; retain editor rules.
|
|
63
81
|
|
|
64
82
|
4. **Implement.** Keep props, logic, and styles in their scaffolded editable
|
|
65
|
-
files. Format edited source files with the app's
|
|
66
|
-
checking formatting. Never edit or format `*.generated.ts`.
|
|
83
|
+
files. Format edited source files with the app's formatter. Never edit or format `*.generated.ts`.
|
|
67
84
|
|
|
68
|
-
5. **Run the accessibility review.** Once the JSX is complete, run from the
|
|
85
|
+
5. **Run the accessibility review (mandatory).** Once the JSX is complete, run from the
|
|
69
86
|
same folder (`<SKILL_ROOT>` is the directory containing the active `SKILL.md`):
|
|
70
87
|
|
|
71
88
|
```bash
|
|
@@ -89,43 +106,30 @@ Supplementary files are allowed; keep scaffold roles intact.
|
|
|
89
106
|
```
|
|
90
107
|
|
|
91
108
|
Run `npx tsc --noEmit`, relevant tests/lint, and the accessibility review.
|
|
92
|
-
If later edits affect a check, rerun that
|
|
93
|
-
|
|
94
|
-
failures with
|
|
109
|
+
If later edits affect a check, rerun that check. Inspect the manifest when generated; never hand-repair it.
|
|
110
|
+
Diagnose failures with
|
|
95
111
|
[`editor-react-component/MANIFEST-ERRORS.md`](editor-react-component/MANIFEST-ERRORS.md).
|
|
96
112
|
|
|
97
113
|
For creation/layout changes, complete the routed overflow resize review.
|
|
98
114
|
|
|
99
|
-
8. **Report.** Summarize files, checks, blockers,
|
|
115
|
+
8. **Report.** Summarize files, checks, blockers, unrun checks.
|
|
116
|
+
List required references as read/unread; read any unread one and fix first.
|
|
100
117
|
|
|
101
118
|
## Reference Policy
|
|
102
119
|
|
|
103
|
-
Read
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
### Required References
|
|
107
|
-
|
|
108
|
-
| Scope | Required references |
|
|
109
|
-
| --- | --- |
|
|
110
|
-
| Creating a component | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md), [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md), [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md) |
|
|
111
|
-
| Editing React or JSX | [`REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md) |
|
|
112
|
-
| Changing public contract, semantic root, or named parts | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PARTS.md`](editor-react-component/PARTS.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) |
|
|
113
|
-
| Changing public data props or elected root global class | [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) |
|
|
114
|
-
| Item array where only one body is visible | [`COMPONENT-CONTRACT.md`](editor-react-component/COMPONENT-CONTRACT.md), [`PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md), [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md), [`DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) |
|
|
115
|
-
| Creating or changing CSS | [`CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md) |
|
|
116
|
-
| Creating or changing layout/content | [`OVERFLOW.md`](editor-react-component/OVERFLOW.md) |
|
|
117
|
-
| Root direction contract, direction-sensitive behavior, or `ReactNode` slot | [`DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) |
|
|
118
|
-
| Sizing, installation, or manifest overrides | [`EDITOR-EXTENSION-CONFIGURATION.md`](editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md) |
|
|
120
|
+
Read every required reference for the matched scope, optional ones only on
|
|
121
|
+
trigger. Preserve unrelated behavior. References are leaves.
|
|
119
122
|
|
|
120
123
|
### Optional References
|
|
121
124
|
|
|
122
125
|
| Trigger | Read |
|
|
123
126
|
| --- | --- |
|
|
124
127
|
| Interactive/selectable part, custom state, or open/reveal toggle | [`DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) |
|
|
128
|
+
| Disabled or invalid state | [`DISABLED-INVALID.md`](editor-react-component/DISABLED-INVALID.md) |
|
|
125
129
|
| Creating interactive components or changing interactions/callbacks | [`FUNCTION-HANDLERS.md`](editor-react-component/FUNCTION-HANDLERS.md) |
|
|
126
130
|
| Browser APIs, effects, or time-dependent output | [`SSR.md`](editor-react-component/SSR.md) |
|
|
127
131
|
| Non-established CSS feature or DOM API, or user asks for one by name | [`BROWSER-SUPPORT.md`](editor-react-component/BROWSER-SUPPORT.md) |
|
|
128
|
-
| `npx wix build` or manifest generation
|
|
132
|
+
| `npx wix build` or manifest generation errors or warns | [`MANIFEST-ERRORS.md`](editor-react-component/MANIFEST-ERRORS.md) |
|
|
129
133
|
| Animation, video, carousel, or other playable/looped/autoplaying content | [`ANIMATED-COMPONENTS.md`](editor-react-component/ANIMATED-COMPONENTS.md), [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) |
|
|
130
134
|
| Site/runtime/editor context hooks needed | [`SITE-CONTEXT-HOOKS.md`](editor-react-component/SITE-CONTEXT-HOOKS.md) (+ [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) when design-mode behavior differs) |
|
|
131
135
|
| Branded, themed, or brand-aware component requested | [`BRANDED-COMPONENTS.md`](editor-react-component/BRANDED-COMPONENTS.md) |
|
|
@@ -137,9 +141,7 @@ references are leaves.
|
|
|
137
141
|
- Elected root: `dir={direction}`, fallback-direction class, logical CSS for
|
|
138
142
|
direction-sensitive layout.
|
|
139
143
|
- Deterministic render; no browser globals during render.
|
|
140
|
-
-
|
|
141
|
-
roots inherit from the host.
|
|
142
|
-
- Baseline Widely Available CSS/DOM only, or supported fallbacks.
|
|
144
|
+
- Baseline Widely Available CSS/DOM only, or fallbacks.
|
|
143
145
|
- Accessibility per part, per [`ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md):
|
|
144
146
|
read only `a11y.ariaLabel`, and only for a control without a visible name;
|
|
145
147
|
never spread the `a11y` object or add one-off ARIA props.
|
|
@@ -149,17 +151,14 @@ references are leaves.
|
|
|
149
151
|
- Native design states: interactive elements only, never a non-interactive root
|
|
150
152
|
or part; pair selectors with injected modifiers; toggle custom state classes
|
|
151
153
|
from data, each with a matching `:global()` rule.
|
|
152
|
-
- Open/close/reveal
|
|
154
|
+
- Open/close/reveal: props-only root
|
|
153
155
|
`isOpen: ElementState<boolean>` synced to state; module classes, no `--open` class.
|
|
154
156
|
- Single-visible-body arrays: `name` per item, `ActiveItemIndex<'prop'>`, render
|
|
155
157
|
all bodies, hide inactive accessibly.
|
|
156
158
|
- No arrays inside array items; keep group fields flat (no object props).
|
|
157
159
|
- Autoplay/loop: play/pause control, honor reduced motion, suppress autoplay in
|
|
158
160
|
editor design mode.
|
|
159
|
-
- Resizable layout: keep required content usable at 320px
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
`withDefaults(withFallbackPlaceholder(PreviewOrComponent, options), defaultProps)`.
|
|
164
|
-
Keep `withDefaults` outermost; use one crucial data field and match the root
|
|
165
|
-
class.
|
|
161
|
+
- Resizable layout: keep required content usable at 320px, per
|
|
162
|
+
[`OVERFLOW.md`](editor-react-component/OVERFLOW.md).
|
|
163
|
+
- Preview: `withDefaults` outermost, one crucial data field, matching root
|
|
164
|
+
class, per [`COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md).
|
|
@@ -64,19 +64,24 @@ export interface MyAnimationProps {
|
|
|
64
64
|
direction?: Direction;
|
|
65
65
|
a11y?: A11y;
|
|
66
66
|
|
|
67
|
-
/** Start playing on load.
|
|
67
|
+
/** Start playing on load. */
|
|
68
68
|
autoPlay?: boolean;
|
|
69
69
|
|
|
70
|
-
/** Repeat when finished.
|
|
70
|
+
/** Repeat when finished. */
|
|
71
71
|
loop?: boolean;
|
|
72
72
|
|
|
73
|
-
/** Show play/pause button. Default `'showOnHover'`. */
|
|
74
73
|
pauseButtonVisibility?: 'showAlways' | 'showOnHover';
|
|
75
74
|
|
|
76
75
|
elementProps?: {
|
|
77
76
|
myAnimationPlayButton?: { className?: string };
|
|
78
77
|
};
|
|
79
78
|
}
|
|
79
|
+
|
|
80
|
+
export const defaultProps = {
|
|
81
|
+
autoPlay: true,
|
|
82
|
+
loop: true,
|
|
83
|
+
pauseButtonVisibility: 'showAlways',
|
|
84
|
+
} as const;
|
|
80
85
|
```
|
|
81
86
|
|
|
82
87
|
Omit `loop` when repeat is unsupported.
|
|
@@ -183,7 +188,7 @@ Set the visibility data attribute on the existing elected root, preserving its
|
|
|
183
188
|
full root contract:
|
|
184
189
|
|
|
185
190
|
```tsx
|
|
186
|
-
data-pause-button-visibility={pauseButtonVisibility
|
|
191
|
+
data-pause-button-visibility={pauseButtonVisibility}
|
|
187
192
|
```
|
|
188
193
|
|
|
189
194
|
Wire the named part completely:
|
|
@@ -210,7 +215,7 @@ Wire the named part completely:
|
|
|
210
215
|
/* Narrow behavior-only exception documented in CSS-GUIDELINES.md. Keep editable
|
|
211
216
|
appearance on .playButton and use this relationship only for visibility. */
|
|
212
217
|
|
|
213
|
-
/* showOnHover
|
|
218
|
+
/* showOnHover */
|
|
214
219
|
.root[data-pause-button-visibility="showOnHover"] .playButton {
|
|
215
220
|
opacity: 0;
|
|
216
221
|
pointer-events: none;
|
|
@@ -222,7 +227,7 @@ Wire the named part completely:
|
|
|
222
227
|
pointer-events: auto;
|
|
223
228
|
}
|
|
224
229
|
|
|
225
|
-
/* showAlways — no extra CSS needed; button is visible by default */
|
|
230
|
+
/* showAlways (default) — no extra CSS needed; button is visible by default */
|
|
226
231
|
```
|
|
227
232
|
|
|
228
233
|
## 4. Suppress Autoplay in `component.preview.tsx`
|
|
@@ -23,7 +23,8 @@ in the component's `.tsx` and `.module.css`.
|
|
|
23
23
|
| Interactive — `button`/`a`/`input`/`select`/`textarea`/`summary`, an interactive `role`, or an interactive handler (`onClick`/`onMouseEnter`/`onFocus`/…) | `hover` |
|
|
24
24
|
| Input field — `select`/`textarea`; `input` except `hidden`/`button`/`submit`/`reset`/`image`; or an input-widget `role` (`checkbox`/`radio`/`switch`/`slider`/`spinbutton`/`textbox`/`searchbox`/`combobox`/`listbox`) | `focus` |
|
|
25
25
|
| Other interactive element whose editable focus appearance the user explicitly requests | `focus` |
|
|
26
|
-
|
|
|
26
|
+
| `button`/`input`/`select`/`textarea`/`fieldset` when asked or its action can be unavailable | `disabled` |
|
|
27
|
+
| `input`/`select`/`textarea` with a constraint or `setCustomValidity`; a `form`/`fieldset` with one | `invalid` |
|
|
27
28
|
| Has a selectable/variant value in its data — `selected`/`active`/`current`/`checked`/`featured` | that custom state |
|
|
28
29
|
| Whole component opens/collapses or reveals content (expandable panel, disclosure, dropdown, drawer, popup, tooltip) on click, hover or focus | root `isOpen` state, no part `open` state (§6) |
|
|
29
30
|
| None of the above, incl. a non-interactive root or part | no states, and no `:hover`/`:active`/`:focus` rules, even decorative; resting style only |
|
|
@@ -110,8 +111,6 @@ The local static accessibility scan cannot measure rendered color contrast.
|
|
|
110
111
|
spread alone suffices (it merges `className` itself). The key is the global
|
|
111
112
|
class in camelCase (`COMPONENT-CONTRACT.md`).
|
|
112
113
|
|
|
113
|
-
Wire native and custom states as follows:
|
|
114
|
-
|
|
115
114
|
```tsx
|
|
116
115
|
<button
|
|
117
116
|
type="button"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Disabled and Invalid Wiring
|
|
2
|
+
|
|
3
|
+
Use after DESIGN-STATES.md §1 decides a part exposes `disabled` or `invalid`. A
|
|
4
|
+
native element's `:disabled` or `:invalid`, paired with the `:global` modifier in
|
|
5
|
+
the §3 rule, is what generates the state.
|
|
6
|
+
|
|
7
|
+
## Disabled
|
|
8
|
+
|
|
9
|
+
Author it when asked, or when the control stays visible but its action can be
|
|
10
|
+
unavailable (unmet precondition, request in progress, sold out). Otherwise author
|
|
11
|
+
no `disabled` binding and no `--disabled` rule.
|
|
12
|
+
|
|
13
|
+
## Invalid
|
|
14
|
+
|
|
15
|
+
Author it only for a native field with a constraint (`required`, `pattern`,
|
|
16
|
+
`type="email"`, …) or a `setCustomValidity` message. An unconstrained field is
|
|
17
|
+
never invalid.
|
|
18
|
+
|
|
19
|
+
For validity from outside the field (a server check, a password confirmation),
|
|
20
|
+
call `setCustomValidity` in the component file, on the field itself: through a
|
|
21
|
+
ref bound with `ref={confirmRef}`, a callback ref, or `event.currentTarget` in an
|
|
22
|
+
`on*` handler (inline, or a function of the component passed by name). The field may be in a component of the same file
|
|
23
|
+
that renders it. Not from a custom hook, a function outside the component, or
|
|
24
|
+
another file, and not through a ref given to a custom component. A field in a loop
|
|
25
|
+
or rendered conditionally is detected when every field with that `ref` or handler
|
|
26
|
+
prop calls it. If only some do, the ones that do may not be detected: give them a
|
|
27
|
+
constraint prop instead, otherwise leave `invalid` off them.
|
|
28
|
+
|
|
29
|
+
A `form` or `fieldset` is invalid when a field inside it is
|
|
30
|
+
(`.form:global(.signup-form--invalid), .form:invalid`), with no constraint of its
|
|
31
|
+
own; with no constrained field it is never invalid.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Manifest Build Errors
|
|
2
2
|
|
|
3
3
|
Use this reference only when `npx wix build` or `npx wix generate manifest`
|
|
4
|
-
exits with an error.
|
|
4
|
+
exits with an error or prints a warning. For an error, read the error name from the first token before the colon
|
|
5
5
|
(`IoError:`, `ParseError:`, or `NotFoundError:`), then apply the matching fix.
|
|
6
6
|
|
|
7
7
|
| Error | Fix |
|
|
@@ -20,6 +20,19 @@ exits with an error. Read the error name from the first token before the colon
|
|
|
20
20
|
|
|
21
21
|
After each fix, re-run `npx wix build && npx wix generate manifest` to confirm.
|
|
22
22
|
|
|
23
|
+
## Warnings
|
|
24
|
+
|
|
25
|
+
The build can also print non-fatal warnings such as
|
|
26
|
+
`[css] … styles selectors that matched no element in the extraction render`.
|
|
27
|
+
Read every warning and fix it; this is mandatory, with one exception below.
|
|
28
|
+
|
|
29
|
+
- **A part's own class** (`.errorMessage`, `.item`) means the part is not
|
|
30
|
+
mounted in the extraction render. Keep it mounted per `PARTS.md`, then
|
|
31
|
+
re-run build and manifest generation.
|
|
32
|
+
- **A class applied only by state** (`.contentOpen` from `open && styles.contentOpen`)
|
|
33
|
+
is expected: the part is mounted and only the state look is absent. Leave the
|
|
34
|
+
markup and CSS unchanged; do not force the state on or remove the styling.
|
|
35
|
+
|
|
23
36
|
## Checklist
|
|
24
37
|
|
|
25
38
|
- [ ] The fix matches the reported error name and message.
|
|
@@ -46,9 +46,38 @@ Apply this filter to every candidate:
|
|
|
46
46
|
share the same semantic editor surface. Distinguish position with data or a
|
|
47
47
|
module-only helper class, not separate part names.
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
## Keep Every Part Mounted
|
|
50
|
+
|
|
51
|
+
The manifest is generated from a single server-side render of the component
|
|
52
|
+
with mock props. Effects do not run and `useState` keeps its initial value, so
|
|
53
|
+
markup that is not mounted in that render, and the CSS that styles it, never
|
|
54
|
+
reaches the manifest. The source is not changed afterwards: write it so every
|
|
55
|
+
part is mounted regardless of state.
|
|
56
|
+
|
|
57
|
+
- Mount every phase (loading, error, empty, question, result) and hide the
|
|
58
|
+
inactive ones with the `hidden` attribute. Never write
|
|
59
|
+
`phase === 'x' && <Part />`. Give a `hidden` element no author `display`
|
|
60
|
+
rule: it would override `hidden`.
|
|
61
|
+
- While data is missing, render one static placeholder item inside a hidden
|
|
62
|
+
wrapper so the item parts exist. It is never visible.
|
|
63
|
+
- Mutually exclusive messages (loading, error, empty) are one part whose text
|
|
64
|
+
switches by phase, not several parts with the same name.
|
|
65
|
+
- A modifier toggled by state (`correct`, `incorrect`) is a design state; see
|
|
66
|
+
`DESIGN-STATES.md`.
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
const item = current ?? placeholderItem; // placeholder shows only while hidden
|
|
70
|
+
|
|
71
|
+
<div hidden={phase !== 'question'}>
|
|
72
|
+
<h3
|
|
73
|
+
{...elementProps?.quizQuestion}
|
|
74
|
+
className={classNames('quiz-question', styles.question, elementProps?.quizQuestion?.className)}
|
|
75
|
+
>
|
|
76
|
+
{item.question}
|
|
77
|
+
</h3>
|
|
78
|
+
</div>
|
|
79
|
+
```
|
|
80
|
+
|
|
52
81
|
After generating the manifest, confirm that its `elements` include every
|
|
53
82
|
intended named part and that each `elementProps.<key>` read in code equals the
|
|
54
83
|
camelCase of that part's global class.
|
|
@@ -29,9 +29,11 @@ const items = buildItems(props.items);
|
|
|
29
29
|
return <ul>{items.map(renderItem)}</ul>;
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
This does not require every data branch to render simultaneously
|
|
33
|
-
|
|
34
|
-
and the same on server and client.
|
|
32
|
+
This does not require every data branch to render simultaneously: loading,
|
|
33
|
+
empty, and error states may be conditional when their initial value is stable
|
|
34
|
+
and the same on server and client. A branch that contains a named part must
|
|
35
|
+
still be mounted in the first render, or the manifest omits that part (see
|
|
36
|
+
`PARTS.md`).
|
|
35
37
|
|
|
36
38
|
## Deterministic Output
|
|
37
39
|
|
|
@@ -47,4 +49,5 @@ format, or a client-only enhancement that does not replace the initial markup.
|
|
|
47
49
|
|
|
48
50
|
- [ ] No browser globals are accessed at module scope or during render.
|
|
49
51
|
- [ ] Initial server/client markup is complete and identical.
|
|
52
|
+
- [ ] Every named part is mounted in the first render.
|
|
50
53
|
- [ ] Render output does not depend on random, clock, locale, or timezone state.
|
|
@@ -36,8 +36,8 @@ Lists all apps installed on a site using Apps Installer API. Useful for verifyin
|
|
|
36
36
|
|
|
37
37
|
## Custom Apps
|
|
38
38
|
|
|
39
|
-
### [Use App
|
|
40
|
-
"Discovers and runs
|
|
39
|
+
### [Use App Tools](references/custom-apps/use-app-tools.md)
|
|
40
|
+
"Discovers and runs app tools, the actions and lookups that apps installed on a Wix site expose to AI agents, for example converting a price with a pricing app or tracking a package with a shipping app. Covers listing the site's app tools, choosing one by its description, and running it with a payload built from its input schema. Use when the user asks for something an installed app provides rather than a built-in Wix feature, asks what their apps can do, or names an app or app tool."
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
@@ -237,10 +237,16 @@ Routes discounts, coupons, sales and bundles to promotion recipes, and visual pr
|
|
|
237
237
|
## Events
|
|
238
238
|
|
|
239
239
|
### [Create an Event with the Wix Events API](references/events/create-wix-event.md)
|
|
240
|
-
"Creates an event with the Wix Events V3 API —
|
|
240
|
+
"Creates an event with the Wix Events V3 API — one-off or recurring, RSVP, ticketed, registration-free or with external registration — including date and time, venue or online location, guest limit, description and ticket tiers. Covers the exact field shapes and the API's misleading validation messages. Use when the user wants to create or set up an event, an information-only event, or a repeating event — including a weekly workshop, class or meetup series held on set dates at a venue or online; a Bookings class or course is booked per session instead."
|
|
241
241
|
|
|
242
242
|
### [Manage Wix Events — Publishing, Cancelling, Cloning and Counting](references/events/manage-wix-events.md)
|
|
243
|
-
"Operates on events that already exist with the Wix Events V3 API — finding
|
|
243
|
+
"Operates on Wix events that already exist with the Wix Events V3 API — finding, updating (date, venue, details, page settings), controlling registration (close, reopen, registration-free, external, members-only, limits), switching between RSVP and ticketed (a new event — ask before creating it), publishing, cancelling, deleting, cloning and counting, including single occurrences of a recurring event. Use to close registration, move or cancel an event, or change how guests register."
|
|
244
|
+
|
|
245
|
+
### [Manage Event Tickets](references/events/manage-event-tickets.md)
|
|
246
|
+
"Manages the ticket types of a ticketed Wix event with the Ticket Definitions V3 API — adding, editing, repricing, hiding, reordering and deleting tickets, scheduling or ending ticket sales, and changing the ticket currency. Use when the user wants to add early-bird, VIP, child or donation tickets to an existing event, change a ticket's price or quantity, or set when tickets stop selling."
|
|
247
|
+
|
|
248
|
+
### [Manage Event Guests](references/events/manage-event-guests.md)
|
|
249
|
+
"Manages the people registered for a Wix event — RSVPs on RSVP events, and orders, tickets and ticket holders on ticketed events: listing and counting guests, adding or removing a guest, changing an RSVP, checking guests in, and marking orders paid. Use when the user asks who is coming or how many registered, or wants to add, remove or check in a guest. Notes what the API can't do, such as refunds and resending emails."
|
|
244
250
|
|
|
245
251
|
---
|
|
246
252
|
|
|
@@ -455,7 +461,7 @@ Query and list products from a Wix Store using the Catalog V1 Query Products end
|
|
|
455
461
|
Manages pre-order settings for product variants using V3 Inventory API. Covers enabling/disabling pre-orders, setting messages, configuring limits, and handling trackQuantity requirements.
|
|
456
462
|
|
|
457
463
|
### [Update Product with Options (Catalog V3)](references/stores/update-product-with-options.md)
|
|
458
|
-
Start here for existing Catalog V3 product updates, including digital products that fail at add-to-cart with ITEM_NOT_FOUND_IN_CATALOG. Includes name lookup, Get Product, and PATCH in one flow, plus importing a supplied PDF and attaching it to the existing variant. Covers options, variant prices and SKUs, product visibility (hide/unhide through `visible`, never delete), description edits that preserve Rich Content, and revision-based updates. Read another recipe only for a field or operation this flow does not cover.
|
|
464
|
+
Start here for existing Catalog V3 product updates, including digital products that fail at add-to-cart with ITEM_NOT_FOUND_IN_CATALOG. Includes name lookup, Get Product, and PATCH in one flow, plus importing a supplied PDF and attaching it to the existing variant. Covers options, variant prices and SKUs, variant shipping weight in the site's weight unit, product visibility (hide/unhide through `visible`, never delete), description edits that preserve Rich Content, and revision-based updates. Read another recipe only for a field or operation this flow does not cover.
|
|
459
465
|
|
|
460
466
|
### [Stores Dashboard Navigation](references/stores/stores-dashboard-navigation.md)
|
|
461
467
|
"Builds direct links to Wix Stores and eCommerce dashboard pages on manage.wix.com — products list, edit a specific product, categories, inventory, orders list, a specific order, abandoned checkouts, gift cards, shipping and tax settings. Pairs each main Stores/eCommerce entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."
|
|
@@ -464,7 +470,7 @@ Start here for existing Catalog V3 product updates, including digital products t
|
|
|
464
470
|
## Automations
|
|
465
471
|
|
|
466
472
|
### [Build and Manage Wix Automations](references/automations/build-and-manage-automations.md)
|
|
467
|
-
|
|
473
|
+
Create, update, activate or deactivate Wix Automations with app actions, trigger filters, conditions, delays, variables, branches and schedules, and check their current status, using the public Wix Automations APIs.
|
|
468
474
|
|
|
469
475
|
<details>
|
|
470
476
|
<summary>Internal skills (loaded on demand by Build and Manage Wix Automations — do NOT use directly)</summary>
|
|
@@ -484,8 +490,20 @@ Inspect Wix automations and their on/off status, create linear automations from
|
|
|
484
490
|
- [Automations Mapping Expressions](references/automations/bracket-expressions.md)
|
|
485
491
|
Write builder-compatible automation mapping expressions, literals and data references.
|
|
486
492
|
|
|
493
|
+
- [Automations Conditions](references/automations/conditions.md)
|
|
494
|
+
Configure visual and code conditions while preserving boolean intent, comparison boundaries and builder editability.
|
|
495
|
+
|
|
496
|
+
- [Automations Delays Variables and Branches](references/automations/special-actions.md)
|
|
497
|
+
Configure delay, rate-limit, variable and parallel-branch steps, preserving supported existing step metadata.
|
|
498
|
+
|
|
499
|
+
- [Automations Schemas and Scheduling](references/automations/schemas-and-scheduling.md)
|
|
500
|
+
Configure dynamic schemas and scheduled automation triggers with correct timezone and calendar behavior.
|
|
501
|
+
|
|
502
|
+
- [Automations Validation and Persistence](references/automations/validation-and-verification.md)
|
|
503
|
+
Validate automation configuration, check builder compatibility, persist changes and verify the saved result.
|
|
504
|
+
|
|
487
505
|
- [Automations Activation Status](references/automations/activation-status.md)
|
|
488
|
-
|
|
506
|
+
Inspect or change active status with lock checks, revision handling and read-back, without requiring unrelated repairs before deactivation.
|
|
489
507
|
|
|
490
508
|
</details>
|
|
491
509
|
|
|
@@ -3,7 +3,7 @@ name: "Automations Action Configuration"
|
|
|
3
3
|
description: "Configure app-defined automation actions from their input schemas and preserve supported existing action mappings."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
> **Stage scope:** this stage covers only what [Build and Manage Wix Automations](https://dev.wix.com/docs/api-reference/business-management/automations/skills/build-and-manage-wix-automations) lists; do not perform anything marked "Later stages only"
|
|
6
|
+
> **Stage scope:** this stage covers only what [Build and Manage Wix Automations](https://dev.wix.com/docs/api-reference/business-management/automations/skills/build-and-manage-wix-automations) lists; do not perform anything marked "Later stages only", and follow the instruction attached to each guide marked "not yet published". "Stage", "Later stages only" and "not yet published" describe how this skill is being rolled out; never mention them to the user. Explain a limit in product terms: what can't be done through the API here and where the user can do it instead (for example, in the automations builder).
|
|
7
7
|
|
|
8
8
|
# App-Defined Actions — Discovery, Schemas, Input Mapping
|
|
9
9
|
|
|
@@ -11,9 +11,9 @@ description: "Configure app-defined automation actions from their input schemas
|
|
|
11
11
|
|
|
12
12
|
- An action is `appId` + `actionKey`. Find real ones with **Resolve Actions** (site catalog), then read the version active on the site with **Get Runtime Action**. Never invent keys.
|
|
13
13
|
- The configuration is `appDefinedInfo.inputMapping`: an object keyed ONLY by input-schema property names, with values of the schema's type — literals, or `{{…}}` formulas in fields the UI schema marks as dynamic.
|
|
14
|
-
- Fields marked `updateSchemaOnChange: true` reveal more inputs once set → **Get Action Dynamic Input Schema**. Output that depends on configuration → **Get Action Dynamic Output Schema** after the mapping is final.
|
|
15
|
-
- **Later stages only — email is outside stage
|
|
16
|
-
- Entity-selector fields take **ids**, never display names (Automations Entity and Provider Configuration (not yet published)).
|
|
14
|
+
- Fields marked `updateSchemaOnChange: true` reveal more inputs once set → **Get Action Dynamic Input Schema**. Output that depends on configuration → **Get Action Dynamic Output Schema** after the mapping is final, except user-defined LLM result fields: declare their override schema directly (§4).
|
|
15
|
+
- **Later stages only — email is outside stage 3:** **Send an email** (`triggered-emails`): initialize each NEW step with **Generate Action Input Mapping**, persist the returned mapping unchanged, then configure content with Get / Set Email Content (Automations Email Actions (not yet published; email configuration is outside stage 3)). Existing content-only edits do not initialize another email.
|
|
16
|
+
- Entity-selector fields take **ids**, never display names (Automations Entity and Provider Configuration (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations))).
|
|
17
17
|
- Before accepting any action, prove its side effect and its recipient (§6).
|
|
18
18
|
|
|
19
19
|
---
|
|
@@ -29,7 +29,7 @@ Site-scoped (`wix-site-id` header), SDK module `actionCatalog`: Resolve Actions
|
|
|
29
29
|
3. Get Runtime Action for the 1–3 best candidates; build against that version's `inputSchema`, `outputSchema`, `interfaceConfiguration`.
|
|
30
30
|
4. An action missing from Resolve Actions is not usable on this site. The builder shows such a step as "action not found" and blocks it.
|
|
31
31
|
|
|
32
|
-
**Do not use** unsupported or deprecated actions — `send-mail` (→ `triggered-emails`), `send-coupon-action` (→ `wixcoupons-retrieve_coupon` + a delivery step that uses its code), `wix_automations-velo_action`, `wix_automations-data_manipulation_code` (code variable; public Create refuses it —
|
|
32
|
+
**Do not use** unsupported or deprecated actions — `send-mail` (→ `triggered-emails`), `send-coupon-action` (→ `wixcoupons-retrieve_coupon` + a delivery step that uses its code), `wix_automations-velo_action`, `wix_automations-data_manipulation_code` (code variable; public Create refuses it — [Automations Delays Variables and Branches](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-delays-variables-and-branches) §4), `whatsapp-send-message` (WhatsApp), `forward-to-zapier` (Zapier), and site actions `wix_automations-wix_api_integration` (non-public). Match these by `actionKey` (+ `appId`), not by app or display name — other actions of the same app are fine. Reasons and replacements: §2 of Automations Feasibility and Planning (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations)) (site actions: §1).
|
|
33
33
|
|
|
34
34
|
### Selection rules
|
|
35
35
|
|
|
@@ -55,7 +55,7 @@ Conditional fields (`if`/`then`/`dependencies`, e.g. a due date shown only when
|
|
|
55
55
|
UI-schema keys that change what you may write:
|
|
56
56
|
|
|
57
57
|
- `dynamicValuesOptions.enabled: true` → the field accepts `{{…}}` formulas. `strict: true` → the formula must return the field's exact type/format. **A field without it is static: literal only.**
|
|
58
|
-
- `"ui:widget": "EntitySelector"` + `entitySelectorOptions` (`selectorId`/`tag`, `filters`, `dynamicFiltersMapping`) → entity picker; value = id or array of ids (§1 of Automations Entity and Provider Configuration (not yet published)). Same for input properties carrying `itemsSelectionConfiguration`.
|
|
58
|
+
- `"ui:widget": "EntitySelector"` + `entitySelectorOptions` (`selectorId`/`tag`, `filters`, `dynamicFiltersMapping`) → entity picker; value = id or array of ids (§1 of Automations Entity and Provider Configuration (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations))). Same for input properties carrying `itemsSelectionConfiguration`.
|
|
59
59
|
- `"ui:field": "AudienceSelector"` → an audience object owned by the app's picker; don't hand-author it — the user sets it in the builder.
|
|
60
60
|
- `"ui:field": "TextSectionField"` → display-only text; never map it.
|
|
61
61
|
- `"ui:widget": "hidden"`, `ui:readonly` → keep the schema `default`. Other `ui:*` keys are presentation only.
|
|
@@ -63,13 +63,13 @@ UI-schema keys that change what you may write:
|
|
|
63
63
|
## 4. Dynamic input and output schemas
|
|
64
64
|
|
|
65
65
|
- **Input**: a property with `updateSchemaOnChange: true` (e.g. a template or form id) changes which inputs exist. Set it, then call Get Action Dynamic Input Schema with `{appId, actionKey, inputMapping}` (the mapping so far). The builder shows the static schema **merged** with the returned one (properties and `required` united), so keys from either are kept. Repeat if another controlling field is revealed. Never invent a field you expected but didn't get — it appears only after its controlling selection. The builder re-fetches this schema from your saved mapping every time the step is opened, so a dynamic key whose controlling value isn't in the mapping is dropped on the first edit.
|
|
66
|
-
- **Output**: after the mapping is final, call Get Action Dynamic Output Schema (or the bulk variant) and use the returned `outputSchema` for downstream `var()` paths. A dynamic output is a _real_ schema — never replace it with an override (allowlist:
|
|
66
|
+
- **Output**: for `wix_automations-llm_call` result fields you define in its output configuration, declare `overrideOutputSchema` directly ([Automations Schemas and Scheduling](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-schemas-and-scheduling) §3); do not probe the dynamic-output SPI to discover your own declared fields or execute the AI during setup. For catalog-driven dynamic outputs, after the mapping is final, call Get Action Dynamic Output Schema (or the bulk variant) and use the returned `outputSchema` for downstream `var()` paths. A dynamic output is a _real_ schema — never replace it with an override (allowlist: [Automations Schemas and Scheduling](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-schemas-and-scheduling) §3).
|
|
67
67
|
|
|
68
68
|
## 5. Building the input mapping
|
|
69
69
|
|
|
70
70
|
### 5.1 Provider-owned mappings — email and opaque widgets
|
|
71
71
|
|
|
72
|
-
> **Later stages only:** email and other opaque-widget configuration is not available in stage
|
|
72
|
+
> **Later stages only:** email and other opaque-widget configuration is not available in stage 3; this section is published in stage 4.
|
|
73
73
|
|
|
74
74
|
**In this stage:** never invent an opaque widget's mapping or its app-owned keys; tell the user which action to add in the builder and how it should be configured.
|
|
75
75
|
|
|
@@ -83,7 +83,7 @@ MUST (builder renderability — the `GENERIC` form drops, rewrites or flags anyt
|
|
|
83
83
|
- An action with no input properties (or only hidden ones): send `"inputMapping": {}` — the builder writes `{}` itself on open otherwise.
|
|
84
84
|
- Map fields the form would auto-fill, or opening the step silently changes the automation: fields with a schema `default` (write the default or your value), every `identityType` input (the form auto-maps it when exactly one matching payload path exists), required `date`/`date-time`/`time` strings (else filled with "now").
|
|
85
85
|
- Enum fields (`oneOf` / `enum`): one of the listed constants.
|
|
86
|
-
- Entity-selector fields: real ids of the right kind and shape (§1 of Automations Entity and Provider Configuration (not yet published)).
|
|
86
|
+
- Entity-selector fields: real ids of the right kind and shape (§1 of Automations Entity and Provider Configuration (topic guide not yet published; consult the [Automations API reference](https://dev.wix.com/docs/api-reference/business-management/automations))).
|
|
87
87
|
- `{{…}}` only in fields with `dynamicValuesOptions.enabled` (or an `identityType` field), per [Automations Mapping Expressions](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-mapping-expressions) §4: number/boolean hold exactly one expression of that type; date-time a single date-time expression or ISO literal; strings may mix text and expressions. An **array-typed** `var()` in a string field is flagged as a format mismatch.
|
|
88
88
|
- Don't copy volatile values: dates → `now()`/payload dates; ids → resolved at build time, never from examples.
|
|
89
89
|
- Keep what the user describes for one field in that field. A subject described as "Order received, then the customer's first name" is one `subject` string mixing text and expressions (`"Order received {{var(…)}}"`); don't split its values into other fields, such as a message's `fields` rows.
|
|
@@ -113,7 +113,7 @@ Process: (1) fetch the effective schema (§4) before you write a mapping or any
|
|
|
113
113
|
|
|
114
114
|
### 5.3 Validation errors on actions
|
|
115
115
|
|
|
116
|
-
Error shape, error type → fix, and how the builder shows each: [
|
|
116
|
+
Error shape, error type → fix, and how the builder shows each: [Automations Validation and Persistence](https://dev.wix.com/docs/api-reference/business-management/automations/skills/automations-validation-and-persistence) §2. Must-know here: fix the field named by `configurationError.fieldKey` — never delete a field to silence it; `CRITICAL` blocks (status `INVALID`), `WARNING` doesn't but must be reported; a `var()` path that doesn't exist may NOT be reported — verify paths yourself.
|
|
117
117
|
|
|
118
118
|
## 6. Side-effect and recipient review
|
|
119
119
|
|
|
@@ -123,7 +123,7 @@ This section owns the semantic review (you, not code) required for every action
|
|
|
123
123
|
- **Entity**: the affected entity has a matching input (e.g. a label picker for "add label").
|
|
124
124
|
- **Identity input**: the id it acts on, with the right `identityType`.
|
|
125
125
|
- **Recipient lineage** (email, chat, SMS, push): write down `{requestedAudience, resolvedAudienceKind (contact|visitor|owner|contributor|label|phone|device), resolvedIdentityPath}`. The trigger contact and a contact created upstream are different people even if both are `contactId`. Wording never proves the recipient.
|
|
126
|
-
- **Later stages only — email is outside stage
|
|
126
|
+
- **Later stages only — email is outside stage 3:** Email: the audience fields decide — read `selectedAudience` / `contactId` exactly as in §3 of Automations Email Actions (not yet published; email configuration is outside stage 3) ("Recipient encoding"). A root `contactId` or `triggerContactExcluded` alone doesn't prove who receives it.
|
|
127
127
|
- Chat (`send-message`): only a schema-supported contact-id or visitor-id route; owner/team chat needs a different, proven component or a clarification.
|
|
128
128
|
- SMS / push: prove the schema-supported contact, audience, phone or device route.
|
|
129
129
|
|