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.
Files changed (134) hide show
  1. package/dist/attachments.d.ts +10 -20
  2. package/dist/browser-window.d.ts +11 -0
  3. package/dist/cf-warmup.d.ts +32 -0
  4. package/dist/checks/browser.d.ts +12 -100
  5. package/dist/checks/config.d.ts +25 -91
  6. package/dist/checks/ide.d.ts +31 -89
  7. package/dist/checks/mcp.d.ts +12 -61
  8. package/dist/checks/native-deps.d.ts +46 -131
  9. package/dist/checks/network.d.ts +13 -71
  10. package/dist/checks/probe.d.ts +37 -92
  11. package/dist/checks/probe.mjs +29 -0
  12. package/dist/checks/profiles.d.ts +13 -99
  13. package/dist/checks/profiles.mjs +35 -0
  14. package/dist/checks/runtime.d.ts +24 -89
  15. package/dist/checks/vault.d.ts +13 -142
  16. package/dist/checks/vault.mjs +6 -11
  17. package/dist/{chunk-WDIW33DA.mjs → chunk-3LUO5ATM.mjs} +1 -1
  18. package/dist/{chunk-HNSPNCFH.mjs → chunk-6CAXNBDD.mjs} +1 -1
  19. package/dist/{chunk-B65IJQZJ.mjs → chunk-6E6XTHTG.mjs} +1 -1
  20. package/dist/{chunk-S677V2JU.mjs → chunk-C5I7KXHK.mjs} +32 -2
  21. package/dist/{chunk-RK4EBZJ3.mjs → chunk-D2ZQGKHM.mjs} +11 -8
  22. package/dist/{chunk-TDXETAQT.mjs → chunk-DKEJZ4FI.mjs} +1 -1
  23. package/dist/{chunk-U7QPUNRH.mjs → chunk-DXR6EEZH.mjs} +26 -7
  24. package/dist/{chunk-HJIXH6CL.mjs → chunk-E3GRJXXJ.mjs} +2 -0
  25. package/dist/{chunk-C3HPFFTD.mjs → chunk-GBHPJ7I7.mjs} +136 -48
  26. package/dist/{chunk-D254EFYB.mjs → chunk-GBI2U336.mjs} +1 -1
  27. package/dist/chunk-GPUGKWXH.mjs +17 -0
  28. package/dist/chunk-KVV3JBSN.mjs +32 -0
  29. package/dist/{chunk-XTRJSV72.mjs → chunk-LGH5BSUY.mjs} +1 -1
  30. package/dist/{chunk-KJFX2ZXR.mjs → chunk-NMKNEEZB.mjs} +1 -1
  31. package/dist/{chunk-T6ARJK2P.mjs → chunk-P6YOLJ5T.mjs} +6 -6
  32. package/dist/{chunk-452DK6OS.mjs → chunk-QXYMYCHC.mjs} +2 -2
  33. package/dist/{chunk-Z4OLYVB2.mjs → chunk-SCZQCV7M.mjs} +1 -1
  34. package/dist/{chunk-FKQ3HP4Q.mjs → chunk-TIWHN4IW.mjs} +1 -1
  35. package/dist/{chunk-V4U3JM4R.mjs → chunk-TSLRTZYR.mjs} +1 -1
  36. package/dist/{chunk-DQQISMYN.mjs → chunk-V4LHDNWJ.mjs} +2 -2
  37. package/dist/{chunk-2FPGJKCA.mjs → chunk-YD25G5AD.mjs} +2 -2
  38. package/dist/cli.d.ts +14 -1317
  39. package/dist/cli.mjs +14 -21
  40. package/dist/client.d.ts +39 -24
  41. package/dist/client.mjs +9 -6
  42. package/dist/cloud-sync.d.ts +65 -42
  43. package/dist/cloud-sync.mjs +9 -8
  44. package/dist/config.d.ts +35 -39
  45. package/dist/config.mjs +3 -3
  46. package/dist/cookie-jar.d.ts +77 -0
  47. package/dist/daemon/attach.d.ts +5 -12
  48. package/dist/daemon/attach.mjs +18 -17
  49. package/dist/daemon/audit.d.ts +5 -7
  50. package/dist/daemon/audit.mjs +2 -2
  51. package/dist/daemon/client-http.d.ts +10 -16
  52. package/dist/daemon/client-http.mjs +18 -17
  53. package/dist/daemon/index.d.ts +17 -14
  54. package/dist/daemon/index.mjs +19 -18
  55. package/dist/daemon/install-tunnel.d.ts +8 -34
  56. package/dist/daemon/install-tunnel.mjs +2 -2
  57. package/dist/daemon/launcher.d.ts +24 -29
  58. package/dist/daemon/launcher.mjs +17 -16
  59. package/dist/daemon/local-tokens.d.ts +23 -0
  60. package/dist/daemon/lockfile.d.ts +10 -12
  61. package/dist/daemon/lockfile.mjs +2 -2
  62. package/dist/daemon/oauth-consent-cache.d.ts +86 -0
  63. package/dist/daemon/oauth-provider.d.ts +132 -0
  64. package/dist/daemon/public-pages.d.ts +9 -0
  65. package/dist/daemon/security.d.ts +52 -0
  66. package/dist/daemon/server.d.ts +12 -83
  67. package/dist/daemon/server.mjs +12 -11
  68. package/dist/daemon/token.d.ts +7 -9
  69. package/dist/daemon/token.mjs +2 -2
  70. package/dist/daemon/tunnel-providers/cloudflared-named-setup.d.ts +140 -0
  71. package/dist/daemon/tunnel-providers/cloudflared-named.d.ts +45 -0
  72. package/dist/daemon/tunnel-providers/cloudflared-quick.d.ts +8 -0
  73. package/dist/daemon/tunnel-providers/index.d.ts +16 -327
  74. package/dist/daemon/tunnel-providers/index.mjs +3 -3
  75. package/dist/daemon/tunnel-providers/ngrok-config.d.ts +18 -0
  76. package/dist/daemon/tunnel-providers/ngrok.d.ts +68 -0
  77. package/dist/daemon/tunnel-providers/types.d.ts +56 -0
  78. package/dist/daemon/tunnel.d.ts +5 -7
  79. package/dist/debug-tracer.d.ts +2 -0
  80. package/dist/doctor-report.d.ts +17 -22
  81. package/dist/doctor.d.ts +12 -44
  82. package/dist/doctor.mjs +2 -2
  83. package/dist/export.d.ts +11 -18
  84. package/dist/export.mjs +4 -4
  85. package/dist/format.d.ts +52 -0
  86. package/dist/fs-utils.d.ts +44 -0
  87. package/dist/health-check.d.ts +1 -108
  88. package/dist/health-check.mjs +3 -3
  89. package/dist/history-store.d.ts +29 -65
  90. package/dist/history-store.mjs +2 -2
  91. package/dist/impit-login-runner.d.ts +1 -469
  92. package/dist/impit-login-runner.mjs +4 -4
  93. package/dist/index.d.ts +25 -149
  94. package/dist/index.mjs +23 -20
  95. package/dist/is-main-module.d.ts +9 -0
  96. package/dist/login-runner.d.ts +1 -333
  97. package/dist/login-runner.mjs +18 -38
  98. package/dist/login.d.ts +5 -0
  99. package/dist/logout.d.ts +2 -28
  100. package/dist/logout.mjs +3 -2
  101. package/dist/manual-login-runner.d.ts +1 -150
  102. package/dist/manual-login-runner.mjs +11 -11
  103. package/dist/{native-deps-IE4B55EL.mjs → native-deps-FCSYDL4W.mjs} +4 -4
  104. package/dist/native-deps.d.ts +36 -0
  105. package/dist/package-version.d.ts +1 -0
  106. package/dist/profiles.d.ts +41 -41
  107. package/dist/profiles.mjs +1 -1
  108. package/dist/prompts.d.ts +2 -0
  109. package/dist/redact.d.ts +14 -142
  110. package/dist/refresh.d.ts +11 -16
  111. package/dist/refresh.mjs +4 -4
  112. package/dist/reinit-watcher.d.ts +15 -24
  113. package/dist/reinit-watcher.mjs +2 -2
  114. package/dist/resources.d.ts +5 -0
  115. package/dist/safe-write.d.ts +16 -0
  116. package/dist/session-metadata.d.ts +45 -0
  117. package/dist/tool-config.d.ts +10 -0
  118. package/dist/tools.d.ts +23 -0
  119. package/dist/tty-prompt.d.ts +18 -34
  120. package/dist/vault.d.ts +114 -34
  121. package/dist/vault.mjs +6 -4
  122. package/dist/viewer-detect.d.ts +2 -4
  123. package/dist/viewers.d.ts +13 -18
  124. package/dist/viewers.mjs +1 -1
  125. package/package.json +2 -2
  126. package/dist/cloud-sync.d-Cqt6y18U.d.ts +0 -42
  127. package/dist/doctor.d-CXmUqOXX.d.ts +0 -43
  128. package/dist/history-store.d-BzjBF2m3.d.ts +0 -65
  129. package/dist/native-deps-BNThFHxa.d.ts +0 -175
  130. package/dist/profiles.d-DqS1oZWr.d.ts +0 -41
  131. package/dist/session-metadata-B9aV_n5g.d.ts +0 -148
  132. package/dist/vault.d-BSJWDLhp.d.ts +0 -37
  133. package/dist/viewer-detect.d-HWGnyFAA.d.ts +0 -4
  134. 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-DQQISMYN.mjs";
7
+ } from "./chunk-V4LHDNWJ.mjs";
5
8
  import {
6
9
  FORMAT_TO_CONTENT_TYPE,
7
10
  exportThread,
8
11
  resolveExportApiFormat
9
- } from "./chunk-D254EFYB.mjs";
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-U7QPUNRH.mjs";
26
+ } from "./chunk-DXR6EEZH.mjs";
25
27
  import {
26
28
  getActiveName,
27
29
  getConfigDir,
28
30
  getProfilePaths
29
- } from "./chunk-HJIXH6CL.mjs";
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
- args: STEALTH_ARGS,
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 activePaths = getActivePaths();
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
- await this.page.goto(PERPLEXITY_URL, { waitUntil: "domcontentloaded", timeout: 3e4 });
595
- await this.page.waitForTimeout(2e3);
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
- console.error("[perplexity-mcp] Navigation warning:", err.message);
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
- clearStaleSingletonLocks(browserData);
616
- ctx = await chromium.launchPersistentContext(browserData, buildLaunchOptions(false));
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,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PERPLEXITY_URL
3
- } from "./chunk-U7QPUNRH.mjs";
3
+ } from "./chunk-DXR6EEZH.mjs";
4
4
 
5
5
  // src/export.js
6
6
  import { Buffer } from "buffer";
@@ -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
+ };
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-6YMQVLFX.mjs";
4
4
  import {
5
5
  getTunnelBinaryPath
6
- } from "./chunk-FKQ3HP4Q.mjs";
6
+ } from "./chunk-TIWHN4IW.mjs";
7
7
  import {
8
8
  safeAtomicWriteFileSync
9
9
  } from "./chunk-MTDFKNXX.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfigDir
3
- } from "./chunk-HJIXH6CL.mjs";
3
+ } from "./chunk-E3GRJXXJ.mjs";
4
4
 
5
5
  // src/daemon/lockfile.ts
6
6
  import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync } from "fs";
@@ -2,22 +2,22 @@ import {
2
2
  appendAuditEntry,
3
3
  getAuditLogPath,
4
4
  readAuditTail
5
- } from "./chunk-V4U3JM4R.mjs";
5
+ } from "./chunk-TSLRTZYR.mjs";
6
6
  import {
7
7
  ensureToken,
8
8
  getTokenPath,
9
9
  rotateToken
10
- } from "./chunk-TDXETAQT.mjs";
10
+ } from "./chunk-DKEJZ4FI.mjs";
11
11
  import {
12
12
  hydrateCloudHistoryEntry,
13
13
  syncCloudHistory
14
- } from "./chunk-2FPGJKCA.mjs";
14
+ } from "./chunk-YD25G5AD.mjs";
15
15
  import {
16
16
  PerplexityClient,
17
17
  exportThreadViaImpit,
18
18
  readCachedAccountInfoFromDisk,
19
19
  retrieveThreadViaImpit
20
- } from "./chunk-C3HPFFTD.mjs";
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-B65IJQZJ.mjs";
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-HJIXH6CL.mjs";
35
+ } from "./chunk-E3GRJXXJ.mjs";
36
36
 
37
37
  // src/daemon/server.ts
38
38
  import { createServer } from "http";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ensureDaemon
3
- } from "./chunk-RK4EBZJ3.mjs";
3
+ } from "./chunk-D2ZQGKHM.mjs";
4
4
  import {
5
5
  getPackageVersion
6
- } from "./chunk-T6ARJK2P.mjs";
6
+ } from "./chunk-P6YOLJ5T.mjs";
7
7
 
8
8
  // src/daemon/client-http.ts
9
9
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ensureDaemon
3
- } from "./chunk-RK4EBZJ3.mjs";
3
+ } from "./chunk-D2ZQGKHM.mjs";
4
4
 
5
5
  // src/daemon/attach.ts
6
6
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfigDir
3
- } from "./chunk-HJIXH6CL.mjs";
3
+ } from "./chunk-E3GRJXXJ.mjs";
4
4
 
5
5
  // src/daemon/install-tunnel.ts
6
6
  import { createHash } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfigDir
3
- } from "./chunk-HJIXH6CL.mjs";
3
+ } from "./chunk-E3GRJXXJ.mjs";
4
4
 
5
5
  // src/daemon/audit.ts
6
6
  import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync } from "fs";
@@ -9,12 +9,12 @@ import {
9
9
  getOrCreateContext,
10
10
  getSavedCookies,
11
11
  resolveBrowserExecutable
12
- } from "./chunk-U7QPUNRH.mjs";
12
+ } from "./chunk-DXR6EEZH.mjs";
13
13
  import {
14
14
  getActiveName,
15
15
  getConfigDir,
16
16
  getProfilePaths
17
- } from "./chunk-HJIXH6CL.mjs";
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-C3HPFFTD.mjs";
5
+ } from "./chunk-GBHPJ7I7.mjs";
6
6
  import {
7
7
  hydrateCloudEntry,
8
8
  upsertFromCloud
9
- } from "./chunk-B65IJQZJ.mjs";
9
+ } from "./chunk-6E6XTHTG.mjs";
10
10
 
11
11
  // src/cloud-sync.js
12
12
  var DEFAULT_PAGE_SIZE = 1e3;