@cereworker/browser 26.323.5 → 26.323.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdp.d.ts +11 -0
- package/dist/cdp.d.ts.map +1 -0
- package/dist/cdp.js +28 -0
- package/dist/cdp.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/puppeteer.d.ts +3 -0
- package/dist/puppeteer.d.ts.map +1 -1
- package/dist/puppeteer.js +33 -8
- package/dist/puppeteer.js.map +1 -1
- package/dist/tools.d.ts +23 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +35 -3
- package/dist/tools.js.map +1 -1
- package/package.json +4 -4
package/dist/cdp.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BrowserSession } from './puppeteer.js';
|
|
2
|
+
export interface CdpConnectionOptions {
|
|
3
|
+
/** Chrome remote debugging port (default: 9222) */
|
|
4
|
+
port?: number;
|
|
5
|
+
/** Direct WebSocket endpoint URL */
|
|
6
|
+
wsEndpoint?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function connectCdp(options?: CdpConnectionOptions): Promise<BrowserSession>;
|
|
9
|
+
export declare function disconnectCdp(): Promise<void>;
|
|
10
|
+
export declare function getCdpSession(): BrowserSession | null;
|
|
11
|
+
//# sourceMappingURL=cdp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAsB,UAAU,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAkB5F;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAKnD;AAED,wBAAgB,aAAa,IAAI,cAAc,GAAG,IAAI,CAErD"}
|
package/dist/cdp.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import puppeteer from 'puppeteer';
|
|
2
|
+
let cdpSession = null;
|
|
3
|
+
export async function connectCdp(options = {}) {
|
|
4
|
+
if (cdpSession)
|
|
5
|
+
return cdpSession;
|
|
6
|
+
let wsEndpoint = options.wsEndpoint;
|
|
7
|
+
if (!wsEndpoint) {
|
|
8
|
+
const port = options.port ?? 9222;
|
|
9
|
+
const response = await fetch(`http://localhost:${port}/json/version`);
|
|
10
|
+
const data = (await response.json());
|
|
11
|
+
wsEndpoint = data.webSocketDebuggerUrl;
|
|
12
|
+
}
|
|
13
|
+
const browser = await puppeteer.connect({ browserWSEndpoint: wsEndpoint });
|
|
14
|
+
const pages = await browser.pages();
|
|
15
|
+
const page = pages[0] ?? (await browser.newPage());
|
|
16
|
+
cdpSession = { browser, page };
|
|
17
|
+
return cdpSession;
|
|
18
|
+
}
|
|
19
|
+
export async function disconnectCdp() {
|
|
20
|
+
if (cdpSession) {
|
|
21
|
+
cdpSession.browser.disconnect();
|
|
22
|
+
cdpSession = null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function getCdpSession() {
|
|
26
|
+
return cdpSession;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=cdp.js.map
|
package/dist/cdp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAUlC,IAAI,UAAU,GAA0B,IAAI,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAgC,EAAE;IACjE,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,eAAe,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqC,CAAC;QACzE,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEnD,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { launchBrowser, closeBrowser, getSession, navigateTo, getPageText, screenshot, clickElement, typeText, evaluateJs, waitForSelector, getPageUrl, type BrowserSession, } from './puppeteer.js';
|
|
1
|
+
export { launchBrowser, closeBrowser, getSession, setMode, getMode, navigateTo, getPageText, screenshot, clickElement, typeText, evaluateJs, waitForSelector, getPageUrl, type BrowserSession, } from './puppeteer.js';
|
|
2
|
+
export { connectCdp, disconnectCdp, getCdpSession, type CdpConnectionOptions } from './cdp.js';
|
|
2
3
|
export { browserToolDefinitions, type BrowserToolName } from './tools.js';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,EACV,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,EACP,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,EACV,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { launchBrowser, closeBrowser, getSession, navigateTo, getPageText, screenshot, clickElement, typeText, evaluateJs, waitForSelector, getPageUrl, } from './puppeteer.js';
|
|
1
|
+
export { launchBrowser, closeBrowser, getSession, setMode, getMode, navigateTo, getPageText, screenshot, clickElement, typeText, evaluateJs, waitForSelector, getPageUrl, } from './puppeteer.js';
|
|
2
|
+
export { connectCdp, disconnectCdp, getCdpSession } from './cdp.js';
|
|
2
3
|
export { browserToolDefinitions } from './tools.js';
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,GAEX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAwB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,EACP,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,GAEX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAA6B,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAwB,MAAM,YAAY,CAAC"}
|
package/dist/puppeteer.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { type Browser, type Page } from 'puppeteer';
|
|
2
|
+
import { type CdpConnectionOptions } from './cdp.js';
|
|
2
3
|
export interface BrowserSession {
|
|
3
4
|
browser: Browser;
|
|
4
5
|
page: Page;
|
|
5
6
|
}
|
|
7
|
+
export declare function setMode(m: 'launch' | 'connect', options?: CdpConnectionOptions): void;
|
|
8
|
+
export declare function getMode(): 'launch' | 'connect';
|
|
6
9
|
export declare function launchBrowser(headless?: boolean): Promise<BrowserSession>;
|
|
7
10
|
export declare function closeBrowser(): Promise<void>;
|
|
8
11
|
export declare function getSession(): BrowserSession | null;
|
package/dist/puppeteer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer.d.ts","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"puppeteer.d.ts","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAA4C,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE/F,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAMD,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAGrF;AAED,wBAAgB,OAAO,IAAI,QAAQ,GAAG,SAAS,CAE9C;AAWD,wBAAsB,aAAa,CAAC,QAAQ,UAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAa5E;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CASlD;AAED,wBAAgB,UAAU,IAAI,cAAc,GAAG,IAAI,CAGlD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CASnD;AAED,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK/D;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQpE;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ9E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ9D;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAQzF;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAGlD"}
|
package/dist/puppeteer.js
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import puppeteer from 'puppeteer';
|
|
2
|
+
import { connectCdp, disconnectCdp, getCdpSession } from './cdp.js';
|
|
2
3
|
let session = null;
|
|
4
|
+
let mode = 'launch';
|
|
5
|
+
let cdpOptions = {};
|
|
6
|
+
export function setMode(m, options) {
|
|
7
|
+
mode = m;
|
|
8
|
+
cdpOptions = options ?? {};
|
|
9
|
+
}
|
|
10
|
+
export function getMode() {
|
|
11
|
+
return mode;
|
|
12
|
+
}
|
|
13
|
+
async function getOrCreateSession() {
|
|
14
|
+
if (mode === 'connect') {
|
|
15
|
+
const existing = getCdpSession();
|
|
16
|
+
if (existing)
|
|
17
|
+
return existing;
|
|
18
|
+
return connectCdp(cdpOptions);
|
|
19
|
+
}
|
|
20
|
+
return launchBrowser();
|
|
21
|
+
}
|
|
3
22
|
export async function launchBrowser(headless = true) {
|
|
4
23
|
if (session)
|
|
5
24
|
return session;
|
|
@@ -13,21 +32,27 @@ export async function launchBrowser(headless = true) {
|
|
|
13
32
|
return session;
|
|
14
33
|
}
|
|
15
34
|
export async function closeBrowser() {
|
|
35
|
+
if (mode === 'connect') {
|
|
36
|
+
await disconnectCdp();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
16
39
|
if (session) {
|
|
17
40
|
await session.browser.close();
|
|
18
41
|
session = null;
|
|
19
42
|
}
|
|
20
43
|
}
|
|
21
44
|
export function getSession() {
|
|
45
|
+
if (mode === 'connect')
|
|
46
|
+
return getCdpSession();
|
|
22
47
|
return session;
|
|
23
48
|
}
|
|
24
49
|
export async function navigateTo(url) {
|
|
25
|
-
const s = await
|
|
50
|
+
const s = await getOrCreateSession();
|
|
26
51
|
await s.page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 });
|
|
27
52
|
return `Navigated to ${s.page.url()} - Title: ${await s.page.title()}`;
|
|
28
53
|
}
|
|
29
54
|
export async function getPageText() {
|
|
30
|
-
const s = await
|
|
55
|
+
const s = await getOrCreateSession();
|
|
31
56
|
const text = await s.page.evaluate(() => document.body.innerText);
|
|
32
57
|
// Truncate to avoid massive output
|
|
33
58
|
const maxLen = 10000;
|
|
@@ -37,13 +62,13 @@ export async function getPageText() {
|
|
|
37
62
|
return text;
|
|
38
63
|
}
|
|
39
64
|
export async function screenshot(path) {
|
|
40
|
-
const s = await
|
|
65
|
+
const s = await getOrCreateSession();
|
|
41
66
|
const filePath = path ?? `/tmp/cereworker-screenshot-${Date.now()}.png`;
|
|
42
67
|
await s.page.screenshot({ path: filePath, fullPage: false });
|
|
43
68
|
return `Screenshot saved to ${filePath}`;
|
|
44
69
|
}
|
|
45
70
|
export async function clickElement(selector) {
|
|
46
|
-
const s = await
|
|
71
|
+
const s = await getOrCreateSession();
|
|
47
72
|
try {
|
|
48
73
|
await s.page.click(selector);
|
|
49
74
|
return `Clicked: ${selector}`;
|
|
@@ -53,7 +78,7 @@ export async function clickElement(selector) {
|
|
|
53
78
|
}
|
|
54
79
|
}
|
|
55
80
|
export async function typeText(selector, text) {
|
|
56
|
-
const s = await
|
|
81
|
+
const s = await getOrCreateSession();
|
|
57
82
|
try {
|
|
58
83
|
await s.page.type(selector, text);
|
|
59
84
|
return `Typed into: ${selector}`;
|
|
@@ -63,7 +88,7 @@ export async function typeText(selector, text) {
|
|
|
63
88
|
}
|
|
64
89
|
}
|
|
65
90
|
export async function evaluateJs(code) {
|
|
66
|
-
const s = await
|
|
91
|
+
const s = await getOrCreateSession();
|
|
67
92
|
try {
|
|
68
93
|
const result = await s.page.evaluate(code);
|
|
69
94
|
return String(result ?? '(no result)');
|
|
@@ -73,7 +98,7 @@ export async function evaluateJs(code) {
|
|
|
73
98
|
}
|
|
74
99
|
}
|
|
75
100
|
export async function waitForSelector(selector, timeoutMs = 5000) {
|
|
76
|
-
const s = await
|
|
101
|
+
const s = await getOrCreateSession();
|
|
77
102
|
try {
|
|
78
103
|
await s.page.waitForSelector(selector, { timeout: timeoutMs });
|
|
79
104
|
return `Found: ${selector}`;
|
|
@@ -83,7 +108,7 @@ export async function waitForSelector(selector, timeoutMs = 5000) {
|
|
|
83
108
|
}
|
|
84
109
|
}
|
|
85
110
|
export async function getPageUrl() {
|
|
86
|
-
const s = await
|
|
111
|
+
const s = await getOrCreateSession();
|
|
87
112
|
return s.page.url();
|
|
88
113
|
}
|
|
89
114
|
//# sourceMappingURL=puppeteer.js.map
|
package/dist/puppeteer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA,OAAO,SAAsC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -96,10 +96,32 @@ export declare const browserToolDefinitions: {
|
|
|
96
96
|
parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
97
97
|
execute: () => Promise<string>;
|
|
98
98
|
};
|
|
99
|
+
browserConnect: {
|
|
100
|
+
description: string;
|
|
101
|
+
parameters: z.ZodObject<{
|
|
102
|
+
port: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
103
|
+
wsEndpoint: z.ZodOptional<z.ZodString>;
|
|
104
|
+
}, "strip", z.ZodTypeAny, {
|
|
105
|
+
port: number;
|
|
106
|
+
wsEndpoint?: string | undefined;
|
|
107
|
+
}, {
|
|
108
|
+
port?: number | undefined;
|
|
109
|
+
wsEndpoint?: string | undefined;
|
|
110
|
+
}>;
|
|
111
|
+
execute: (args: {
|
|
112
|
+
port?: number;
|
|
113
|
+
wsEndpoint?: string;
|
|
114
|
+
}) => Promise<string>;
|
|
115
|
+
};
|
|
116
|
+
browserDisconnect: {
|
|
117
|
+
description: string;
|
|
118
|
+
parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
119
|
+
execute: () => Promise<"Not in CDP mode. Use browserClose to close a launched browser." | "Disconnected from Chrome">;
|
|
120
|
+
};
|
|
99
121
|
browserClose: {
|
|
100
122
|
description: string;
|
|
101
123
|
parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
102
|
-
execute: () => Promise<
|
|
124
|
+
execute: () => Promise<"Disconnected from Chrome" | "Browser closed">;
|
|
103
125
|
};
|
|
104
126
|
};
|
|
105
127
|
export type BrowserToolName = keyof typeof browserToolDefinitions;
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB,eAAO,MAAM,sBAAsB;;;;;;;;;;wBAMT;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;wBAYf;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;wBAOjB;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;wBAQpB;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;wBAOlC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;wBAQhB;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;wBAetC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;CAgC/D,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,sBAAsB,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { navigateTo, getPageText, screenshot, clickElement, typeText, evaluateJs, waitForSelector, getPageUrl, closeBrowser, } from './puppeteer.js';
|
|
2
|
+
import { navigateTo, getPageText, screenshot, clickElement, typeText, evaluateJs, waitForSelector, getPageUrl, closeBrowser, setMode, getMode, } from './puppeteer.js';
|
|
3
|
+
import { connectCdp, disconnectCdp } from './cdp.js';
|
|
3
4
|
export const browserToolDefinitions = {
|
|
4
5
|
browserNavigate: {
|
|
5
6
|
description: 'Navigate the browser to a URL',
|
|
@@ -55,12 +56,43 @@ export const browserToolDefinitions = {
|
|
|
55
56
|
parameters: z.object({}),
|
|
56
57
|
execute: async () => getPageUrl(),
|
|
57
58
|
},
|
|
59
|
+
browserConnect: {
|
|
60
|
+
description: 'Connect to an existing Chrome browser via CDP (Chrome DevTools Protocol). Chrome must be running with --remote-debugging-port.',
|
|
61
|
+
parameters: z.object({
|
|
62
|
+
port: z.number().optional().default(9222).describe('Chrome remote debugging port'),
|
|
63
|
+
wsEndpoint: z.string().optional().describe('Direct WebSocket endpoint URL (overrides port)'),
|
|
64
|
+
}),
|
|
65
|
+
execute: async (args) => {
|
|
66
|
+
try {
|
|
67
|
+
setMode('connect', { port: args.port, wsEndpoint: args.wsEndpoint });
|
|
68
|
+
const s = await connectCdp({ port: args.port, wsEndpoint: args.wsEndpoint });
|
|
69
|
+
const url = s.page.url();
|
|
70
|
+
return `Connected to Chrome via CDP. Current page: ${url}`;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
setMode('launch');
|
|
74
|
+
return `Failed to connect: ${err instanceof Error ? err.message : String(err)}`;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
browserDisconnect: {
|
|
79
|
+
description: 'Disconnect from Chrome without closing it (CDP mode only)',
|
|
80
|
+
parameters: z.object({}),
|
|
81
|
+
execute: async () => {
|
|
82
|
+
if (getMode() !== 'connect') {
|
|
83
|
+
return 'Not in CDP mode. Use browserClose to close a launched browser.';
|
|
84
|
+
}
|
|
85
|
+
await disconnectCdp();
|
|
86
|
+
setMode('launch');
|
|
87
|
+
return 'Disconnected from Chrome';
|
|
88
|
+
},
|
|
89
|
+
},
|
|
58
90
|
browserClose: {
|
|
59
|
-
description: 'Close the browser',
|
|
91
|
+
description: 'Close the browser (launch mode) or disconnect (CDP mode)',
|
|
60
92
|
parameters: z.object({}),
|
|
61
93
|
execute: async () => {
|
|
62
94
|
await closeBrowser();
|
|
63
|
-
return 'Browser closed';
|
|
95
|
+
return getMode() === 'connect' ? 'Disconnected from Chrome' : 'Browser closed';
|
|
64
96
|
},
|
|
65
97
|
},
|
|
66
98
|
};
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cereworker/browser",
|
|
3
|
-
"version": "26.323.
|
|
3
|
+
"version": "26.323.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"directory": "packages/browser"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@cereworker/core": "26.323.5",
|
|
20
|
-
"@cereworker/config": "26.323.5",
|
|
21
19
|
"puppeteer": "^24.0.0",
|
|
22
|
-
"zod": "^3.24.0"
|
|
20
|
+
"zod": "^3.24.0",
|
|
21
|
+
"@cereworker/config": "26.323.7",
|
|
22
|
+
"@cereworker/core": "26.323.7"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"typescript": "^5.7.3"
|