chore: sync vendor baoyu-chrome-cdp across CDP skills

This commit is contained in:
Jim Liu 宝玉 2026-04-01 02:11:56 -05:00
parent 60ab574559
commit c7c98ba034
5 changed files with 160 additions and 5 deletions

View File

@ -478,7 +478,7 @@ export function killChrome(chrome: ChildProcess): void {
chrome.kill("SIGTERM"); chrome.kill("SIGTERM");
} catch {} } catch {}
setTimeout(() => { setTimeout(() => {
if (!chrome.killed) { if (chrome.exitCode === null && chrome.signalCode === null) {
try { try {
chrome.kill("SIGKILL"); chrome.kill("SIGKILL");
} catch {} } catch {}
@ -486,6 +486,37 @@ export function killChrome(chrome: ChildProcess): void {
}, 2_000).unref?.(); }, 2_000).unref?.();
} }
export async function gracefulKillChrome(
chrome: ChildProcess,
port?: number,
timeoutMs = 6_000,
): Promise<void> {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
const exitPromise = new Promise<void>((resolve) => {
chrome.once("exit", () => resolve());
});
killChrome(chrome);
const start = Date.now();
while (Date.now() - start < timeoutMs) {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
if (port !== undefined && !await isPortListening(port, 250)) return;
const exited = await Promise.race([
exitPromise.then(() => true),
sleep(100).then(() => false),
]);
if (exited) return;
}
await Promise.race([
exitPromise,
sleep(250),
]);
}
export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> { export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> {
let targetId: string; let targetId: string;
let createdTarget = false; let createdTarget = false;

View File

@ -478,7 +478,7 @@ export function killChrome(chrome: ChildProcess): void {
chrome.kill("SIGTERM"); chrome.kill("SIGTERM");
} catch {} } catch {}
setTimeout(() => { setTimeout(() => {
if (!chrome.killed) { if (chrome.exitCode === null && chrome.signalCode === null) {
try { try {
chrome.kill("SIGKILL"); chrome.kill("SIGKILL");
} catch {} } catch {}
@ -486,6 +486,37 @@ export function killChrome(chrome: ChildProcess): void {
}, 2_000).unref?.(); }, 2_000).unref?.();
} }
export async function gracefulKillChrome(
chrome: ChildProcess,
port?: number,
timeoutMs = 6_000,
): Promise<void> {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
const exitPromise = new Promise<void>((resolve) => {
chrome.once("exit", () => resolve());
});
killChrome(chrome);
const start = Date.now();
while (Date.now() - start < timeoutMs) {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
if (port !== undefined && !await isPortListening(port, 250)) return;
const exited = await Promise.race([
exitPromise.then(() => true),
sleep(100).then(() => false),
]);
if (exited) return;
}
await Promise.race([
exitPromise,
sleep(250),
]);
}
export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> { export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> {
let targetId: string; let targetId: string;
let createdTarget = false; let createdTarget = false;

View File

@ -478,7 +478,7 @@ export function killChrome(chrome: ChildProcess): void {
chrome.kill("SIGTERM"); chrome.kill("SIGTERM");
} catch {} } catch {}
setTimeout(() => { setTimeout(() => {
if (!chrome.killed) { if (chrome.exitCode === null && chrome.signalCode === null) {
try { try {
chrome.kill("SIGKILL"); chrome.kill("SIGKILL");
} catch {} } catch {}
@ -486,6 +486,37 @@ export function killChrome(chrome: ChildProcess): void {
}, 2_000).unref?.(); }, 2_000).unref?.();
} }
export async function gracefulKillChrome(
chrome: ChildProcess,
port?: number,
timeoutMs = 6_000,
): Promise<void> {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
const exitPromise = new Promise<void>((resolve) => {
chrome.once("exit", () => resolve());
});
killChrome(chrome);
const start = Date.now();
while (Date.now() - start < timeoutMs) {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
if (port !== undefined && !await isPortListening(port, 250)) return;
const exited = await Promise.race([
exitPromise.then(() => true),
sleep(100).then(() => false),
]);
if (exited) return;
}
await Promise.race([
exitPromise,
sleep(250),
]);
}
export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> { export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> {
let targetId: string; let targetId: string;
let createdTarget = false; let createdTarget = false;

View File

@ -478,7 +478,7 @@ export function killChrome(chrome: ChildProcess): void {
chrome.kill("SIGTERM"); chrome.kill("SIGTERM");
} catch {} } catch {}
setTimeout(() => { setTimeout(() => {
if (!chrome.killed) { if (chrome.exitCode === null && chrome.signalCode === null) {
try { try {
chrome.kill("SIGKILL"); chrome.kill("SIGKILL");
} catch {} } catch {}
@ -486,6 +486,37 @@ export function killChrome(chrome: ChildProcess): void {
}, 2_000).unref?.(); }, 2_000).unref?.();
} }
export async function gracefulKillChrome(
chrome: ChildProcess,
port?: number,
timeoutMs = 6_000,
): Promise<void> {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
const exitPromise = new Promise<void>((resolve) => {
chrome.once("exit", () => resolve());
});
killChrome(chrome);
const start = Date.now();
while (Date.now() - start < timeoutMs) {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
if (port !== undefined && !await isPortListening(port, 250)) return;
const exited = await Promise.race([
exitPromise.then(() => true),
sleep(100).then(() => false),
]);
if (exited) return;
}
await Promise.race([
exitPromise,
sleep(250),
]);
}
export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> { export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> {
let targetId: string; let targetId: string;
let createdTarget = false; let createdTarget = false;

View File

@ -478,7 +478,7 @@ export function killChrome(chrome: ChildProcess): void {
chrome.kill("SIGTERM"); chrome.kill("SIGTERM");
} catch {} } catch {}
setTimeout(() => { setTimeout(() => {
if (!chrome.killed) { if (chrome.exitCode === null && chrome.signalCode === null) {
try { try {
chrome.kill("SIGKILL"); chrome.kill("SIGKILL");
} catch {} } catch {}
@ -486,6 +486,37 @@ export function killChrome(chrome: ChildProcess): void {
}, 2_000).unref?.(); }, 2_000).unref?.();
} }
export async function gracefulKillChrome(
chrome: ChildProcess,
port?: number,
timeoutMs = 6_000,
): Promise<void> {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
const exitPromise = new Promise<void>((resolve) => {
chrome.once("exit", () => resolve());
});
killChrome(chrome);
const start = Date.now();
while (Date.now() - start < timeoutMs) {
if (chrome.exitCode !== null || chrome.signalCode !== null) return;
if (port !== undefined && !await isPortListening(port, 250)) return;
const exited = await Promise.race([
exitPromise.then(() => true),
sleep(100).then(() => false),
]);
if (exited) return;
}
await Promise.race([
exitPromise,
sleep(250),
]);
}
export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> { export async function openPageSession(options: OpenPageSessionOptions): Promise<PageSession> {
let targetId: string; let targetId: string;
let createdTarget = false; let createdTarget = false;