perplexity-user-mcp 0.8.42 → 0.8.47
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/attachments.d.ts +10 -20
- package/dist/browser-window.d.ts +11 -0
- package/dist/cf-warmup.d.ts +32 -0
- package/dist/checks/browser.d.ts +12 -100
- package/dist/checks/config.d.ts +25 -91
- package/dist/checks/ide.d.ts +31 -89
- package/dist/checks/mcp.d.ts +12 -61
- package/dist/checks/native-deps.d.ts +46 -131
- package/dist/checks/network.d.ts +13 -71
- package/dist/checks/probe.d.ts +37 -92
- package/dist/checks/probe.mjs +29 -0
- package/dist/checks/profiles.d.ts +13 -99
- package/dist/checks/profiles.mjs +35 -0
- package/dist/checks/runtime.d.ts +24 -89
- package/dist/checks/vault.d.ts +13 -142
- package/dist/checks/vault.mjs +6 -11
- package/dist/{chunk-WDIW33DA.mjs → chunk-3LUO5ATM.mjs} +1 -1
- package/dist/{chunk-HNSPNCFH.mjs → chunk-6CAXNBDD.mjs} +1 -1
- package/dist/{chunk-B65IJQZJ.mjs → chunk-6E6XTHTG.mjs} +1 -1
- package/dist/{chunk-S677V2JU.mjs → chunk-C5I7KXHK.mjs} +32 -2
- package/dist/{chunk-RK4EBZJ3.mjs → chunk-D2ZQGKHM.mjs} +11 -8
- package/dist/{chunk-TDXETAQT.mjs → chunk-DKEJZ4FI.mjs} +1 -1
- package/dist/{chunk-U7QPUNRH.mjs → chunk-DXR6EEZH.mjs} +26 -7
- package/dist/{chunk-HJIXH6CL.mjs → chunk-E3GRJXXJ.mjs} +2 -0
- package/dist/{chunk-C3HPFFTD.mjs → chunk-GBHPJ7I7.mjs} +136 -48
- package/dist/{chunk-D254EFYB.mjs → chunk-GBI2U336.mjs} +1 -1
- package/dist/chunk-GPUGKWXH.mjs +17 -0
- package/dist/chunk-KVV3JBSN.mjs +32 -0
- package/dist/{chunk-XTRJSV72.mjs → chunk-LGH5BSUY.mjs} +1 -1
- package/dist/{chunk-KJFX2ZXR.mjs → chunk-NMKNEEZB.mjs} +1 -1
- package/dist/{chunk-T6ARJK2P.mjs → chunk-P6YOLJ5T.mjs} +6 -6
- package/dist/{chunk-452DK6OS.mjs → chunk-QXYMYCHC.mjs} +2 -2
- package/dist/{chunk-Z4OLYVB2.mjs → chunk-SCZQCV7M.mjs} +1 -1
- package/dist/{chunk-FKQ3HP4Q.mjs → chunk-TIWHN4IW.mjs} +1 -1
- package/dist/{chunk-V4U3JM4R.mjs → chunk-TSLRTZYR.mjs} +1 -1
- package/dist/{chunk-DQQISMYN.mjs → chunk-V4LHDNWJ.mjs} +2 -2
- package/dist/{chunk-2FPGJKCA.mjs → chunk-YD25G5AD.mjs} +2 -2
- package/dist/cli.d.ts +14 -1317
- package/dist/cli.mjs +14 -21
- package/dist/client.d.ts +39 -24
- package/dist/client.mjs +9 -6
- package/dist/cloud-sync.d.ts +65 -42
- package/dist/cloud-sync.mjs +9 -8
- package/dist/config.d.ts +35 -39
- package/dist/config.mjs +3 -3
- package/dist/cookie-jar.d.ts +77 -0
- package/dist/daemon/attach.d.ts +5 -12
- package/dist/daemon/attach.mjs +18 -17
- package/dist/daemon/audit.d.ts +5 -7
- package/dist/daemon/audit.mjs +2 -2
- package/dist/daemon/client-http.d.ts +10 -16
- package/dist/daemon/client-http.mjs +18 -17
- package/dist/daemon/index.d.ts +17 -14
- package/dist/daemon/index.mjs +19 -18
- package/dist/daemon/install-tunnel.d.ts +8 -34
- package/dist/daemon/install-tunnel.mjs +2 -2
- package/dist/daemon/launcher.d.ts +24 -29
- package/dist/daemon/launcher.mjs +17 -16
- package/dist/daemon/local-tokens.d.ts +23 -0
- package/dist/daemon/lockfile.d.ts +10 -12
- package/dist/daemon/lockfile.mjs +2 -2
- package/dist/daemon/oauth-consent-cache.d.ts +86 -0
- package/dist/daemon/oauth-provider.d.ts +132 -0
- package/dist/daemon/public-pages.d.ts +9 -0
- package/dist/daemon/security.d.ts +52 -0
- package/dist/daemon/server.d.ts +12 -83
- package/dist/daemon/server.mjs +12 -11
- package/dist/daemon/token.d.ts +7 -9
- package/dist/daemon/token.mjs +2 -2
- package/dist/daemon/tunnel-providers/cloudflared-named-setup.d.ts +140 -0
- package/dist/daemon/tunnel-providers/cloudflared-named.d.ts +45 -0
- package/dist/daemon/tunnel-providers/cloudflared-quick.d.ts +8 -0
- package/dist/daemon/tunnel-providers/index.d.ts +16 -327
- package/dist/daemon/tunnel-providers/index.mjs +3 -3
- package/dist/daemon/tunnel-providers/ngrok-config.d.ts +18 -0
- package/dist/daemon/tunnel-providers/ngrok.d.ts +68 -0
- package/dist/daemon/tunnel-providers/types.d.ts +56 -0
- package/dist/daemon/tunnel.d.ts +5 -7
- package/dist/debug-tracer.d.ts +2 -0
- package/dist/doctor-report.d.ts +17 -22
- package/dist/doctor.d.ts +12 -44
- package/dist/doctor.mjs +2 -2
- package/dist/export.d.ts +11 -18
- package/dist/export.mjs +4 -4
- package/dist/format.d.ts +52 -0
- package/dist/fs-utils.d.ts +44 -0
- package/dist/health-check.d.ts +1 -108
- package/dist/health-check.mjs +3 -3
- package/dist/history-store.d.ts +29 -65
- package/dist/history-store.mjs +2 -2
- package/dist/impit-login-runner.d.ts +1 -469
- package/dist/impit-login-runner.mjs +4 -4
- package/dist/index.d.ts +25 -149
- package/dist/index.mjs +23 -20
- package/dist/is-main-module.d.ts +9 -0
- package/dist/login-runner.d.ts +1 -333
- package/dist/login-runner.mjs +18 -38
- package/dist/login.d.ts +5 -0
- package/dist/logout.d.ts +2 -28
- package/dist/logout.mjs +3 -2
- package/dist/manual-login-runner.d.ts +1 -150
- package/dist/manual-login-runner.mjs +11 -11
- package/dist/{native-deps-IE4B55EL.mjs → native-deps-FCSYDL4W.mjs} +4 -4
- package/dist/native-deps.d.ts +36 -0
- package/dist/package-version.d.ts +1 -0
- package/dist/profiles.d.ts +41 -41
- package/dist/profiles.mjs +1 -1
- package/dist/prompts.d.ts +2 -0
- package/dist/redact.d.ts +14 -142
- package/dist/refresh.d.ts +11 -16
- package/dist/refresh.mjs +4 -4
- package/dist/reinit-watcher.d.ts +15 -24
- package/dist/reinit-watcher.mjs +2 -2
- package/dist/resources.d.ts +5 -0
- package/dist/safe-write.d.ts +16 -0
- package/dist/session-metadata.d.ts +45 -0
- package/dist/tool-config.d.ts +10 -0
- package/dist/tools.d.ts +23 -0
- package/dist/tty-prompt.d.ts +18 -34
- package/dist/vault.d.ts +114 -34
- package/dist/vault.mjs +6 -4
- package/dist/viewer-detect.d.ts +2 -4
- package/dist/viewers.d.ts +13 -18
- package/dist/viewers.mjs +1 -1
- package/package.json +2 -2
- package/dist/cloud-sync.d-Cqt6y18U.d.ts +0 -42
- package/dist/doctor.d-CXmUqOXX.d.ts +0 -43
- package/dist/history-store.d-BzjBF2m3.d.ts +0 -65
- package/dist/native-deps-BNThFHxa.d.ts +0 -175
- package/dist/profiles.d-DqS1oZWr.d.ts +0 -41
- package/dist/session-metadata-B9aV_n5g.d.ts +0 -148
- package/dist/vault.d-BSJWDLhp.d.ts +0 -37
- package/dist/viewer-detect.d-HWGnyFAA.d.ts +0 -4
- package/dist/viewers.d-BGCK6sw6.d.ts +0 -10
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OFFSCREEN_POSITION_ARG
|
|
3
|
+
} from "./chunk-KVV3JBSN.mjs";
|
|
1
4
|
import {
|
|
2
5
|
impitFetchJson,
|
|
3
6
|
isImpitAvailable
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-V4LHDNWJ.mjs";
|
|
5
8
|
import {
|
|
6
9
|
FORMAT_TO_CONTENT_TYPE,
|
|
7
10
|
exportThread,
|
|
8
11
|
resolveExportApiFormat
|
|
9
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GBI2U336.mjs";
|
|
10
13
|
import {
|
|
11
14
|
ASI_ACCESS_ENDPOINT,
|
|
12
15
|
AUTH_SESSION_ENDPOINT,
|
|
@@ -18,15 +21,14 @@ import {
|
|
|
18
21
|
SUPPORTED_BLOCK_USE_CASES,
|
|
19
22
|
THREAD_ENDPOINT,
|
|
20
23
|
findBrowser,
|
|
21
|
-
getOrCreateContext,
|
|
22
24
|
getSavedCookies,
|
|
23
25
|
resolveBrowserExecutable
|
|
24
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-DXR6EEZH.mjs";
|
|
25
27
|
import {
|
|
26
28
|
getActiveName,
|
|
27
29
|
getConfigDir,
|
|
28
30
|
getProfilePaths
|
|
29
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-E3GRJXXJ.mjs";
|
|
30
32
|
|
|
31
33
|
// src/client.ts
|
|
32
34
|
import { randomUUID } from "crypto";
|
|
@@ -37,7 +39,7 @@ import { join as join2 } from "path";
|
|
|
37
39
|
// src/fs-utils.js
|
|
38
40
|
import { unlinkSync } from "fs";
|
|
39
41
|
import { join } from "path";
|
|
40
|
-
var SINGLETON_FILES = ["SingletonLock", "SingletonCookie", "SingletonSocket"];
|
|
42
|
+
var SINGLETON_FILES = ["SingletonLock", "SingletonCookie", "SingletonSocket", "lockfile"];
|
|
41
43
|
function clearStaleSingletonLocks(dir) {
|
|
42
44
|
for (const name of SINGLETON_FILES) {
|
|
43
45
|
try {
|
|
@@ -49,6 +51,42 @@ function clearStaleSingletonLocks(dir) {
|
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
}
|
|
54
|
+
var defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
55
|
+
var LOCK_CONTENTION_RE = /target page, context or browser has been closed|processsingleton|profile.*(in use|already)|singletonlock|already running|exit(ed)?(?:\s+(?:with\s+)?code)?\s*21\b/i;
|
|
56
|
+
function isLockContentionError(err) {
|
|
57
|
+
if (!err) return false;
|
|
58
|
+
const msg = typeof err === "string" ? err : err.message ?? String(err);
|
|
59
|
+
return LOCK_CONTENTION_RE.test(msg);
|
|
60
|
+
}
|
|
61
|
+
async function launchWithRetry(launch, opts = {}) {
|
|
62
|
+
const {
|
|
63
|
+
retries = 3,
|
|
64
|
+
baseDelayMs = 200,
|
|
65
|
+
sleep = defaultSleep,
|
|
66
|
+
isRetriable = isLockContentionError,
|
|
67
|
+
beforeAttempt
|
|
68
|
+
} = opts;
|
|
69
|
+
let lastErr;
|
|
70
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
71
|
+
if (beforeAttempt) {
|
|
72
|
+
try {
|
|
73
|
+
beforeAttempt(attempt);
|
|
74
|
+
} catch {
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
return await launch(attempt);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
lastErr = err;
|
|
81
|
+
if (attempt === retries || !isRetriable(err)) throw err;
|
|
82
|
+
console.error(
|
|
83
|
+
`[perplexity-mcp] Browser launch hit a profile-lock collision (attempt ${attempt + 1}/${retries + 1}); retrying after backoff.`
|
|
84
|
+
);
|
|
85
|
+
await sleep(baseDelayMs * 2 ** attempt);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
throw lastErr;
|
|
89
|
+
}
|
|
52
90
|
|
|
53
91
|
// src/client.ts
|
|
54
92
|
function getActiveProfileName() {
|
|
@@ -103,7 +141,13 @@ function buildLaunchOptions(headless) {
|
|
|
103
141
|
const browser = findBrowser();
|
|
104
142
|
const opts = {
|
|
105
143
|
headless,
|
|
106
|
-
|
|
144
|
+
// The headed branch is the CF-solving bootstrap (Phase 1 / daemon session
|
|
145
|
+
// refresh). It paints a real window, which the user sees flash while they
|
|
146
|
+
// work (issue #9). Position it off-screen so the background refresh is
|
|
147
|
+
// invisible — like the already-headless search path. Headless launches
|
|
148
|
+
// have no window, so the positioning arg is omitted there. We move the
|
|
149
|
+
// window rather than shrink/hide it; see OFFSCREEN_POSITION_ARG.
|
|
150
|
+
args: headless ? STEALTH_ARGS : [...STEALTH_ARGS, OFFSCREEN_POSITION_ARG],
|
|
107
151
|
viewport: headless ? { width: 1920, height: 1080 } : { width: 800, height: 600 },
|
|
108
152
|
userAgent: USER_AGENT,
|
|
109
153
|
// Strip --enable-automation (Playwright default) which is a CF red flag
|
|
@@ -558,47 +602,55 @@ var PerplexityClient = class _PerplexityClient {
|
|
|
558
602
|
* Set env PERPLEXITY_HEADLESS_ONLY=1 to skip the headed phase (uses disk cache).
|
|
559
603
|
*/
|
|
560
604
|
async init() {
|
|
561
|
-
const
|
|
562
|
-
if (!existsSync(activePaths.browserData)) {
|
|
563
|
-
mkdirSync(activePaths.browserData, { recursive: true });
|
|
564
|
-
}
|
|
565
|
-
const browser = await resolveBrowserExecutable();
|
|
566
|
-
console.error(`[perplexity-mcp] Using ${browser.source}: ${browser.path}`);
|
|
567
|
-
const skipHeaded = process.env.PERPLEXITY_HEADLESS_ONLY === "1";
|
|
568
|
-
if (!skipHeaded) {
|
|
569
|
-
await this.headedBootstrap();
|
|
570
|
-
} else {
|
|
571
|
-
console.error("[perplexity-mcp] Skipping headed session (PERPLEXITY_HEADLESS_ONLY=1).");
|
|
572
|
-
this.loadCachedAccountInfo();
|
|
573
|
-
}
|
|
574
|
-
console.error("[perplexity-mcp] Launching headless browser...");
|
|
575
|
-
const launchOpts = buildLaunchOptions(true);
|
|
576
|
-
this.browser = await chromium.launch({
|
|
577
|
-
headless: launchOpts.headless,
|
|
578
|
-
args: launchOpts.args,
|
|
579
|
-
...launchOpts.executablePath ? { executablePath: launchOpts.executablePath } : {},
|
|
580
|
-
...launchOpts.channel ? { channel: launchOpts.channel } : {},
|
|
581
|
-
ignoreDefaultArgs: launchOpts.ignoreDefaultArgs
|
|
582
|
-
});
|
|
583
|
-
this.context = await getOrCreateContext(this.browser, {
|
|
584
|
-
viewport: launchOpts.viewport,
|
|
585
|
-
userAgent: launchOpts.userAgent
|
|
586
|
-
});
|
|
587
|
-
const saved = await getSavedCookies();
|
|
588
|
-
if (saved.length > 0) {
|
|
589
|
-
await this.context.addCookies(saved);
|
|
590
|
-
console.error(`[perplexity-mcp] Injected ${saved.length} saved cookies into browser context.`);
|
|
591
|
-
}
|
|
592
|
-
this.page = await this.context.newPage();
|
|
605
|
+
const _initAt = Date.now();
|
|
593
606
|
try {
|
|
594
|
-
|
|
595
|
-
|
|
607
|
+
const activePaths = getActivePaths();
|
|
608
|
+
if (!existsSync(activePaths.browserData)) {
|
|
609
|
+
mkdirSync(activePaths.browserData, { recursive: true });
|
|
610
|
+
}
|
|
611
|
+
const browser = await resolveBrowserExecutable();
|
|
612
|
+
console.error(`[perplexity-mcp] Using ${browser.source}: ${browser.path}`);
|
|
613
|
+
const skipHeaded = process.env.PERPLEXITY_HEADLESS_ONLY === "1";
|
|
614
|
+
if (!skipHeaded) {
|
|
615
|
+
await this.headedBootstrap();
|
|
616
|
+
} else {
|
|
617
|
+
console.error("[perplexity-mcp] Skipping headed session (PERPLEXITY_HEADLESS_ONLY=1).");
|
|
618
|
+
this.loadCachedAccountInfo();
|
|
619
|
+
}
|
|
620
|
+
console.error("[perplexity-mcp] Launching headless persistent browser...");
|
|
621
|
+
const launchOpts = buildLaunchOptions(true);
|
|
622
|
+
this.context = await launchWithRetry(
|
|
623
|
+
() => chromium.launchPersistentContext(activePaths.browserData, launchOpts),
|
|
624
|
+
{ beforeAttempt: () => clearStaleSingletonLocks(activePaths.browserData) }
|
|
625
|
+
);
|
|
626
|
+
this.browser = this.context.browser();
|
|
627
|
+
const saved = await getSavedCookies();
|
|
628
|
+
if (saved.length > 0) {
|
|
629
|
+
const current = await this.context.cookies();
|
|
630
|
+
const currentNames = new Set(current.map((c) => c.name));
|
|
631
|
+
const toInject = saved.filter((c) => !currentNames.has(c.name));
|
|
632
|
+
if (toInject.length > 0) {
|
|
633
|
+
await this.context.addCookies(toInject);
|
|
634
|
+
console.error(`[perplexity-mcp] Injected ${toInject.length} missing cookies from vault.`);
|
|
635
|
+
} else {
|
|
636
|
+
console.error("[perplexity-mcp] All vault cookies already present on disk; skipping injection.");
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
this.page = await this.context.newPage();
|
|
640
|
+
try {
|
|
641
|
+
await this.page.goto(PERPLEXITY_URL, { waitUntil: "domcontentloaded", timeout: 3e4 });
|
|
642
|
+
await this.page.waitForTimeout(2e3);
|
|
643
|
+
} catch (err) {
|
|
644
|
+
console.error("[perplexity-mcp] Navigation warning:", err.message);
|
|
645
|
+
}
|
|
646
|
+
await this.checkAuth();
|
|
647
|
+
if (!this.accountInfo.modelsConfig) {
|
|
648
|
+
await this.loadAccountInfo();
|
|
649
|
+
}
|
|
650
|
+
this.writeDaemonStatus(_initAt, null);
|
|
596
651
|
} catch (err) {
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
await this.checkAuth();
|
|
600
|
-
if (!this.accountInfo.modelsConfig) {
|
|
601
|
-
await this.loadAccountInfo();
|
|
652
|
+
this.writeDaemonStatus(_initAt, err instanceof Error ? err.message : String(err));
|
|
653
|
+
throw err;
|
|
602
654
|
}
|
|
603
655
|
}
|
|
604
656
|
/**
|
|
@@ -612,8 +664,10 @@ var PerplexityClient = class _PerplexityClient {
|
|
|
612
664
|
let ctx = null;
|
|
613
665
|
try {
|
|
614
666
|
const browserData = getActivePaths().browserData;
|
|
615
|
-
|
|
616
|
-
|
|
667
|
+
ctx = await launchWithRetry(
|
|
668
|
+
() => chromium.launchPersistentContext(browserData, buildLaunchOptions(false)),
|
|
669
|
+
{ beforeAttempt: () => clearStaleSingletonLocks(browserData) }
|
|
670
|
+
);
|
|
617
671
|
const page = ctx.pages()[0] || await ctx.newPage();
|
|
618
672
|
await page.goto(PERPLEXITY_URL, { waitUntil: "domcontentloaded", timeout: 3e4 });
|
|
619
673
|
let cfResolved = false;
|
|
@@ -1935,11 +1989,45 @@ View at: ${PERPLEXITY_URL}/search/${threadSlug}`,
|
|
|
1935
1989
|
});
|
|
1936
1990
|
this.browser = null;
|
|
1937
1991
|
}
|
|
1992
|
+
this.authenticated = false;
|
|
1993
|
+
this.userId = null;
|
|
1994
|
+
this.writeDaemonStatus(Date.now(), null);
|
|
1995
|
+
}
|
|
1996
|
+
// ── Daemon status file ─────────────────────────────────────────────────────
|
|
1997
|
+
daemonTier() {
|
|
1998
|
+
if (!this.authenticated) return "Anonymous";
|
|
1999
|
+
if (this.accountInfo.isMax) return "Max";
|
|
2000
|
+
if (this.accountInfo.isPro) return "Pro";
|
|
2001
|
+
if (this.accountInfo.isEnterprise) return "Enterprise";
|
|
2002
|
+
return "Authenticated";
|
|
2003
|
+
}
|
|
2004
|
+
/**
|
|
2005
|
+
* Write daemon-status.json so the extension UI can show live auth state
|
|
2006
|
+
* instead of relying on the stale models-cache.json snapshot.
|
|
2007
|
+
* @param startedAt - Date.now() captured at the start of init/reinit
|
|
2008
|
+
* @param error - error message if init threw, null on success or shutdown
|
|
2009
|
+
*/
|
|
2010
|
+
writeDaemonStatus(startedAt, error) {
|
|
2011
|
+
try {
|
|
2012
|
+
const paths = getActivePaths();
|
|
2013
|
+
const status = {
|
|
2014
|
+
authenticated: this.authenticated,
|
|
2015
|
+
tier: this.daemonTier(),
|
|
2016
|
+
userId: this.userId,
|
|
2017
|
+
pid: process.pid,
|
|
2018
|
+
lastInit: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2019
|
+
initDurationMs: Date.now() - startedAt,
|
|
2020
|
+
error
|
|
2021
|
+
};
|
|
2022
|
+
writeFileSync(paths.daemonStatus, JSON.stringify(status, null, 2) + "\n");
|
|
2023
|
+
} catch {
|
|
2024
|
+
}
|
|
1938
2025
|
}
|
|
1939
2026
|
};
|
|
1940
2027
|
|
|
1941
2028
|
export {
|
|
1942
2029
|
readCachedAccountInfoFromDisk,
|
|
2030
|
+
buildLaunchOptions,
|
|
1943
2031
|
listCloudThreadsViaImpit,
|
|
1944
2032
|
getCloudThreadViaImpit,
|
|
1945
2033
|
isExperimentalImpitSearchEnabled,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/is-main-module.js
|
|
2
|
+
import { realpathSync } from "fs";
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from "url";
|
|
4
|
+
function isMainModule(metaUrl) {
|
|
5
|
+
if (!process.argv[1]) return false;
|
|
6
|
+
try {
|
|
7
|
+
const moduleReal = realpathSync(fileURLToPath(metaUrl));
|
|
8
|
+
const argvReal = realpathSync(process.argv[1]);
|
|
9
|
+
return moduleReal === argvReal;
|
|
10
|
+
} catch {
|
|
11
|
+
return metaUrl === pathToFileURL(process.argv[1]).href;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
isMainModule
|
|
17
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// src/browser-window.js
|
|
2
|
+
var OFFSCREEN_POSITION_ARG = "--window-position=-32000,-32000";
|
|
3
|
+
function loginLaunchArgs(localOrigin) {
|
|
4
|
+
if (localOrigin) return [];
|
|
5
|
+
return ["--start-minimized", OFFSCREEN_POSITION_ARG];
|
|
6
|
+
}
|
|
7
|
+
async function minimizePageWindow(page) {
|
|
8
|
+
try {
|
|
9
|
+
const context = page?.context?.();
|
|
10
|
+
if (!context || typeof context.newCDPSession !== "function") return false;
|
|
11
|
+
const session = await context.newCDPSession(page);
|
|
12
|
+
try {
|
|
13
|
+
const { windowId } = await session.send("Browser.getWindowForTarget");
|
|
14
|
+
await session.send("Browser.setWindowBounds", {
|
|
15
|
+
windowId,
|
|
16
|
+
bounds: { windowState: "minimized" }
|
|
17
|
+
});
|
|
18
|
+
return true;
|
|
19
|
+
} finally {
|
|
20
|
+
await session.detach().catch(() => {
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
OFFSCREEN_POSITION_ARG,
|
|
30
|
+
loginLaunchArgs,
|
|
31
|
+
minimizePageWindow
|
|
32
|
+
};
|
|
@@ -2,22 +2,22 @@ import {
|
|
|
2
2
|
appendAuditEntry,
|
|
3
3
|
getAuditLogPath,
|
|
4
4
|
readAuditTail
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TSLRTZYR.mjs";
|
|
6
6
|
import {
|
|
7
7
|
ensureToken,
|
|
8
8
|
getTokenPath,
|
|
9
9
|
rotateToken
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DKEJZ4FI.mjs";
|
|
11
11
|
import {
|
|
12
12
|
hydrateCloudHistoryEntry,
|
|
13
13
|
syncCloudHistory
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-YD25G5AD.mjs";
|
|
15
15
|
import {
|
|
16
16
|
PerplexityClient,
|
|
17
17
|
exportThreadViaImpit,
|
|
18
18
|
readCachedAccountInfoFromDisk,
|
|
19
19
|
retrieveThreadViaImpit
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-GBHPJ7I7.mjs";
|
|
21
21
|
import {
|
|
22
22
|
append,
|
|
23
23
|
findPendingByThread,
|
|
@@ -26,13 +26,13 @@ import {
|
|
|
26
26
|
getHistoryDir,
|
|
27
27
|
list,
|
|
28
28
|
update
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-6E6XTHTG.mjs";
|
|
30
30
|
import {
|
|
31
31
|
safeAtomicWriteFileSync
|
|
32
32
|
} from "./chunk-MTDFKNXX.mjs";
|
|
33
33
|
import {
|
|
34
34
|
getConfigDir
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-E3GRJXXJ.mjs";
|
|
36
36
|
|
|
37
37
|
// src/daemon/server.ts
|
|
38
38
|
import { createServer } from "http";
|
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
getOrCreateContext,
|
|
10
10
|
getSavedCookies,
|
|
11
11
|
resolveBrowserExecutable
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-DXR6EEZH.mjs";
|
|
13
13
|
import {
|
|
14
14
|
getActiveName,
|
|
15
15
|
getConfigDir,
|
|
16
16
|
getProfilePaths
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-E3GRJXXJ.mjs";
|
|
18
18
|
|
|
19
19
|
// src/refresh.ts
|
|
20
20
|
import { readFileSync, writeFileSync, existsSync, statSync, mkdirSync } from "fs";
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
PerplexityClient,
|
|
3
3
|
getCloudThreadViaImpit,
|
|
4
4
|
listCloudThreadsViaImpit
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GBHPJ7I7.mjs";
|
|
6
6
|
import {
|
|
7
7
|
hydrateCloudEntry,
|
|
8
8
|
upsertFromCloud
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6E6XTHTG.mjs";
|
|
10
10
|
|
|
11
11
|
// src/cloud-sync.js
|
|
12
12
|
var DEFAULT_PAGE_SIZE = 1e3;
|