Skip to content

Commit 9e94185

Browse files
authored
update google sdk for gemini. Better frame context cleanup (#68)
* update google sdk for gemini. Better frame context cleanup * fix aggressive removal of event listeners
1 parent 18f225d commit 9e94185

4 files changed

Lines changed: 47 additions & 18 deletions

File tree

‎package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@hyperbrowser/agent",
3-
"version": "1.0.5",
3+
"version": "1.0.6",
44
"description": "Hyperbrowsers Web Agent",
55
"author": "",
66
"main": "dist/index.js",
@@ -38,7 +38,7 @@
3838
],
3939
"dependencies": {
4040
"@anthropic-ai/sdk": "^0.69.0",
41-
"@google/genai": "^1.28.0",
41+
"@google/genai": "^1.30.0",
4242
"@hyperbrowser/sdk": "0.78.0",
4343
"@inquirer/prompts": "^7.4.1",
4444
"@modelcontextprotocol/sdk": "^1.9.0",

‎src/cdp/frame-context-manager.ts‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,42 @@ export class FrameContextManager {
9292
}
9393

9494
removeFrame(frameId: string): void {
95+
// 1. Clean execution contexts
96+
const contextId = this.frameExecutionContexts.get(frameId);
97+
if (contextId !== undefined) {
98+
this.executionContextToFrame.delete(contextId);
99+
this.frameExecutionContexts.delete(frameId);
100+
}
101+
102+
const waiters = this.executionContextWaiters.get(frameId);
103+
if (waiters) {
104+
for (const waiter of waiters) {
105+
if (waiter.timeoutId) clearTimeout(waiter.timeoutId);
106+
waiter.resolve(undefined);
107+
}
108+
this.executionContextWaiters.delete(frameId);
109+
}
110+
111+
// 2. Clean session listeners - only for OOPIF frames with dedicated sessions
112+
// Same-origin frames share the root session, so we must not remove shared listeners
113+
const isOOPIF = this.oopifFrameIds.has(frameId);
114+
if (isOOPIF) {
115+
const session = this.sessions.get(frameId);
116+
if (session) {
117+
const listeners = this.sessionListeners.get(session);
118+
if (listeners) {
119+
for (const { event, handler } of listeners) {
120+
session.off?.(event, handler);
121+
}
122+
this.sessionListeners.delete(session);
123+
}
124+
}
125+
}
126+
127+
// 3. Clean OOPIF set
128+
this.oopifFrameIds.delete(frameId);
129+
130+
// 4. Remove from graph and sessions
95131
this.graph.removeFrame(frameId);
96132
this.sessions.delete(frameId);
97133
}
@@ -388,7 +424,11 @@ export class FrameContextManager {
388424
this.log(
389425
`[FrameContext] Frame ${frame.url()} is detached, removing cached record`
390426
);
427+
const frameId = cachedRecord.frameId;
391428
this.removeCachedPlaywrightFrame(frame);
429+
if (frameId) {
430+
this.removeFrame(frameId);
431+
}
392432
return null;
393433
}
394434
cachedRecord.url = frame.url();
@@ -439,6 +479,7 @@ export class FrameContextManager {
439479
};
440480
const detachHandler = (): void => {
441481
this.removeCachedPlaywrightFrame(frame);
482+
this.removeFrame(frameId);
442483
oopifSession?.off?.("Detached", detachHandler);
443484
};
444485
record.detachHandler = detachHandler;

‎src/context-providers/a11y-dom/index.ts‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -474,18 +474,6 @@ async function fetchIframeAXTrees(
474474
if (processedCrossOriginFrames.has(frameId)) {
475475
continue;
476476
}
477-
await collectCrossOriginFrameData({
478-
frameIndex,
479-
frameInfo,
480-
session,
481-
maps,
482-
allNodes,
483-
frameDebugInfo,
484-
debug,
485-
enableVisualMode,
486-
frameContextManager,
487-
});
488-
processedCrossOriginFrames.add(frameId);
489477
} else {
490478
sameOriginFrames.push([frameIndex, frameInfo]);
491479
}

‎yarn.lock‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,10 @@
219219
"@eslint/core" "^0.16.0"
220220
levn "^0.4.1"
221221

222-
"@google/genai@^1.28.0":
223-
version "1.28.0"
224-
resolved "https://registry.yarnpkg.com/@google/genai/-/genai-1.28.0.tgz#0d0563ccf9cac3021a3deffc08549ef4a8d975f8"
225-
integrity sha512-0pfZ1EWQsM9kINsL+mFKJvpzM6NRHS9t360S1MzKq4JtIwTj/RbsPpC/K5wpKiPy9PC+J+bsz/9gvaL51++KrA==
222+
"@google/genai@^1.30.0":
223+
version "1.30.0"
224+
resolved "https://registry.yarnpkg.com/@google/genai/-/genai-1.30.0.tgz#11fc12ab64e7e7c559b41835a5c237b3dfcd1348"
225+
integrity sha512-3MRcgczBFbUat1wIlZoLJ0vCCfXgm7Qxjh59cZi2X08RgWLtm9hKOspzp7TOg1TV2e26/MLxR2GR5yD5GmBV2w==
226226
dependencies:
227227
google-auth-library "^10.3.0"
228228
ws "^8.18.0"

0 commit comments

Comments
 (0)