@dyyz1993/agent-browser 0.13.2 → 0.24.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/README.md +108 -0
- package/bin/agent-browser-darwin-arm64 +0 -0
- package/bin/agent-browser-darwin-x64 +0 -0
- package/bin/agent-browser-linux-arm64 +0 -0
- package/bin/agent-browser-linux-x64 +0 -0
- package/bin/agent-browser-win32-x64.exe +0 -0
- package/dist/__tests__/e2e/utils/test-helpers.d.ts +1 -0
- package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -1
- package/dist/__tests__/e2e/utils/test-helpers.js +14 -1
- package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -1
- package/dist/__tests__/utils/free-port.d.ts +2 -0
- package/dist/__tests__/utils/free-port.d.ts.map +1 -0
- package/dist/__tests__/utils/free-port.js +18 -0
- package/dist/__tests__/utils/free-port.js.map +1 -0
- package/dist/__tests__/utils/parseCli.d.ts.map +1 -1
- package/dist/__tests__/utils/parseCli.js +83 -9
- package/dist/__tests__/utils/parseCli.js.map +1 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +298 -9
- package/dist/actions.js.map +1 -1
- package/dist/browser.d.ts +11 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +75 -19
- package/dist/browser.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +172 -15
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/connection.d.ts +13 -0
- package/dist/cli/connection.d.ts.map +1 -1
- package/dist/cli/connection.js +137 -48
- package/dist/cli/connection.js.map +1 -1
- package/dist/cli/flags.d.ts.map +1 -1
- package/dist/cli/flags.js +0 -1
- package/dist/cli/flags.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +63 -22
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +0 -32
- package/dist/cli/output.js.map +1 -1
- package/dist/cli.js +20 -2
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +1 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +291 -264
- package/dist/daemon.js.map +1 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +1 -1
- package/dist/diff.js.map +1 -1
- package/dist/flow/exporters/cypress.d.ts +9 -0
- package/dist/flow/exporters/cypress.d.ts.map +1 -0
- package/dist/flow/exporters/cypress.js +256 -0
- package/dist/flow/exporters/cypress.js.map +1 -0
- package/dist/flow/exporters/index.d.ts +6 -0
- package/dist/flow/exporters/index.d.ts.map +1 -0
- package/dist/flow/exporters/index.js +5 -0
- package/dist/flow/exporters/index.js.map +1 -0
- package/dist/flow/exporters/playwright.d.ts +20 -0
- package/dist/flow/exporters/playwright.d.ts.map +1 -0
- package/dist/flow/exporters/playwright.js +175 -0
- package/dist/flow/exporters/playwright.js.map +1 -0
- package/dist/flow/exporters/python.d.ts +20 -0
- package/dist/flow/exporters/python.d.ts.map +1 -0
- package/dist/flow/exporters/python.js +163 -0
- package/dist/flow/exporters/python.js.map +1 -0
- package/dist/flow/exporters/selenium.d.ts +9 -0
- package/dist/flow/exporters/selenium.d.ts.map +1 -0
- package/dist/flow/exporters/selenium.js +298 -0
- package/dist/flow/exporters/selenium.js.map +1 -0
- package/dist/flow/exporters/types.d.ts +13 -0
- package/dist/flow/exporters/types.d.ts.map +1 -0
- package/dist/flow/exporters/types.js +2 -0
- package/dist/flow/exporters/types.js.map +1 -0
- package/dist/flow/flow-executor.d.ts +57 -0
- package/dist/flow/flow-executor.d.ts.map +1 -0
- package/dist/flow/flow-executor.js +1263 -0
- package/dist/flow/flow-executor.js.map +1 -0
- package/dist/flow/index.d.ts +15 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +10 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/output.d.ts +11 -0
- package/dist/flow/output.d.ts.map +1 -0
- package/dist/flow/output.js +84 -0
- package/dist/flow/output.js.map +1 -0
- package/dist/flow/plugin-system.d.ts +48 -0
- package/dist/flow/plugin-system.d.ts.map +1 -0
- package/dist/flow/plugin-system.js +132 -0
- package/dist/flow/plugin-system.js.map +1 -0
- package/dist/flow/plugins/file-output-plugin.d.ts +8 -0
- package/dist/flow/plugins/file-output-plugin.d.ts.map +1 -0
- package/dist/flow/plugins/file-output-plugin.js +31 -0
- package/dist/flow/plugins/file-output-plugin.js.map +1 -0
- package/dist/flow/plugins/index.d.ts +4 -0
- package/dist/flow/plugins/index.d.ts.map +1 -0
- package/dist/flow/plugins/index.js +4 -0
- package/dist/flow/plugins/index.js.map +1 -0
- package/dist/flow/plugins/logging-plugin.d.ts +7 -0
- package/dist/flow/plugins/logging-plugin.d.ts.map +1 -0
- package/dist/flow/plugins/logging-plugin.js +40 -0
- package/dist/flow/plugins/logging-plugin.js.map +1 -0
- package/dist/flow/plugins/webhook-plugin.d.ts +7 -0
- package/dist/flow/plugins/webhook-plugin.d.ts.map +1 -0
- package/dist/flow/plugins/webhook-plugin.js +24 -0
- package/dist/flow/plugins/webhook-plugin.js.map +1 -0
- package/dist/flow/presets/index.d.ts +10 -0
- package/dist/flow/presets/index.d.ts.map +1 -0
- package/dist/flow/presets/index.js +29 -0
- package/dist/flow/presets/index.js.map +1 -0
- package/dist/flow/recorder-to-flow.d.ts +70 -0
- package/dist/flow/recorder-to-flow.d.ts.map +1 -0
- package/dist/flow/recorder-to-flow.js +392 -0
- package/dist/flow/recorder-to-flow.js.map +1 -0
- package/dist/flow/site-manager.d.ts +24 -0
- package/dist/flow/site-manager.d.ts.map +1 -0
- package/dist/flow/site-manager.js +125 -0
- package/dist/flow/site-manager.js.map +1 -0
- package/dist/flow/types.d.ts +196 -0
- package/dist/flow/types.d.ts.map +1 -0
- package/dist/flow/types.js +2 -0
- package/dist/flow/types.js.map +1 -0
- package/dist/flow/yaml-parser.d.ts +15 -0
- package/dist/flow/yaml-parser.d.ts.map +1 -0
- package/dist/flow/yaml-parser.js +216 -0
- package/dist/flow/yaml-parser.js.map +1 -0
- package/dist/human-mouse.d.ts.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +15 -11
- package/dist/protocol.js.map +1 -1
- package/dist/rc-config.d.ts.map +1 -1
- package/dist/rc-config.js +1 -2
- package/dist/rc-config.js.map +1 -1
- package/dist/recorder/inject.js +730 -332
- package/dist/snapshot-store.d.ts +83 -0
- package/dist/snapshot-store.d.ts.map +1 -0
- package/dist/snapshot-store.js +112 -0
- package/dist/snapshot-store.js.map +1 -0
- package/dist/snapshot.d.ts +6 -7
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +471 -17
- package/dist/snapshot.js.map +1 -1
- package/dist/stream-server-standalone.d.ts.map +1 -1
- package/dist/stream-server-standalone.js.map +1 -1
- package/dist/stream-server.d.ts.map +1 -1
- package/dist/stream-server.js +38 -13
- package/dist/stream-server.js.map +1 -1
- package/dist/test-live.js +5 -5
- package/dist/test-live.js.map +1 -1
- package/dist/types.d.ts +13 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/viewer-script.d.ts.map +1 -1
- package/dist/viewer-script.js +12 -6
- package/dist/viewer-script.js.map +1 -1
- package/package.json +18 -5
- package/skills/agent-browser/SKILL.md +151 -3
- package/dist/ios-actions.d.ts +0 -11
- package/dist/ios-actions.d.ts.map +0 -1
- package/dist/ios-actions.js +0 -228
- package/dist/ios-actions.js.map +0 -1
- package/dist/ios-manager.d.ts +0 -266
- package/dist/ios-manager.d.ts.map +0 -1
- package/dist/ios-manager.js +0 -1076
- package/dist/ios-manager.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const PRESETS: Record<string, {
|
|
2
|
+
script: string;
|
|
3
|
+
description: string;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function getPreset(name: string): string | null;
|
|
6
|
+
export declare function listPresets(): Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/flow/presets/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAiB3E,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,WAAW,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1E"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { resolve, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
export const PRESETS = {
|
|
6
|
+
'fetch-capture': {
|
|
7
|
+
script: readFileSync(resolve(__dirname, 'fetch-capture.js'), 'utf-8'),
|
|
8
|
+
description: 'Intercept fetch/XHR/SSE responses with closure-protected storage',
|
|
9
|
+
},
|
|
10
|
+
'xhr-only': {
|
|
11
|
+
script: readFileSync(resolve(__dirname, 'xhr-only.js'), 'utf-8'),
|
|
12
|
+
description: 'Intercept XMLHttpRequest only (minimal overhead)',
|
|
13
|
+
},
|
|
14
|
+
'sse-stream': {
|
|
15
|
+
script: readFileSync(resolve(__dirname, 'sse-stream.js'), 'utf-8'),
|
|
16
|
+
description: 'Capture Server-Sent Events (EventSource) messages',
|
|
17
|
+
},
|
|
18
|
+
'console-capture': {
|
|
19
|
+
script: readFileSync(resolve(__dirname, 'console-capture.js'), 'utf-8'),
|
|
20
|
+
description: 'Capture console.log/warn/error output',
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export function getPreset(name) {
|
|
24
|
+
return PRESETS[name]?.script || null;
|
|
25
|
+
}
|
|
26
|
+
export function listPresets() {
|
|
27
|
+
return Object.entries(PRESETS).map(([name, { description }]) => ({ name, description }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/flow/presets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,OAAO,GAA4D;IAC9E,eAAe,EAAE;QACf,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;QACrE,WAAW,EAAE,kEAAkE;KAChF;IACD,UAAU,EAAE;QACV,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAChE,WAAW,EAAE,kDAAkD;KAChE;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAClE,WAAW,EAAE,mDAAmD;KACjE;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QACvE,WAAW,EAAE,uCAAuC;KACrD;CACF,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { SiteDefinition } from './types.js';
|
|
2
|
+
export interface RecorderAnnotation {
|
|
3
|
+
type: 'wait_element' | 'wait_timeout' | 'data_container' | 'data_item' | 'pagination' | 'login_check' | 'checkpoint' | 'custom';
|
|
4
|
+
label: string;
|
|
5
|
+
selector?: string;
|
|
6
|
+
waitTimeout?: number;
|
|
7
|
+
itemSelector?: string;
|
|
8
|
+
fields?: string[];
|
|
9
|
+
nextSelector?: string;
|
|
10
|
+
customNote?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ElementIdentity {
|
|
13
|
+
tagName: string;
|
|
14
|
+
textContent: string;
|
|
15
|
+
attributes: Record<string, string>;
|
|
16
|
+
classes: string[];
|
|
17
|
+
boundingRect: {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
23
|
+
parentSignature: string;
|
|
24
|
+
}
|
|
25
|
+
export interface RecorderStep {
|
|
26
|
+
id: string;
|
|
27
|
+
time?: string;
|
|
28
|
+
timestamp?: number;
|
|
29
|
+
action: string;
|
|
30
|
+
selector?: string;
|
|
31
|
+
xpath?: string;
|
|
32
|
+
value?: string;
|
|
33
|
+
url?: string;
|
|
34
|
+
annotation?: RecorderAnnotation;
|
|
35
|
+
fallbackSelectors?: string[];
|
|
36
|
+
elementIdentity?: ElementIdentity;
|
|
37
|
+
signalType?: 'url_change' | 'dom_stable';
|
|
38
|
+
data?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
export interface RecorderYaml {
|
|
41
|
+
session: {
|
|
42
|
+
id: string;
|
|
43
|
+
startTime: string;
|
|
44
|
+
endTime: string;
|
|
45
|
+
steps: number;
|
|
46
|
+
};
|
|
47
|
+
pages?: Array<{
|
|
48
|
+
url: string;
|
|
49
|
+
title: string;
|
|
50
|
+
firstVisitTime: string;
|
|
51
|
+
}>;
|
|
52
|
+
steps: RecorderStep[];
|
|
53
|
+
}
|
|
54
|
+
export interface RecorderToFlowOptions {
|
|
55
|
+
flowId?: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
baseUrl?: string;
|
|
58
|
+
siteName?: string;
|
|
59
|
+
maxPaginateIterations?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface RecorderToFlowResult {
|
|
62
|
+
site: SiteDefinition;
|
|
63
|
+
warnings: string[];
|
|
64
|
+
}
|
|
65
|
+
export declare function recorderToFlow(recorderYaml: RecorderYaml, options?: RecorderToFlowOptions): RecorderToFlowResult;
|
|
66
|
+
export declare function parseRecorderYaml(content: string): RecorderYaml;
|
|
67
|
+
export declare function recorderToFlowFromYamlString(yamlContent: string, options?: RecorderToFlowOptions): RecorderToFlowResult;
|
|
68
|
+
export declare function recorderToFlowFromFile(filePath: string, options?: RecorderToFlowOptions): RecorderToFlowResult;
|
|
69
|
+
export declare function siteToYamlString(site: SiteDefinition): string;
|
|
70
|
+
//# sourceMappingURL=recorder-to-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder-to-flow.d.ts","sourceRoot":"","sources":["../../src/flow/recorder-to-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
export function recorderToFlow(recorderYaml, options) {
|
|
5
|
+
const warnings = [];
|
|
6
|
+
const steps = [];
|
|
7
|
+
let hasPagination = false;
|
|
8
|
+
let paginationNextSelector = '';
|
|
9
|
+
let paginationStepIndex = -1;
|
|
10
|
+
let dataContainerFound = false;
|
|
11
|
+
let dataContainerSelector = '';
|
|
12
|
+
let dataItemFields = {};
|
|
13
|
+
for (let i = 0; i < recorderYaml.steps.length; i++) {
|
|
14
|
+
const step = recorderYaml.steps[i];
|
|
15
|
+
if (step.annotation) {
|
|
16
|
+
switch (step.annotation.type) {
|
|
17
|
+
case 'pagination':
|
|
18
|
+
hasPagination = true;
|
|
19
|
+
paginationNextSelector =
|
|
20
|
+
step.annotation.nextSelector || step.annotation.selector || step.selector || '';
|
|
21
|
+
paginationStepIndex = i;
|
|
22
|
+
warnings.push(`Pagination annotation at step "${step.id}" with selector "${paginationNextSelector}"`);
|
|
23
|
+
break;
|
|
24
|
+
case 'data_container':
|
|
25
|
+
dataContainerFound = true;
|
|
26
|
+
dataContainerSelector =
|
|
27
|
+
step.annotation.itemSelector || step.annotation.selector || step.selector || '';
|
|
28
|
+
warnings.push(`Data container annotation with selector "${dataContainerSelector}"`);
|
|
29
|
+
continue;
|
|
30
|
+
case 'data_item':
|
|
31
|
+
if (step.annotation.fields) {
|
|
32
|
+
for (const field of step.annotation.fields) {
|
|
33
|
+
dataItemFields[field] = field;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
warnings.push(`Data item annotation with fields: ${Object.keys(dataItemFields).join(', ')}`);
|
|
37
|
+
continue;
|
|
38
|
+
case 'wait_element':
|
|
39
|
+
steps.push({
|
|
40
|
+
id: step.id,
|
|
41
|
+
action: 'wait',
|
|
42
|
+
selector: step.annotation.selector || step.selector,
|
|
43
|
+
timeout: step.annotation.waitTimeout || 5000,
|
|
44
|
+
});
|
|
45
|
+
continue;
|
|
46
|
+
case 'wait_timeout':
|
|
47
|
+
steps.push({
|
|
48
|
+
id: step.id,
|
|
49
|
+
action: 'wait',
|
|
50
|
+
timeout: step.annotation.waitTimeout || 5000,
|
|
51
|
+
});
|
|
52
|
+
continue;
|
|
53
|
+
case 'login_check': {
|
|
54
|
+
const loginStep = {
|
|
55
|
+
id: step.id || `login-check-${i}`,
|
|
56
|
+
action: 'autoRecover',
|
|
57
|
+
blockingConditions: [
|
|
58
|
+
{ selector: step.selector || step.annotation.selector || '' },
|
|
59
|
+
{ urlPattern: '/login' },
|
|
60
|
+
],
|
|
61
|
+
intervention: {
|
|
62
|
+
message: step.annotation.customNote || 'Login required, please complete login via Viewer',
|
|
63
|
+
openViewer: true,
|
|
64
|
+
mode: 'wait',
|
|
65
|
+
},
|
|
66
|
+
resolveTimeout: 120000,
|
|
67
|
+
checkInterval: 2000,
|
|
68
|
+
};
|
|
69
|
+
steps.push(loginStep);
|
|
70
|
+
warnings.push(`login check annotation at step "${step.id}"`);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
case 'checkpoint':
|
|
74
|
+
steps.push({
|
|
75
|
+
id: step.id,
|
|
76
|
+
action: 'snapshot',
|
|
77
|
+
selector: step.selector,
|
|
78
|
+
});
|
|
79
|
+
continue;
|
|
80
|
+
case 'custom':
|
|
81
|
+
warnings.push(`Custom annotation at step "${step.id}": ${step.annotation.customNote || step.annotation.label}`);
|
|
82
|
+
{
|
|
83
|
+
const flowStep = convertStep(step);
|
|
84
|
+
if (flowStep)
|
|
85
|
+
steps.push(flowStep);
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (step.action === 'annotate') {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (step.action === 'environment_signal') {
|
|
94
|
+
if (step.signalType === 'url_change') {
|
|
95
|
+
steps.push({
|
|
96
|
+
id: step.id,
|
|
97
|
+
action: 'wait',
|
|
98
|
+
waitCondition: 'url_change',
|
|
99
|
+
waitUrlPattern: step.data?.url || step.url,
|
|
100
|
+
timeout: step.data?.timeout,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else if (step.signalType === 'dom_stable') {
|
|
104
|
+
steps.push({
|
|
105
|
+
id: step.id,
|
|
106
|
+
action: 'wait',
|
|
107
|
+
waitCondition: 'dom_stable',
|
|
108
|
+
waitDomStableTimeout: step.data?.timeout || 500,
|
|
109
|
+
timeout: step.data?.timeout,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const flowStep = convertStep(step);
|
|
115
|
+
if (flowStep) {
|
|
116
|
+
steps.push(flowStep);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (hasPagination && paginationNextSelector) {
|
|
120
|
+
const paginateIndex = steps.findIndex((s) => s.action === 'click' &&
|
|
121
|
+
(s.selector === paginationNextSelector || paginationNextSelector.endsWith(s.selector || '')));
|
|
122
|
+
if (paginateIndex >= 0) {
|
|
123
|
+
const beforePaginate = steps.slice(0, paginateIndex);
|
|
124
|
+
const afterPaginate = steps.slice(paginateIndex + 1);
|
|
125
|
+
let extractStep;
|
|
126
|
+
if (dataContainerFound && dataContainerSelector) {
|
|
127
|
+
extractStep = {
|
|
128
|
+
id: 'auto-extract',
|
|
129
|
+
action: 'extract',
|
|
130
|
+
container: dataContainerSelector,
|
|
131
|
+
fields: Object.keys(dataItemFields).length > 0
|
|
132
|
+
? dataItemFields
|
|
133
|
+
: { title: 'a, h1, h2, h3', url: 'a[href]' },
|
|
134
|
+
outputVar: 'results',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const paginateStep = {
|
|
138
|
+
id: 'auto-paginate',
|
|
139
|
+
action: 'clickPaginate',
|
|
140
|
+
nextSelector: paginationNextSelector,
|
|
141
|
+
termination: {
|
|
142
|
+
maxIterations: options?.maxPaginateIterations || 10,
|
|
143
|
+
elementDisappears: paginationNextSelector,
|
|
144
|
+
},
|
|
145
|
+
...(extractStep ? { extractBeforeClick: extractStep } : {}),
|
|
146
|
+
};
|
|
147
|
+
steps.length = 0;
|
|
148
|
+
steps.push(...beforePaginate, paginateStep, ...afterPaginate);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
warnings.push(`Pagination annotation found but no matching click step for selector "${paginationNextSelector}". Adding clickPaginate at end.`);
|
|
152
|
+
const paginateStep = {
|
|
153
|
+
id: 'auto-paginate',
|
|
154
|
+
action: 'clickPaginate',
|
|
155
|
+
nextSelector: paginationNextSelector,
|
|
156
|
+
termination: {
|
|
157
|
+
maxIterations: options?.maxPaginateIterations || 10,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
steps.push(paginateStep);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if (dataContainerFound && dataContainerSelector) {
|
|
164
|
+
steps.push({
|
|
165
|
+
id: 'auto-extract',
|
|
166
|
+
action: 'extract',
|
|
167
|
+
container: dataContainerSelector,
|
|
168
|
+
fields: Object.keys(dataItemFields).length > 0
|
|
169
|
+
? dataItemFields
|
|
170
|
+
: { title: 'a, h1, h2, h3', url: 'a[href]' },
|
|
171
|
+
outputVar: 'results',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
const flowId = options?.flowId || `flow-${Date.now()}`;
|
|
175
|
+
const flow = {
|
|
176
|
+
id: flowId,
|
|
177
|
+
description: options?.description ||
|
|
178
|
+
`Converted from recorder session ${recorderYaml.session?.id || 'unknown'}`,
|
|
179
|
+
steps,
|
|
180
|
+
output: ['results'],
|
|
181
|
+
};
|
|
182
|
+
const baseUrl = options?.baseUrl ||
|
|
183
|
+
(recorderYaml.pages?.[0]?.url
|
|
184
|
+
? (() => {
|
|
185
|
+
try {
|
|
186
|
+
return new URL(recorderYaml.pages[0].url).origin;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return '';
|
|
190
|
+
}
|
|
191
|
+
})()
|
|
192
|
+
: '');
|
|
193
|
+
const site = {
|
|
194
|
+
name: options?.siteName || 'recorded-site',
|
|
195
|
+
description: 'Auto-generated from recorder',
|
|
196
|
+
baseUrl,
|
|
197
|
+
flows: { [flowId]: flow },
|
|
198
|
+
};
|
|
199
|
+
return { site, warnings };
|
|
200
|
+
}
|
|
201
|
+
function attachRecorderMeta(flowStep, step) {
|
|
202
|
+
if (step.fallbackSelectors && step.fallbackSelectors.length > 0) {
|
|
203
|
+
flowStep.fallbackSelectors = step.fallbackSelectors;
|
|
204
|
+
}
|
|
205
|
+
if (step.elementIdentity) {
|
|
206
|
+
flowStep.elementIdentity = step.elementIdentity;
|
|
207
|
+
}
|
|
208
|
+
return flowStep;
|
|
209
|
+
}
|
|
210
|
+
function convertStep(step) {
|
|
211
|
+
switch (step.action) {
|
|
212
|
+
case 'navigate':
|
|
213
|
+
case 'open':
|
|
214
|
+
case 'goto':
|
|
215
|
+
return attachRecorderMeta({
|
|
216
|
+
id: step.id,
|
|
217
|
+
action: 'navigate',
|
|
218
|
+
url: step.url,
|
|
219
|
+
}, step);
|
|
220
|
+
case 'click':
|
|
221
|
+
return attachRecorderMeta({
|
|
222
|
+
id: step.id,
|
|
223
|
+
action: 'click',
|
|
224
|
+
selector: step.selector,
|
|
225
|
+
}, step);
|
|
226
|
+
case 'fill':
|
|
227
|
+
case 'type':
|
|
228
|
+
return attachRecorderMeta({
|
|
229
|
+
id: step.id,
|
|
230
|
+
action: 'fill',
|
|
231
|
+
selector: step.selector,
|
|
232
|
+
value: step.value,
|
|
233
|
+
}, step);
|
|
234
|
+
case 'press':
|
|
235
|
+
case 'keyboard':
|
|
236
|
+
return attachRecorderMeta({
|
|
237
|
+
id: step.id,
|
|
238
|
+
action: 'press',
|
|
239
|
+
value: step.value || step.selector,
|
|
240
|
+
}, step);
|
|
241
|
+
case 'scroll':
|
|
242
|
+
return attachRecorderMeta({
|
|
243
|
+
id: step.id,
|
|
244
|
+
action: 'scroll',
|
|
245
|
+
value: 'down',
|
|
246
|
+
scrollAmount: 500,
|
|
247
|
+
}, step);
|
|
248
|
+
case 'select':
|
|
249
|
+
return attachRecorderMeta({
|
|
250
|
+
id: step.id,
|
|
251
|
+
action: 'fill',
|
|
252
|
+
selector: step.selector,
|
|
253
|
+
value: step.value,
|
|
254
|
+
}, step);
|
|
255
|
+
case 'wait':
|
|
256
|
+
return attachRecorderMeta({
|
|
257
|
+
id: step.id,
|
|
258
|
+
action: 'wait',
|
|
259
|
+
selector: step.selector,
|
|
260
|
+
timeout: 5000,
|
|
261
|
+
}, step);
|
|
262
|
+
case 'snapshot':
|
|
263
|
+
return attachRecorderMeta({
|
|
264
|
+
id: step.id,
|
|
265
|
+
action: 'snapshot',
|
|
266
|
+
selector: step.selector,
|
|
267
|
+
}, step);
|
|
268
|
+
case 'back':
|
|
269
|
+
return attachRecorderMeta({
|
|
270
|
+
id: step.id,
|
|
271
|
+
action: 'navigate',
|
|
272
|
+
url: 'back',
|
|
273
|
+
}, step);
|
|
274
|
+
default:
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
export function parseRecorderYaml(content) {
|
|
279
|
+
const parsed = yaml.load(content);
|
|
280
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
281
|
+
throw new Error('Invalid recorder YAML: empty or non-object');
|
|
282
|
+
}
|
|
283
|
+
return parsed;
|
|
284
|
+
}
|
|
285
|
+
export function recorderToFlowFromYamlString(yamlContent, options) {
|
|
286
|
+
const parsed = parseRecorderYaml(yamlContent);
|
|
287
|
+
return recorderToFlow(parsed, options);
|
|
288
|
+
}
|
|
289
|
+
export function recorderToFlowFromFile(filePath, options) {
|
|
290
|
+
const content = readFileSync(resolve(filePath), 'utf-8');
|
|
291
|
+
return recorderToFlowFromYamlString(content, options);
|
|
292
|
+
}
|
|
293
|
+
export function siteToYamlString(site) {
|
|
294
|
+
const obj = {
|
|
295
|
+
site: {
|
|
296
|
+
name: site.name,
|
|
297
|
+
description: site.description,
|
|
298
|
+
baseUrl: site.baseUrl,
|
|
299
|
+
},
|
|
300
|
+
flows: {},
|
|
301
|
+
};
|
|
302
|
+
for (const [flowId, flow] of Object.entries(site.flows)) {
|
|
303
|
+
obj.flows[flowId] = {
|
|
304
|
+
description: flow.description,
|
|
305
|
+
params: flow.params,
|
|
306
|
+
steps: flow.steps.map(serializeStep),
|
|
307
|
+
output: flow.output,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return yaml.dump(obj, { lineWidth: 120, noRefs: true, sortKeys: false });
|
|
311
|
+
}
|
|
312
|
+
function serializeStep(step) {
|
|
313
|
+
const result = { id: step.id, action: step.action };
|
|
314
|
+
const simpleKeys = [
|
|
315
|
+
'selector',
|
|
316
|
+
'value',
|
|
317
|
+
'url',
|
|
318
|
+
'waitAfter',
|
|
319
|
+
'timeout',
|
|
320
|
+
'inFrame',
|
|
321
|
+
'container',
|
|
322
|
+
'outputVar',
|
|
323
|
+
'nextSelector',
|
|
324
|
+
'strategy',
|
|
325
|
+
'maxPages',
|
|
326
|
+
'itemSelector',
|
|
327
|
+
'condition',
|
|
328
|
+
'conditionJs',
|
|
329
|
+
'checkInterval',
|
|
330
|
+
'resolveTimeout',
|
|
331
|
+
'waitForNavigation',
|
|
332
|
+
'sourceVar',
|
|
333
|
+
'dedupField',
|
|
334
|
+
'scrollDirection',
|
|
335
|
+
'scrollAmount',
|
|
336
|
+
'scrollContainer',
|
|
337
|
+
'file',
|
|
338
|
+
'captureFilter',
|
|
339
|
+
'apiUrl',
|
|
340
|
+
'mockResponse',
|
|
341
|
+
'mockStatus',
|
|
342
|
+
'abortRequests',
|
|
343
|
+
'preset',
|
|
344
|
+
'outputFormat',
|
|
345
|
+
'pretty',
|
|
346
|
+
'waitCondition',
|
|
347
|
+
'waitUrlPattern',
|
|
348
|
+
'waitDomStableTimeout',
|
|
349
|
+
];
|
|
350
|
+
for (const key of simpleKeys) {
|
|
351
|
+
if (step[key] !== undefined) {
|
|
352
|
+
result[key] = step[key];
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (step.fields)
|
|
356
|
+
result.fields = step.fields;
|
|
357
|
+
if (step.termination)
|
|
358
|
+
result.termination = step.termination;
|
|
359
|
+
if (step.blockingConditions)
|
|
360
|
+
result.blockingConditions = step.blockingConditions;
|
|
361
|
+
if (step.intervention)
|
|
362
|
+
result.intervention = step.intervention;
|
|
363
|
+
if (step.extractBeforeClick)
|
|
364
|
+
result.extractBeforeClick = serializeStep(step.extractBeforeClick);
|
|
365
|
+
if (step.extractOnEachScroll)
|
|
366
|
+
result.extractOnEachScroll = serializeStep(step.extractOnEachScroll);
|
|
367
|
+
const subStepKeys = [
|
|
368
|
+
'itemSteps',
|
|
369
|
+
'loopSteps',
|
|
370
|
+
'collectSteps',
|
|
371
|
+
'thenSteps',
|
|
372
|
+
'elseSteps',
|
|
373
|
+
'subSteps',
|
|
374
|
+
'onResolved',
|
|
375
|
+
'onTimeout',
|
|
376
|
+
'onEachPage',
|
|
377
|
+
];
|
|
378
|
+
for (const key of subStepKeys) {
|
|
379
|
+
const subSteps = step[key];
|
|
380
|
+
if (subSteps) {
|
|
381
|
+
result[key] = subSteps.map(serializeStep);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
if (step.smartExtractConfig)
|
|
385
|
+
result.smartExtractConfig = step.smartExtractConfig;
|
|
386
|
+
if (step.fallbackSelectors && step.fallbackSelectors.length > 0)
|
|
387
|
+
result.fallbackSelectors = step.fallbackSelectors;
|
|
388
|
+
if (step.elementIdentity)
|
|
389
|
+
result.elementIdentity = step.elementIdentity;
|
|
390
|
+
return result;
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=recorder-to-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder-to-flow.js","sourceRoot":"","sources":["../../src/flow/recorder-to-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SiteDefinition } from './types.js';
|
|
2
|
+
export declare class SiteManager {
|
|
3
|
+
private sitesDirs;
|
|
4
|
+
constructor(sitesDirs?: string[]);
|
|
5
|
+
private getDefaultDirs;
|
|
6
|
+
listSites(): Map<string, SiteDefinition>;
|
|
7
|
+
getSite(name: string): SiteDefinition | null;
|
|
8
|
+
registerFromFile(filePath: string, name?: string): {
|
|
9
|
+
siteName: string;
|
|
10
|
+
targetPath: string;
|
|
11
|
+
};
|
|
12
|
+
registerFromUrl(url: string, name?: string): Promise<{
|
|
13
|
+
siteName: string;
|
|
14
|
+
targetPath: string;
|
|
15
|
+
}>;
|
|
16
|
+
registerFromDefinition(site: SiteDefinition): {
|
|
17
|
+
siteName: string;
|
|
18
|
+
targetPath: string;
|
|
19
|
+
};
|
|
20
|
+
unregister(name: string): boolean;
|
|
21
|
+
exists(name: string): boolean;
|
|
22
|
+
siteToYaml(site: SiteDefinition): string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=site-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-manager.d.ts","sourceRoot":"","sources":["../../src/flow/site-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAW;gBAEhB,SAAS,CAAC,EAAE,MAAM,EAAE;IAQhC,OAAO,CAAC,cAAc;IAuBtB,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIxC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAK5C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAiBrF,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA+BpD,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAWtF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAgBjC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ7B,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;CAWzC"}
|