@midscene/cli 0.7.2 → 0.7.3-beta-20241104100519.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/help.js +2 -2
- package/dist/es/index.js +252 -220
- package/dist/es/playground.js +0 -8
- package/dist/lib/help.js +2 -2
- package/dist/lib/index.js +37 -17
- package/dist/lib/playground.js +0 -9
- package/package.json +3 -3
package/dist/es/help.js
CHANGED
|
@@ -9,7 +9,7 @@ var require_package = __commonJS({
|
|
|
9
9
|
module.exports = {
|
|
10
10
|
name: "@midscene/cli",
|
|
11
11
|
description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
12
|
-
version: "0.7.
|
|
12
|
+
version: "0.7.3-beta-20241104100519.0",
|
|
13
13
|
repository: "https://github.com/web-infra-dev/midscene",
|
|
14
14
|
homepage: "https://midscenejs.com/",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
@@ -35,7 +35,7 @@ var require_package = __commonJS({
|
|
|
35
35
|
yargs: "17.7.2"
|
|
36
36
|
},
|
|
37
37
|
devDependencies: {
|
|
38
|
-
"@modern-js/module-tools": "2.
|
|
38
|
+
"@modern-js/module-tools": "2.60.6",
|
|
39
39
|
"@types/node": "^18.0.0",
|
|
40
40
|
"@types/yargs": "17.0.32",
|
|
41
41
|
execa: "9.3.0",
|
package/dist/es/index.js
CHANGED
|
@@ -1,7 +1,61 @@
|
|
|
1
1
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
+
var __esm = (fn, res) => function __init() {
|
|
3
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
4
|
+
};
|
|
2
5
|
var __commonJS = (cb, mod) => function __require() {
|
|
3
6
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
4
7
|
};
|
|
8
|
+
var __async = (__this, __arguments, generator) => {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
var fulfilled = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.next(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var rejected = (value) => {
|
|
18
|
+
try {
|
|
19
|
+
step(generator.throw(value));
|
|
20
|
+
} catch (e) {
|
|
21
|
+
reject(e);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
25
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/args.ts
|
|
30
|
+
function parse(args) {
|
|
31
|
+
const orderedArgs = [];
|
|
32
|
+
args.forEach((arg, index) => {
|
|
33
|
+
if (arg.startsWith("--")) {
|
|
34
|
+
const key = arg.substring(2);
|
|
35
|
+
let value = args[index + 1] && !args[index + 1].startsWith("--") ? args[index + 1] : true;
|
|
36
|
+
if (typeof value === "string" && /^\d+$/.test(value)) {
|
|
37
|
+
value = Number.parseInt(value, 10);
|
|
38
|
+
}
|
|
39
|
+
orderedArgs.push({ name: key, value });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return orderedArgs;
|
|
43
|
+
}
|
|
44
|
+
function findOnlyItemInArgs(args, name) {
|
|
45
|
+
const found = args.filter((arg) => arg.name === name);
|
|
46
|
+
if (found.length === 0) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (found.length > 1) {
|
|
50
|
+
throw new Error(`Multiple values found for ${name}`);
|
|
51
|
+
}
|
|
52
|
+
return found[0].value;
|
|
53
|
+
}
|
|
54
|
+
var init_args = __esm({
|
|
55
|
+
"src/args.ts"() {
|
|
56
|
+
"use strict";
|
|
57
|
+
}
|
|
58
|
+
});
|
|
5
59
|
|
|
6
60
|
// package.json
|
|
7
61
|
var require_package = __commonJS({
|
|
@@ -9,7 +63,7 @@ var require_package = __commonJS({
|
|
|
9
63
|
module.exports = {
|
|
10
64
|
name: "@midscene/cli",
|
|
11
65
|
description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
12
|
-
version: "0.7.
|
|
66
|
+
version: "0.7.3-beta-20241104100519.0",
|
|
13
67
|
repository: "https://github.com/web-infra-dev/midscene",
|
|
14
68
|
homepage: "https://midscenejs.com/",
|
|
15
69
|
"jsnext:source": "./src/index.ts",
|
|
@@ -35,7 +89,7 @@ var require_package = __commonJS({
|
|
|
35
89
|
yargs: "17.7.2"
|
|
36
90
|
},
|
|
37
91
|
devDependencies: {
|
|
38
|
-
"@modern-js/module-tools": "2.
|
|
92
|
+
"@modern-js/module-tools": "2.60.6",
|
|
39
93
|
"@types/node": "^18.0.0",
|
|
40
94
|
"@types/yargs": "17.0.32",
|
|
41
95
|
execa: "9.3.0",
|
|
@@ -60,229 +114,207 @@ import { writeFileSync } from "fs";
|
|
|
60
114
|
import { PuppeteerAgent } from "@midscene/web/puppeteer";
|
|
61
115
|
import ora from "ora-classic";
|
|
62
116
|
import puppeteer from "puppeteer";
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (
|
|
72
|
-
|
|
117
|
+
var require_src = __commonJS({
|
|
118
|
+
"src/index.ts"(exports) {
|
|
119
|
+
init_args();
|
|
120
|
+
var spinner;
|
|
121
|
+
var stepString = (name, param) => {
|
|
122
|
+
let paramStr;
|
|
123
|
+
if (typeof param === "object") {
|
|
124
|
+
paramStr = JSON.stringify(param, null, 2);
|
|
125
|
+
} else if (name === "sleep") {
|
|
126
|
+
paramStr = `${param}ms`;
|
|
127
|
+
} else {
|
|
128
|
+
paramStr = param;
|
|
73
129
|
}
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
return orderedArgs;
|
|
78
|
-
}
|
|
79
|
-
function findOnlyItemInArgs(args2, name) {
|
|
80
|
-
const found = args2.filter((arg) => arg.name === name);
|
|
81
|
-
if (found.length === 0) {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
if (found.length > 1) {
|
|
85
|
-
throw new Error(`Multiple values found for ${name}`);
|
|
86
|
-
}
|
|
87
|
-
return found[0].value;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// src/index.ts
|
|
91
|
-
var spinner;
|
|
92
|
-
var stepString = (name, param) => {
|
|
93
|
-
let paramStr;
|
|
94
|
-
if (typeof param === "object") {
|
|
95
|
-
paramStr = JSON.stringify(param, null, 2);
|
|
96
|
-
} else if (name === "sleep") {
|
|
97
|
-
paramStr = `${param}ms`;
|
|
98
|
-
} else {
|
|
99
|
-
paramStr = param;
|
|
100
|
-
}
|
|
101
|
-
return `${name}
|
|
130
|
+
return `${name}
|
|
102
131
|
${paramStr ? `${paramStr}` : ""}`;
|
|
103
|
-
};
|
|
104
|
-
var printStep = (name, param) => {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
110
|
-
var updateSpin = (text) => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
};
|
|
119
|
-
var preferenceArgs = {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
};
|
|
129
|
-
var actionArgs = {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
};
|
|
137
|
-
var defaultUA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36";
|
|
138
|
-
var welcome = "\nWelcome to @midscene/cli\n";
|
|
139
|
-
console.log(welcome);
|
|
140
|
-
var args = parse(process.argv);
|
|
141
|
-
if (findOnlyItemInArgs(args, "version")) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
args.forEach((arg) => {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
});
|
|
152
|
-
var preferHeaded = findOnlyItemInArgs(args, preferenceArgs.headed);
|
|
153
|
-
var userExpectWidth = findOnlyItemInArgs(args, preferenceArgs.viewportWidth);
|
|
154
|
-
var userExpectHeight = findOnlyItemInArgs(
|
|
155
|
-
args,
|
|
156
|
-
preferenceArgs.viewportHeight
|
|
157
|
-
);
|
|
158
|
-
var userExpectDpr = findOnlyItemInArgs(args, preferenceArgs.viewportScale);
|
|
159
|
-
var defaultDpr = process.platform === "darwin" ? 2 : 1;
|
|
160
|
-
var viewportConfig = {
|
|
161
|
-
width: typeof userExpectWidth === "number" ? userExpectWidth : 1280,
|
|
162
|
-
height: typeof userExpectHeight === "number" ? userExpectHeight : 1280,
|
|
163
|
-
deviceScaleFactor: typeof userExpectDpr === "number" ? userExpectDpr : defaultDpr
|
|
164
|
-
};
|
|
165
|
-
var url = findOnlyItemInArgs(args, preferenceArgs.url);
|
|
166
|
-
assert(url, "URL is required");
|
|
167
|
-
assert(typeof url === "string", "URL must be a string");
|
|
168
|
-
var preferredUA = findOnlyItemInArgs(args, preferenceArgs.useragent);
|
|
169
|
-
var ua = typeof preferredUA === "string" ? preferredUA : defaultUA;
|
|
170
|
-
printStep(preferenceArgs.url, url);
|
|
171
|
-
printStep(preferenceArgs.useragent, ua);
|
|
172
|
-
printStep("viewport", JSON.stringify(viewportConfig));
|
|
173
|
-
if (preferHeaded) {
|
|
174
|
-
printStep(preferenceArgs.headed, "true");
|
|
175
|
-
}
|
|
176
|
-
Promise.resolve(
|
|
177
|
-
(async () => {
|
|
178
|
-
updateSpin(stepString("launch", "puppeteer"));
|
|
179
|
-
const browser = await puppeteer.launch({
|
|
180
|
-
headless: !preferHeaded
|
|
132
|
+
};
|
|
133
|
+
var printStep = (name, param) => {
|
|
134
|
+
if (spinner) {
|
|
135
|
+
spinner.stop();
|
|
136
|
+
}
|
|
137
|
+
console.log(`- ${stepString(name, param)}`);
|
|
138
|
+
};
|
|
139
|
+
var updateSpin = (text) => {
|
|
140
|
+
if (!spinner) {
|
|
141
|
+
spinner = ora(text);
|
|
142
|
+
spinner.start();
|
|
143
|
+
} else {
|
|
144
|
+
spinner.text = text;
|
|
145
|
+
spinner.start();
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
var preferenceArgs = {
|
|
149
|
+
url: "url",
|
|
150
|
+
headed: "headed",
|
|
151
|
+
viewportWidth: "viewport-width",
|
|
152
|
+
viewportHeight: "viewport-height",
|
|
153
|
+
viewportScale: "viewport-scale",
|
|
154
|
+
useragent: "user-agent"
|
|
155
|
+
// preferCache: 'prefer-cache',
|
|
156
|
+
// cookie: 'cookie',
|
|
157
|
+
};
|
|
158
|
+
var actionArgs = {
|
|
159
|
+
action: "action",
|
|
160
|
+
assert: "assert",
|
|
161
|
+
queryOutput: "query-output",
|
|
162
|
+
query: "query",
|
|
163
|
+
sleep: "sleep",
|
|
164
|
+
waitFor: "wait-for"
|
|
165
|
+
};
|
|
166
|
+
var defaultUA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36";
|
|
167
|
+
var welcome = "\nWelcome to @midscene/cli\n";
|
|
168
|
+
console.log(welcome);
|
|
169
|
+
var args = parse(process.argv);
|
|
170
|
+
if (findOnlyItemInArgs(args, "version")) {
|
|
171
|
+
const versionFromPkgJson = require_package().version;
|
|
172
|
+
console.log(`@midscene/cli version ${versionFromPkgJson}`);
|
|
173
|
+
process.exit(0);
|
|
174
|
+
}
|
|
175
|
+
args.forEach((arg) => {
|
|
176
|
+
assert(
|
|
177
|
+
Object.values(preferenceArgs).includes(arg.name) || Object.values(actionArgs).includes(arg.name),
|
|
178
|
+
`Unknown argument: ${arg.name}`
|
|
179
|
+
);
|
|
181
180
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
case actionArgs.query: {
|
|
242
|
-
const param = arg.value;
|
|
243
|
-
assert(param, "missing query");
|
|
244
|
-
assert(typeof param === "string", "query must be a string");
|
|
245
|
-
const value = await agent.aiQuery(param);
|
|
246
|
-
printStep(argName, String(argValue));
|
|
247
|
-
printStep("answer", value);
|
|
248
|
-
if (outputPath) {
|
|
249
|
-
writeFileSync(
|
|
250
|
-
outputPath,
|
|
251
|
-
typeof value === "object" ? JSON.stringify(value, null, 2) : value
|
|
181
|
+
var preferHeaded = findOnlyItemInArgs(args, preferenceArgs.headed);
|
|
182
|
+
var userExpectWidth = findOnlyItemInArgs(args, preferenceArgs.viewportWidth);
|
|
183
|
+
var userExpectHeight = findOnlyItemInArgs(
|
|
184
|
+
args,
|
|
185
|
+
preferenceArgs.viewportHeight
|
|
186
|
+
);
|
|
187
|
+
var userExpectDpr = findOnlyItemInArgs(args, preferenceArgs.viewportScale);
|
|
188
|
+
var defaultDpr = process.platform === "darwin" ? 2 : 1;
|
|
189
|
+
var viewportConfig = {
|
|
190
|
+
width: typeof userExpectWidth === "number" ? userExpectWidth : 1280,
|
|
191
|
+
height: typeof userExpectHeight === "number" ? userExpectHeight : 1280,
|
|
192
|
+
deviceScaleFactor: typeof userExpectDpr === "number" ? userExpectDpr : defaultDpr
|
|
193
|
+
};
|
|
194
|
+
var url = findOnlyItemInArgs(args, preferenceArgs.url);
|
|
195
|
+
assert(url, "URL is required");
|
|
196
|
+
assert(typeof url === "string", "URL must be a string");
|
|
197
|
+
var preferredUA = findOnlyItemInArgs(args, preferenceArgs.useragent);
|
|
198
|
+
var ua = typeof preferredUA === "string" ? preferredUA : defaultUA;
|
|
199
|
+
printStep(preferenceArgs.url, url);
|
|
200
|
+
printStep(preferenceArgs.useragent, ua);
|
|
201
|
+
printStep("viewport", JSON.stringify(viewportConfig));
|
|
202
|
+
if (preferHeaded) {
|
|
203
|
+
printStep(preferenceArgs.headed, "true");
|
|
204
|
+
}
|
|
205
|
+
Promise.resolve(
|
|
206
|
+
(() => __async(exports, null, function* () {
|
|
207
|
+
updateSpin(stepString("launch", "puppeteer"));
|
|
208
|
+
const browser = yield puppeteer.launch({
|
|
209
|
+
headless: !preferHeaded
|
|
210
|
+
});
|
|
211
|
+
const page = yield browser.newPage();
|
|
212
|
+
yield page.setUserAgent(ua);
|
|
213
|
+
yield page.setViewport(viewportConfig);
|
|
214
|
+
let errorWhenRunning;
|
|
215
|
+
let argName;
|
|
216
|
+
let argValue;
|
|
217
|
+
let agent;
|
|
218
|
+
try {
|
|
219
|
+
updateSpin(stepString("launch", url));
|
|
220
|
+
yield page.goto(url);
|
|
221
|
+
updateSpin(stepString("waitForNetworkIdle", url));
|
|
222
|
+
yield page.waitForNetworkIdle();
|
|
223
|
+
printStep("launched", url);
|
|
224
|
+
agent = new PuppeteerAgent(page, {
|
|
225
|
+
autoPrintReportMsg: false
|
|
226
|
+
});
|
|
227
|
+
let index = 0;
|
|
228
|
+
let outputPath;
|
|
229
|
+
let actionStarted = false;
|
|
230
|
+
while (index <= args.length - 1) {
|
|
231
|
+
const arg = args[index];
|
|
232
|
+
argName = arg.name;
|
|
233
|
+
argValue = arg.value;
|
|
234
|
+
updateSpin(stepString(argName, String(argValue)));
|
|
235
|
+
const validActionArg = Object.values(actionArgs).includes(argName);
|
|
236
|
+
if (actionStarted) {
|
|
237
|
+
assert(
|
|
238
|
+
validActionArg,
|
|
239
|
+
`You cannot put --${argName} here. Please change the order of the arguments.`
|
|
252
240
|
);
|
|
253
241
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
242
|
+
if (validActionArg) {
|
|
243
|
+
actionStarted = true;
|
|
244
|
+
}
|
|
245
|
+
switch (argName) {
|
|
246
|
+
case actionArgs.action: {
|
|
247
|
+
const param = arg.value;
|
|
248
|
+
assert(param, "missing action");
|
|
249
|
+
assert(typeof param === "string", "action must be a string");
|
|
250
|
+
yield agent.aiAction(param);
|
|
251
|
+
printStep(argName, String(argValue));
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
case actionArgs.assert: {
|
|
255
|
+
const param = arg.value;
|
|
256
|
+
assert(param, "missing assert");
|
|
257
|
+
assert(typeof param === "string", "assert must be a string");
|
|
258
|
+
yield agent.aiAssert(param);
|
|
259
|
+
printStep(argName, String(argValue));
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
case actionArgs.queryOutput: {
|
|
263
|
+
const param = arg.value;
|
|
264
|
+
assert(param, "missing query-output");
|
|
265
|
+
assert(typeof param === "string", "query-output must be a string");
|
|
266
|
+
outputPath = param;
|
|
267
|
+
printStep(argName, String(argValue));
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
case actionArgs.query: {
|
|
271
|
+
const param = arg.value;
|
|
272
|
+
assert(param, "missing query");
|
|
273
|
+
assert(typeof param === "string", "query must be a string");
|
|
274
|
+
const value = yield agent.aiQuery(param);
|
|
275
|
+
printStep(argName, String(argValue));
|
|
276
|
+
printStep("answer", value);
|
|
277
|
+
if (outputPath) {
|
|
278
|
+
writeFileSync(
|
|
279
|
+
outputPath,
|
|
280
|
+
typeof value === "object" ? JSON.stringify(value, null, 2) : value
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
case actionArgs.sleep: {
|
|
286
|
+
const param = arg.value;
|
|
287
|
+
if (!param)
|
|
288
|
+
break;
|
|
289
|
+
assert(typeof param === "number", "sleep must be a number");
|
|
290
|
+
yield new Promise((resolve) => setTimeout(resolve, param));
|
|
291
|
+
printStep(argName, String(argValue));
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
case actionArgs.waitFor: {
|
|
295
|
+
const param = arg.value;
|
|
296
|
+
assert(param, "missing assertion for waitFor");
|
|
297
|
+
assert(typeof param === "string", "assertion must be a string");
|
|
298
|
+
yield agent.aiWaitFor(param);
|
|
299
|
+
printStep(argName, String(argValue));
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
index += 1;
|
|
264
304
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
printStep(argName, String(argValue));
|
|
271
|
-
break;
|
|
305
|
+
printStep("Done", `report: ${agent.reportFile}`);
|
|
306
|
+
} catch (e) {
|
|
307
|
+
printStep(`${argName} - Failed`, String(argValue));
|
|
308
|
+
if (agent == null ? void 0 : agent.reportFile) {
|
|
309
|
+
printStep("Report", agent.reportFile);
|
|
272
310
|
}
|
|
311
|
+
printStep("Error", e.message);
|
|
312
|
+
errorWhenRunning = e;
|
|
273
313
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
printStep("Error", e.message);
|
|
283
|
-
errorWhenRunning = e;
|
|
284
|
-
}
|
|
285
|
-
await browser.close();
|
|
286
|
-
process.exit(errorWhenRunning ? 1 : 0);
|
|
287
|
-
})()
|
|
288
|
-
);
|
|
314
|
+
yield browser.close();
|
|
315
|
+
process.exit(errorWhenRunning ? 1 : 0);
|
|
316
|
+
}))()
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
export default require_src();
|
package/dist/es/playground.js
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// src/playground.ts
|
|
2
|
-
import { PlaygroundServer } from "@midscene/web/playground";
|
|
3
|
-
var server = new PlaygroundServer();
|
|
4
|
-
Promise.resolve().then(() => server.launch()).then(() => {
|
|
5
|
-
console.log(
|
|
6
|
-
`Midscene playground server is running on http://localhost:${server.port}`
|
|
7
|
-
);
|
|
8
|
-
});
|
package/dist/lib/help.js
CHANGED
|
@@ -10,7 +10,7 @@ var require_package = __commonJS({
|
|
|
10
10
|
module2.exports = {
|
|
11
11
|
name: "@midscene/cli",
|
|
12
12
|
description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
13
|
-
version: "0.7.
|
|
13
|
+
version: "0.7.3-beta-20241104100519.0",
|
|
14
14
|
repository: "https://github.com/web-infra-dev/midscene",
|
|
15
15
|
homepage: "https://midscenejs.com/",
|
|
16
16
|
"jsnext:source": "./src/index.ts",
|
|
@@ -36,7 +36,7 @@ var require_package = __commonJS({
|
|
|
36
36
|
yargs: "17.7.2"
|
|
37
37
|
},
|
|
38
38
|
devDependencies: {
|
|
39
|
-
"@modern-js/module-tools": "2.
|
|
39
|
+
"@modern-js/module-tools": "2.60.6",
|
|
40
40
|
"@types/node": "^18.0.0",
|
|
41
41
|
"@types/yargs": "17.0.32",
|
|
42
42
|
execa: "9.3.0",
|
package/dist/lib/index.js
CHANGED
|
@@ -24,14 +24,34 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
25
|
mod
|
|
26
26
|
));
|
|
27
|
+
var __async = (__this, __arguments, generator) => {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
var fulfilled = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.next(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var rejected = (value) => {
|
|
37
|
+
try {
|
|
38
|
+
step(generator.throw(value));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
reject(e);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
44
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
45
|
+
});
|
|
46
|
+
};
|
|
27
47
|
|
|
28
48
|
// package.json
|
|
29
49
|
var require_package = __commonJS({
|
|
30
|
-
"package.json"(
|
|
50
|
+
"package.json"(exports2, module2) {
|
|
31
51
|
module2.exports = {
|
|
32
52
|
name: "@midscene/cli",
|
|
33
53
|
description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
34
|
-
version: "0.7.
|
|
54
|
+
version: "0.7.3-beta-20241104100519.0",
|
|
35
55
|
repository: "https://github.com/web-infra-dev/midscene",
|
|
36
56
|
homepage: "https://midscenejs.com/",
|
|
37
57
|
"jsnext:source": "./src/index.ts",
|
|
@@ -57,7 +77,7 @@ var require_package = __commonJS({
|
|
|
57
77
|
yargs: "17.7.2"
|
|
58
78
|
},
|
|
59
79
|
devDependencies: {
|
|
60
|
-
"@modern-js/module-tools": "2.
|
|
80
|
+
"@modern-js/module-tools": "2.60.6",
|
|
61
81
|
"@types/node": "^18.0.0",
|
|
62
82
|
"@types/yargs": "17.0.32",
|
|
63
83
|
execa: "9.3.0",
|
|
@@ -196,23 +216,23 @@ if (preferHeaded) {
|
|
|
196
216
|
printStep(preferenceArgs.headed, "true");
|
|
197
217
|
}
|
|
198
218
|
Promise.resolve(
|
|
199
|
-
(
|
|
219
|
+
(() => __async(exports, null, function* () {
|
|
200
220
|
updateSpin(stepString("launch", "puppeteer"));
|
|
201
|
-
const browser =
|
|
221
|
+
const browser = yield import_puppeteer2.default.launch({
|
|
202
222
|
headless: !preferHeaded
|
|
203
223
|
});
|
|
204
|
-
const page =
|
|
205
|
-
|
|
206
|
-
|
|
224
|
+
const page = yield browser.newPage();
|
|
225
|
+
yield page.setUserAgent(ua);
|
|
226
|
+
yield page.setViewport(viewportConfig);
|
|
207
227
|
let errorWhenRunning;
|
|
208
228
|
let argName;
|
|
209
229
|
let argValue;
|
|
210
230
|
let agent;
|
|
211
231
|
try {
|
|
212
232
|
updateSpin(stepString("launch", url));
|
|
213
|
-
|
|
233
|
+
yield page.goto(url);
|
|
214
234
|
updateSpin(stepString("waitForNetworkIdle", url));
|
|
215
|
-
|
|
235
|
+
yield page.waitForNetworkIdle();
|
|
216
236
|
printStep("launched", url);
|
|
217
237
|
agent = new import_puppeteer.PuppeteerAgent(page, {
|
|
218
238
|
autoPrintReportMsg: false
|
|
@@ -240,7 +260,7 @@ Promise.resolve(
|
|
|
240
260
|
const param = arg.value;
|
|
241
261
|
(0, import_node_assert.default)(param, "missing action");
|
|
242
262
|
(0, import_node_assert.default)(typeof param === "string", "action must be a string");
|
|
243
|
-
|
|
263
|
+
yield agent.aiAction(param);
|
|
244
264
|
printStep(argName, String(argValue));
|
|
245
265
|
break;
|
|
246
266
|
}
|
|
@@ -248,7 +268,7 @@ Promise.resolve(
|
|
|
248
268
|
const param = arg.value;
|
|
249
269
|
(0, import_node_assert.default)(param, "missing assert");
|
|
250
270
|
(0, import_node_assert.default)(typeof param === "string", "assert must be a string");
|
|
251
|
-
|
|
271
|
+
yield agent.aiAssert(param);
|
|
252
272
|
printStep(argName, String(argValue));
|
|
253
273
|
break;
|
|
254
274
|
}
|
|
@@ -264,7 +284,7 @@ Promise.resolve(
|
|
|
264
284
|
const param = arg.value;
|
|
265
285
|
(0, import_node_assert.default)(param, "missing query");
|
|
266
286
|
(0, import_node_assert.default)(typeof param === "string", "query must be a string");
|
|
267
|
-
const value =
|
|
287
|
+
const value = yield agent.aiQuery(param);
|
|
268
288
|
printStep(argName, String(argValue));
|
|
269
289
|
printStep("answer", value);
|
|
270
290
|
if (outputPath) {
|
|
@@ -280,7 +300,7 @@ Promise.resolve(
|
|
|
280
300
|
if (!param)
|
|
281
301
|
break;
|
|
282
302
|
(0, import_node_assert.default)(typeof param === "number", "sleep must be a number");
|
|
283
|
-
|
|
303
|
+
yield new Promise((resolve) => setTimeout(resolve, param));
|
|
284
304
|
printStep(argName, String(argValue));
|
|
285
305
|
break;
|
|
286
306
|
}
|
|
@@ -288,7 +308,7 @@ Promise.resolve(
|
|
|
288
308
|
const param = arg.value;
|
|
289
309
|
(0, import_node_assert.default)(param, "missing assertion for waitFor");
|
|
290
310
|
(0, import_node_assert.default)(typeof param === "string", "assertion must be a string");
|
|
291
|
-
|
|
311
|
+
yield agent.aiWaitFor(param);
|
|
292
312
|
printStep(argName, String(argValue));
|
|
293
313
|
break;
|
|
294
314
|
}
|
|
@@ -304,7 +324,7 @@ Promise.resolve(
|
|
|
304
324
|
printStep("Error", e.message);
|
|
305
325
|
errorWhenRunning = e;
|
|
306
326
|
}
|
|
307
|
-
|
|
327
|
+
yield browser.close();
|
|
308
328
|
process.exit(errorWhenRunning ? 1 : 0);
|
|
309
|
-
})()
|
|
329
|
+
}))()
|
|
310
330
|
);
|
package/dist/lib/playground.js
CHANGED
|
@@ -1,10 +1 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
// src/playground.ts
|
|
4
|
-
var import_playground = require("@midscene/web/playground");
|
|
5
|
-
var server = new import_playground.PlaygroundServer();
|
|
6
|
-
Promise.resolve().then(() => server.launch()).then(() => {
|
|
7
|
-
console.log(
|
|
8
|
-
`Midscene playground server is running on http://localhost:${server.port}`
|
|
9
|
-
);
|
|
10
|
-
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/cli",
|
|
3
3
|
"description": "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.3-beta-20241104100519.0",
|
|
5
5
|
"repository": "https://github.com/web-infra-dev/midscene",
|
|
6
6
|
"homepage": "https://midscenejs.com/",
|
|
7
7
|
"jsnext:source": "./src/index.ts",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"ora-classic": "5.4.2",
|
|
19
19
|
"puppeteer": "23.0.2",
|
|
20
20
|
"yargs": "17.7.2",
|
|
21
|
-
"@midscene/web": "0.7.
|
|
21
|
+
"@midscene/web": "0.7.3-beta-20241104100519.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@modern-js/module-tools": "2.
|
|
24
|
+
"@modern-js/module-tools": "2.60.6",
|
|
25
25
|
"@types/node": "^18.0.0",
|
|
26
26
|
"@types/yargs": "17.0.32",
|
|
27
27
|
"execa": "9.3.0",
|