Clear pi-chrome singleton on shutdown
Tianren Dong tianrendong.dtr@gmail.com
Fri, 15 May 2026 02:42:38 -0400
1 files changed,
6 insertions(+),
2 deletions(-)
M
extensions/chrome-profile-bridge/index.ts
→
extensions/chrome-profile-bridge/index.ts
@@ -419,8 +419,9 @@ return Type.Union(values.map((value) => Type.Literal(value)) as [ReturnType<typeof Type.Literal>, ...ReturnType<typeof Type.Literal>[]]);
} export default function (pi: ExtensionAPI): void { + const instanceToken = Symbol("pi-chrome-instance"); const globalState = globalThis as typeof globalThis & { - [PI_CHROME_GLOBAL_KEY]?: { version: string; root: string }; + [PI_CHROME_GLOBAL_KEY]?: { version: string; root: string; token: symbol }; }; const alreadyLoaded = globalState[PI_CHROME_GLOBAL_KEY]; if (alreadyLoaded) {@@ -429,7 +430,7 @@ `pi-chrome already loaded from ${alreadyLoaded.root} (v${alreadyLoaded.version}); skipping duplicate from ${extensionRoot()}.`,
); return; } - globalState[PI_CHROME_GLOBAL_KEY] = { version: PI_CHROME_VERSION, root: extensionRoot() }; + globalState[PI_CHROME_GLOBAL_KEY] = { version: PI_CHROME_VERSION, root: extensionRoot(), token: instanceToken }; const bridge = new ChromeProfileBridge(DEFAULT_HOST, DEFAULT_PORT); let backgroundDefault = false;@@ -490,6 +491,9 @@ });
pi.on("session_shutdown", () => { bridge.stop(); + if (globalState[PI_CHROME_GLOBAL_KEY]?.token === instanceToken) { + delete globalState[PI_CHROME_GLOBAL_KEY]; + } }); pi.on("before_agent_start", (event) => {