callman-core 1.30.0 → 1.32.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.
Files changed (96) hide show
  1. package/ai-packs/db-queries.md +1 -1
  2. package/ai-packs/scenario-nodes.md +33 -14
  3. package/dist/ai/prompts/scenario.d.ts.map +1 -1
  4. package/dist/ai/prompts/scenario.js +3 -2
  5. package/dist/ai/prompts/scenario.js.map +1 -1
  6. package/dist/ai/prompts/scenarioNodeReference.d.ts.map +1 -1
  7. package/dist/ai/prompts/scenarioNodeReference.js +56 -15
  8. package/dist/ai/prompts/scenarioNodeReference.js.map +1 -1
  9. package/dist/host/db/db-query-reference.js +1 -1
  10. package/dist/host/db/db-query-reference.js.map +1 -1
  11. package/dist/host/db/mongoAdapter.d.ts +1 -0
  12. package/dist/host/db/mongoAdapter.d.ts.map +1 -1
  13. package/dist/host/db/mongoAdapter.js +21 -0
  14. package/dist/host/db/mongoAdapter.js.map +1 -1
  15. package/dist/host/db/queryExecutor.js +2 -2
  16. package/dist/host/db/queryExecutor.js.map +1 -1
  17. package/dist/host/index.d.ts +1 -1
  18. package/dist/host/index.d.ts.map +1 -1
  19. package/dist/host/index.js +1 -1
  20. package/dist/host/index.js.map +1 -1
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/scenario-runner/adapters/index.d.ts +1 -0
  26. package/dist/scenario-runner/adapters/index.d.ts.map +1 -1
  27. package/dist/scenario-runner/adapters/index.js +1 -0
  28. package/dist/scenario-runner/adapters/index.js.map +1 -1
  29. package/dist/scenario-runner/adapters/kafka-executor.d.ts +5 -0
  30. package/dist/scenario-runner/adapters/kafka-executor.d.ts.map +1 -1
  31. package/dist/scenario-runner/adapters/kafka-executor.js +12 -3
  32. package/dist/scenario-runner/adapters/kafka-executor.js.map +1 -1
  33. package/dist/scenario-runner/adapters/types.d.ts +1 -0
  34. package/dist/scenario-runner/adapters/types.d.ts.map +1 -1
  35. package/dist/scenario-runner/index.d.ts +3 -0
  36. package/dist/scenario-runner/index.d.ts.map +1 -1
  37. package/dist/scenario-runner/index.js +5 -0
  38. package/dist/scenario-runner/index.js.map +1 -1
  39. package/dist/scenario-runner/kafkaEvent.d.ts +3 -0
  40. package/dist/scenario-runner/kafkaEvent.d.ts.map +1 -0
  41. package/dist/scenario-runner/kafkaEvent.js +18 -0
  42. package/dist/scenario-runner/kafkaEvent.js.map +1 -0
  43. package/dist/scenario-runner/nodePolicy.d.ts +8 -1
  44. package/dist/scenario-runner/nodePolicy.d.ts.map +1 -1
  45. package/dist/scenario-runner/nodePolicy.js +50 -0
  46. package/dist/scenario-runner/nodePolicy.js.map +1 -1
  47. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  48. package/dist/scenario-runner/runScenario.js +39 -22
  49. package/dist/scenario-runner/runScenario.js.map +1 -1
  50. package/dist/scenario-runner/scenarioReference.d.ts +45 -0
  51. package/dist/scenario-runner/scenarioReference.d.ts.map +1 -0
  52. package/dist/scenario-runner/scenarioReference.js +151 -0
  53. package/dist/scenario-runner/scenarioReference.js.map +1 -0
  54. package/dist/scenario-runner/types.d.ts +5 -0
  55. package/dist/scenario-runner/types.d.ts.map +1 -1
  56. package/dist/ui-test/commands.d.ts +54 -0
  57. package/dist/ui-test/commands.d.ts.map +1 -0
  58. package/dist/ui-test/commands.js +436 -0
  59. package/dist/ui-test/commands.js.map +1 -0
  60. package/dist/ui-test/flow-lint.d.ts +43 -0
  61. package/dist/ui-test/flow-lint.d.ts.map +1 -0
  62. package/dist/ui-test/flow-lint.js +229 -0
  63. package/dist/ui-test/flow-lint.js.map +1 -0
  64. package/dist-cjs/ai/prompts/scenario.js +3 -2
  65. package/dist-cjs/ai/prompts/scenario.js.map +1 -1
  66. package/dist-cjs/ai/prompts/scenarioNodeReference.js +56 -15
  67. package/dist-cjs/ai/prompts/scenarioNodeReference.js.map +1 -1
  68. package/dist-cjs/host/db/db-query-reference.js +1 -1
  69. package/dist-cjs/host/db/db-query-reference.js.map +1 -1
  70. package/dist-cjs/host/db/mongoAdapter.js +23 -1
  71. package/dist-cjs/host/db/mongoAdapter.js.map +1 -1
  72. package/dist-cjs/host/db/queryExecutor.js +1 -1
  73. package/dist-cjs/host/db/queryExecutor.js.map +1 -1
  74. package/dist-cjs/host/index.js +3 -2
  75. package/dist-cjs/host/index.js.map +1 -1
  76. package/dist-cjs/index.js +2 -0
  77. package/dist-cjs/index.js.map +1 -1
  78. package/dist-cjs/scenario-runner/adapters/index.js +9 -3
  79. package/dist-cjs/scenario-runner/adapters/index.js.map +1 -1
  80. package/dist-cjs/scenario-runner/adapters/kafka-executor.js +15 -4
  81. package/dist-cjs/scenario-runner/adapters/kafka-executor.js.map +1 -1
  82. package/dist-cjs/scenario-runner/index.js +21 -1
  83. package/dist-cjs/scenario-runner/index.js.map +1 -1
  84. package/dist-cjs/scenario-runner/kafkaEvent.js +22 -0
  85. package/dist-cjs/scenario-runner/kafkaEvent.js.map +1 -0
  86. package/dist-cjs/scenario-runner/nodePolicy.js +53 -1
  87. package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -1
  88. package/dist-cjs/scenario-runner/runScenario.js +38 -21
  89. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  90. package/dist-cjs/scenario-runner/scenarioReference.js +159 -0
  91. package/dist-cjs/scenario-runner/scenarioReference.js.map +1 -0
  92. package/dist-cjs/ui-test/commands.js +441 -0
  93. package/dist-cjs/ui-test/commands.js.map +1 -0
  94. package/dist-cjs/ui-test/flow-lint.js +235 -0
  95. package/dist-cjs/ui-test/flow-lint.js.map +1 -0
  96. package/package.json +3 -1
@@ -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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"}