@dyyz1993/agent-browser 0.24.0 → 0.26.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/bin/agent-browser-darwin-arm64 +0 -0
- package/dist/__tests__/e2e/utils/test-helpers.d.ts +2 -2
- package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -1
- package/dist/__tests__/e2e/utils/test-helpers.js +6 -4
- package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -1
- package/dist/actions/advanced.d.ts +73 -0
- package/dist/actions/advanced.d.ts.map +1 -0
- package/dist/actions/advanced.js +390 -0
- package/dist/actions/advanced.js.map +1 -0
- package/dist/actions/context.d.ts +36 -0
- package/dist/actions/context.d.ts.map +1 -0
- package/dist/actions/context.js +164 -0
- package/dist/actions/context.js.map +1 -0
- package/dist/actions/crawl.d.ts +8 -0
- package/dist/actions/crawl.d.ts.map +1 -0
- package/dist/actions/crawl.js +290 -0
- package/dist/actions/crawl.js.map +1 -0
- package/dist/actions/elements.d.ts +11 -0
- package/dist/actions/elements.d.ts.map +1 -0
- package/dist/actions/elements.js +78 -0
- package/dist/actions/elements.js.map +1 -0
- package/dist/actions/flow.d.ts +4 -0
- package/dist/actions/flow.d.ts.map +1 -0
- package/dist/actions/flow.js +170 -0
- package/dist/actions/flow.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +323 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/interact.d.ts +4 -0
- package/dist/actions/interact.d.ts.map +1 -0
- package/dist/actions/interact.js +162 -0
- package/dist/actions/interact.js.map +1 -0
- package/dist/actions/interaction.d.ts +31 -0
- package/dist/actions/interaction.d.ts.map +1 -0
- package/dist/actions/interaction.js +477 -0
- package/dist/actions/interaction.js.map +1 -0
- package/dist/actions/locators.d.ts +14 -0
- package/dist/actions/locators.d.ts.map +1 -0
- package/dist/actions/locators.js +310 -0
- package/dist/actions/locators.js.map +1 -0
- package/dist/actions/map.d.ts +4 -0
- package/dist/actions/map.d.ts.map +1 -0
- package/dist/actions/map.js +79 -0
- package/dist/actions/map.js.map +1 -0
- package/dist/actions/meta.d.ts +44 -0
- package/dist/actions/meta.d.ts.map +1 -0
- package/dist/actions/meta.js +190 -0
- package/dist/actions/meta.js.map +1 -0
- package/dist/actions/mouse.d.ts +8 -0
- package/dist/actions/mouse.d.ts.map +1 -0
- package/dist/actions/mouse.js +52 -0
- package/dist/actions/mouse.js.map +1 -0
- package/dist/actions/recorder.d.ts +20 -0
- package/dist/actions/recorder.d.ts.map +1 -0
- package/dist/actions/recorder.js +231 -0
- package/dist/actions/recorder.js.map +1 -0
- package/dist/actions/recording.d.ts +6 -0
- package/dist/actions/recording.d.ts.map +1 -0
- package/dist/actions/recording.js +22 -0
- package/dist/actions/recording.js.map +1 -0
- package/dist/actions/scrape.d.ts +10 -0
- package/dist/actions/scrape.d.ts.map +1 -0
- package/dist/actions/scrape.js +39 -0
- package/dist/actions/scrape.js.map +1 -0
- package/dist/actions/screencast.d.ts +8 -0
- package/dist/actions/screencast.d.ts.map +1 -0
- package/dist/actions/screencast.js +56 -0
- package/dist/actions/screencast.js.map +1 -0
- package/dist/actions/search.d.ts +4 -0
- package/dist/actions/search.d.ts.map +1 -0
- package/dist/actions/search.js +129 -0
- package/dist/actions/search.js.map +1 -0
- package/dist/actions/storage.d.ts +14 -0
- package/dist/actions/storage.d.ts.map +1 -0
- package/dist/actions/storage.js +63 -0
- package/dist/actions/storage.js.map +1 -0
- package/dist/actions/tabs.d.ts +16 -0
- package/dist/actions/tabs.d.ts.map +1 -0
- package/dist/actions/tabs.js +47 -0
- package/dist/actions/tabs.js.map +1 -0
- package/dist/actions/utils.d.ts +15 -0
- package/dist/actions/utils.d.ts.map +1 -0
- package/dist/actions/utils.js +234 -0
- package/dist/actions/utils.js.map +1 -0
- package/dist/browser/browser-manager.d.ts +249 -0
- package/dist/browser/browser-manager.d.ts.map +1 -0
- package/dist/browser/browser-manager.js +1251 -0
- package/dist/browser/browser-manager.js.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +2 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/network-tracker.d.ts +39 -0
- package/dist/browser/network-tracker.d.ts.map +1 -0
- package/dist/browser/network-tracker.js +287 -0
- package/dist/browser/network-tracker.js.map +1 -0
- package/dist/browser/providers.d.ts +27 -0
- package/dist/browser/providers.d.ts.map +1 -0
- package/dist/browser/providers.js +293 -0
- package/dist/browser/providers.js.map +1 -0
- package/dist/browser/recorder-manager.d.ts +69 -0
- package/dist/browser/recorder-manager.d.ts.map +1 -0
- package/dist/browser/recorder-manager.js +755 -0
- package/dist/browser/recorder-manager.js.map +1 -0
- package/dist/browser/recording-manager.d.ts +46 -0
- package/dist/browser/recording-manager.d.ts.map +1 -0
- package/dist/browser/recording-manager.js +156 -0
- package/dist/browser/recording-manager.js.map +1 -0
- package/dist/browser/screencast-manager.d.ts +49 -0
- package/dist/browser/screencast-manager.d.ts.map +1 -0
- package/dist/browser/screencast-manager.js +131 -0
- package/dist/browser/screencast-manager.js.map +1 -0
- package/dist/browser/types.d.ts +101 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/browser-events.d.ts +25 -0
- package/dist/browser-events.d.ts.map +1 -0
- package/dist/browser-events.js +15 -0
- package/dist/browser-events.js.map +1 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +145 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/connection.d.ts.map +1 -1
- package/dist/cli/connection.js +15 -22
- package/dist/cli/connection.js.map +1 -1
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.d.ts.map +1 -1
- package/dist/cli/flags.js +8 -0
- package/dist/cli/flags.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +204 -4
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +72 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/cli.js +149 -14
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +12 -13
- package/dist/daemon.js.map +1 -1
- package/dist/flow/exporters/playwright.d.ts +23 -1
- package/dist/flow/exporters/playwright.d.ts.map +1 -1
- package/dist/flow/exporters/playwright.js +333 -85
- package/dist/flow/exporters/playwright.js.map +1 -1
- package/dist/flow/exporters/python.d.ts +22 -0
- package/dist/flow/exporters/python.d.ts.map +1 -1
- package/dist/flow/exporters/python.js +325 -74
- package/dist/flow/exporters/python.js.map +1 -1
- package/dist/flow/exporters/selenium.d.ts.map +1 -1
- package/dist/flow/exporters/selenium.js +0 -1
- package/dist/flow/exporters/selenium.js.map +1 -1
- package/dist/flow/flow-executor.d.ts +1 -1
- package/dist/flow/flow-executor.d.ts.map +1 -1
- package/dist/flow/flow-executor.js +11 -11
- package/dist/flow/flow-executor.js.map +1 -1
- package/dist/flow/output.js.map +1 -1
- package/dist/flow/plugin-system.d.ts +1 -1
- package/dist/flow/plugin-system.d.ts.map +1 -1
- package/dist/flow/plugin-system.js +2 -2
- package/dist/flow/plugin-system.js.map +1 -1
- package/dist/flow/plugins/logging-plugin.js +1 -1
- package/dist/flow/plugins/logging-plugin.js.map +1 -1
- package/dist/flow/presets/console-capture.js +50 -0
- package/dist/flow/presets/fetch-capture.js +107 -0
- package/dist/flow/presets/sse-stream.js +85 -0
- package/dist/flow/presets/xhr-only.js +44 -0
- package/dist/flow/recorder-to-flow.d.ts.map +1 -1
- package/dist/flow/recorder-to-flow.js +1 -3
- package/dist/flow/recorder-to-flow.js.map +1 -1
- package/dist/flow/site-manager.d.ts.map +1 -1
- package/dist/flow/site-manager.js +6 -2
- package/dist/flow/site-manager.js.map +1 -1
- package/dist/human-mouse.d.ts +1 -1
- package/dist/human-mouse.d.ts.map +1 -1
- package/dist/human-mouse.js +2 -2
- package/dist/human-mouse.js.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +91 -1
- package/dist/protocol.js.map +1 -1
- package/dist/rc-config.js +4 -4
- package/dist/rc-config.js.map +1 -1
- package/dist/recorder/inject.js +31 -5
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +3 -4
- package/dist/snapshot.js.map +1 -1
- package/dist/stream-server-standalone.d.ts +1 -1
- package/dist/stream-server-standalone.d.ts.map +1 -1
- package/dist/stream-server-standalone.js +42 -23
- package/dist/stream-server-standalone.js.map +1 -1
- package/dist/stream-server.d.ts +1 -1
- package/dist/stream-server.d.ts.map +1 -1
- package/dist/stream-server.js +26 -21
- package/dist/stream-server.js.map +1 -1
- package/dist/test-live.js +9 -3
- package/dist/test-live.js.map +1 -1
- package/dist/types.d.ts +123 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
- package/scripts/README.md +66 -0
- package/scripts/check_goods_container.js +35 -0
- package/scripts/check_page_content.js +36 -0
- package/scripts/click_applause_rate.js +30 -0
- package/scripts/copy-flow-presets.js +25 -0
- package/scripts/douyin-flow-test.sh +72 -0
- package/scripts/douyin-test.sh +101 -0
- package/scripts/explore_jd_page.js +31 -0
- package/scripts/extract_all_jd_data.js +80 -0
- package/scripts/extract_jd_product_detail.js +62 -0
- package/scripts/extract_jd_products_correct_links.js +78 -0
- package/scripts/extract_jd_products_final.js +80 -0
- package/scripts/extract_jd_reviews.js +48 -0
- package/scripts/extract_jd_seafood_final.js +78 -0
- package/scripts/extract_multiple_products.js +77 -0
- package/scripts/extract_products_no_scroll.js +68 -0
- package/scripts/extract_products_simple.js +68 -0
- package/scripts/find_applause_rate.js +26 -0
- package/scripts/find_jd_links.js +28 -0
- package/scripts/find_main_content.js +20 -0
- package/scripts/find_product_cards.js +38 -0
- package/scripts/find_root_content.js +26 -0
- package/scripts/find_unique_products.js +55 -0
- package/scripts/get_jd_product_detail.js +16 -0
- package/scripts/get_jd_products.js +23 -0
- package/scripts/get_jd_seafood_products.js +44 -0
- package/scripts/get_product_details_from_images.js +54 -0
- package/scripts/verify-form.sh +67 -0
- package/scripts/verify-login.sh +65 -0
- package/scripts/verify-recording.sh +80 -0
- package/scripts/verify-upload.sh +41 -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/actions.d.ts +0 -51
- package/dist/actions.d.ts.map +0 -1
- package/dist/actions.js +0 -2662
- package/dist/actions.js.map +0 -1
- package/dist/browser.d.ts +0 -651
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js +0 -3088
- package/dist/browser.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { successResponse, errorResponse } from '../protocol.js';
|
|
2
|
+
import { getViewerUrl, getViewerWsUrl, getViewerPort, getMessageBridgeUrl } from '../rc-config.js';
|
|
3
|
+
import { getInstanceId, getSession } from '../daemon.js';
|
|
4
|
+
import { MessageBridge } from '../message-bridge.js';
|
|
5
|
+
import { loadConfig, getEffectiveValue, getExecutablePath } from '../rc-config.js';
|
|
6
|
+
import { getHumanConfigFromEnv } from '../human-mouse.js';
|
|
7
|
+
export async function handleViewer(command, _browser) {
|
|
8
|
+
const instanceId = getInstanceId();
|
|
9
|
+
return successResponse(command.id, {
|
|
10
|
+
url: getViewerUrl(instanceId),
|
|
11
|
+
wsUrl: getViewerWsUrl(instanceId),
|
|
12
|
+
streamPort: getViewerPort(),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export async function handleAsk(command, _browser) {
|
|
16
|
+
const session = getSession();
|
|
17
|
+
const bridge = new MessageBridge(getMessageBridgeUrl());
|
|
18
|
+
try {
|
|
19
|
+
const answer = await bridge.ask(command.question, session);
|
|
20
|
+
return successResponse(command.id, { answer });
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
24
|
+
return errorResponse(command.id, `Failed to ask question: ${message}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function handleConfig(command) {
|
|
28
|
+
const humanConfig = getHumanConfigFromEnv();
|
|
29
|
+
const rcConfig = loadConfig();
|
|
30
|
+
const config = {
|
|
31
|
+
session: process.env.AGENT_BROWSER_SESSION || 'default',
|
|
32
|
+
executablePath: getExecutablePath() || null,
|
|
33
|
+
extensions: process.env.AGENT_BROWSER_EXTENSIONS || null,
|
|
34
|
+
profile: process.env.AGENT_BROWSER_PROFILE || null,
|
|
35
|
+
state: process.env.AGENT_BROWSER_STATE || null,
|
|
36
|
+
proxy: process.env.AGENT_BROWSER_PROXY || null,
|
|
37
|
+
proxyBypass: process.env.AGENT_BROWSER_PROXY_BYPASS || null,
|
|
38
|
+
args: process.env.AGENT_BROWSER_ARGS || null,
|
|
39
|
+
userAgent: process.env.AGENT_BROWSER_USER_AGENT || null,
|
|
40
|
+
provider: process.env.AGENT_BROWSER_PROVIDER || null,
|
|
41
|
+
allowFileAccess: process.env.AGENT_BROWSER_ALLOW_FILE_ACCESS === '1',
|
|
42
|
+
streamPort: getViewerPort(),
|
|
43
|
+
headed: process.env.AGENT_BROWSER_HEADED === '1',
|
|
44
|
+
human: humanConfig,
|
|
45
|
+
};
|
|
46
|
+
if (command.json) {
|
|
47
|
+
return successResponse(command.id, { config, rc: rcConfig });
|
|
48
|
+
}
|
|
49
|
+
const viewerHost = getEffectiveValue('viewer.host');
|
|
50
|
+
const bridgeUrl = getEffectiveValue('messageBridge.url');
|
|
51
|
+
const msgProxy = getEffectiveValue('messageProxy.url');
|
|
52
|
+
const lines = [
|
|
53
|
+
'Agent Browser Configuration',
|
|
54
|
+
'===========================',
|
|
55
|
+
'',
|
|
56
|
+
'Session & Browser:',
|
|
57
|
+
` executablePath ${config.executablePath || '(not set)'}`,
|
|
58
|
+
` AGENT_BROWSER_PROVIDER ${config.provider || '(not set)'}`,
|
|
59
|
+
` AGENT_BROWSER_HEADED ${config.headed ? 'true' : 'false (default)'}`,
|
|
60
|
+
'',
|
|
61
|
+
'Viewer & Stream:',
|
|
62
|
+
` viewer.host ${viewerHost || '(not set, using http://localhost)'}`,
|
|
63
|
+
` viewer.port ${config.streamPort}`,
|
|
64
|
+
'',
|
|
65
|
+
'Message Bridge (ask command):',
|
|
66
|
+
` messageBridge.url ${bridgeUrl || '(not set, using default)'}`,
|
|
67
|
+
` messageProxy.url ${msgProxy || '(not set)'}`,
|
|
68
|
+
'',
|
|
69
|
+
'Browser Options:',
|
|
70
|
+
` AGENT_BROWSER_PROFILE ${config.profile || '(not set)'}`,
|
|
71
|
+
` AGENT_BROWSER_EXTENSIONS ${config.extensions || '(not set)'}`,
|
|
72
|
+
` AGENT_BROWSER_ARGS ${config.args || '(not set)'}`,
|
|
73
|
+
` AGENT_BROWSER_USER_AGENT ${config.userAgent || '(not set)'}`,
|
|
74
|
+
` AGENT_BROWSER_PROXY ${config.proxy || '(not set)'}`,
|
|
75
|
+
` AGENT_BROWSER_ALLOW_FILE_ACCESS ${config.allowFileAccess ? 'true' : 'false (default)'}`,
|
|
76
|
+
'',
|
|
77
|
+
'Human Mode (runtime):',
|
|
78
|
+
` AGENT_BROWSER_HUMAN ${humanConfig.enabled ? humanConfig.pathType + ' \u2713' : '(disabled)'}`,
|
|
79
|
+
'',
|
|
80
|
+
`Persistent config: ~/.agent-browser/config.json`,
|
|
81
|
+
'Run "agent-browser config set <key> <value>" to persist settings.',
|
|
82
|
+
'Run "agent-browser config list" to see configurable keys.',
|
|
83
|
+
];
|
|
84
|
+
return successResponse(command.id, { config, output: lines.join('\n') });
|
|
85
|
+
}
|
|
86
|
+
export async function handleHistory(command, browser) {
|
|
87
|
+
if (command.clear) {
|
|
88
|
+
browser.clearHistory();
|
|
89
|
+
return successResponse(command.id, { cleared: true });
|
|
90
|
+
}
|
|
91
|
+
const history = browser.getHistory(command.filter);
|
|
92
|
+
return successResponse(command.id, { history });
|
|
93
|
+
}
|
|
94
|
+
export async function handleSelectorFor(command, browser) {
|
|
95
|
+
const store = browser.getSnapshotStore();
|
|
96
|
+
const colonIndex = command.target.indexOf(':');
|
|
97
|
+
if (colonIndex === -1) {
|
|
98
|
+
return errorResponse(command.id, `Invalid target format: "${command.target}". Expected "snapshotId:refOrIndex" (e.g., "snap_3:@e1" or "snap_3:1").`);
|
|
99
|
+
}
|
|
100
|
+
const snapshotId = command.target.substring(0, colonIndex);
|
|
101
|
+
const refOrIndex = command.target.substring(colonIndex + 1);
|
|
102
|
+
await browser.ensureSelectorsGenerated(snapshotId);
|
|
103
|
+
const element = store.getElement(snapshotId, refOrIndex);
|
|
104
|
+
if (!element) {
|
|
105
|
+
return errorResponse(command.id, `Element not found: "${refOrIndex}" in snapshot "${snapshotId}". Run 'snapshot' to get fresh snapshot data.`);
|
|
106
|
+
}
|
|
107
|
+
return successResponse(command.id, {
|
|
108
|
+
snapshotId,
|
|
109
|
+
ref: element.ref,
|
|
110
|
+
index: element.index,
|
|
111
|
+
role: element.role,
|
|
112
|
+
name: element.name,
|
|
113
|
+
cssSelector: element.cssSelector,
|
|
114
|
+
xpath: element.xpath,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
export async function handleSelectorsOf(command, browser) {
|
|
118
|
+
const store = browser.getSnapshotStore();
|
|
119
|
+
await browser.ensureSelectorsGenerated(command.target);
|
|
120
|
+
const elements = store.getElements(command.target);
|
|
121
|
+
if (!elements) {
|
|
122
|
+
return errorResponse(command.id, `Snapshot "${command.target}" not found. Run 'snapshot' to create a new snapshot.`);
|
|
123
|
+
}
|
|
124
|
+
return successResponse(command.id, {
|
|
125
|
+
snapshotId: command.target,
|
|
126
|
+
elements: elements.map((el) => ({
|
|
127
|
+
ref: el.ref,
|
|
128
|
+
index: el.index,
|
|
129
|
+
role: el.role,
|
|
130
|
+
name: el.name,
|
|
131
|
+
cssSelector: el.cssSelector,
|
|
132
|
+
xpath: el.xpath,
|
|
133
|
+
})),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
export async function handleValidate(command, browser) {
|
|
137
|
+
const store = browser.getSnapshotStore();
|
|
138
|
+
await browser.ensureSelectorsGenerated(command.target);
|
|
139
|
+
const elements = store.getElements(command.target);
|
|
140
|
+
if (!elements) {
|
|
141
|
+
return errorResponse(command.id, `Snapshot "${command.target}" not found. Run 'snapshot' to create a new snapshot.`);
|
|
142
|
+
}
|
|
143
|
+
const page = browser.getPage();
|
|
144
|
+
const selectors = elements.map((el) => el.cssSelector);
|
|
145
|
+
const matchCounts = await page.evaluate((sels) => {
|
|
146
|
+
return sels.map((sel) => {
|
|
147
|
+
try {
|
|
148
|
+
return document.querySelectorAll(sel).length;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return -1;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}, selectors);
|
|
155
|
+
const results = elements.map((el, i) => {
|
|
156
|
+
const matchCount = matchCounts[i];
|
|
157
|
+
let status;
|
|
158
|
+
if (matchCount === -1) {
|
|
159
|
+
status = 'invalid_selector';
|
|
160
|
+
}
|
|
161
|
+
else if (matchCount === 0) {
|
|
162
|
+
status = 'not_found';
|
|
163
|
+
}
|
|
164
|
+
else if (matchCount === 1) {
|
|
165
|
+
status = 'valid';
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
status = 'ambiguous';
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
ref: el.ref,
|
|
172
|
+
index: el.index,
|
|
173
|
+
cssSelector: el.cssSelector,
|
|
174
|
+
status,
|
|
175
|
+
matchCount,
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
const failedCount = results.filter((r) => r.status === 'not_found' || r.status === 'invalid_selector').length;
|
|
179
|
+
let newSnapshotId;
|
|
180
|
+
if (failedCount > 0) {
|
|
181
|
+
const newSnapshot = await browser.getSnapshot({ interactive: true });
|
|
182
|
+
newSnapshotId = newSnapshot.snapshotId;
|
|
183
|
+
}
|
|
184
|
+
return successResponse(command.id, {
|
|
185
|
+
snapshotId: command.target,
|
|
186
|
+
results,
|
|
187
|
+
newSnapshotId,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/actions/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BrowserManager } from '../browser/index.js';
|
|
2
|
+
import type { Response, MouseMoveCommand, MouseDownCommand, MouseUpCommand, WanderCommand, MouseTrajectoryCommand } from '../types.js';
|
|
3
|
+
export declare function handleMouseMove(command: MouseMoveCommand, browser: BrowserManager): Promise<Response>;
|
|
4
|
+
export declare function handleMouseDown(command: MouseDownCommand, browser: BrowserManager): Promise<Response>;
|
|
5
|
+
export declare function handleMouseUp(command: MouseUpCommand, browser: BrowserManager): Promise<Response>;
|
|
6
|
+
export declare function handleWander(command: WanderCommand, browser: BrowserManager): Promise<Response>;
|
|
7
|
+
export declare function handleMouseTrajectory(command: MouseTrajectoryCommand, browser: BrowserManager): Promise<Response>;
|
|
8
|
+
//# sourceMappingURL=mouse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mouse.d.ts","sourceRoot":"","sources":["../../src/actions/mouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAIrB,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAYnB;AASD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAoBnB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { successResponse } from '../protocol.js';
|
|
2
|
+
import { humanMoveTo, humanWander } from '../human-mouse.js';
|
|
3
|
+
export async function handleMouseMove(command, browser) {
|
|
4
|
+
const page = browser.getPage();
|
|
5
|
+
await page.mouse.move(command.x, command.y);
|
|
6
|
+
return successResponse(command.id, { moved: true, x: command.x, y: command.y });
|
|
7
|
+
}
|
|
8
|
+
export async function handleMouseDown(command, browser) {
|
|
9
|
+
const page = browser.getPage();
|
|
10
|
+
await page.mouse.down({ button: command.button ?? 'left' });
|
|
11
|
+
return successResponse(command.id, { down: true });
|
|
12
|
+
}
|
|
13
|
+
export async function handleMouseUp(command, browser) {
|
|
14
|
+
const page = browser.getPage();
|
|
15
|
+
await page.mouse.up({ button: command.button ?? 'left' });
|
|
16
|
+
return successResponse(command.id, { up: true });
|
|
17
|
+
}
|
|
18
|
+
export async function handleWander(command, browser) {
|
|
19
|
+
const page = browser.getPage();
|
|
20
|
+
const viewport = page.viewportSize() ?? { width: 1280, height: 800 };
|
|
21
|
+
const config = command.human ?? { enabled: true, pathType: 'bezier' };
|
|
22
|
+
await humanWander(page, config, {
|
|
23
|
+
duration: command.duration ?? 2000,
|
|
24
|
+
area: viewport,
|
|
25
|
+
});
|
|
26
|
+
return successResponse(command.id, { wandered: true, duration: command.duration ?? 2000 });
|
|
27
|
+
}
|
|
28
|
+
function parseTrajectoryData(data) {
|
|
29
|
+
return data.split(';').map((segment) => {
|
|
30
|
+
const parts = segment.split(':').map(Number);
|
|
31
|
+
return { x: parts[0] || 0, y: parts[1] || 0, delay: parts[2] || 0 };
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function handleMouseTrajectory(command, browser) {
|
|
35
|
+
const page = browser.getPage();
|
|
36
|
+
const points = parseTrajectoryData(command.data);
|
|
37
|
+
const config = command.human ?? { enabled: true, pathType: 'bezier' };
|
|
38
|
+
for (let i = 0; i < points.length; i++) {
|
|
39
|
+
const { x, y, delay } = points[i];
|
|
40
|
+
if (delay > 0) {
|
|
41
|
+
await page.waitForTimeout(delay);
|
|
42
|
+
}
|
|
43
|
+
if (config.enabled) {
|
|
44
|
+
await humanMoveTo(page, { x, y }, config);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
await page.mouse.move(x, y);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return successResponse(command.id, { moved: true, points: points.length });
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=mouse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/actions/mouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BrowserManager } from '../browser/index.js';
|
|
2
|
+
import type { Response, RecorderStartCommand, RecorderStopCommand, RecorderStatusCommand, RecorderReplayCommand } from '../types.js';
|
|
3
|
+
export declare function handleRecorderStart(command: RecorderStartCommand, browser: BrowserManager): Promise<Response<{
|
|
4
|
+
started: boolean;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
}>>;
|
|
7
|
+
export declare function handleRecorderStop(command: RecorderStopCommand, browser: BrowserManager): Promise<Response<{
|
|
8
|
+
yaml?: string;
|
|
9
|
+
steps: number;
|
|
10
|
+
path?: string;
|
|
11
|
+
tip?: string;
|
|
12
|
+
}>>;
|
|
13
|
+
export declare function handleRecorderStatus(command: RecorderStatusCommand, browser: BrowserManager): Promise<Response<{
|
|
14
|
+
isRecording: boolean;
|
|
15
|
+
steps: number;
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
}>>;
|
|
18
|
+
declare function handleRecorderReplay(command: RecorderReplayCommand, browser: BrowserManager): Promise<Response>;
|
|
19
|
+
export { handleRecorderReplay };
|
|
20
|
+
//# sourceMappingURL=recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/actions/recorder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAIrB,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAG5D;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAuDlF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAGhF;AAED,iBAAe,oBAAoB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAiMnB;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { existsSync, writeFileSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { successResponse, errorResponse } from '../protocol.js';
|
|
4
|
+
import { getAppDir } from '../daemon.js';
|
|
5
|
+
export async function handleRecorderStart(command, browser) {
|
|
6
|
+
const result = await browser.startRecorder(command.url, command.hide);
|
|
7
|
+
return successResponse(command.id, result);
|
|
8
|
+
}
|
|
9
|
+
export async function handleRecorderStop(command, browser) {
|
|
10
|
+
const result = await browser.stopRecorder();
|
|
11
|
+
if (result.wasRecording === false) {
|
|
12
|
+
const recorderDir = path.join(getAppDir(), 'tmp', 'recordings');
|
|
13
|
+
if (existsSync(recorderDir)) {
|
|
14
|
+
const files = readdirSync(recorderDir)
|
|
15
|
+
.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
|
|
16
|
+
.map((f) => ({
|
|
17
|
+
name: f,
|
|
18
|
+
time: statSync(path.join(recorderDir, f)).mtime.getTime(),
|
|
19
|
+
}))
|
|
20
|
+
.sort((a, b) => b.time - a.time);
|
|
21
|
+
if (files.length > 0) {
|
|
22
|
+
const recentPath = path.join(recorderDir, files[0].name);
|
|
23
|
+
return successResponse(command.id, {
|
|
24
|
+
yaml: '',
|
|
25
|
+
steps: 0,
|
|
26
|
+
path: recentPath,
|
|
27
|
+
note: 'No active recording session. Returning most recent recording file.',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return successResponse(command.id, {
|
|
32
|
+
yaml: '',
|
|
33
|
+
steps: 0,
|
|
34
|
+
note: 'No active recording session. Use "recorder start" to begin recording.',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
let outputPath;
|
|
38
|
+
let isDefaultPath = false;
|
|
39
|
+
if (command.output) {
|
|
40
|
+
outputPath = path.resolve(command.output);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const recorderDir = path.join(getAppDir(), 'tmp', 'recordings');
|
|
44
|
+
if (!existsSync(recorderDir)) {
|
|
45
|
+
const { mkdirSync } = await import('node:fs');
|
|
46
|
+
mkdirSync(recorderDir, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
49
|
+
outputPath = path.join(recorderDir, `session-${timestamp}.yaml`);
|
|
50
|
+
isDefaultPath = true;
|
|
51
|
+
}
|
|
52
|
+
writeFileSync(outputPath, result.yaml, 'utf-8');
|
|
53
|
+
return successResponse(command.id, {
|
|
54
|
+
yaml: result.yaml,
|
|
55
|
+
steps: result.steps,
|
|
56
|
+
path: outputPath,
|
|
57
|
+
tip: isDefaultPath ? `Full YAML saved to: ${outputPath}` : undefined,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export async function handleRecorderStatus(command, browser) {
|
|
61
|
+
const result = browser.getRecorderStatus();
|
|
62
|
+
return successResponse(command.id, result);
|
|
63
|
+
}
|
|
64
|
+
async function handleRecorderReplay(command, browser) {
|
|
65
|
+
const fs = await import('node:fs');
|
|
66
|
+
const pathModule = await import('node:path');
|
|
67
|
+
let yamlPath = command.path;
|
|
68
|
+
if (!yamlPath) {
|
|
69
|
+
const recorderDir = pathModule.join(getAppDir(), 'tmp', 'recordings');
|
|
70
|
+
if (!fs.existsSync(recorderDir)) {
|
|
71
|
+
return errorResponse(command.id, 'No recordings found. Please record first.');
|
|
72
|
+
}
|
|
73
|
+
const files = fs
|
|
74
|
+
.readdirSync(recorderDir)
|
|
75
|
+
.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
|
|
76
|
+
.map((f) => ({
|
|
77
|
+
name: f,
|
|
78
|
+
time: fs.statSync(pathModule.join(recorderDir, f)).mtime.getTime(),
|
|
79
|
+
}))
|
|
80
|
+
.sort((a, b) => b.time - a.time);
|
|
81
|
+
if (files.length === 0) {
|
|
82
|
+
return errorResponse(command.id, 'No recordings found. Please record first.');
|
|
83
|
+
}
|
|
84
|
+
yamlPath = pathModule.join(recorderDir, files[0].name);
|
|
85
|
+
}
|
|
86
|
+
if (!fs.existsSync(yamlPath)) {
|
|
87
|
+
return errorResponse(command.id, `Recording file not found: ${yamlPath}`);
|
|
88
|
+
}
|
|
89
|
+
const yamlContent = fs.readFileSync(yamlPath, 'utf-8');
|
|
90
|
+
const cliCommands = [];
|
|
91
|
+
const lines = yamlContent.split('\n');
|
|
92
|
+
let inSteps = false;
|
|
93
|
+
const parsedSteps = {};
|
|
94
|
+
for (const line of lines) {
|
|
95
|
+
if (/^steps:/.test(line.trim())) {
|
|
96
|
+
inSteps = true;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (inSteps && /^-\s+id:/.test(line.trim())) {
|
|
100
|
+
const idMatch = line.match(/id:\s*(.+)/);
|
|
101
|
+
if (idMatch)
|
|
102
|
+
parsedSteps.currentId = idMatch[1].trim();
|
|
103
|
+
}
|
|
104
|
+
if (inSteps && /^\s+action:\s*(.+)/.test(line)) {
|
|
105
|
+
// End of steps section when we hit a non-step line
|
|
106
|
+
}
|
|
107
|
+
if (inSteps && !/^\s/.test(line) && !/^$/.test(line) && !/^steps:/.test(line.trim())) {
|
|
108
|
+
inSteps = false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
let inCliSection = false;
|
|
112
|
+
for (const line of lines) {
|
|
113
|
+
if (line.includes('# CLI Commands')) {
|
|
114
|
+
inCliSection = true;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (inCliSection && (line.startsWith('agent-browser ') || line.startsWith('AGENT_BROWSER_'))) {
|
|
118
|
+
cliCommands.push(line.trim());
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (cliCommands.length === 0) {
|
|
122
|
+
return errorResponse(command.id, 'No CLI commands found in recording. Please re-record with the new version.');
|
|
123
|
+
}
|
|
124
|
+
const envLines = cliCommands.filter((l) => l.startsWith('AGENT_BROWSER_'));
|
|
125
|
+
const cmdLines = cliCommands.filter((l) => l.startsWith('agent-browser '));
|
|
126
|
+
const originalEnv = {};
|
|
127
|
+
for (const envLine of envLines) {
|
|
128
|
+
const eqIdx = envLine.indexOf('=');
|
|
129
|
+
if (eqIdx > 0) {
|
|
130
|
+
const key = envLine.substring(0, eqIdx);
|
|
131
|
+
if (key === 'AGENT_BROWSER_HUMAN')
|
|
132
|
+
continue;
|
|
133
|
+
let value = envLine.substring(eqIdx + 1);
|
|
134
|
+
const spaceIdx = value.indexOf(' ');
|
|
135
|
+
if (spaceIdx > 0) {
|
|
136
|
+
value = value.substring(0, spaceIdx);
|
|
137
|
+
}
|
|
138
|
+
originalEnv[key] = process.env[key];
|
|
139
|
+
process.env[key] = value;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function parseCommandLine(line) {
|
|
143
|
+
const parts = [];
|
|
144
|
+
let current = '';
|
|
145
|
+
let inQuotes = false;
|
|
146
|
+
let quoteChar = '';
|
|
147
|
+
for (let i = 0; i < line.length; i++) {
|
|
148
|
+
const char = line[i];
|
|
149
|
+
if ((char === '"' || char === "'") && !inQuotes) {
|
|
150
|
+
inQuotes = true;
|
|
151
|
+
quoteChar = char;
|
|
152
|
+
}
|
|
153
|
+
else if (char === quoteChar && inQuotes) {
|
|
154
|
+
inQuotes = false;
|
|
155
|
+
quoteChar = '';
|
|
156
|
+
}
|
|
157
|
+
else if (char === ' ' && !inQuotes) {
|
|
158
|
+
if (current) {
|
|
159
|
+
parts.push(current);
|
|
160
|
+
current = '';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
current += char;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (current) {
|
|
168
|
+
parts.push(current);
|
|
169
|
+
}
|
|
170
|
+
return parts;
|
|
171
|
+
}
|
|
172
|
+
const currentSession = process.env.AGENT_BROWSER_SESSION || 'default';
|
|
173
|
+
const results = [];
|
|
174
|
+
for (const cmdLine of cmdLines) {
|
|
175
|
+
try {
|
|
176
|
+
let parts = parseCommandLine(cmdLine);
|
|
177
|
+
if (parts.length > 0 && parts[0] === 'agent-browser') {
|
|
178
|
+
parts = parts.slice(1);
|
|
179
|
+
}
|
|
180
|
+
if (parts.length === 0) {
|
|
181
|
+
results.push({ command: cmdLine, success: true });
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const { parseCommand } = await import('../cli/commands.js');
|
|
185
|
+
const { parseFlags } = await import('../cli/flags.js');
|
|
186
|
+
const flags = parseFlags([]);
|
|
187
|
+
if (currentSession !== 'default') {
|
|
188
|
+
flags.session = currentSession;
|
|
189
|
+
}
|
|
190
|
+
const parsedCmd = parseCommand(parts, flags);
|
|
191
|
+
const wasRecording = browser.isRecordingSession();
|
|
192
|
+
if (wasRecording) {
|
|
193
|
+
browser.pauseRecording();
|
|
194
|
+
}
|
|
195
|
+
const COMMAND_TIMEOUT_MS = 5000;
|
|
196
|
+
const { executeCommand } = await import('./index.js');
|
|
197
|
+
const result = (await Promise.race([
|
|
198
|
+
executeCommand(parsedCmd, browser),
|
|
199
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Command timed out after ${COMMAND_TIMEOUT_MS}ms`)), COMMAND_TIMEOUT_MS)),
|
|
200
|
+
]));
|
|
201
|
+
if (wasRecording) {
|
|
202
|
+
browser.resumeRecording();
|
|
203
|
+
}
|
|
204
|
+
results.push({ command: cmdLine, success: result.success });
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
208
|
+
results.push({ command: cmdLine, success: false, error: errorMessage });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (const [key, value] of Object.entries(originalEnv)) {
|
|
212
|
+
if (value === undefined) {
|
|
213
|
+
delete process.env[key];
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
process.env[key] = value;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const successCount = results.filter((r) => r.success).length;
|
|
220
|
+
const failCount = results.filter((r) => !r.success).length;
|
|
221
|
+
return successResponse(command.id, {
|
|
222
|
+
replayed: true,
|
|
223
|
+
file: yamlPath,
|
|
224
|
+
totalCommands: cmdLines.length,
|
|
225
|
+
successCount,
|
|
226
|
+
failCount,
|
|
227
|
+
results: results.slice(0, 20),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
export { handleRecorderReplay };
|
|
231
|
+
//# sourceMappingURL=recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../src/actions/recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BrowserManager } from '../browser/index.js';
|
|
2
|
+
import type { Response, RecordingStartCommand, RecordingStartData, RecordingStopCommand, RecordingStopData, RecordingRestartCommand, RecordingRestartData } from '../types.js';
|
|
3
|
+
export declare function handleRecordingStart(command: RecordingStartCommand, browser: BrowserManager): Promise<Response<RecordingStartData>>;
|
|
4
|
+
export declare function handleRecordingStop(command: RecordingStopCommand, browser: BrowserManager): Promise<Response<RecordingStopData>>;
|
|
5
|
+
export declare function handleRecordingRestart(command: RecordingRestartCommand, browser: BrowserManager): Promise<Response<RecordingRestartData>>;
|
|
6
|
+
//# sourceMappingURL=recording.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../../src/actions/recording.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAGrB,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAMvC;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAGtC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAQzC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { successResponse } from '../protocol.js';
|
|
2
|
+
export async function handleRecordingStart(command, browser) {
|
|
3
|
+
await browser.startRecording(command.path, command.url);
|
|
4
|
+
return successResponse(command.id, {
|
|
5
|
+
started: true,
|
|
6
|
+
path: command.path,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export async function handleRecordingStop(command, browser) {
|
|
10
|
+
const result = await browser.stopRecording();
|
|
11
|
+
return successResponse(command.id, result);
|
|
12
|
+
}
|
|
13
|
+
export async function handleRecordingRestart(command, browser) {
|
|
14
|
+
const result = await browser.restartRecording(command.path, command.url);
|
|
15
|
+
return successResponse(command.id, {
|
|
16
|
+
started: true,
|
|
17
|
+
path: command.path,
|
|
18
|
+
previousPath: result.previousPath,
|
|
19
|
+
stopped: result.stopped,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=recording.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording.js","sourceRoot":"","sources":["../../src/actions/recording.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA8B,EAC9B,OAAuB;IAEvB,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;IAC7C,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAgC,EAChC,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BrowserManager } from '../browser/index.js';
|
|
2
|
+
import type { ScrapeCommand, Response } from '../types.js';
|
|
3
|
+
export interface ScrapeResult {
|
|
4
|
+
url: string;
|
|
5
|
+
title: string;
|
|
6
|
+
content: string;
|
|
7
|
+
format: 'text' | 'html' | 'markdown';
|
|
8
|
+
}
|
|
9
|
+
export declare function handleScrape(command: ScrapeCommand, browser: BrowserManager): Promise<Response<ScrapeResult>>;
|
|
10
|
+
//# sourceMappingURL=scrape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape.d.ts","sourceRoot":"","sources":["../../src/actions/scrape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CACtC;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAuCjC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { successResponse } from '../protocol.js';
|
|
2
|
+
import { extractContentFromPage } from './utils.js';
|
|
3
|
+
export async function handleScrape(command, browser) {
|
|
4
|
+
const page = browser.getPage();
|
|
5
|
+
if (!page) {
|
|
6
|
+
return {
|
|
7
|
+
id: command.id,
|
|
8
|
+
success: false,
|
|
9
|
+
error: 'Browser page not initialized',
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const timeout = (command.timeout ?? 15) * 1000;
|
|
13
|
+
try {
|
|
14
|
+
await page.goto(command.url, {
|
|
15
|
+
timeout,
|
|
16
|
+
waitUntil: 'domcontentloaded',
|
|
17
|
+
});
|
|
18
|
+
await Promise.race([
|
|
19
|
+
page.waitForLoadState('networkidle', { timeout: Math.min(timeout, 5000) }).catch(() => { }),
|
|
20
|
+
page.waitForTimeout(3000),
|
|
21
|
+
]);
|
|
22
|
+
const format = command.format ?? 'markdown';
|
|
23
|
+
const content = await extractContentFromPage(page, format, command.selector);
|
|
24
|
+
return successResponse(command.id, {
|
|
25
|
+
url: page.url(),
|
|
26
|
+
title: await page.title(),
|
|
27
|
+
content,
|
|
28
|
+
format,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return {
|
|
33
|
+
id: command.id,
|
|
34
|
+
success: false,
|
|
35
|
+
error: error instanceof Error ? error.message : String(error),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=scrape.js.map
|