callman-core 1.30.0 → 1.31.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.
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ /**
3
+ * UI-test step catalog — the machine-readable list of every YAML step a
4
+ * Callman UI-test flow can contain, with its aliases, the platforms it runs
5
+ * on and its arguments.
6
+ *
7
+ * Sources it mirrors (keep in sync when a step is added):
8
+ * - the flow parsers (callman-backend `ui-test-engine/yaml-parser.ts` and
9
+ * callman-desktop `electron/ui-testing/yaml-parser.ts`) — web engine;
10
+ * - the desktop builder palette (`step-catalog.ts`) — incl. the mobile
11
+ * engine ("M") commands and the platform availability sets.
12
+ *
13
+ * Consumers: `lintUiTestFlow` (flow-lint.ts) and the MCP server's
14
+ * `callman://docs/ui-test-steps` reference. Pure data — no runtime deps.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.UI_TEST_HEADER_KEYS = exports.UI_TEST_COMMANDS = void 0;
18
+ exports.findUiTestCommand = findUiTestCommand;
19
+ exports.renderUiTestCommandReference = renderUiTestCommandReference;
20
+ const ALL = ["web", "android", "ios"];
21
+ const WEB = ["web"];
22
+ const MOBILE = ["android", "ios"];
23
+ /** Element locator arguments shared by click / assert / input steps. */
24
+ const LOCATOR = [
25
+ { name: "text", type: "string", description: "Visible text (or accessibility label) of the element." },
26
+ { name: "id", type: "string", description: "Element id (web DOM id / Android resource-id / iOS accessibility id)." },
27
+ { name: "testId", type: "string", description: "data-testid attribute (web)." },
28
+ { name: "css", type: "string", description: "CSS selector (web)." },
29
+ { name: "xpath", type: "string", description: "XPath selector." },
30
+ { name: "name", type: "string", description: "name attribute (web forms)." },
31
+ { name: "placeholder", type: "string", description: "Placeholder text of an input (web)." },
32
+ { name: "index", type: "number", description: "0-based index when several elements match." },
33
+ ];
34
+ /** Relative / state matchers the mobile engine understands on selectors. */
35
+ const MOBILE_MATCHERS = [
36
+ { name: "enabled", type: "boolean", description: "Only match enabled (or disabled) elements (mobile)." },
37
+ { name: "checked", type: "boolean", description: "Only match checked elements (mobile)." },
38
+ { name: "focused", type: "boolean", description: "Only match focused elements (mobile)." },
39
+ { name: "selected", type: "boolean", description: "Only match selected elements (mobile)." },
40
+ { name: "below", type: "string", description: "Element is below the element with this text (mobile)." },
41
+ { name: "above", type: "string", description: "Element is above the element with this text (mobile)." },
42
+ { name: "leftOf", type: "string", description: "Element is left of the element with this text (mobile)." },
43
+ { name: "rightOf", type: "string", description: "Element is right of the element with this text (mobile)." },
44
+ { name: "containsChild", type: "string", description: "Element contains a child with this text (mobile)." },
45
+ ];
46
+ const TIMEOUT = { name: "timeout", type: "number", description: "Timeout in milliseconds." };
47
+ const OPTIONAL = { name: "optional", type: "boolean", description: "Do not fail the flow when the element is missing." };
48
+ function cmd(spec) {
49
+ return { aliases: [], forms: ["mapping"], ...spec };
50
+ }
51
+ exports.UI_TEST_COMMANDS = [
52
+ // ── Navigation ────────────────────────────────────────────────────────────
53
+ cmd({ key: "navigate", category: "Navigation", platforms: WEB, forms: ["scalar"], scalarArg: "url",
54
+ summary: "Open a URL in the current tab.",
55
+ args: [{ name: "url", type: "string", required: true, description: "Absolute URL; {{dataset}} placeholders allowed." }],
56
+ example: '- navigate: "https://shop.example.com/cart"' }),
57
+ cmd({ key: "openLink", category: "Navigation", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "url",
58
+ summary: "Open a URL (web) or a deep link (mobile).",
59
+ args: [
60
+ { name: "url", type: "string", required: true, description: "URL or deep link. `link` is accepted as a synonym." },
61
+ { name: "clearState", type: "boolean", description: "Clear app state first (mobile)." },
62
+ { name: "stopApp", type: "boolean", description: "Stop the app first (mobile)." },
63
+ { name: "fullSize", type: "boolean", description: "Open the browser window full size (desktop web runs)." },
64
+ ],
65
+ example: '- openLink: "https://example.com/login"' }),
66
+ cmd({ key: "launchApp", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "mapping"],
67
+ summary: "Launch the app under test (uses the header `appId` unless overridden).",
68
+ args: [
69
+ { name: "appId", type: "string", description: "Package name / bundle id override." },
70
+ { name: "clearState", type: "boolean", description: "Clear app data before launching." },
71
+ { name: "clearKeychain", type: "boolean", description: "Clear the iOS keychain before launching." },
72
+ { name: "stopApp", type: "boolean", description: "Stop a running instance first (default true)." },
73
+ ],
74
+ example: "- launchApp:\n clearState: true" }),
75
+ cmd({ key: "selectOption", category: "Navigation", platforms: WEB,
76
+ summary: "Pick an option in a <select>.",
77
+ args: [
78
+ { name: "value", type: "string", description: "Option value to select." },
79
+ { name: "text", type: "string", description: "Option label to select (use value or text)." },
80
+ { name: "id", type: "string", description: "Select element id." },
81
+ { name: "name", type: "string", description: "Select element name." },
82
+ { name: "css", type: "string", description: "Select element CSS selector." },
83
+ { name: "xpath", type: "string", description: "Select element XPath." },
84
+ ],
85
+ example: '- selectOption:\n id: "country"\n text: "Azerbaijan"' }),
86
+ cmd({ key: "refresh", category: "Navigation", platforms: WEB, forms: ["bare"], summary: "Reload the page.", args: [], example: "- refresh" }),
87
+ cmd({ key: "goBack", aliases: ["back"], category: "Navigation", platforms: ALL, forms: ["bare"],
88
+ summary: "Browser back (web) / system back button (mobile).", args: [], example: "- goBack" }),
89
+ cmd({ key: "goForward", category: "Navigation", platforms: WEB, forms: ["bare"], summary: "Browser forward.", args: [], example: "- goForward" }),
90
+ // ── Click / Hover ─────────────────────────────────────────────────────────
91
+ cmd({ key: "tapOn", aliases: ["click"], category: "Click / Hover", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
92
+ summary: "Click / tap an element.",
93
+ args: [...LOCATOR, ...MOBILE_MATCHERS,
94
+ { name: "link", type: "string", description: "Link text (web anchors)." },
95
+ { name: "times", type: "number", description: "Repeat the tap N times." },
96
+ OPTIONAL],
97
+ example: '- tapOn: "Sign in"\n- tapOn:\n id: "submit"' }),
98
+ cmd({ key: "doubleTapOn", aliases: ["doubleClick"], category: "Click / Hover", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
99
+ summary: "Double-click / double-tap an element.", args: [...LOCATOR, OPTIONAL], example: '- doubleTapOn: "Row 1"' }),
100
+ cmd({ key: "longPressOn", aliases: ["rightClick"], category: "Click / Hover", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
101
+ summary: "Right-click (web) / long-press (mobile) an element.", args: [...LOCATOR, OPTIONAL], example: '- longPressOn: "Message"' }),
102
+ cmd({ key: "hover", category: "Click / Hover", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "text",
103
+ summary: "Move the mouse over an element.", args: LOCATOR, example: '- hover: "Products"' }),
104
+ // ── Type / Keyboard ───────────────────────────────────────────────────────
105
+ cmd({ key: "inputText", category: "Type / Keyboard", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
106
+ summary: "Type text. Scalar form types into the focused field; the mapping form targets a field.",
107
+ args: [
108
+ { name: "text", type: "string", required: true, description: "Text to type (`value` is a synonym). {{dataset}} placeholders allowed." },
109
+ { name: "target", type: "string", description: "Label/text of the field to type into (web)." },
110
+ { name: "targetText", type: "string", description: "Visible text near the field (web)." },
111
+ ...LOCATOR.filter((a) => a.name !== "text"),
112
+ ],
113
+ example: '- tapOn: "Email"\n- inputText: "{{email}}"\n- inputText:\n id: "password"\n text: "{{password}}"' }),
114
+ cmd({ key: "pressKey", category: "Type / Keyboard", platforms: ALL, forms: ["scalar"], scalarArg: "key",
115
+ summary: "Press a key: Enter, Tab, Escape, Backspace, Delete, Space, ArrowUp/Down/Left/Right, F5 (web); Enter, Backspace, BACK, HOME (mobile).",
116
+ args: [{ name: "key", type: "string", required: true, description: "Key name." }], example: "- pressKey: Enter" }),
117
+ cmd({ key: "eraseText", aliases: ["clearText"], category: "Type / Keyboard", platforms: ALL, forms: ["bare", "scalar"], scalarArg: "chars",
118
+ summary: "Delete characters from the focused field.",
119
+ args: [{ name: "chars", type: "number", description: "How many characters (default: all / 50)." }], example: "- eraseText: 20" }),
120
+ cmd({ key: "copyTextFrom", category: "Type / Keyboard", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
121
+ summary: "Copy an element's text into a variable (default `copiedText`), usable later as {{var}} / ${var}.",
122
+ args: [...LOCATOR, { name: "into", type: "string", description: "Variable name (default copiedText)." }],
123
+ example: '- copyTextFrom:\n id: "order-number"\n into: "orderNo"' }),
124
+ cmd({ key: "pasteText", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare"], summary: "Paste the clipboard into the focused field.", args: [], example: "- pasteText" }),
125
+ cmd({ key: "setClipboard", category: "Type / Keyboard", platforms: MOBILE, forms: ["scalar"], scalarArg: "text",
126
+ summary: "Put text on the device clipboard.", args: [{ name: "text", type: "string", required: true, description: "Clipboard text." }], example: '- setClipboard: "hello"' }),
127
+ cmd({ key: "inputRandomText", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare", "mapping"], summary: "Type random text.",
128
+ args: [{ name: "length", type: "number", description: "Length." }], example: "- inputRandomText" }),
129
+ cmd({ key: "inputRandomEmail", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare"], summary: "Type a random email.", args: [], example: "- inputRandomEmail" }),
130
+ cmd({ key: "inputRandomNumber", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare", "mapping"], summary: "Type a random number.",
131
+ args: [{ name: "length", type: "number", description: "Digits." }], example: "- inputRandomNumber:\n length: 6" }),
132
+ cmd({ key: "inputRandomPersonName", category: "Type / Keyboard", platforms: MOBILE, forms: ["bare"], summary: "Type a random person name.", args: [], example: "- inputRandomPersonName" }),
133
+ cmd({ key: "hideKeyboard", category: "Mobile device", platforms: MOBILE, forms: ["bare"], summary: "Hide the on-screen keyboard.", args: [], example: "- hideKeyboard" }),
134
+ // ── Assertions ────────────────────────────────────────────────────────────
135
+ cmd({ key: "assertVisible", aliases: ["checkVisible", "checkValue"], category: "Assertions", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
136
+ summary: "Assert an element is visible (checkValue also compares its value).",
137
+ args: [...LOCATOR, ...MOBILE_MATCHERS, OPTIONAL,
138
+ { name: "value", type: "string", description: "checkValue: expected value/text of the element." },
139
+ { name: "match", type: "string", description: "checkValue: contains | exact." },
140
+ { name: "containsDescendants", type: "list", description: "Element must contain these child texts." }],
141
+ example: '- assertVisible: "Welcome back"' }),
142
+ cmd({ key: "assertNotVisible", aliases: ["checkNotVisible"], category: "Assertions", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
143
+ summary: "Assert an element is NOT visible.", args: LOCATOR, example: '- assertNotVisible: "Error"' }),
144
+ cmd({ key: "checkUrl", aliases: ["assertUrl"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "url",
145
+ summary: "Assert the page URL equals a value.", args: [{ name: "url", type: "string", required: true, description: "Expected URL." }], example: '- checkUrl: "https://example.com/home"' }),
146
+ cmd({ key: "checkUrlContains", aliases: ["assertUrlContains"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
147
+ summary: "Assert the page URL contains a value.", args: [{ name: "text", type: "string", required: true, description: "Substring." }], example: '- checkUrlContains: "/dashboard"' }),
148
+ cmd({ key: "checkTitle", aliases: ["assertTitle"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "title",
149
+ summary: "Assert the page title equals a value.", args: [{ name: "title", type: "string", required: true, description: "Expected title." }], example: '- checkTitle: "Dashboard"' }),
150
+ cmd({ key: "checkTitleContains", aliases: ["assertTitleContains"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
151
+ summary: "Assert the page title contains a value.", args: [{ name: "text", type: "string", required: true, description: "Substring." }], example: '- checkTitleContains: "Dash"' }),
152
+ cmd({ key: "checkInputValue", aliases: ["assertInputValue"], category: "Assertions", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
153
+ summary: "Assert an input's value.", args: [{ name: "value", type: "string", required: true, description: "Expected value." }, { name: "id", type: "string", description: "Input id." }],
154
+ example: '- checkInputValue:\n id: "email"\n value: "a@b.com"' }),
155
+ cmd({ key: "checkChecked", aliases: ["assertChecked"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
156
+ summary: "Assert a checkbox/radio is checked.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkChecked: "Remember me"' }),
157
+ cmd({ key: "checkUnchecked", aliases: ["assertUnchecked"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
158
+ summary: "Assert a checkbox/radio is unchecked.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkUnchecked: "Newsletter"' }),
159
+ cmd({ key: "checkEnabled", aliases: ["assertEnabled"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
160
+ summary: "Assert an element is enabled.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkEnabled: "Pay"' }),
161
+ cmd({ key: "checkDisabled", aliases: ["assertDisabled"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "text",
162
+ summary: "Assert an element is disabled.", args: [{ name: "text", type: "string", required: true, description: "Label or id." }], example: '- checkDisabled: "Pay"' }),
163
+ cmd({ key: "checkCount", aliases: ["assertCount"], category: "Assertions", platforms: WEB,
164
+ summary: "Assert how many elements match a text.",
165
+ args: [{ name: "text", type: "string", required: true, description: "Text to match." }, { name: "count", type: "number", required: true, description: "Expected count." }],
166
+ example: '- checkCount:\n text: "Item"\n count: 3' }),
167
+ cmd({ key: "assertTrue", aliases: ["verify"], category: "Assertions", platforms: WEB, forms: ["scalar"], scalarArg: "expression",
168
+ summary: "Assert a JavaScript expression evaluated in the page is truthy.",
169
+ args: [{ name: "expression", type: "string", required: true, description: "JS expression." }], example: "- verify: \"document.querySelectorAll('.row').length > 0\"" }),
170
+ cmd({ key: "assertApi", aliases: ["checkApi"], category: "Assertions", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "urlContains",
171
+ summary: "Assert the page made a network call matching a URL (and status).",
172
+ args: [{ name: "urlContains", type: "string", required: true, description: "URL substring (`url` is a synonym)." }, { name: "status", type: "number", description: "Expected HTTP status." }],
173
+ example: '- assertApi:\n urlContains: "/api/orders"\n status: 201' }),
174
+ cmd({ key: "assertAlertText", category: "Alert", platforms: WEB, forms: ["scalar"], scalarArg: "text",
175
+ summary: "Assert the text of the open browser dialog.", args: [{ name: "text", type: "string", required: true, description: "Expected text." }], example: '- assertAlertText: "Saved"' }),
176
+ // ── Scroll / Drag ─────────────────────────────────────────────────────────
177
+ cmd({ key: "scroll", category: "Scroll / Drag", platforms: ALL, forms: ["bare", "mapping"],
178
+ summary: "Scroll the page or an element.",
179
+ args: [
180
+ { name: "direction", type: "string", description: "up | down | left | right (default down)." },
181
+ { name: "times", type: "number", description: "How many times." },
182
+ { name: "id", type: "string", description: "Scrollable element id." },
183
+ { name: "testId", type: "string", description: "Scrollable element testId." },
184
+ { name: "css", type: "string", description: "Scrollable element CSS." },
185
+ { name: "xpath", type: "string", description: "Scrollable element XPath." },
186
+ { name: "point", type: "string", description: "Point as \"x%,y%\"." },
187
+ ],
188
+ example: "- scroll:\n direction: down\n times: 3" }),
189
+ cmd({ key: "swipe", category: "Scroll / Drag", platforms: ALL,
190
+ summary: "Swipe gesture.",
191
+ args: [
192
+ { name: "direction", type: "string", description: "UP | DOWN | LEFT | RIGHT." },
193
+ { name: "start", type: "string", description: "Start point \"x%,y%\" (mobile)." },
194
+ { name: "end", type: "string", description: "End point \"x%,y%\" (mobile)." },
195
+ { name: "from", type: "object", description: "Swipe from an element {id|text} (mobile)." },
196
+ { name: "duration", type: "number", description: "Gesture duration ms." },
197
+ { name: "times", type: "number", description: "Repeat count." },
198
+ ],
199
+ example: "- swipe:\n direction: LEFT" }),
200
+ cmd({ key: "scrollUntilVisible", category: "Scroll / Drag", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "text",
201
+ summary: "Scroll until an element becomes visible.",
202
+ args: [
203
+ { name: "text", type: "string", description: "Element text (or `element: {text|id}`)." },
204
+ { name: "element", type: "object", description: "Element selector {text|id}." },
205
+ { name: "direction", type: "string", description: "Scroll direction (default DOWN)." },
206
+ TIMEOUT,
207
+ { name: "speed", type: "number", description: "Scroll speed 0-100 (mobile)." },
208
+ ],
209
+ example: '- scrollUntilVisible:\n element:\n text: "Terms"\n direction: DOWN' }),
210
+ cmd({ key: "dragAndDrop", category: "Scroll / Drag", platforms: WEB,
211
+ summary: "Drag from one normalized point to another (0..1 of the viewport).",
212
+ args: ["fromNx", "fromNy", "toNx", "toNy"].map((name) => ({ name, type: "number", required: true, description: "Normalized coordinate 0..1." })),
213
+ example: "- dragAndDrop:\n fromNx: 0.2\n fromNy: 0.5\n toNx: 0.8\n toNy: 0.5" }),
214
+ // ── Wait ──────────────────────────────────────────────────────────────────
215
+ cmd({ key: "wait", aliases: ["pause"], category: "Wait", platforms: ALL, forms: ["scalar"], scalarArg: "ms",
216
+ summary: "Sleep for N milliseconds.", args: [{ name: "ms", type: "number", required: true, description: "Milliseconds." }], example: "- pause: 1000" }),
217
+ cmd({ key: "waitForAnimationToEnd", category: "Wait", platforms: ALL, forms: ["bare", "mapping"],
218
+ summary: "Wait until the screen stops changing.", args: [TIMEOUT], example: "- waitForAnimationToEnd" }),
219
+ cmd({ key: "extendedWaitUntil", category: "Wait", platforms: ALL,
220
+ summary: "Wait until an element is visible / not visible or a JS condition holds.",
221
+ args: [
222
+ { name: "visible", type: "string|object", description: "Text or selector to wait for." },
223
+ { name: "notVisible", type: "string|object", description: "Text or selector to wait to disappear." },
224
+ { name: "condition", type: "string", description: "JS condition (web)." },
225
+ TIMEOUT,
226
+ ],
227
+ example: '- extendedWaitUntil:\n visible: "Done"\n timeout: 15000' }),
228
+ // ── Slider / Date ─────────────────────────────────────────────────────────
229
+ cmd({ key: "setSlider", category: "Slider / Date", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
230
+ summary: "Set a range input.", args: [{ name: "value", type: "number", required: true, description: "Value." }, { name: "id", type: "string", description: "Input id." }], example: "- setSlider: 40" }),
231
+ cmd({ key: "checkSliderValue", aliases: ["assertSliderValue"], category: "Slider / Date", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
232
+ summary: "Assert a range input value.",
233
+ args: [{ name: "value", type: "number", required: true, description: "Expected value." }, { name: "id", type: "string", description: "Input id." }, { name: "tolerance", type: "number", description: "Allowed delta." }],
234
+ example: "- checkSliderValue:\n value: 40\n tolerance: 1" }),
235
+ cmd({ key: "setDate", category: "Slider / Date", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "value",
236
+ summary: "Set a date input.", args: [{ name: "value", type: "string", required: true, description: "YYYY-MM-DD." }, { name: "id", type: "string", description: "Input id." }], example: '- setDate: "2026-10-01"' }),
237
+ // ── Browser ───────────────────────────────────────────────────────────────
238
+ cmd({ key: "closeTab", category: "Browser", platforms: WEB, forms: ["bare"], summary: "Close the current tab.", args: [], example: "- closeTab" }),
239
+ cmd({ key: "switchTab", category: "Browser", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "index",
240
+ summary: "Switch to a tab by index or title.",
241
+ args: [{ name: "index", type: "number", description: "0-based index." }, { name: "title", type: "string", description: "Tab title." }], example: "- switchTab: 1" }),
242
+ cmd({ key: "switchFrame", category: "Browser", platforms: WEB, forms: ["scalar", "mapping"], scalarArg: "id",
243
+ summary: "Switch into an iframe by id or index.",
244
+ args: [{ name: "id", type: "string", description: "Frame id." }, { name: "index", type: "number", description: "Frame index." }], example: '- switchFrame: "payment"' }),
245
+ cmd({ key: "switchDefaultContent", category: "Browser", platforms: WEB, forms: ["bare"], summary: "Leave the iframe.", args: [], example: "- switchDefaultContent" }),
246
+ cmd({ key: "setCookie", category: "Browser", platforms: WEB,
247
+ summary: "Set a cookie.",
248
+ args: [{ name: "name", type: "string", required: true, description: "Name." }, { name: "value", type: "string", required: true, description: "Value." }, { name: "domain", type: "string", description: "Domain." }],
249
+ example: '- setCookie:\n name: "consent"\n value: "yes"' }),
250
+ cmd({ key: "deleteCookie", category: "Browser", platforms: WEB, forms: ["bare", "scalar"], scalarArg: "name",
251
+ summary: "Delete one cookie (or all when no name).", args: [{ name: "name", type: "string", description: "Cookie name." }], example: '- deleteCookie: "session"' }),
252
+ cmd({ key: "acceptAlert", category: "Alert", platforms: WEB, forms: ["bare", "scalar"], scalarArg: "text",
253
+ summary: "Accept the next browser dialog (optionally typing prompt text).", args: [{ name: "text", type: "string", description: "Prompt text." }], example: "- acceptAlert" }),
254
+ cmd({ key: "dismissAlert", category: "Alert", platforms: WEB, forms: ["bare"], summary: "Dismiss the next browser dialog.", args: [], example: "- dismissAlert" }),
255
+ cmd({ key: "executeScript", aliases: ["evalScript", "fakerData"], category: "Data / Hybrid", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "script",
256
+ summary: "Run JavaScript (page context on web; the engine's JS on mobile). `extract` saves results as variables.",
257
+ args: [{ name: "script", type: "string", required: true, description: "JS source." }, { name: "extract", type: "map", description: "{ varName: jsonPath } saved from the result." }],
258
+ example: "- executeScript:\n script: \"return document.title\"\n extract:\n title: \"$\"" }),
259
+ // ── Flow control ──────────────────────────────────────────────────────────
260
+ cmd({ key: "runFlow", category: "Flow", platforms: ALL, forms: ["scalar", "mapping"], scalarArg: "name",
261
+ summary: "Run another flow of the library by NAME (inlined at run time). Leading runFlow lines are the flow's preconditions. A mapping with `when` makes it conditional.",
262
+ args: [
263
+ { name: "name", type: "string", description: "Library flow name." },
264
+ { name: "commands", type: "list", description: "Inline steps instead of a named flow." },
265
+ { name: "when", type: "object", description: "Condition: {visible|notVisible|true|platform}." },
266
+ { name: "env", type: "map", description: "Variables passed to the sub-flow." },
267
+ ],
268
+ example: '- runFlow: "Login"' }),
269
+ cmd({ key: "repeat", category: "Flow", platforms: ALL,
270
+ summary: "Repeat steps N times or while a condition holds.",
271
+ args: [
272
+ { name: "times", type: "number", description: "Iterations." },
273
+ { name: "while", type: "object", description: "{visible|notVisible|true: expr}." },
274
+ { name: "commands", type: "list", required: true, description: "Steps to repeat." },
275
+ ],
276
+ example: '- repeat:\n times: 3\n commands:\n - tapOn: "Next"' }),
277
+ cmd({ key: "retry", category: "Flow", platforms: ALL,
278
+ summary: "Retry a block of steps until it passes.",
279
+ args: [{ name: "maxRetries", type: "number", description: "Default 3." }, { name: "commands", type: "list", required: true, description: "Steps." }],
280
+ example: '- retry:\n maxRetries: 2\n commands:\n - tapOn: "Refresh"' }),
281
+ // ── Data / Hybrid ─────────────────────────────────────────────────────────
282
+ cmd({ key: "dbQuery", category: "Data / Hybrid", platforms: ALL, hybrid: true,
283
+ summary: "Run SQL on a workspace database connection; extract values into variables and assert on rows.",
284
+ args: [
285
+ { name: "connection", type: "string", required: true, description: "Workspace connection name or id." },
286
+ { name: "query", type: "string", required: true, description: "SQL. {{vars}} allowed." },
287
+ { name: "extract", type: "map", description: "{ var: \"rows[0].column\" }." },
288
+ { name: "expect", type: "map|list", description: "Map {path: value} or list [{field, op, value}] — op: equals, not_equals, contains, not_contains, is_null, not_null, gt, lt, gte, lte." },
289
+ ],
290
+ example: '- dbQuery:\n connection: "orders-db"\n query: "select status from orders where id = \'{{orderNo}}\'"\n expect:\n - field: "rows[0].status"\n op: equals\n value: "PAID"' }),
291
+ cmd({ key: "apiCall", category: "Data / Hybrid", platforms: ALL, hybrid: true,
292
+ summary: "Call an HTTP API mid-flow; extract from the response and assert status/body.",
293
+ args: [
294
+ { name: "method", type: "string", description: "GET | POST | PUT | PATCH | DELETE (default GET)." },
295
+ { name: "url", type: "string", required: true, description: "URL." },
296
+ { name: "headers", type: "map", description: "Headers." },
297
+ { name: "body", type: "string|object", description: "Body (object sent as JSON)." },
298
+ { name: "extract", type: "map", description: "{ var: \"body.path\" }." },
299
+ { name: "expect", type: "object", description: "{ status?, body? }." },
300
+ ],
301
+ example: '- apiCall:\n method: POST\n url: "{{baseUrl}}/api/otp"\n body: { phone: "{{phone}}" }\n extract:\n otp: "body.code"' }),
302
+ cmd({ key: "kafkaPublish", category: "Data / Hybrid", platforms: ALL, hybrid: true,
303
+ summary: "Publish a Kafka message through a workspace connection.",
304
+ args: [
305
+ { name: "connection", type: "string", required: true, description: "Kafka connection name or id." },
306
+ { name: "topic", type: "string", required: true, description: "Topic." },
307
+ { name: "key", type: "string", description: "Message key." },
308
+ { name: "value", type: "string|object", required: true, description: "Payload (mapping/list sent as JSON)." },
309
+ { name: "headers", type: "map", description: "Message headers." },
310
+ TIMEOUT,
311
+ ],
312
+ example: '- kafkaPublish:\n connection: "kafka-dev"\n topic: "orders"\n value: { id: "{{orderNo}}" }' }),
313
+ cmd({ key: "kafkaCheck", category: "Data / Hybrid", platforms: ALL, hybrid: true,
314
+ summary: "Wait for a Kafka message matching a filter; extract fields.",
315
+ args: [
316
+ { name: "connection", type: "string", required: true, description: "Kafka connection name or id." },
317
+ { name: "topic", type: "string", required: true, description: "Topic." },
318
+ { name: "filter", type: "string|object", description: "Match on key/value content." },
319
+ { name: "extract", type: "map", description: "{ var: path }." },
320
+ TIMEOUT,
321
+ ],
322
+ example: '- kafkaCheck:\n connection: "kafka-dev"\n topic: "order-events"\n filter: "{{orderNo}}"' }),
323
+ cmd({ key: "redisCheck", category: "Data / Hybrid", platforms: ALL, hybrid: true,
324
+ summary: "Read a Redis key; extract and assert.",
325
+ args: [
326
+ { name: "connection", type: "string", required: true, description: "Redis connection name or id." },
327
+ { name: "key", type: "string", required: true, description: "Key." },
328
+ { name: "extract", type: "map", description: "{ var: path }." },
329
+ { name: "expect", type: "map", description: "Expected values." },
330
+ ],
331
+ example: '- redisCheck:\n connection: "redis-dev"\n key: "otp:{{phone}}"\n extract:\n otp: "value"' }),
332
+ cmd({ key: "runScript", category: "Data / Hybrid", platforms: MOBILE, forms: ["scalar"], scalarArg: "path",
333
+ summary: "Run a JS file with the mobile engine.", args: [{ name: "path", type: "string", required: true, description: "Script file." }], example: '- runScript: "setup.js"' }),
334
+ // ── Media ─────────────────────────────────────────────────────────────────
335
+ cmd({ key: "takeScreenshot", aliases: ["screenshot"], category: "Media", platforms: ALL, forms: ["bare", "scalar"], scalarArg: "name",
336
+ summary: "Screenshot (success/failure screenshots are captured automatically).",
337
+ args: [{ name: "name", type: "string", description: "File name." }], example: "- takeScreenshot",
338
+ unavailable: "Screenshots are captured automatically on success and failure; manual screenshot steps are ignored." }),
339
+ cmd({ key: "addMedia", category: "Media", platforms: MOBILE, forms: ["mapping", "scalar"], scalarArg: "files",
340
+ summary: "Push media files to the device gallery.", args: [{ name: "files", type: "list", required: true, description: "File paths." }], example: '- addMedia:\n - "photo.png"' }),
341
+ cmd({ key: "assertScreenshot", category: "Media", platforms: MOBILE, forms: ["scalar"], scalarArg: "name", summary: "Visual regression against a baseline.",
342
+ args: [{ name: "name", type: "string", required: true, description: "Baseline." }], example: '- assertScreenshot: "home"', unavailable: "Visual regression isn't available yet." }),
343
+ cmd({ key: "startRecording", category: "Media", platforms: MOBILE, forms: ["scalar"], scalarArg: "name", summary: "Start screen recording.",
344
+ args: [{ name: "name", type: "string", description: "File." }], example: '- startRecording: "run"', unavailable: "Screen recording isn't available yet." }),
345
+ cmd({ key: "stopRecording", category: "Media", platforms: MOBILE, forms: ["bare"], summary: "Stop screen recording.", args: [], example: "- stopRecording", unavailable: "Screen recording isn't available yet." }),
346
+ // ── App lifecycle / Mobile device ─────────────────────────────────────────
347
+ cmd({ key: "stopApp", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "scalar"], scalarArg: "appId", summary: "Stop the app.",
348
+ args: [{ name: "appId", type: "string", description: "App id (default header appId)." }], example: "- stopApp" }),
349
+ cmd({ key: "killApp", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "scalar"], scalarArg: "appId", summary: "Kill the app process.",
350
+ args: [{ name: "appId", type: "string", description: "App id." }], example: "- killApp" }),
351
+ cmd({ key: "clearState", category: "App lifecycle", platforms: MOBILE, forms: ["bare", "scalar"], scalarArg: "appId", summary: "Clear app data.",
352
+ args: [{ name: "appId", type: "string", description: "App id." }], example: "- clearState" }),
353
+ cmd({ key: "clearKeychain", category: "App lifecycle", platforms: ["ios"], forms: ["bare"], summary: "Clear the iOS keychain.", args: [], example: "- clearKeychain" }),
354
+ cmd({ key: "setLocation", category: "Mobile device", platforms: MOBILE, summary: "Mock GPS location.",
355
+ args: [{ name: "latitude", type: "number", required: true, description: "Latitude." }, { name: "longitude", type: "number", required: true, description: "Longitude." }],
356
+ example: "- setLocation:\n latitude: 40.4093\n longitude: 49.8671" }),
357
+ cmd({ key: "travel", category: "Mobile device", platforms: MOBILE, summary: "Move the mocked location along points.",
358
+ args: [{ name: "points", type: "list", required: true, description: "[\"lat,lng\", …]." }, { name: "speedMPS", type: "number", description: "Speed m/s." }],
359
+ example: '- travel:\n points:\n - "40.40,49.86"\n - "40.41,49.87"\n speedMPS: 20' }),
360
+ cmd({ key: "setOrientation", category: "Mobile device", platforms: MOBILE, forms: ["scalar"], scalarArg: "orientation",
361
+ summary: "PORTRAIT | LANDSCAPE_LEFT | LANDSCAPE_RIGHT | UPSIDE_DOWN.", args: [{ name: "orientation", type: "string", required: true, description: "Orientation." }], example: "- setOrientation: LANDSCAPE_LEFT" }),
362
+ cmd({ key: "setAirplaneMode", category: "Mobile device", platforms: MOBILE, forms: ["scalar"], scalarArg: "state",
363
+ summary: "enabled | disabled.", args: [{ name: "state", type: "string", required: true, description: "enabled | disabled." }], example: "- setAirplaneMode: enabled" }),
364
+ cmd({ key: "toggleAirplaneMode", category: "Mobile device", platforms: MOBILE, forms: ["bare"], summary: "Toggle airplane mode.", args: [], example: "- toggleAirplaneMode" }),
365
+ cmd({ key: "setPermissions", category: "Mobile device", platforms: MOBILE, summary: "Grant/deny app permissions.",
366
+ args: [{ name: "permissions", type: "map", required: true, description: "{ camera: allow, location: deny, all: allow }." }, { name: "appId", type: "string", description: "App id." }],
367
+ example: "- setPermissions:\n permissions:\n camera: allow" }),
368
+ // ── AI ────────────────────────────────────────────────────────────────────
369
+ ...["assertWithAI", "assertNoDefectsWithAI", "extractTextWithAI"].map((key) => cmd({ key, category: "AI", platforms: MOBILE, forms: ["scalar", "mapping"], scalarArg: "assertion",
370
+ summary: "AI-evaluated screen assertion.", args: [{ name: "assertion", type: "string", description: "Instruction." }],
371
+ example: `- ${key}: "The cart shows 2 items"`, unavailable: "AI steps are not connected yet." })),
372
+ ];
373
+ const BY_KEY = new Map();
374
+ for (const c of exports.UI_TEST_COMMANDS) {
375
+ BY_KEY.set(c.key, c);
376
+ for (const a of c.aliases)
377
+ BY_KEY.set(a, c);
378
+ }
379
+ /** Look a YAML step key up (aliases included). */
380
+ function findUiTestCommand(key) {
381
+ return BY_KEY.get(key);
382
+ }
383
+ /** Header (config block) keys a flow may carry before `---`. */
384
+ exports.UI_TEST_HEADER_KEYS = [
385
+ { key: "url", platforms: WEB, description: "Entry URL the browser opens first (web flows). {{dataset}} allowed." },
386
+ { key: "appId", platforms: MOBILE, description: "Android package name / iOS bundle id (mobile flows)." },
387
+ { key: "appActivity", platforms: ["android"], description: "Launch activity (Android, optional)." },
388
+ { key: "deviceName", platforms: MOBILE, description: "Preferred device name (optional)." },
389
+ { key: "name", platforms: ALL, description: "Display name (informational)." },
390
+ { key: "tags", platforms: ALL, description: "Flow-file tags." },
391
+ { key: "env", platforms: ALL, description: "Default variables (dataset values win)." },
392
+ { key: "defineAttributes", platforms: ALL, description: "Same as env." },
393
+ { key: "onFlowStart", platforms: ALL, description: "Steps run before the flow (mobile engine)." },
394
+ { key: "onFlowComplete", platforms: ALL, description: "Steps run after the flow (mobile engine)." },
395
+ ];
396
+ /** Markdown reference of every step — served to AI tools. */
397
+ function renderUiTestCommandReference() {
398
+ const lines = [
399
+ "# UI-test steps",
400
+ "",
401
+ "A flow is a YAML document: an optional header (config) block, a `---` line, then a list of steps.",
402
+ "Each step is `- key` (bare), `- key: value` (scalar) or `- key:` with a mapping. Any step may carry `label:` (its display name).",
403
+ "`{{name}}` placeholders are filled from the flow dataset; values saved by `extract` / `copyTextFrom` are available to later steps as `{{var}}`.",
404
+ "",
405
+ "Platforms: **web** runs on Playwright (server runner or the desktop app); **android / ios** run on the mobile engine \"M\" in the desktop app.",
406
+ "Data / Hybrid steps (DB, API, Kafka, Redis, script) run on every platform, in order, between UI steps.",
407
+ "",
408
+ "## Header keys",
409
+ "",
410
+ "| Key | Platforms | Meaning |",
411
+ "|---|---|---|",
412
+ ...exports.UI_TEST_HEADER_KEYS.map((h) => `| \`${h.key}\` | ${h.platforms.join(", ")} | ${h.description} |`),
413
+ "",
414
+ ];
415
+ const byCat = new Map();
416
+ for (const c of exports.UI_TEST_COMMANDS) {
417
+ const list = byCat.get(c.category) ?? [];
418
+ list.push(c);
419
+ byCat.set(c.category, list);
420
+ }
421
+ for (const [cat, cmds] of byCat) {
422
+ lines.push(`## ${cat}`, "");
423
+ for (const c of cmds) {
424
+ const alias = c.aliases.length ? ` (aliases: ${c.aliases.map((a) => `\`${a}\``).join(", ")})` : "";
425
+ lines.push(`### \`${c.key}\`${alias}`, "");
426
+ lines.push(`${c.summary} Platforms: ${c.platforms.join(", ")}.${c.hybrid ? " Hybrid data step." : ""}`);
427
+ if (c.unavailable)
428
+ lines.push(`> Not runnable yet: ${c.unavailable}`);
429
+ const forms = c.forms.map((f) => (f === "scalar" && c.scalarArg ? `scalar (= ${c.scalarArg})` : f)).join(", ");
430
+ lines.push(`Forms: ${forms}.`);
431
+ if (c.args.length) {
432
+ lines.push("", "| Arg | Type | Req | Description |", "|---|---|---|---|");
433
+ for (const a of c.args)
434
+ lines.push(`| \`${a.name}\` | ${a.type} | ${a.required ? "yes" : ""} | ${a.description} |`);
435
+ }
436
+ lines.push("", "```yaml", c.example, "```", "");
437
+ }
438
+ }
439
+ return lines.join("\n");
440
+ }
441
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui-test/commands.ts"],"names":[],"mappings":"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"}