@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.
Files changed (164) hide show
  1. package/README.md +108 -0
  2. package/bin/agent-browser-darwin-arm64 +0 -0
  3. package/bin/agent-browser-darwin-x64 +0 -0
  4. package/bin/agent-browser-linux-arm64 +0 -0
  5. package/bin/agent-browser-linux-x64 +0 -0
  6. package/bin/agent-browser-win32-x64.exe +0 -0
  7. package/dist/__tests__/e2e/utils/test-helpers.d.ts +1 -0
  8. package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -1
  9. package/dist/__tests__/e2e/utils/test-helpers.js +14 -1
  10. package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -1
  11. package/dist/__tests__/utils/free-port.d.ts +2 -0
  12. package/dist/__tests__/utils/free-port.d.ts.map +1 -0
  13. package/dist/__tests__/utils/free-port.js +18 -0
  14. package/dist/__tests__/utils/free-port.js.map +1 -0
  15. package/dist/__tests__/utils/parseCli.d.ts.map +1 -1
  16. package/dist/__tests__/utils/parseCli.js +83 -9
  17. package/dist/__tests__/utils/parseCli.js.map +1 -1
  18. package/dist/actions.d.ts.map +1 -1
  19. package/dist/actions.js +298 -9
  20. package/dist/actions.js.map +1 -1
  21. package/dist/browser.d.ts +11 -1
  22. package/dist/browser.d.ts.map +1 -1
  23. package/dist/browser.js +75 -19
  24. package/dist/browser.js.map +1 -1
  25. package/dist/cli/commands.d.ts.map +1 -1
  26. package/dist/cli/commands.js +172 -15
  27. package/dist/cli/commands.js.map +1 -1
  28. package/dist/cli/connection.d.ts +13 -0
  29. package/dist/cli/connection.d.ts.map +1 -1
  30. package/dist/cli/connection.js +137 -48
  31. package/dist/cli/connection.js.map +1 -1
  32. package/dist/cli/flags.d.ts.map +1 -1
  33. package/dist/cli/flags.js +0 -1
  34. package/dist/cli/flags.js.map +1 -1
  35. package/dist/cli/help.d.ts.map +1 -1
  36. package/dist/cli/help.js +63 -22
  37. package/dist/cli/help.js.map +1 -1
  38. package/dist/cli/output.d.ts.map +1 -1
  39. package/dist/cli/output.js +0 -32
  40. package/dist/cli/output.js.map +1 -1
  41. package/dist/cli.js +20 -2
  42. package/dist/cli.js.map +1 -1
  43. package/dist/daemon.d.ts +1 -0
  44. package/dist/daemon.d.ts.map +1 -1
  45. package/dist/daemon.js +291 -264
  46. package/dist/daemon.js.map +1 -1
  47. package/dist/diff.d.ts.map +1 -1
  48. package/dist/diff.js +1 -1
  49. package/dist/diff.js.map +1 -1
  50. package/dist/flow/exporters/cypress.d.ts +9 -0
  51. package/dist/flow/exporters/cypress.d.ts.map +1 -0
  52. package/dist/flow/exporters/cypress.js +256 -0
  53. package/dist/flow/exporters/cypress.js.map +1 -0
  54. package/dist/flow/exporters/index.d.ts +6 -0
  55. package/dist/flow/exporters/index.d.ts.map +1 -0
  56. package/dist/flow/exporters/index.js +5 -0
  57. package/dist/flow/exporters/index.js.map +1 -0
  58. package/dist/flow/exporters/playwright.d.ts +20 -0
  59. package/dist/flow/exporters/playwright.d.ts.map +1 -0
  60. package/dist/flow/exporters/playwright.js +175 -0
  61. package/dist/flow/exporters/playwright.js.map +1 -0
  62. package/dist/flow/exporters/python.d.ts +20 -0
  63. package/dist/flow/exporters/python.d.ts.map +1 -0
  64. package/dist/flow/exporters/python.js +163 -0
  65. package/dist/flow/exporters/python.js.map +1 -0
  66. package/dist/flow/exporters/selenium.d.ts +9 -0
  67. package/dist/flow/exporters/selenium.d.ts.map +1 -0
  68. package/dist/flow/exporters/selenium.js +298 -0
  69. package/dist/flow/exporters/selenium.js.map +1 -0
  70. package/dist/flow/exporters/types.d.ts +13 -0
  71. package/dist/flow/exporters/types.d.ts.map +1 -0
  72. package/dist/flow/exporters/types.js +2 -0
  73. package/dist/flow/exporters/types.js.map +1 -0
  74. package/dist/flow/flow-executor.d.ts +57 -0
  75. package/dist/flow/flow-executor.d.ts.map +1 -0
  76. package/dist/flow/flow-executor.js +1263 -0
  77. package/dist/flow/flow-executor.js.map +1 -0
  78. package/dist/flow/index.d.ts +15 -0
  79. package/dist/flow/index.d.ts.map +1 -0
  80. package/dist/flow/index.js +10 -0
  81. package/dist/flow/index.js.map +1 -0
  82. package/dist/flow/output.d.ts +11 -0
  83. package/dist/flow/output.d.ts.map +1 -0
  84. package/dist/flow/output.js +84 -0
  85. package/dist/flow/output.js.map +1 -0
  86. package/dist/flow/plugin-system.d.ts +48 -0
  87. package/dist/flow/plugin-system.d.ts.map +1 -0
  88. package/dist/flow/plugin-system.js +132 -0
  89. package/dist/flow/plugin-system.js.map +1 -0
  90. package/dist/flow/plugins/file-output-plugin.d.ts +8 -0
  91. package/dist/flow/plugins/file-output-plugin.d.ts.map +1 -0
  92. package/dist/flow/plugins/file-output-plugin.js +31 -0
  93. package/dist/flow/plugins/file-output-plugin.js.map +1 -0
  94. package/dist/flow/plugins/index.d.ts +4 -0
  95. package/dist/flow/plugins/index.d.ts.map +1 -0
  96. package/dist/flow/plugins/index.js +4 -0
  97. package/dist/flow/plugins/index.js.map +1 -0
  98. package/dist/flow/plugins/logging-plugin.d.ts +7 -0
  99. package/dist/flow/plugins/logging-plugin.d.ts.map +1 -0
  100. package/dist/flow/plugins/logging-plugin.js +40 -0
  101. package/dist/flow/plugins/logging-plugin.js.map +1 -0
  102. package/dist/flow/plugins/webhook-plugin.d.ts +7 -0
  103. package/dist/flow/plugins/webhook-plugin.d.ts.map +1 -0
  104. package/dist/flow/plugins/webhook-plugin.js +24 -0
  105. package/dist/flow/plugins/webhook-plugin.js.map +1 -0
  106. package/dist/flow/presets/index.d.ts +10 -0
  107. package/dist/flow/presets/index.d.ts.map +1 -0
  108. package/dist/flow/presets/index.js +29 -0
  109. package/dist/flow/presets/index.js.map +1 -0
  110. package/dist/flow/recorder-to-flow.d.ts +70 -0
  111. package/dist/flow/recorder-to-flow.d.ts.map +1 -0
  112. package/dist/flow/recorder-to-flow.js +392 -0
  113. package/dist/flow/recorder-to-flow.js.map +1 -0
  114. package/dist/flow/site-manager.d.ts +24 -0
  115. package/dist/flow/site-manager.d.ts.map +1 -0
  116. package/dist/flow/site-manager.js +125 -0
  117. package/dist/flow/site-manager.js.map +1 -0
  118. package/dist/flow/types.d.ts +196 -0
  119. package/dist/flow/types.d.ts.map +1 -0
  120. package/dist/flow/types.js +2 -0
  121. package/dist/flow/types.js.map +1 -0
  122. package/dist/flow/yaml-parser.d.ts +15 -0
  123. package/dist/flow/yaml-parser.d.ts.map +1 -0
  124. package/dist/flow/yaml-parser.js +216 -0
  125. package/dist/flow/yaml-parser.js.map +1 -0
  126. package/dist/human-mouse.d.ts.map +1 -1
  127. package/dist/protocol.d.ts.map +1 -1
  128. package/dist/protocol.js +15 -11
  129. package/dist/protocol.js.map +1 -1
  130. package/dist/rc-config.d.ts.map +1 -1
  131. package/dist/rc-config.js +1 -2
  132. package/dist/rc-config.js.map +1 -1
  133. package/dist/recorder/inject.js +730 -332
  134. package/dist/snapshot-store.d.ts +83 -0
  135. package/dist/snapshot-store.d.ts.map +1 -0
  136. package/dist/snapshot-store.js +112 -0
  137. package/dist/snapshot-store.js.map +1 -0
  138. package/dist/snapshot.d.ts +6 -7
  139. package/dist/snapshot.d.ts.map +1 -1
  140. package/dist/snapshot.js +471 -17
  141. package/dist/snapshot.js.map +1 -1
  142. package/dist/stream-server-standalone.d.ts.map +1 -1
  143. package/dist/stream-server-standalone.js.map +1 -1
  144. package/dist/stream-server.d.ts.map +1 -1
  145. package/dist/stream-server.js +38 -13
  146. package/dist/stream-server.js.map +1 -1
  147. package/dist/test-live.js +5 -5
  148. package/dist/test-live.js.map +1 -1
  149. package/dist/types.d.ts +13 -9
  150. package/dist/types.d.ts.map +1 -1
  151. package/dist/types.js.map +1 -1
  152. package/dist/viewer-script.d.ts.map +1 -1
  153. package/dist/viewer-script.js +12 -6
  154. package/dist/viewer-script.js.map +1 -1
  155. package/package.json +18 -5
  156. package/skills/agent-browser/SKILL.md +151 -3
  157. package/dist/ios-actions.d.ts +0 -11
  158. package/dist/ios-actions.d.ts.map +0 -1
  159. package/dist/ios-actions.js +0 -228
  160. package/dist/ios-actions.js.map +0 -1
  161. package/dist/ios-manager.d.ts +0 -266
  162. package/dist/ios-manager.d.ts.map +0 -1
  163. package/dist/ios-manager.js +0 -1076
  164. 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"}