pi-lens 4.4.0 → 4.4.2

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 (150) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/README.md +1 -0
  3. package/config/dependency-cruiser-eager-allowlist.json +3 -1
  4. package/dist/{chunk-IXEBJSUE.js → chunk-23WOO7TX.js} +11 -10
  5. package/dist/{chunk-E2WFBRHM.js → chunk-2B73ZPOK.js} +3 -3
  6. package/dist/{chunk-DQ2NZ7C4.js → chunk-2BBLFX75.js} +139 -11
  7. package/dist/{chunk-ZMOL6RQC.js → chunk-2CD5RS6M.js} +2 -2
  8. package/dist/{chunk-VD4JQCQC.js → chunk-2ZGIZPDG.js} +38 -37
  9. package/dist/{chunk-DIULIWKU.js → chunk-34WSVGEM.js} +29 -3
  10. package/dist/chunk-3JNKMP3B.js +17 -0
  11. package/dist/{chunk-HVUZXSWK.js → chunk-3UUPUE3O.js} +45 -41
  12. package/dist/{chunk-5RXBNSW2.js → chunk-3VPVG5SU.js} +16 -8
  13. package/dist/chunk-3WA4HP4I.js +55 -0
  14. package/dist/chunk-466Z26MG.js +30 -0
  15. package/dist/{chunk-34U7PLGE.js → chunk-4UNXBNE2.js} +12 -11
  16. package/dist/{chunk-E4MAEDPM.js → chunk-4W4VLAPJ.js} +12 -11
  17. package/dist/{chunk-GUOGVTCQ.js → chunk-52FUZI6K.js} +4 -2
  18. package/dist/chunk-5JM2524W.js +84 -0
  19. package/dist/{chunk-VHQLPIRJ.js → chunk-5NGR67U5.js} +2 -2
  20. package/dist/{chunk-DFVMIKMQ.js → chunk-66SXUJCA.js} +45 -9
  21. package/dist/{chunk-OQGFCZJ4.js → chunk-66VMUL7Q.js} +16 -16
  22. package/dist/{chunk-HWBZIGMJ.js → chunk-67WMNWEE.js} +9 -8
  23. package/dist/{chunk-6QIUX4EP.js → chunk-6C7JWPCP.js} +7 -7
  24. package/dist/{chunk-47D2BO4S.js → chunk-6GFRNVYR.js} +11 -10
  25. package/dist/{chunk-ZAWW3AF6.js → chunk-6SDEP3AJ.js} +9 -8
  26. package/dist/{chunk-TGPXLY2J.js → chunk-724UL2TJ.js} +38 -2
  27. package/dist/{chunk-YLF3PPT5.js → chunk-76MWC2K6.js} +3 -3
  28. package/dist/{chunk-F3P7VQ7H.js → chunk-7DYBLXYA.js} +3 -3
  29. package/dist/{chunk-AJ3QXTRQ.js → chunk-7ULNCDCO.js} +37 -35
  30. package/dist/{chunk-UK3CMEAL.js → chunk-AOHZU2BM.js} +1 -1
  31. package/dist/{chunk-F3AU2TMM.js → chunk-ARJ6PLFH.js} +44 -28
  32. package/dist/{chunk-U3VGR4VU.js → chunk-AW7R2GWG.js} +65 -8
  33. package/dist/{chunk-FJNKANOS.js → chunk-BKE7E7TC.js} +10 -9
  34. package/dist/{chunk-4W2PLC4J.js → chunk-BRGDSBJE.js} +13 -12
  35. package/dist/{chunk-VN2AXLEX.js → chunk-C34ZXZ7O.js} +102 -16
  36. package/dist/{chunk-T4ERT73Y.js → chunk-CF24OIYI.js} +21 -20
  37. package/dist/{chunk-NMABWBZN.js → chunk-CHOW74WE.js} +1 -1
  38. package/dist/{chunk-ARFCXG7S.js → chunk-CO2G5PHH.js} +2 -2
  39. package/dist/{chunk-AS44CFQ4.js → chunk-EETY4LF7.js} +24 -10
  40. package/dist/{chunk-I3R7GKDR.js → chunk-EJIUXPBX.js} +1 -1
  41. package/dist/{chunk-B3I2UUT4.js → chunk-ESBQHFMJ.js} +653 -251
  42. package/dist/{chunk-O5WILGMI.js → chunk-FLKWCIZH.js} +8 -5
  43. package/dist/{chunk-LNAKEO63.js → chunk-GAEGEPOC.js} +4 -4
  44. package/dist/{chunk-V7R425XG.js → chunk-GBPP5P7X.js} +4 -4
  45. package/dist/{chunk-XK4CIILI.js → chunk-GHB6AYCP.js} +27 -26
  46. package/dist/{chunk-7FBF7NPR.js → chunk-GOYRYZ2R.js} +29 -26
  47. package/dist/{chunk-JOLITGCC.js → chunk-GXW6K4YJ.js} +1 -1
  48. package/dist/{chunk-NXPS2L6U.js → chunk-GZYBXISR.js} +9 -9
  49. package/dist/{chunk-OAXNDZJ7.js → chunk-IBGIOBEE.js} +8 -4
  50. package/dist/{chunk-IIXOAGHR.js → chunk-IBRALRBR.js} +19 -15
  51. package/dist/{chunk-7F72PXY2.js → chunk-IXXDFY73.js} +3 -3
  52. package/dist/chunk-IZSHAIJ7.js +26 -0
  53. package/dist/{chunk-N3YQJI6O.js → chunk-JAU72XNY.js} +20 -15
  54. package/dist/chunk-JMYYOTQG.js +77 -0
  55. package/dist/{chunk-NL5GLMFI.js → chunk-JSQFTSC6.js} +12 -11
  56. package/dist/{chunk-IVP5KAB7.js → chunk-JWA5I3SR.js} +35 -21
  57. package/dist/{chunk-Y4T27COV.js → chunk-KBG47GHP.js} +4 -4
  58. package/dist/{chunk-PWFHBTSF.js → chunk-L3BLXZG7.js} +2 -2
  59. package/dist/chunk-LOP6GRPH.js +31 -0
  60. package/dist/chunk-MQLUAEOC.js +162 -0
  61. package/dist/{chunk-RPD5K5NC.js → chunk-MRXKYPCS.js} +2 -2
  62. package/dist/{chunk-Q5U6FMDI.js → chunk-N2H3ZPZY.js} +59 -7
  63. package/dist/{chunk-27BBHSZC.js → chunk-N3X6Q4YT.js} +3 -3
  64. package/dist/{chunk-UY752QSN.js → chunk-NW7BOILN.js} +19 -17
  65. package/dist/{chunk-TLGFBM3F.js → chunk-ODBNXWT4.js} +302 -113
  66. package/dist/{chunk-TT22N74J.js → chunk-OG5UUPN7.js} +13 -13
  67. package/dist/{chunk-C2AUYXQH.js → chunk-OXXKQCSV.js} +6 -6
  68. package/dist/{chunk-PAK6IDME.js → chunk-P7266HLM.js} +2 -2
  69. package/dist/{chunk-52H5B5TC.js → chunk-PFNSLWU5.js} +31 -30
  70. package/dist/{chunk-5ZEJHV35.js → chunk-PHDMFAKM.js} +12 -2
  71. package/dist/{chunk-3I5QFT3N.js → chunk-PNQDPDRC.js} +6 -3
  72. package/dist/{chunk-TVN5N6GY.js → chunk-PV6LR5P5.js} +6057 -1311
  73. package/dist/{chunk-AHDW3GPE.js → chunk-Q6ZWTCLY.js} +24 -22
  74. package/dist/{chunk-RUOG5D2C.js → chunk-Q7DUK4LX.js} +5 -5
  75. package/dist/{chunk-YSNFMJKN.js → chunk-QGQ5CCCG.js} +2 -2
  76. package/dist/{chunk-LW6XKDZQ.js → chunk-QHJ6DQ2R.js} +287 -38
  77. package/dist/{chunk-GVXA6CCE.js → chunk-QILIYSJF.js} +1 -1
  78. package/dist/{chunk-22AVIGXS.js → chunk-QOBUHWHX.js} +12 -7
  79. package/dist/{chunk-5THXD6X5.js → chunk-QQNQ7SJW.js} +2 -75
  80. package/dist/{chunk-4RERDEXR.js → chunk-QZVW3AAK.js} +50 -41
  81. package/dist/{chunk-AWE5TMPO.js → chunk-R3PCY3YS.js} +14 -13
  82. package/dist/{chunk-HHYAELLJ.js → chunk-RPLINGVB.js} +7 -7
  83. package/dist/{chunk-EOKRQ3SA.js → chunk-RWWYJ623.js} +10 -1
  84. package/dist/{chunk-YGVYKNSN.js → chunk-SAEFPSB6.js} +59 -12
  85. package/dist/{chunk-K6VYLB2U.js → chunk-TYM6OUIT.js} +13 -12
  86. package/dist/{chunk-AJXODZY6.js → chunk-UXGETRP4.js} +13 -12
  87. package/dist/{chunk-I7SPGOWI.js → chunk-UZ3TUTRV.js} +1 -1
  88. package/dist/{chunk-TO6WL3GM.js → chunk-VCHXCQFG.js} +12 -2
  89. package/dist/{chunk-BRJKOBZP.js → chunk-VITUCP5A.js} +17 -6
  90. package/dist/{chunk-WONERJTP.js → chunk-VRZP76YM.js} +1 -1
  91. package/dist/{chunk-OS32RNR2.js → chunk-VSSBEUFT.js} +16 -15
  92. package/dist/{chunk-VDBPVIKD.js → chunk-VWCXW2E7.js} +1 -1
  93. package/dist/{chunk-NKOUFPQF.js → chunk-WOA4LN2R.js} +2 -2
  94. package/dist/{chunk-RIISMHKN.js → chunk-WOKKRCJ5.js} +15 -13
  95. package/dist/{chunk-XECLWQZN.js → chunk-WU567RSC.js} +13 -10
  96. package/dist/{chunk-V5PXFSZK.js → chunk-XCJN5IJU.js} +4 -4
  97. package/dist/{chunk-ORTMY4Q4.js → chunk-XKIZ2HNN.js} +22 -14
  98. package/dist/{chunk-6VCD4VKZ.js → chunk-XMSXXAHW.js} +2 -2
  99. package/dist/chunk-XPZPXCBV.js +28 -0
  100. package/dist/{chunk-O6TQT6RI.js → chunk-XTMJ7XDT.js} +1 -1
  101. package/dist/{chunk-VNMT7C64.js → chunk-XVF2VVXP.js} +5 -3
  102. package/dist/chunk-Z527N6YQ.js +28 -0
  103. package/dist/{chunk-NTUJEGDZ.js → chunk-ZANLILYD.js} +22 -2
  104. package/dist/{chunk-6P62QVEA.js → chunk-ZGDGW2V3.js} +2 -2
  105. package/dist/{chunk-ODEEOXPH.js → chunk-ZHFZWTZV.js} +12 -11
  106. package/dist/{chunk-AJVLWNFN.js → chunk-ZXYDQ3TZ.js} +5 -5
  107. package/dist/index.js +102097 -97778
  108. package/dist/mcp/analyze-cli.js +18 -8
  109. package/dist/mcp/cli.js +48 -37
  110. package/dist/mcp/server.js +695 -426
  111. package/dist/mcp/worker.js +66 -55
  112. package/dist/probes/installer.js +20 -19
  113. package/docs/ast-grep_rules_catalog.md +2 -2
  114. package/docs/astplayground.md +1 -1
  115. package/docs/configuration.md +38 -2
  116. package/docs/custom-rules.md +25 -2
  117. package/docs/dependencies.md +3 -0
  118. package/docs/environment-variables.md +34 -6
  119. package/docs/features.md +39 -3
  120. package/docs/globalconfig.md +3 -1
  121. package/docs/language-coverage.md +2 -1
  122. package/docs/lsp-capability-matrix.md +29 -6
  123. package/docs/lsp-idle-eviction.md +38 -47
  124. package/docs/pi-lens-fixer.md +13 -5
  125. package/docs/pi-lens-merge-policy.md +48 -1
  126. package/docs/pi-lens-monitor.md +3 -1
  127. package/docs/pi-lens-retro.md +2 -1
  128. package/docs/pi-lens-reviewer.md +19 -3
  129. package/docs/pi-lens-subagent.md +2 -0
  130. package/docs/real-harness.md +17 -0
  131. package/docs/schema/pi-lens-config-v1.json +565 -0
  132. package/docs/servercapabilities.md +18 -4
  133. package/docs/settings.md +2 -1
  134. package/docs/word-index.md +6 -0
  135. package/package.json +1 -1
  136. package/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  137. package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  138. package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  139. package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  140. package/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  141. package/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  142. package/dist/chunk-54B42YRX.js +0 -27
  143. package/dist/chunk-CGGAIP7J.js +0 -29
  144. package/dist/chunk-D6QS3U6M.js +0 -30
  145. package/dist/chunk-HMFXILPV.js +0 -83
  146. package/dist/chunk-LSMJ6KBE.js +0 -4139
  147. package/dist/chunk-NTHH2J74.js +0 -27
  148. package/dist/chunk-RPD4ZSB7.js +0 -25
  149. package/dist/chunk-T6D4Q4AQ.js +0 -54
  150. package/dist/chunk-VCSRSYLF.js +0 -81
@@ -1,27 +1,23 @@
1
1
  import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
2
2
  import {
3
3
  resolveToolCwd
4
- } from "./chunk-RUOG5D2C.js";
4
+ } from "./chunk-Q7DUK4LX.js";
5
5
  import {
6
6
  allAvailableGlobalBinDirs,
7
7
  installArgs,
8
8
  pmBinary,
9
9
  resolveNodePackageManager
10
- } from "./chunk-U3VGR4VU.js";
11
- import {
12
- assertInstallAllowed,
13
- projectTrustDenialReason
14
- } from "./chunk-NTUJEGDZ.js";
10
+ } from "./chunk-AW7R2GWG.js";
15
11
  import {
16
12
  probeToolAsync
17
- } from "./chunk-EOKRQ3SA.js";
13
+ } from "./chunk-RWWYJ623.js";
18
14
  import {
19
15
  TRANSIENT_MAX_COOLDOWN_MS,
20
16
  classifyProbeFailure,
21
17
  createAvailabilityLatch,
22
18
  logAvailabilityDecision,
23
19
  startHostStallSampler
24
- } from "./chunk-WONERJTP.js";
20
+ } from "./chunk-VRZP76YM.js";
25
21
  import {
26
22
  acquireBoundedPidFileLock,
27
23
  acquireQuarantinePidFileLock,
@@ -37,7 +33,11 @@ import {
37
33
  safeSpawnAsync,
38
34
  startGenerationHeartbeat,
39
35
  tryAcquireGeneration
40
- } from "./chunk-VN2AXLEX.js";
36
+ } from "./chunk-C34ZXZ7O.js";
37
+ import {
38
+ assertInstallAllowed,
39
+ projectTrustDenialReason
40
+ } from "./chunk-ZANLILYD.js";
41
41
  import {
42
42
  DEFAULT_MAX_OUTPUT_BYTES,
43
43
  createBoundedOutputSink,
@@ -48,23 +48,23 @@ import {
48
48
  getDegradationLedgerGeneration,
49
49
  incrementDegradationCount,
50
50
  recordDegradationOnce
51
- } from "./chunk-N3YQJI6O.js";
51
+ } from "./chunk-JAU72XNY.js";
52
52
  import {
53
53
  logExtension
54
- } from "./chunk-O6TQT6RI.js";
54
+ } from "./chunk-XTMJ7XDT.js";
55
55
  import {
56
56
  createNdjsonLogger,
57
57
  getGlobalPiLensLogDir,
58
58
  getMaxLogSizeMB,
59
59
  isTestMode
60
- } from "./chunk-UK3CMEAL.js";
60
+ } from "./chunk-AOHZU2BM.js";
61
61
  import {
62
62
  BoundedLruCache
63
63
  } from "./chunk-ABBOA7UD.js";
64
64
  import {
65
65
  findLocalToolConfig,
66
66
  isFullyQualified
67
- } from "./chunk-Q5U6FMDI.js";
67
+ } from "./chunk-N2H3ZPZY.js";
68
68
  import {
69
69
  __require
70
70
  } from "./chunk-NXL4FFQQ.js";
@@ -4057,7 +4057,7 @@ async function stampInstallResolution(toolId) {
4057
4057
  return;
4058
4058
  try {
4059
4059
  const resolutionId = lastInstallResolutionId.get(toolId);
4060
- const refresh = await import("./chunk-T4ERT73Y.js");
4060
+ const refresh = await import("./chunk-CF24OIYI.js");
4061
4061
  await refresh.stampManagedToolInstall(toolId, resolutionId);
4062
4062
  } catch {
4063
4063
  }
@@ -4070,7 +4070,7 @@ async function finishInstallAttempt(toolId, ok, startedAt) {
4070
4070
  if (ok) {
4071
4071
  resetSafeSpawnWindowsCommandCache();
4072
4072
  try {
4073
- const { resetMadgeManagedPathMemo } = await import("./chunk-T6D4Q4AQ.js");
4073
+ const { resetMadgeManagedPathMemo } = await import("./chunk-3WA4HP4I.js");
4074
4074
  resetMadgeManagedPathMemo();
4075
4075
  } catch (err) {
4076
4076
  logSessionStart(`auto-install ${toolId}: madge memo reset failed: ${err.message}`);
@@ -4100,7 +4100,7 @@ async function installTool(toolId, ownsLock) {
4100
4100
  return false;
4101
4101
  const npmPath = await installNpmTool(tool.id, tool.packageName, tool.binaryName, tool.checkArgs, getToolVerificationTimeout(tool), packageEntryVerification(tool), ownsLock);
4102
4102
  if (npmPath !== void 0) {
4103
- await import("./chunk-T4ERT73Y.js").then((m) => m.stampManagedToolInstalled(tool.id, tool.packageName)).catch(() => {
4103
+ await import("./chunk-CF24OIYI.js").then((m) => m.stampManagedToolInstalled(tool.id, tool.packageName)).catch(() => {
4104
4104
  });
4105
4105
  }
4106
4106
  return finishInstallAttempt(tool.id, npmPath !== void 0, startedAt);
@@ -23,17 +23,18 @@ import {
23
23
  safeSpawnAsync,
24
24
  safeSpawnBatch,
25
25
  setAmbientAbortSignal
26
- } from "./chunk-VN2AXLEX.js";
27
- import "./chunk-DQ2NZ7C4.js";
28
- import "./chunk-VNMT7C64.js";
26
+ } from "./chunk-C34ZXZ7O.js";
27
+ import "./chunk-2BBLFX75.js";
28
+ import "./chunk-XVF2VVXP.js";
29
29
  import "./chunk-2EECBNC5.js";
30
- import "./chunk-N3YQJI6O.js";
31
- import "./chunk-O6TQT6RI.js";
32
- import "./chunk-5THXD6X5.js";
33
- import "./chunk-UK3CMEAL.js";
30
+ import "./chunk-JAU72XNY.js";
31
+ import "./chunk-XTMJ7XDT.js";
32
+ import "./chunk-JMYYOTQG.js";
33
+ import "./chunk-QQNQ7SJW.js";
34
+ import "./chunk-AOHZU2BM.js";
34
35
  import "./chunk-LJDODBBZ.js";
35
36
  import "./chunk-ABBOA7UD.js";
36
- import "./chunk-Q5U6FMDI.js";
37
+ import "./chunk-N2H3ZPZY.js";
37
38
  import "./chunk-NXL4FFQQ.js";
38
39
  export {
39
40
  SpawnFailureError,
@@ -3,31 +3,31 @@ import {
3
3
  shouldRecurseIntoDir,
4
4
  walkTreeRecursiveSync,
5
5
  walkTreeStackAsync
6
- } from "./chunk-VHQLPIRJ.js";
6
+ } from "./chunk-5NGR67U5.js";
7
7
  import {
8
8
  getProjectIgnoreMatcher
9
- } from "./chunk-VN2AXLEX.js";
9
+ } from "./chunk-C34ZXZ7O.js";
10
10
  import {
11
11
  KIND_EXTENSIONS,
12
12
  isCodeKindFile
13
- } from "./chunk-5ZEJHV35.js";
13
+ } from "./chunk-PHDMFAKM.js";
14
14
  import {
15
15
  classifyGeneratedOrArtifactDetailed,
16
16
  isDeclarationFile
17
- } from "./chunk-DQ2NZ7C4.js";
17
+ } from "./chunk-2BBLFX75.js";
18
18
  import {
19
19
  logLatency
20
- } from "./chunk-5THXD6X5.js";
20
+ } from "./chunk-QQNQ7SJW.js";
21
21
  import {
22
22
  toPositiveFinite
23
- } from "./chunk-UK3CMEAL.js";
23
+ } from "./chunk-AOHZU2BM.js";
24
24
  import {
25
25
  BoundedLruCache
26
26
  } from "./chunk-ABBOA7UD.js";
27
27
  import {
28
28
  normalizeEphemeralMapKey,
29
29
  normalizeFilePath
30
- } from "./chunk-Q5U6FMDI.js";
30
+ } from "./chunk-N2H3ZPZY.js";
31
31
 
32
32
  // dist/clients/source-filter.js
33
33
  import * as fs2 from "node:fs";
@@ -1,22 +1,23 @@
1
1
  import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
2
2
  import {
3
3
  parseSymbolKey
4
- } from "./chunk-NKOUFPQF.js";
4
+ } from "./chunk-WOA4LN2R.js";
5
5
  import {
6
6
  isTestRoleCollateral
7
- } from "./chunk-I3R7GKDR.js";
7
+ } from "./chunk-EJIUXPBX.js";
8
8
  import "./chunk-3MED75HT.js";
9
- import "./chunk-VN2AXLEX.js";
10
- import "./chunk-DQ2NZ7C4.js";
11
- import "./chunk-VNMT7C64.js";
9
+ import "./chunk-C34ZXZ7O.js";
10
+ import "./chunk-2BBLFX75.js";
11
+ import "./chunk-XVF2VVXP.js";
12
12
  import "./chunk-2EECBNC5.js";
13
- import "./chunk-N3YQJI6O.js";
14
- import "./chunk-O6TQT6RI.js";
15
- import "./chunk-5THXD6X5.js";
16
- import "./chunk-UK3CMEAL.js";
13
+ import "./chunk-JAU72XNY.js";
14
+ import "./chunk-XTMJ7XDT.js";
15
+ import "./chunk-JMYYOTQG.js";
16
+ import "./chunk-QQNQ7SJW.js";
17
+ import "./chunk-AOHZU2BM.js";
17
18
  import "./chunk-LJDODBBZ.js";
18
19
  import "./chunk-ABBOA7UD.js";
19
- import "./chunk-Q5U6FMDI.js";
20
+ import "./chunk-N2H3ZPZY.js";
20
21
  import "./chunk-NXL4FFQQ.js";
21
22
 
22
23
  // dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js
@@ -1,19 +1,20 @@
1
1
  import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
2
2
  import {
3
3
  getProjectDataDir
4
- } from "./chunk-VN2AXLEX.js";
5
- import "./chunk-DQ2NZ7C4.js";
6
- import "./chunk-VNMT7C64.js";
4
+ } from "./chunk-C34ZXZ7O.js";
5
+ import "./chunk-2BBLFX75.js";
6
+ import "./chunk-XVF2VVXP.js";
7
7
  import "./chunk-2EECBNC5.js";
8
- import "./chunk-N3YQJI6O.js";
9
- import "./chunk-O6TQT6RI.js";
10
- import "./chunk-5THXD6X5.js";
8
+ import "./chunk-JAU72XNY.js";
9
+ import "./chunk-XTMJ7XDT.js";
10
+ import "./chunk-JMYYOTQG.js";
11
+ import "./chunk-QQNQ7SJW.js";
11
12
  import {
12
13
  redactSecrets
13
- } from "./chunk-UK3CMEAL.js";
14
+ } from "./chunk-AOHZU2BM.js";
14
15
  import "./chunk-LJDODBBZ.js";
15
16
  import "./chunk-ABBOA7UD.js";
16
- import "./chunk-Q5U6FMDI.js";
17
+ import "./chunk-N2H3ZPZY.js";
17
18
  import "./chunk-NXL4FFQQ.js";
18
19
 
19
20
  // dist/clients/fix-worklog.js
@@ -1,7 +1,39 @@
1
1
  import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
2
+ import {
3
+ getGlobalPiLensDir
4
+ } from "./chunk-C34ZXZ7O.js";
2
5
  import {
3
6
  SPECIAL_FILENAMES
4
- } from "./chunk-5ZEJHV35.js";
7
+ } from "./chunk-PHDMFAKM.js";
8
+ import {
9
+ getTurnId
10
+ } from "./chunk-AOHZU2BM.js";
11
+ import {
12
+ BoundedFifoMap
13
+ } from "./chunk-ABBOA7UD.js";
14
+
15
+ // dist/clients/custom-rule-locations.js
16
+ import * as path from "node:path";
17
+ function getUserRuleRoot() {
18
+ return path.join(getGlobalPiLensDir(), "rules");
19
+ }
20
+ var RULE_CORPUS_CYCLE_ENTRIES = 16;
21
+ var ruleCorpusCycleFingerprints = new BoundedFifoMap(RULE_CORPUS_CYCLE_ENTRIES);
22
+ var cycleSlot;
23
+ function ruleCorpusFingerprintForCycle(family, root, compute, force = false) {
24
+ const cycle = getTurnId();
25
+ if (!force && cycleSlot !== void 0 && cycleSlot.cycle === cycle && cycleSlot.family === family && cycleSlot.root === root) {
26
+ return cycleSlot.fingerprint;
27
+ }
28
+ const key = `${cycle}\0${family}\0${root}`;
29
+ let fingerprint = force ? void 0 : ruleCorpusCycleFingerprints.get(key);
30
+ if (fingerprint === void 0) {
31
+ fingerprint = compute(root);
32
+ ruleCorpusCycleFingerprints.set(key, fingerprint);
33
+ }
34
+ cycleSlot = { cycle, family, root, fingerprint };
35
+ return fingerprint;
36
+ }
5
37
 
6
38
  // dist/clients/language-registry.js
7
39
  var LANGUAGES = [
@@ -148,6 +180,7 @@ var LANGUAGES = [
148
180
  extensions: [".kt", ".kts"],
149
181
  grammar: "kotlin"
150
182
  },
183
+ { id: "lean", kind: "lean", extensions: [".lean"] },
151
184
  { id: "less", kind: "css", extensions: [".less"] },
152
185
  { id: "lua", kind: "lua", extensions: [".lua"], grammar: "lua" },
153
186
  { id: "markdown", kind: "markdown", extensions: [".md", ".mdx"] },
@@ -377,10 +410,13 @@ var SCAN_LANGUAGE_PRIORITY = [
377
410
  ["json", "jsonc"],
378
411
  ["yaml"],
379
412
  ["toml"],
380
- ["prisma"]
413
+ ["prisma"],
414
+ ["lean"]
381
415
  ];
382
416
 
383
417
  export {
418
+ getUserRuleRoot,
419
+ ruleCorpusFingerprintForCycle,
384
420
  extensionsForLanguage,
385
421
  extensionsForLanguageToken,
386
422
  resolveLanguage,
@@ -1,17 +1,17 @@
1
1
  import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
2
2
  import {
3
3
  extractFactsFromTree
4
- } from "./chunk-JOLITGCC.js";
4
+ } from "./chunk-GXW6K4YJ.js";
5
5
  import {
6
6
  findOwnerName
7
7
  } from "./chunk-5W3R6LFT.js";
8
8
  import {
9
9
  firstChildOfType,
10
10
  walk
11
- } from "./chunk-LW6XKDZQ.js";
11
+ } from "./chunk-QHJ6DQ2R.js";
12
12
  import {
13
13
  isJstsFactFile
14
- } from "./chunk-5ZEJHV35.js";
14
+ } from "./chunk-PHDMFAKM.js";
15
15
 
16
16
  // dist/clients/dispatch/facts/function-facts.js
17
17
  var BOUNDARY_PREFIXES = [
@@ -2,16 +2,16 @@ import { createRequire as __pilensCreateRequire } from "node:module"; const requ
2
2
  import {
3
3
  createAvailabilityProbeFlight,
4
4
  probeToolAsync
5
- } from "./chunk-EOKRQ3SA.js";
5
+ } from "./chunk-RWWYJ623.js";
6
6
  import {
7
7
  classifyProbeFailure,
8
8
  createAvailabilityLatch,
9
9
  logAvailabilityDecision,
10
10
  startHostStallSampler
11
- } from "./chunk-WONERJTP.js";
11
+ } from "./chunk-VRZP76YM.js";
12
12
  import {
13
13
  createGenerationSource
14
- } from "./chunk-VN2AXLEX.js";
14
+ } from "./chunk-C34ZXZ7O.js";
15
15
  import {
16
16
  createSingleFlight
17
17
  } from "./chunk-BW5KFIQC.js";
@@ -4,75 +4,77 @@ import {
4
4
  } from "./chunk-7U2IDNXN.js";
5
5
  import {
6
6
  formatToolFailure
7
- } from "./chunk-ZMOL6RQC.js";
7
+ } from "./chunk-2CD5RS6M.js";
8
8
  import {
9
9
  spawnFailedWithNoOutput
10
- } from "./chunk-I7SPGOWI.js";
10
+ } from "./chunk-UZ3TUTRV.js";
11
11
  import {
12
12
  createAvailabilityChecker,
13
13
  findManagedNodeToolBinary,
14
14
  getManagedToolEnvironment,
15
15
  resolveAvailableOrInstall
16
- } from "./chunk-7FBF7NPR.js";
17
- import "./chunk-HHYAELLJ.js";
16
+ } from "./chunk-GOYRYZ2R.js";
17
+ import "./chunk-RPLINGVB.js";
18
18
  import {
19
19
  canonicalDirectory,
20
20
  listNestedLinkedWorktreeRoots
21
- } from "./chunk-3I5QFT3N.js";
22
- import "./chunk-B3I2UUT4.js";
23
- import "./chunk-DIULIWKU.js";
24
- import "./chunk-VDBPVIKD.js";
25
- import "./chunk-TGPXLY2J.js";
21
+ } from "./chunk-PNQDPDRC.js";
22
+ import "./chunk-ESBQHFMJ.js";
23
+ import "./chunk-34WSVGEM.js";
24
+ import "./chunk-VWCXW2E7.js";
25
+ import "./chunk-ZXYDQ3TZ.js";
26
+ import "./chunk-724UL2TJ.js";
26
27
  import "./chunk-QOZXJ4NA.js";
27
- import "./chunk-PAK6IDME.js";
28
- import "./chunk-GUOGVTCQ.js";
29
- import "./chunk-AJVLWNFN.js";
30
- import "./chunk-YGVYKNSN.js";
31
- import "./chunk-LNAKEO63.js";
28
+ import "./chunk-P7266HLM.js";
29
+ import "./chunk-52FUZI6K.js";
30
+ import "./chunk-SAEFPSB6.js";
31
+ import "./chunk-GAEGEPOC.js";
32
32
  import "./chunk-Z3CCVDUB.js";
33
33
  import "./chunk-2BEMIWEW.js";
34
34
  import {
35
35
  logSessionStart
36
- } from "./chunk-OQGFCZJ4.js";
37
- import "./chunk-RUOG5D2C.js";
36
+ } from "./chunk-66VMUL7Q.js";
37
+ import "./chunk-Q7DUK4LX.js";
38
38
  import {
39
- findLocalBinUpwards
40
- } from "./chunk-U3VGR4VU.js";
41
- import "./chunk-NTUJEGDZ.js";
42
- import "./chunk-EOKRQ3SA.js";
39
+ findLocalBinUpwards,
40
+ localBinPath
41
+ } from "./chunk-AW7R2GWG.js";
42
+ import "./chunk-RWWYJ623.js";
43
43
  import {
44
44
  createAvailabilityLatch,
45
45
  describeUnavailability
46
- } from "./chunk-WONERJTP.js";
47
- import "./chunk-22AVIGXS.js";
48
- import "./chunk-GVXA6CCE.js";
49
- import "./chunk-6QIUX4EP.js";
50
- import "./chunk-VHQLPIRJ.js";
46
+ } from "./chunk-VRZP76YM.js";
47
+ import "./chunk-QOBUHWHX.js";
48
+ import "./chunk-QILIYSJF.js";
49
+ import "./chunk-6C7JWPCP.js";
50
+ import "./chunk-5NGR67U5.js";
51
51
  import {
52
52
  getProjectDataDir,
53
53
  safeSpawnAsync
54
- } from "./chunk-VN2AXLEX.js";
54
+ } from "./chunk-C34ZXZ7O.js";
55
55
  import "./chunk-BW5KFIQC.js";
56
56
  import "./chunk-QYF5S6P6.js";
57
- import "./chunk-5ZEJHV35.js";
58
- import "./chunk-DQ2NZ7C4.js";
59
- import "./chunk-VNMT7C64.js";
57
+ import "./chunk-PHDMFAKM.js";
58
+ import "./chunk-2BBLFX75.js";
59
+ import "./chunk-XVF2VVXP.js";
60
+ import "./chunk-ZANLILYD.js";
60
61
  import "./chunk-2EECBNC5.js";
61
62
  import {
62
63
  incrementDegradationCount
63
- } from "./chunk-N3YQJI6O.js";
64
+ } from "./chunk-JAU72XNY.js";
64
65
  import {
65
66
  createSubsystemLogger
66
- } from "./chunk-O6TQT6RI.js";
67
- import "./chunk-5THXD6X5.js";
68
- import "./chunk-UK3CMEAL.js";
67
+ } from "./chunk-XTMJ7XDT.js";
68
+ import "./chunk-JMYYOTQG.js";
69
+ import "./chunk-QQNQ7SJW.js";
70
+ import "./chunk-AOHZU2BM.js";
69
71
  import "./chunk-LJDODBBZ.js";
70
72
  import "./chunk-ABBOA7UD.js";
71
73
  import {
72
74
  findNearestMarkerRoot,
73
75
  normalizeEphemeralMapKey,
74
76
  normalizeFilePath
75
- } from "./chunk-Q5U6FMDI.js";
77
+ } from "./chunk-N2H3ZPZY.js";
76
78
  import "./chunk-NXL4FFQQ.js";
77
79
 
78
80
  // dist/clients/knip-client.js
@@ -135,7 +137,7 @@ function resolveProjectKnipConfig(targetDir) {
135
137
  return null;
136
138
  }
137
139
  function resolveProjectKnipBinary(targetDir) {
138
- return findLocalBinUpwards("knip", targetDir) ?? null;
140
+ return localBinPath(findLocalBinUpwards("knip", targetDir)) ?? null;
139
141
  }
140
142
  function classifyKnipBinary(binary, targetDir) {
141
143
  if (binary === null)
@@ -3,7 +3,7 @@ import {
3
3
  isUnderDir,
4
4
  normalizeFilePath,
5
5
  pathsEqual
6
- } from "./chunk-Q5U6FMDI.js";
6
+ } from "./chunk-N2H3ZPZY.js";
7
7
 
8
8
  // dist/clients/env-utils.js
9
9
  function isTestMode() {
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
2
2
  import {
3
3
  tryLazyInstallForFormatter
4
- } from "./chunk-C2AUYXQH.js";
4
+ } from "./chunk-OXXKQCSV.js";
5
5
  import {
6
6
  stripAnsi
7
7
  } from "./chunk-FC4RP4I2.js";
@@ -46,57 +46,59 @@ import {
46
46
  hasTerraformConfig,
47
47
  hasVitePlusConfig,
48
48
  stripGradleCommentsAndStrings
49
- } from "./chunk-HHYAELLJ.js";
49
+ } from "./chunk-RPLINGVB.js";
50
50
  import {
51
51
  load
52
52
  } from "./chunk-QOZXJ4NA.js";
53
53
  import {
54
54
  readTextFileOrUndefined,
55
55
  resolveCargoPackageEdition
56
- } from "./chunk-PAK6IDME.js";
56
+ } from "./chunk-P7266HLM.js";
57
57
  import {
58
58
  getToolPath
59
- } from "./chunk-OQGFCZJ4.js";
59
+ } from "./chunk-66VMUL7Q.js";
60
60
  import {
61
61
  resolveToolCwd
62
- } from "./chunk-RUOG5D2C.js";
62
+ } from "./chunk-Q7DUK4LX.js";
63
63
  import {
64
64
  VENDOR_BIN_DIRS,
65
65
  VENV_BIN_DIRS,
66
66
  findGlobalBinary,
67
- findLocalBinUpwards
68
- } from "./chunk-U3VGR4VU.js";
69
- import {
70
- assertInstallAllowed
71
- } from "./chunk-NTUJEGDZ.js";
67
+ findLocalBinUpwards,
68
+ localBinPath
69
+ } from "./chunk-AW7R2GWG.js";
72
70
  import {
71
+ getIsolatedNpxSpawnOptions,
73
72
  probeToolAsync
74
- } from "./chunk-EOKRQ3SA.js";
73
+ } from "./chunk-RWWYJ623.js";
75
74
  import {
76
75
  classifyProbeFailure,
77
76
  createAvailabilityLatch,
78
77
  logAvailabilityDecision,
79
78
  startHostStallSampler
80
- } from "./chunk-WONERJTP.js";
79
+ } from "./chunk-VRZP76YM.js";
81
80
  import {
82
81
  createGenerationSource,
83
82
  safeSpawnAsync
84
- } from "./chunk-VN2AXLEX.js";
83
+ } from "./chunk-C34ZXZ7O.js";
85
84
  import {
86
85
  TERRAGRUNT_FILENAMES
87
- } from "./chunk-5ZEJHV35.js";
86
+ } from "./chunk-PHDMFAKM.js";
87
+ import {
88
+ assertInstallAllowed
89
+ } from "./chunk-ZANLILYD.js";
88
90
  import {
89
91
  compareOrdinal,
90
92
  getDegradationLedgerGeneration,
91
93
  incrementDegradationCount,
92
94
  recordDegradationOnce
93
- } from "./chunk-N3YQJI6O.js";
95
+ } from "./chunk-JAU72XNY.js";
94
96
  import {
95
97
  logExtension
96
- } from "./chunk-O6TQT6RI.js";
98
+ } from "./chunk-XTMJ7XDT.js";
97
99
  import {
98
100
  logLatency
99
- } from "./chunk-5THXD6X5.js";
101
+ } from "./chunk-QQNQ7SJW.js";
100
102
  import {
101
103
  BoundedFifoMap,
102
104
  BoundedLruCache
@@ -106,7 +108,7 @@ import {
106
108
  findNearestMarkerRoot,
107
109
  normalizeMapKey,
108
110
  toPosix
109
- } from "./chunk-Q5U6FMDI.js";
111
+ } from "./chunk-N2H3ZPZY.js";
110
112
 
111
113
  // dist/clients/formatters.js
112
114
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -1378,19 +1380,19 @@ async function resolveGoFmtBinary() {
1378
1380
  return await fileExists(binary) ? binary : null;
1379
1381
  }
1380
1382
  async function findInVenv(binary, cwd) {
1381
- return findLocalBinUpwards(binary, cwd, {
1383
+ return localBinPath(findLocalBinUpwards(binary, cwd, {
1382
1384
  windowsExt: ".exe",
1383
1385
  binDirs: VENV_BIN_DIRS
1384
- }) ?? null;
1386
+ })) ?? null;
1385
1387
  }
1386
1388
  async function findInVendorBin(binary, cwd) {
1387
- return findLocalBinUpwards(binary, cwd, {
1389
+ return localBinPath(findLocalBinUpwards(binary, cwd, {
1388
1390
  windowsExt: ".bat",
1389
1391
  binDirs: VENDOR_BIN_DIRS
1390
- }) ?? null;
1392
+ })) ?? null;
1391
1393
  }
1392
1394
  async function findInNodeModules(binary, cwd) {
1393
- return findLocalBinUpwards(binary, cwd) ?? null;
1395
+ return localBinPath(findLocalBinUpwards(binary, cwd)) ?? null;
1394
1396
  }
1395
1397
  async function canUseBundleExec(cwd) {
1396
1398
  if (await which("bundle") === null)
@@ -2055,8 +2057,8 @@ var styluaFormatter = {
2055
2057
  name: "stylua",
2056
2058
  command: ["stylua", "$FILE"],
2057
2059
  extensions: [".lua"],
2058
- resolveCommand: managedFormatterResolver("stylua", [], findLocalBinUpwards),
2059
- detect: managedToolDetect("stylua", async (cwd) => (await findUp(["stylua.toml", ".stylua.toml"], cwd)).length > 0, async (cwd) => Boolean(findLocalBinUpwards("stylua", cwd) || await which("stylua")))
2060
+ resolveCommand: managedFormatterResolver("stylua", [], (binary, cwd) => localBinPath(findLocalBinUpwards(binary, cwd))),
2061
+ detect: managedToolDetect("stylua", async (cwd) => (await findUp(["stylua.toml", ".stylua.toml"], cwd)).length > 0, async (cwd) => Boolean(localBinPath(findLocalBinUpwards("stylua", cwd)) || await which("stylua")))
2060
2062
  };
2061
2063
  var ormoluFormatter = {
2062
2064
  name: "ormolu",
@@ -2476,6 +2478,16 @@ function diagnosticTail(text, maxLines = FORMATTER_ERROR_TAIL_LINES) {
2476
2478
  return void 0;
2477
2479
  return lines.slice(-maxLines).join("\n");
2478
2480
  }
2481
+ async function resolveNpxFallback(formatterName, fallback) {
2482
+ const toolId = getAutoInstallToolIdForFormatter(formatterName);
2483
+ if (!toolId)
2484
+ return fallback;
2485
+ const { ensureTool } = await import("./probes/installer.js");
2486
+ const installed = await ensureTool(toolId);
2487
+ if (!installed)
2488
+ return fallback;
2489
+ return [installed, ...fallback.slice(2)];
2490
+ }
2479
2491
  async function resolveFormatterCommand(formatter, absolutePath, cwd) {
2480
2492
  const agreement = establishToolAgreement(formatter.name, cwd);
2481
2493
  if (agreement.decision === "decline") {
@@ -2494,8 +2506,11 @@ async function resolveFormatterCommand(formatter, absolutePath, cwd) {
2494
2506
  if (resolved !== null)
2495
2507
  return resolved;
2496
2508
  const fallback = formatter.command.map((c) => c.replace("$FILE", absolutePath));
2497
- if (fallback[0] === "npx" && !assertInstallAllowed(`formatter npx fallback: ${formatter.name}`)) {
2498
- return SKIP_FORMATTING;
2509
+ if (fallback[0] === "npx") {
2510
+ if (!assertInstallAllowed(`formatter npx fallback: ${formatter.name}`)) {
2511
+ return SKIP_FORMATTING;
2512
+ }
2513
+ return resolveNpxFallback(formatter.name, fallback);
2499
2514
  }
2500
2515
  return fallback;
2501
2516
  }
@@ -2528,7 +2543,8 @@ async function formatFile(filePath, formatter, enter) {
2528
2543
  const contentBefore = await fs2.readFile(absolutePath, "utf-8");
2529
2544
  const result = await safeSpawnAsync(cmd[0], cmd.slice(1), {
2530
2545
  timeout: 15e3,
2531
- cwd: formatterCwd
2546
+ cwd: formatterCwd,
2547
+ ...cmd[0] === "npx" || cmd[0] === "bunx" ? getIsolatedNpxSpawnOptions() : {}
2532
2548
  });
2533
2549
  if (result.spawnFailure?.kind === "tool-not-found") {
2534
2550
  return {