@mastra/agent-browser 0.5.2 → 0.5.3-alpha.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/dist/index.cjs +37 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -14
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -769,7 +769,7 @@ var AgentBrowser = class extends MastraBrowser {
|
|
|
769
769
|
this.notifyBrowserReady(session.threadId);
|
|
770
770
|
},
|
|
771
771
|
onBrowserCreated: (manager, threadId) => {
|
|
772
|
-
this.setupCloseListenerForThread(manager, threadId);
|
|
772
|
+
this.setupCloseListenerForThread(manager, threadId, this.isRemoteThreadBrowser());
|
|
773
773
|
}
|
|
774
774
|
};
|
|
775
775
|
const createTm = config.createThreadManager ?? ((opts) => new AgentBrowserThreadManager(opts));
|
|
@@ -824,24 +824,29 @@ var AgentBrowser = class extends MastraBrowser {
|
|
|
824
824
|
if (localConfig.cdpHeaders) launchOptions.cdpHeaders = localConfig.cdpHeaders;
|
|
825
825
|
await this.sharedManager.launch(launchOptions);
|
|
826
826
|
this.threadManager.setSharedManager(this.sharedManager);
|
|
827
|
-
this.setupCloseListenerForSharedScope(this.sharedManager);
|
|
827
|
+
this.setupCloseListenerForSharedScope(this.sharedManager, Boolean(launchOptions.cdpUrl));
|
|
828
828
|
}
|
|
829
829
|
/**
|
|
830
830
|
* Set up close event listeners for 'shared' scope browser.
|
|
831
831
|
* This handles the case where the shared browser is closed externally.
|
|
832
832
|
*/
|
|
833
|
-
setupCloseListenerForSharedScope(manager) {
|
|
833
|
+
setupCloseListenerForSharedScope(manager, connectedOverCdp = false) {
|
|
834
834
|
try {
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
835
|
+
let pidLookup;
|
|
836
|
+
if (!connectedOverCdp) {
|
|
837
|
+
pidLookup = getBrowserPid(manager).then((pid) => {
|
|
838
|
+
if (pid && this.sharedManager === manager) this.sharedBrowserPid = pid;
|
|
839
|
+
}).finally(() => {
|
|
840
|
+
if (pidLookup) this.pidLookups.delete(pidLookup);
|
|
841
|
+
});
|
|
842
|
+
this.pidLookups.add(pidLookup);
|
|
843
|
+
}
|
|
839
844
|
let disconnectHandled = false;
|
|
840
845
|
const handleDisconnect = () => {
|
|
841
846
|
if (disconnectHandled) return;
|
|
842
847
|
disconnectHandled = true;
|
|
843
848
|
this.rememberClosedBrowserState(manager, "user");
|
|
844
|
-
pidLookup.catch(() => void 0).then(() => this.handleBrowserDisconnected());
|
|
849
|
+
Promise.resolve(pidLookup).catch(() => void 0).then(() => this.handleBrowserDisconnected());
|
|
845
850
|
};
|
|
846
851
|
const context = manager.getContext();
|
|
847
852
|
if (context) context.on("close", handleDisconnect);
|
|
@@ -955,18 +960,36 @@ var AgentBrowser = class extends MastraBrowser {
|
|
|
955
960
|
* Set up close event listener for a thread's browser manager.
|
|
956
961
|
* This handles the case where a thread's browser is closed externally.
|
|
957
962
|
*/
|
|
958
|
-
|
|
963
|
+
/**
|
|
964
|
+
* Whether per-thread browsers are reached over CDP (a remote/container
|
|
965
|
+
* browser we do not own). When true, their PID is never captured — signalling
|
|
966
|
+
* it locally is meaningless and dangerous (issue #23588).
|
|
967
|
+
*
|
|
968
|
+
* Base AgentBrowser only connects over CDP when a `cdpUrl` is configured
|
|
969
|
+
* (thread scope with `cdpUrl` is normally rejected by config validation, so
|
|
970
|
+
* this is defense in depth). Subclasses that always drive a remote browser
|
|
971
|
+
* per thread (e.g. Firecrawl) override this to return `true`.
|
|
972
|
+
*/
|
|
973
|
+
isRemoteThreadBrowser() {
|
|
974
|
+
return Boolean(this.config.cdpUrl);
|
|
975
|
+
}
|
|
976
|
+
setupCloseListenerForThread(manager, threadId, connectedOverCdp = false) {
|
|
959
977
|
try {
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
978
|
+
let pidLookup;
|
|
979
|
+
if (!connectedOverCdp) {
|
|
980
|
+
pidLookup = getBrowserPid(manager).then((pid) => {
|
|
981
|
+
if (pid && this.threadManager?.getExistingManagerForThread(threadId) === manager) this.threadBrowserPids.set(threadId, pid);
|
|
982
|
+
}).finally(() => {
|
|
983
|
+
if (pidLookup) this.pidLookups.delete(pidLookup);
|
|
984
|
+
});
|
|
985
|
+
this.pidLookups.add(pidLookup);
|
|
986
|
+
}
|
|
964
987
|
let disconnectHandled = false;
|
|
965
988
|
const handleDisconnect = () => {
|
|
966
989
|
if (disconnectHandled) return;
|
|
967
990
|
disconnectHandled = true;
|
|
968
991
|
this.rememberClosedBrowserState(manager, "user", threadId);
|
|
969
|
-
pidLookup.catch(() => void 0).then(() => this.handleThreadBrowserDisconnected(threadId));
|
|
992
|
+
Promise.resolve(pidLookup).catch(() => void 0).then(() => this.handleThreadBrowserDisconnected(threadId));
|
|
970
993
|
};
|
|
971
994
|
const context = manager.getContext();
|
|
972
995
|
if (context) context.on("close", handleDisconnect);
|