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