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.
- package/CHANGELOG.md +158 -0
- package/README.md +1 -0
- package/config/dependency-cruiser-eager-allowlist.json +3 -1
- package/dist/{chunk-IXEBJSUE.js → chunk-23WOO7TX.js} +11 -10
- package/dist/{chunk-E2WFBRHM.js → chunk-2B73ZPOK.js} +3 -3
- package/dist/{chunk-DQ2NZ7C4.js → chunk-2BBLFX75.js} +139 -11
- package/dist/{chunk-ZMOL6RQC.js → chunk-2CD5RS6M.js} +2 -2
- package/dist/{chunk-VD4JQCQC.js → chunk-2ZGIZPDG.js} +38 -37
- package/dist/{chunk-DIULIWKU.js → chunk-34WSVGEM.js} +29 -3
- package/dist/chunk-3JNKMP3B.js +17 -0
- package/dist/{chunk-HVUZXSWK.js → chunk-3UUPUE3O.js} +45 -41
- package/dist/{chunk-5RXBNSW2.js → chunk-3VPVG5SU.js} +16 -8
- package/dist/chunk-3WA4HP4I.js +55 -0
- package/dist/chunk-466Z26MG.js +30 -0
- package/dist/{chunk-34U7PLGE.js → chunk-4UNXBNE2.js} +12 -11
- package/dist/{chunk-E4MAEDPM.js → chunk-4W4VLAPJ.js} +12 -11
- package/dist/{chunk-GUOGVTCQ.js → chunk-52FUZI6K.js} +4 -2
- package/dist/chunk-5JM2524W.js +84 -0
- package/dist/{chunk-VHQLPIRJ.js → chunk-5NGR67U5.js} +2 -2
- package/dist/{chunk-DFVMIKMQ.js → chunk-66SXUJCA.js} +45 -9
- package/dist/{chunk-OQGFCZJ4.js → chunk-66VMUL7Q.js} +16 -16
- package/dist/{chunk-HWBZIGMJ.js → chunk-67WMNWEE.js} +9 -8
- package/dist/{chunk-6QIUX4EP.js → chunk-6C7JWPCP.js} +7 -7
- package/dist/{chunk-47D2BO4S.js → chunk-6GFRNVYR.js} +11 -10
- package/dist/{chunk-ZAWW3AF6.js → chunk-6SDEP3AJ.js} +9 -8
- package/dist/{chunk-TGPXLY2J.js → chunk-724UL2TJ.js} +38 -2
- package/dist/{chunk-YLF3PPT5.js → chunk-76MWC2K6.js} +3 -3
- package/dist/{chunk-F3P7VQ7H.js → chunk-7DYBLXYA.js} +3 -3
- package/dist/{chunk-AJ3QXTRQ.js → chunk-7ULNCDCO.js} +37 -35
- package/dist/{chunk-UK3CMEAL.js → chunk-AOHZU2BM.js} +1 -1
- package/dist/{chunk-F3AU2TMM.js → chunk-ARJ6PLFH.js} +44 -28
- package/dist/{chunk-U3VGR4VU.js → chunk-AW7R2GWG.js} +65 -8
- package/dist/{chunk-FJNKANOS.js → chunk-BKE7E7TC.js} +10 -9
- package/dist/{chunk-4W2PLC4J.js → chunk-BRGDSBJE.js} +13 -12
- package/dist/{chunk-VN2AXLEX.js → chunk-C34ZXZ7O.js} +102 -16
- package/dist/{chunk-T4ERT73Y.js → chunk-CF24OIYI.js} +21 -20
- package/dist/{chunk-NMABWBZN.js → chunk-CHOW74WE.js} +1 -1
- package/dist/{chunk-ARFCXG7S.js → chunk-CO2G5PHH.js} +2 -2
- package/dist/{chunk-AS44CFQ4.js → chunk-EETY4LF7.js} +24 -10
- package/dist/{chunk-I3R7GKDR.js → chunk-EJIUXPBX.js} +1 -1
- package/dist/{chunk-B3I2UUT4.js → chunk-ESBQHFMJ.js} +653 -251
- package/dist/{chunk-O5WILGMI.js → chunk-FLKWCIZH.js} +8 -5
- package/dist/{chunk-LNAKEO63.js → chunk-GAEGEPOC.js} +4 -4
- package/dist/{chunk-V7R425XG.js → chunk-GBPP5P7X.js} +4 -4
- package/dist/{chunk-XK4CIILI.js → chunk-GHB6AYCP.js} +27 -26
- package/dist/{chunk-7FBF7NPR.js → chunk-GOYRYZ2R.js} +29 -26
- package/dist/{chunk-JOLITGCC.js → chunk-GXW6K4YJ.js} +1 -1
- package/dist/{chunk-NXPS2L6U.js → chunk-GZYBXISR.js} +9 -9
- package/dist/{chunk-OAXNDZJ7.js → chunk-IBGIOBEE.js} +8 -4
- package/dist/{chunk-IIXOAGHR.js → chunk-IBRALRBR.js} +19 -15
- package/dist/{chunk-7F72PXY2.js → chunk-IXXDFY73.js} +3 -3
- package/dist/chunk-IZSHAIJ7.js +26 -0
- package/dist/{chunk-N3YQJI6O.js → chunk-JAU72XNY.js} +20 -15
- package/dist/chunk-JMYYOTQG.js +77 -0
- package/dist/{chunk-NL5GLMFI.js → chunk-JSQFTSC6.js} +12 -11
- package/dist/{chunk-IVP5KAB7.js → chunk-JWA5I3SR.js} +35 -21
- package/dist/{chunk-Y4T27COV.js → chunk-KBG47GHP.js} +4 -4
- package/dist/{chunk-PWFHBTSF.js → chunk-L3BLXZG7.js} +2 -2
- package/dist/chunk-LOP6GRPH.js +31 -0
- package/dist/chunk-MQLUAEOC.js +162 -0
- package/dist/{chunk-RPD5K5NC.js → chunk-MRXKYPCS.js} +2 -2
- package/dist/{chunk-Q5U6FMDI.js → chunk-N2H3ZPZY.js} +59 -7
- package/dist/{chunk-27BBHSZC.js → chunk-N3X6Q4YT.js} +3 -3
- package/dist/{chunk-UY752QSN.js → chunk-NW7BOILN.js} +19 -17
- package/dist/{chunk-TLGFBM3F.js → chunk-ODBNXWT4.js} +302 -113
- package/dist/{chunk-TT22N74J.js → chunk-OG5UUPN7.js} +13 -13
- package/dist/{chunk-C2AUYXQH.js → chunk-OXXKQCSV.js} +6 -6
- package/dist/{chunk-PAK6IDME.js → chunk-P7266HLM.js} +2 -2
- package/dist/{chunk-52H5B5TC.js → chunk-PFNSLWU5.js} +31 -30
- package/dist/{chunk-5ZEJHV35.js → chunk-PHDMFAKM.js} +12 -2
- package/dist/{chunk-3I5QFT3N.js → chunk-PNQDPDRC.js} +6 -3
- package/dist/{chunk-TVN5N6GY.js → chunk-PV6LR5P5.js} +6057 -1311
- package/dist/{chunk-AHDW3GPE.js → chunk-Q6ZWTCLY.js} +24 -22
- package/dist/{chunk-RUOG5D2C.js → chunk-Q7DUK4LX.js} +5 -5
- package/dist/{chunk-YSNFMJKN.js → chunk-QGQ5CCCG.js} +2 -2
- package/dist/{chunk-LW6XKDZQ.js → chunk-QHJ6DQ2R.js} +287 -38
- package/dist/{chunk-GVXA6CCE.js → chunk-QILIYSJF.js} +1 -1
- package/dist/{chunk-22AVIGXS.js → chunk-QOBUHWHX.js} +12 -7
- package/dist/{chunk-5THXD6X5.js → chunk-QQNQ7SJW.js} +2 -75
- package/dist/{chunk-4RERDEXR.js → chunk-QZVW3AAK.js} +50 -41
- package/dist/{chunk-AWE5TMPO.js → chunk-R3PCY3YS.js} +14 -13
- package/dist/{chunk-HHYAELLJ.js → chunk-RPLINGVB.js} +7 -7
- package/dist/{chunk-EOKRQ3SA.js → chunk-RWWYJ623.js} +10 -1
- package/dist/{chunk-YGVYKNSN.js → chunk-SAEFPSB6.js} +59 -12
- package/dist/{chunk-K6VYLB2U.js → chunk-TYM6OUIT.js} +13 -12
- package/dist/{chunk-AJXODZY6.js → chunk-UXGETRP4.js} +13 -12
- package/dist/{chunk-I7SPGOWI.js → chunk-UZ3TUTRV.js} +1 -1
- package/dist/{chunk-TO6WL3GM.js → chunk-VCHXCQFG.js} +12 -2
- package/dist/{chunk-BRJKOBZP.js → chunk-VITUCP5A.js} +17 -6
- package/dist/{chunk-WONERJTP.js → chunk-VRZP76YM.js} +1 -1
- package/dist/{chunk-OS32RNR2.js → chunk-VSSBEUFT.js} +16 -15
- package/dist/{chunk-VDBPVIKD.js → chunk-VWCXW2E7.js} +1 -1
- package/dist/{chunk-NKOUFPQF.js → chunk-WOA4LN2R.js} +2 -2
- package/dist/{chunk-RIISMHKN.js → chunk-WOKKRCJ5.js} +15 -13
- package/dist/{chunk-XECLWQZN.js → chunk-WU567RSC.js} +13 -10
- package/dist/{chunk-V5PXFSZK.js → chunk-XCJN5IJU.js} +4 -4
- package/dist/{chunk-ORTMY4Q4.js → chunk-XKIZ2HNN.js} +22 -14
- package/dist/{chunk-6VCD4VKZ.js → chunk-XMSXXAHW.js} +2 -2
- package/dist/chunk-XPZPXCBV.js +28 -0
- package/dist/{chunk-O6TQT6RI.js → chunk-XTMJ7XDT.js} +1 -1
- package/dist/{chunk-VNMT7C64.js → chunk-XVF2VVXP.js} +5 -3
- package/dist/chunk-Z527N6YQ.js +28 -0
- package/dist/{chunk-NTUJEGDZ.js → chunk-ZANLILYD.js} +22 -2
- package/dist/{chunk-6P62QVEA.js → chunk-ZGDGW2V3.js} +2 -2
- package/dist/{chunk-ODEEOXPH.js → chunk-ZHFZWTZV.js} +12 -11
- package/dist/{chunk-AJVLWNFN.js → chunk-ZXYDQ3TZ.js} +5 -5
- package/dist/index.js +102097 -97778
- package/dist/mcp/analyze-cli.js +18 -8
- package/dist/mcp/cli.js +48 -37
- package/dist/mcp/server.js +695 -426
- package/dist/mcp/worker.js +66 -55
- package/dist/probes/installer.js +20 -19
- package/docs/ast-grep_rules_catalog.md +2 -2
- package/docs/astplayground.md +1 -1
- package/docs/configuration.md +38 -2
- package/docs/custom-rules.md +25 -2
- package/docs/dependencies.md +3 -0
- package/docs/environment-variables.md +34 -6
- package/docs/features.md +39 -3
- package/docs/globalconfig.md +3 -1
- package/docs/language-coverage.md +2 -1
- package/docs/lsp-capability-matrix.md +29 -6
- package/docs/lsp-idle-eviction.md +38 -47
- package/docs/pi-lens-fixer.md +13 -5
- package/docs/pi-lens-merge-policy.md +48 -1
- package/docs/pi-lens-monitor.md +3 -1
- package/docs/pi-lens-retro.md +2 -1
- package/docs/pi-lens-reviewer.md +19 -3
- package/docs/pi-lens-subagent.md +2 -0
- package/docs/real-harness.md +17 -0
- package/docs/schema/pi-lens-config-v1.json +565 -0
- package/docs/servercapabilities.md +18 -4
- package/docs/settings.md +2 -1
- package/docs/word-index.md +6 -0
- package/package.json +1 -1
- package/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
- package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
- package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
- package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
- package/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
- package/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
- package/dist/chunk-54B42YRX.js +0 -27
- package/dist/chunk-CGGAIP7J.js +0 -29
- package/dist/chunk-D6QS3U6M.js +0 -30
- package/dist/chunk-HMFXILPV.js +0 -83
- package/dist/chunk-LSMJ6KBE.js +0 -4139
- package/dist/chunk-NTHH2J74.js +0 -27
- package/dist/chunk-RPD4ZSB7.js +0 -25
- package/dist/chunk-T6D4Q4AQ.js +0 -54
- package/dist/chunk-VCSRSYLF.js +0 -81
|
@@ -3,10 +3,16 @@ import {
|
|
|
3
3
|
extractTomlTableSection,
|
|
4
4
|
hasTomlTable,
|
|
5
5
|
parseTomlStringArray
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P7266HLM.js";
|
|
7
|
+
import {
|
|
8
|
+
getProjectTrustState
|
|
9
|
+
} from "./chunk-ZANLILYD.js";
|
|
7
10
|
import {
|
|
8
11
|
recordDegradationOnce
|
|
9
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-JAU72XNY.js";
|
|
13
|
+
import {
|
|
14
|
+
logExtension
|
|
15
|
+
} from "./chunk-XTMJ7XDT.js";
|
|
10
16
|
import {
|
|
11
17
|
UV_WORKSPACE_EXCLUDE_DIALECT,
|
|
12
18
|
UV_WORKSPACE_MEMBERS_DIALECT,
|
|
@@ -14,7 +20,7 @@ import {
|
|
|
14
20
|
matchesWorkspaceMemberPattern,
|
|
15
21
|
toPosix,
|
|
16
22
|
walkUpDirs
|
|
17
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-N2H3ZPZY.js";
|
|
18
24
|
|
|
19
25
|
// dist/clients/python-environment.js
|
|
20
26
|
import { access, readFile } from "node:fs/promises";
|
|
@@ -68,6 +74,11 @@ function isUvWorkspaceMember(workspace, projectRoot) {
|
|
|
68
74
|
}));
|
|
69
75
|
return !workspace.exclude.some(matches(UV_WORKSPACE_EXCLUDE_DIALECT)) && workspace.members.some(matches(UV_WORKSPACE_MEMBERS_DIALECT));
|
|
70
76
|
}
|
|
77
|
+
var PROJECT_SOURCED_PYTHON_SOURCES = /* @__PURE__ */ new Set([
|
|
78
|
+
"project-dot-venv",
|
|
79
|
+
"project-venv",
|
|
80
|
+
"uv-workspace"
|
|
81
|
+
]);
|
|
71
82
|
var AMBIENT_ENVIRONMENT_VARIABLES = {
|
|
72
83
|
"uv-project-environment": "UV_PROJECT_ENVIRONMENT",
|
|
73
84
|
"virtual-env": "VIRTUAL_ENV",
|
|
@@ -115,6 +126,21 @@ async function detectPythonEnvironment(projectRoot, homeDir = os.homedir(), opti
|
|
|
115
126
|
continue;
|
|
116
127
|
if (!allowAmbient && candidate.source in AMBIENT_ENVIRONMENT_VARIABLES && !isWithinProjectRoot(candidate.root))
|
|
117
128
|
continue;
|
|
129
|
+
if (PROJECT_SOURCED_PYTHON_SOURCES.has(candidate.source) && getProjectTrustState() !== "trusted") {
|
|
130
|
+
if (recordDegradationOnce({
|
|
131
|
+
kind: "trust-refusal",
|
|
132
|
+
subject: `python-environment:${candidate.root}`,
|
|
133
|
+
reason: `project Python environment refused: pi project trust is ${getProjectTrustState()}`
|
|
134
|
+
})) {
|
|
135
|
+
logExtension({
|
|
136
|
+
subsystem: "project-trust",
|
|
137
|
+
level: "warn",
|
|
138
|
+
message: "project Python environment refused: mark the project trusted in pi or upgrade pi",
|
|
139
|
+
metadata: { source: candidate.source }
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
118
144
|
const binDir = path.join(candidate.root, process.platform === "win32" ? "Scripts" : "bin");
|
|
119
145
|
const pythonPath = path.join(binDir, process.platform === "win32" ? "python.exe" : "python");
|
|
120
146
|
try {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
configureLspServiceLifecycle,
|
|
4
|
+
getOwnedLspService,
|
|
5
|
+
peekOwnedLspService,
|
|
6
|
+
resetOwnedLspService
|
|
7
|
+
} from "./chunk-MQLUAEOC.js";
|
|
8
|
+
import "./chunk-QQNQ7SJW.js";
|
|
9
|
+
import "./chunk-AOHZU2BM.js";
|
|
10
|
+
import "./chunk-N2H3ZPZY.js";
|
|
11
|
+
import "./chunk-NXL4FFQQ.js";
|
|
12
|
+
export {
|
|
13
|
+
configureLspServiceLifecycle,
|
|
14
|
+
getOwnedLspService,
|
|
15
|
+
peekOwnedLspService,
|
|
16
|
+
resetOwnedLspService
|
|
17
|
+
};
|
|
@@ -1,74 +1,77 @@
|
|
|
1
1
|
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
nestedWorktreeOffsets
|
|
4
|
+
} from "./chunk-VCHXCQFG.js";
|
|
2
5
|
import {
|
|
3
6
|
formatToolFailure
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-2CD5RS6M.js";
|
|
8
|
+
import "./chunk-UZ3TUTRV.js";
|
|
6
9
|
import {
|
|
7
10
|
createAvailabilityChecker,
|
|
8
11
|
findManagedNodeToolBinary,
|
|
9
12
|
resolveAvailableOrInstall
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-VDBPVIKD.js";
|
|
19
|
-
import "./chunk-TGPXLY2J.js";
|
|
13
|
+
} from "./chunk-GOYRYZ2R.js";
|
|
14
|
+
import "./chunk-RPLINGVB.js";
|
|
15
|
+
import "./chunk-PNQDPDRC.js";
|
|
16
|
+
import "./chunk-ESBQHFMJ.js";
|
|
17
|
+
import "./chunk-34WSVGEM.js";
|
|
18
|
+
import "./chunk-VWCXW2E7.js";
|
|
19
|
+
import "./chunk-ZXYDQ3TZ.js";
|
|
20
|
+
import "./chunk-724UL2TJ.js";
|
|
20
21
|
import "./chunk-QOZXJ4NA.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-YGVYKNSN.js";
|
|
22
|
+
import "./chunk-P7266HLM.js";
|
|
23
|
+
import "./chunk-52FUZI6K.js";
|
|
24
|
+
import "./chunk-SAEFPSB6.js";
|
|
25
25
|
import {
|
|
26
26
|
getJscpdMaxEntriesDerived
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-GAEGEPOC.js";
|
|
28
28
|
import "./chunk-Z3CCVDUB.js";
|
|
29
29
|
import "./chunk-2BEMIWEW.js";
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-66VMUL7Q.js";
|
|
31
|
+
import "./chunk-Q7DUK4LX.js";
|
|
32
32
|
import {
|
|
33
33
|
findNodeToolBinary
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
import "./chunk-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
34
|
+
} from "./chunk-AW7R2GWG.js";
|
|
35
|
+
import {
|
|
36
|
+
getIsolatedNpxSpawnOptions
|
|
37
|
+
} from "./chunk-RWWYJ623.js";
|
|
38
|
+
import "./chunk-VRZP76YM.js";
|
|
39
|
+
import "./chunk-QOBUHWHX.js";
|
|
40
|
+
import "./chunk-QILIYSJF.js";
|
|
41
|
+
import "./chunk-6C7JWPCP.js";
|
|
41
42
|
import {
|
|
42
43
|
shouldRecurseIntoDir,
|
|
43
44
|
walkTreeStackSync
|
|
44
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-5NGR67U5.js";
|
|
45
46
|
import {
|
|
46
47
|
getExcludedDirGlobs,
|
|
47
48
|
getProjectIgnoreGlobs,
|
|
48
49
|
getProjectIgnoreMatcher,
|
|
49
50
|
safeSpawnAsync
|
|
50
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-C34ZXZ7O.js";
|
|
51
52
|
import "./chunk-BW5KFIQC.js";
|
|
52
53
|
import "./chunk-QYF5S6P6.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
55
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-PHDMFAKM.js";
|
|
55
|
+
import "./chunk-2BBLFX75.js";
|
|
56
|
+
import "./chunk-XVF2VVXP.js";
|
|
57
|
+
import "./chunk-ZANLILYD.js";
|
|
56
58
|
import "./chunk-2EECBNC5.js";
|
|
57
59
|
import {
|
|
58
60
|
incrementDegradationCount
|
|
59
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-JAU72XNY.js";
|
|
60
62
|
import {
|
|
61
63
|
createSubsystemLogger
|
|
62
|
-
} from "./chunk-
|
|
63
|
-
import "./chunk-
|
|
64
|
-
import "./chunk-
|
|
64
|
+
} from "./chunk-XTMJ7XDT.js";
|
|
65
|
+
import "./chunk-JMYYOTQG.js";
|
|
66
|
+
import "./chunk-QQNQ7SJW.js";
|
|
67
|
+
import "./chunk-AOHZU2BM.js";
|
|
65
68
|
import "./chunk-LJDODBBZ.js";
|
|
66
69
|
import "./chunk-ABBOA7UD.js";
|
|
67
70
|
import {
|
|
68
71
|
isAtOrAboveHomeDir,
|
|
69
72
|
isFullyQualified,
|
|
70
73
|
toPosix
|
|
71
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-N2H3ZPZY.js";
|
|
72
75
|
import "./chunk-NXL4FFQQ.js";
|
|
73
76
|
|
|
74
77
|
// dist/clients/jscpd-client.js
|
|
@@ -76,7 +79,6 @@ import * as fs from "node:fs";
|
|
|
76
79
|
import { mkdtempSync } from "node:fs";
|
|
77
80
|
import * as os from "node:os";
|
|
78
81
|
import * as path from "node:path";
|
|
79
|
-
import { relative } from "node:path";
|
|
80
82
|
var EMPTY_RESULT = {
|
|
81
83
|
success: false,
|
|
82
84
|
clones: [],
|
|
@@ -113,10 +115,9 @@ function readProjectJscpdConfig(cwd) {
|
|
|
113
115
|
return null;
|
|
114
116
|
}
|
|
115
117
|
function worktreeIgnoreGlobs(cwd) {
|
|
116
|
-
const base = canonicalDirectory(cwd);
|
|
117
118
|
const globs = [];
|
|
118
|
-
for (const
|
|
119
|
-
const inside = toPosix(
|
|
119
|
+
for (const offset of nestedWorktreeOffsets(cwd)) {
|
|
120
|
+
const inside = toPosix(offset);
|
|
120
121
|
const unsafe = inside.includes(",") ? "comma-in-path" : /[*?[\]{}()!\\]/.test(inside) ? "glob-char-in-path" : null;
|
|
121
122
|
if (unsafe) {
|
|
122
123
|
incrementDegradationCount({
|
|
@@ -322,7 +323,10 @@ var JscpdClient = class {
|
|
|
322
323
|
...patterns === void 0 ? [] : ["--ignore", patterns.join(",")]
|
|
323
324
|
], {
|
|
324
325
|
timeout: SCAN_TIMEOUT_MS,
|
|
325
|
-
|
|
326
|
+
// A cache-only npx fallback must not read the project's `.npmrc`
|
|
327
|
+
// (#4268 acceptance 3); local/managed jscpd keeps the project cwd.
|
|
328
|
+
cwd,
|
|
329
|
+
...cmd === "npx" ? getIsolatedNpxSpawnOptions() : {}
|
|
326
330
|
});
|
|
327
331
|
if (result.error) {
|
|
328
332
|
this.log(`Scan error: ${result.error.message}`);
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
getStartupScanMaxSourceFilesDerived
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-GAEGEPOC.js";
|
|
5
5
|
import {
|
|
6
6
|
shouldRecurseIntoDir,
|
|
7
7
|
walkTreeStackAsync,
|
|
8
8
|
walkTreeStackSync
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-5NGR67U5.js";
|
|
10
10
|
import {
|
|
11
11
|
getProjectIgnoreMatcher
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-C34ZXZ7O.js";
|
|
13
13
|
import {
|
|
14
14
|
getDirectoryMarkers,
|
|
15
15
|
registerWorkspaceTopologyReset
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XVF2VVXP.js";
|
|
17
17
|
import {
|
|
18
18
|
lazyEnvNumber
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-AOHZU2BM.js";
|
|
20
20
|
import {
|
|
21
21
|
BoundedLruCache
|
|
22
22
|
} from "./chunk-ABBOA7UD.js";
|
|
23
23
|
import {
|
|
24
24
|
isAtOrAboveHomeDir,
|
|
25
25
|
normalizeMapKey
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-N2H3ZPZY.js";
|
|
27
27
|
|
|
28
28
|
// dist/clients/startup-scan.js
|
|
29
29
|
import * as os from "node:os";
|
|
@@ -50,6 +50,10 @@ function isStartupScanVerdictFresh(verdict, now = Date.now()) {
|
|
|
50
50
|
return true;
|
|
51
51
|
if (typeof verdict.computedAt !== "number")
|
|
52
52
|
return false;
|
|
53
|
+
if (verdict.maxProjectFiles !== getStartupScanMaxSourceFilesDerived(verdict.cwd))
|
|
54
|
+
return false;
|
|
55
|
+
if (verdict.maxScanEntries !== getStartupScanMaxEntries())
|
|
56
|
+
return false;
|
|
53
57
|
return now - verdict.computedAt < getStartupScanVerdictTtlMs();
|
|
54
58
|
}
|
|
55
59
|
function findNearestProjectRoot(startDir) {
|
|
@@ -160,7 +164,9 @@ function computeStartupScanContext(cwd, options = {}) {
|
|
|
160
164
|
projectRoot,
|
|
161
165
|
canWarmCaches: false,
|
|
162
166
|
reason: entryBudgetExceeded ? "too-many-entries" : "too-many-source-files",
|
|
163
|
-
sourceFileCount
|
|
167
|
+
sourceFileCount,
|
|
168
|
+
maxProjectFiles: maxSourceFiles,
|
|
169
|
+
maxScanEntries
|
|
164
170
|
};
|
|
165
171
|
}
|
|
166
172
|
return {
|
|
@@ -233,7 +239,9 @@ async function resolveStartupScanContextAsync(cwd, options = {}) {
|
|
|
233
239
|
projectRoot,
|
|
234
240
|
canWarmCaches: false,
|
|
235
241
|
reason: entryBudgetExceeded ? "too-many-entries" : "too-many-source-files",
|
|
236
|
-
sourceFileCount
|
|
242
|
+
sourceFileCount,
|
|
243
|
+
maxProjectFiles: maxSourceFiles,
|
|
244
|
+
maxScanEntries
|
|
237
245
|
};
|
|
238
246
|
} else {
|
|
239
247
|
result = {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
DependencyChecker,
|
|
4
|
+
buildMadgeArgs,
|
|
5
|
+
resetMadgeManagedPathMemo
|
|
6
|
+
} from "./chunk-EETY4LF7.js";
|
|
7
|
+
import "./chunk-GOYRYZ2R.js";
|
|
8
|
+
import "./chunk-RPLINGVB.js";
|
|
9
|
+
import {
|
|
10
|
+
mapWithConcurrency
|
|
11
|
+
} from "./chunk-XIMYZ3JA.js";
|
|
12
|
+
import "./chunk-ESBQHFMJ.js";
|
|
13
|
+
import "./chunk-34WSVGEM.js";
|
|
14
|
+
import "./chunk-VWCXW2E7.js";
|
|
15
|
+
import "./chunk-ZXYDQ3TZ.js";
|
|
16
|
+
import "./chunk-724UL2TJ.js";
|
|
17
|
+
import "./chunk-QOZXJ4NA.js";
|
|
18
|
+
import "./chunk-P7266HLM.js";
|
|
19
|
+
import "./chunk-52FUZI6K.js";
|
|
20
|
+
import "./chunk-SAEFPSB6.js";
|
|
21
|
+
import "./chunk-GAEGEPOC.js";
|
|
22
|
+
import "./chunk-Z3CCVDUB.js";
|
|
23
|
+
import "./chunk-2BEMIWEW.js";
|
|
24
|
+
import "./chunk-66VMUL7Q.js";
|
|
25
|
+
import "./chunk-Q7DUK4LX.js";
|
|
26
|
+
import "./chunk-AW7R2GWG.js";
|
|
27
|
+
import "./chunk-RWWYJ623.js";
|
|
28
|
+
import "./chunk-VRZP76YM.js";
|
|
29
|
+
import "./chunk-QOBUHWHX.js";
|
|
30
|
+
import "./chunk-QILIYSJF.js";
|
|
31
|
+
import "./chunk-6C7JWPCP.js";
|
|
32
|
+
import "./chunk-5NGR67U5.js";
|
|
33
|
+
import "./chunk-C34ZXZ7O.js";
|
|
34
|
+
import "./chunk-BW5KFIQC.js";
|
|
35
|
+
import "./chunk-QYF5S6P6.js";
|
|
36
|
+
import "./chunk-PHDMFAKM.js";
|
|
37
|
+
import "./chunk-2BBLFX75.js";
|
|
38
|
+
import "./chunk-XVF2VVXP.js";
|
|
39
|
+
import "./chunk-ZANLILYD.js";
|
|
40
|
+
import "./chunk-2EECBNC5.js";
|
|
41
|
+
import "./chunk-JAU72XNY.js";
|
|
42
|
+
import "./chunk-XTMJ7XDT.js";
|
|
43
|
+
import "./chunk-JMYYOTQG.js";
|
|
44
|
+
import "./chunk-QQNQ7SJW.js";
|
|
45
|
+
import "./chunk-AOHZU2BM.js";
|
|
46
|
+
import "./chunk-LJDODBBZ.js";
|
|
47
|
+
import "./chunk-ABBOA7UD.js";
|
|
48
|
+
import "./chunk-N2H3ZPZY.js";
|
|
49
|
+
import "./chunk-NXL4FFQQ.js";
|
|
50
|
+
export {
|
|
51
|
+
DependencyChecker,
|
|
52
|
+
buildMadgeArgs,
|
|
53
|
+
mapWithConcurrency,
|
|
54
|
+
resetMadgeManagedPathMemo
|
|
55
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
importFactProvider,
|
|
4
|
+
importFactsApplyTo
|
|
5
|
+
} from "./chunk-XCJN5IJU.js";
|
|
6
|
+
import "./chunk-GXW6K4YJ.js";
|
|
7
|
+
import "./chunk-QHJ6DQ2R.js";
|
|
8
|
+
import "./chunk-Z54ZSOBZ.js";
|
|
9
|
+
import "./chunk-724UL2TJ.js";
|
|
10
|
+
import "./chunk-QOZXJ4NA.js";
|
|
11
|
+
import "./chunk-VRZP76YM.js";
|
|
12
|
+
import "./chunk-C34ZXZ7O.js";
|
|
13
|
+
import "./chunk-PHDMFAKM.js";
|
|
14
|
+
import "./chunk-2BBLFX75.js";
|
|
15
|
+
import "./chunk-XVF2VVXP.js";
|
|
16
|
+
import "./chunk-ZANLILYD.js";
|
|
17
|
+
import "./chunk-2EECBNC5.js";
|
|
18
|
+
import "./chunk-JAU72XNY.js";
|
|
19
|
+
import "./chunk-XTMJ7XDT.js";
|
|
20
|
+
import "./chunk-JMYYOTQG.js";
|
|
21
|
+
import "./chunk-QQNQ7SJW.js";
|
|
22
|
+
import "./chunk-AOHZU2BM.js";
|
|
23
|
+
import "./chunk-LJDODBBZ.js";
|
|
24
|
+
import "./chunk-ABBOA7UD.js";
|
|
25
|
+
import "./chunk-N2H3ZPZY.js";
|
|
26
|
+
import "./chunk-NXL4FFQQ.js";
|
|
27
|
+
export {
|
|
28
|
+
importFactProvider,
|
|
29
|
+
importFactsApplyTo
|
|
30
|
+
};
|
|
@@ -2,20 +2,21 @@ import { createRequire as __pilensCreateRequire } from "node:module"; const requ
|
|
|
2
2
|
import {
|
|
3
3
|
computeImpactCascade,
|
|
4
4
|
computeTransitiveImpact
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-2B73ZPOK.js";
|
|
6
|
+
import "./chunk-GBPP5P7X.js";
|
|
7
|
+
import "./chunk-P7266HLM.js";
|
|
8
|
+
import "./chunk-C34ZXZ7O.js";
|
|
9
|
+
import "./chunk-2BBLFX75.js";
|
|
10
|
+
import "./chunk-XVF2VVXP.js";
|
|
11
11
|
import "./chunk-2EECBNC5.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-JAU72XNY.js";
|
|
13
|
+
import "./chunk-XTMJ7XDT.js";
|
|
14
|
+
import "./chunk-JMYYOTQG.js";
|
|
15
|
+
import "./chunk-QQNQ7SJW.js";
|
|
16
|
+
import "./chunk-AOHZU2BM.js";
|
|
16
17
|
import "./chunk-LJDODBBZ.js";
|
|
17
18
|
import "./chunk-ABBOA7UD.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-N2H3ZPZY.js";
|
|
19
20
|
import "./chunk-NXL4FFQQ.js";
|
|
20
21
|
export {
|
|
21
22
|
computeImpactCascade,
|
|
@@ -15,21 +15,22 @@ import {
|
|
|
15
15
|
getFilterStats,
|
|
16
16
|
isBuildArtifact,
|
|
17
17
|
sourceTwinCandidates
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-6C7JWPCP.js";
|
|
19
|
+
import "./chunk-5NGR67U5.js";
|
|
20
|
+
import "./chunk-C34ZXZ7O.js";
|
|
21
21
|
import "./chunk-QYF5S6P6.js";
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-PHDMFAKM.js";
|
|
23
|
+
import "./chunk-2BBLFX75.js";
|
|
24
|
+
import "./chunk-XVF2VVXP.js";
|
|
25
25
|
import "./chunk-2EECBNC5.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-JAU72XNY.js";
|
|
27
|
+
import "./chunk-XTMJ7XDT.js";
|
|
28
|
+
import "./chunk-JMYYOTQG.js";
|
|
29
|
+
import "./chunk-QQNQ7SJW.js";
|
|
30
|
+
import "./chunk-AOHZU2BM.js";
|
|
30
31
|
import "./chunk-LJDODBBZ.js";
|
|
31
32
|
import "./chunk-ABBOA7UD.js";
|
|
32
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-N2H3ZPZY.js";
|
|
33
34
|
import "./chunk-NXL4FFQQ.js";
|
|
34
35
|
export {
|
|
35
36
|
ALL_SCANNABLE_EXTENSIONS,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
recordDegradationOnce
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JAU72XNY.js";
|
|
5
5
|
|
|
6
6
|
// dist/clients/deadline-utils.js
|
|
7
7
|
function combineAbortSignals(...signals) {
|
|
@@ -128,8 +128,10 @@ var HOOK_WALL_BUDGET_MS = Object.freeze({
|
|
|
128
128
|
tool_result_read_only: 500,
|
|
129
129
|
/** The ONLY path the contract lets block the host, and only this long. */
|
|
130
130
|
tool_result_edit: 1e4,
|
|
131
|
-
/**
|
|
131
|
+
/** Replacement teardown is synchronous so its successor ordering is preserved (#3881). */
|
|
132
132
|
session_shutdown: 0,
|
|
133
|
+
/** The maintainer amendment permits quit-only sink draining before process exit (#2523). */
|
|
134
|
+
session_shutdown_quit: 500,
|
|
133
135
|
/** Synchronous message contribution; the host is blocked on the answer. */
|
|
134
136
|
context: 0,
|
|
135
137
|
/** Fork bookkeeping; the session is being replaced under it. */
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
_getWarmWordIndexCacheStateForTests,
|
|
4
|
+
_resetWarmWordIndexCacheForTests,
|
|
5
|
+
acquireWarmWordIndex,
|
|
6
|
+
analyzeFile,
|
|
7
|
+
summarizeWarningTiers
|
|
8
|
+
} from "./chunk-ODBNXWT4.js";
|
|
9
|
+
import "./chunk-OXXKQCSV.js";
|
|
10
|
+
import "./chunk-EJIUXPBX.js";
|
|
11
|
+
import "./chunk-FC4RP4I2.js";
|
|
12
|
+
import "./chunk-66SXUJCA.js";
|
|
13
|
+
import "./chunk-VCHXCQFG.js";
|
|
14
|
+
import "./chunk-IXXDFY73.js";
|
|
15
|
+
import "./chunk-MRXKYPCS.js";
|
|
16
|
+
import "./chunk-2CD5RS6M.js";
|
|
17
|
+
import "./chunk-UZ3TUTRV.js";
|
|
18
|
+
import "./chunk-EETY4LF7.js";
|
|
19
|
+
import "./chunk-GOYRYZ2R.js";
|
|
20
|
+
import "./chunk-RPLINGVB.js";
|
|
21
|
+
import "./chunk-XCJN5IJU.js";
|
|
22
|
+
import "./chunk-76MWC2K6.js";
|
|
23
|
+
import "./chunk-GXW6K4YJ.js";
|
|
24
|
+
import "./chunk-2B73ZPOK.js";
|
|
25
|
+
import "./chunk-XMSXXAHW.js";
|
|
26
|
+
import "./chunk-7DYBLXYA.js";
|
|
27
|
+
import "./chunk-PV6LR5P5.js";
|
|
28
|
+
import "./chunk-3MED75HT.js";
|
|
29
|
+
import "./chunk-CO2G5PHH.js";
|
|
30
|
+
import "./chunk-IBGIOBEE.js";
|
|
31
|
+
import "./chunk-PNQDPDRC.js";
|
|
32
|
+
import "./chunk-XIMYZ3JA.js";
|
|
33
|
+
import "./chunk-ESBQHFMJ.js";
|
|
34
|
+
import "./chunk-34WSVGEM.js";
|
|
35
|
+
import "./chunk-VWCXW2E7.js";
|
|
36
|
+
import "./chunk-ZXYDQ3TZ.js";
|
|
37
|
+
import "./chunk-5W3R6LFT.js";
|
|
38
|
+
import "./chunk-QHJ6DQ2R.js";
|
|
39
|
+
import "./chunk-Z54ZSOBZ.js";
|
|
40
|
+
import "./chunk-724UL2TJ.js";
|
|
41
|
+
import "./chunk-QOZXJ4NA.js";
|
|
42
|
+
import "./chunk-GBPP5P7X.js";
|
|
43
|
+
import "./chunk-P7266HLM.js";
|
|
44
|
+
import "./chunk-MQLUAEOC.js";
|
|
45
|
+
import "./chunk-52FUZI6K.js";
|
|
46
|
+
import "./chunk-SAEFPSB6.js";
|
|
47
|
+
import "./chunk-GAEGEPOC.js";
|
|
48
|
+
import "./chunk-Z3CCVDUB.js";
|
|
49
|
+
import "./chunk-L3BLXZG7.js";
|
|
50
|
+
import "./chunk-2BEMIWEW.js";
|
|
51
|
+
import "./chunk-66VMUL7Q.js";
|
|
52
|
+
import "./chunk-Q7DUK4LX.js";
|
|
53
|
+
import "./chunk-AW7R2GWG.js";
|
|
54
|
+
import "./chunk-RWWYJ623.js";
|
|
55
|
+
import "./chunk-VRZP76YM.js";
|
|
56
|
+
import "./chunk-QOBUHWHX.js";
|
|
57
|
+
import "./chunk-QILIYSJF.js";
|
|
58
|
+
import "./chunk-6C7JWPCP.js";
|
|
59
|
+
import "./chunk-5NGR67U5.js";
|
|
60
|
+
import "./chunk-C34ZXZ7O.js";
|
|
61
|
+
import "./chunk-BW5KFIQC.js";
|
|
62
|
+
import "./chunk-QYF5S6P6.js";
|
|
63
|
+
import "./chunk-PHDMFAKM.js";
|
|
64
|
+
import "./chunk-2BBLFX75.js";
|
|
65
|
+
import "./chunk-XVF2VVXP.js";
|
|
66
|
+
import "./chunk-ZANLILYD.js";
|
|
67
|
+
import "./chunk-2EECBNC5.js";
|
|
68
|
+
import "./chunk-JAU72XNY.js";
|
|
69
|
+
import "./chunk-XTMJ7XDT.js";
|
|
70
|
+
import "./chunk-JMYYOTQG.js";
|
|
71
|
+
import "./chunk-QQNQ7SJW.js";
|
|
72
|
+
import "./chunk-AOHZU2BM.js";
|
|
73
|
+
import "./chunk-LJDODBBZ.js";
|
|
74
|
+
import "./chunk-CHOW74WE.js";
|
|
75
|
+
import "./chunk-ABBOA7UD.js";
|
|
76
|
+
import "./chunk-N2H3ZPZY.js";
|
|
77
|
+
import "./chunk-NXL4FFQQ.js";
|
|
78
|
+
export {
|
|
79
|
+
_getWarmWordIndexCacheStateForTests,
|
|
80
|
+
_resetWarmWordIndexCacheForTests,
|
|
81
|
+
acquireWarmWordIndex,
|
|
82
|
+
analyzeFile,
|
|
83
|
+
summarizeWarningTiers
|
|
84
|
+
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
isExcludedDirName
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-C34ZXZ7O.js";
|
|
5
5
|
import {
|
|
6
6
|
createDeadline,
|
|
7
7
|
yieldIfOverBudget
|
|
8
8
|
} from "./chunk-QYF5S6P6.js";
|
|
9
9
|
import {
|
|
10
10
|
isGeneratedArtifactDirectoryName
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-2BBLFX75.js";
|
|
12
12
|
|
|
13
13
|
// dist/clients/source-walker.js
|
|
14
14
|
import * as fs from "node:fs";
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
getScratchTreeGlobPatterns
|
|
4
|
-
|
|
3
|
+
getScratchTreeGlobPatterns,
|
|
4
|
+
nestedWorktreeOffsets
|
|
5
|
+
} from "./chunk-VCHXCQFG.js";
|
|
5
6
|
import {
|
|
6
7
|
SecurityScanClient
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-IXXDFY73.js";
|
|
8
9
|
import {
|
|
9
10
|
safeSpawnAsync
|
|
10
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-C34ZXZ7O.js";
|
|
11
12
|
import {
|
|
12
13
|
loadPiLensProjectConfig
|
|
13
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2BBLFX75.js";
|
|
15
|
+
import {
|
|
16
|
+
incrementDegradationCount
|
|
17
|
+
} from "./chunk-JAU72XNY.js";
|
|
18
|
+
import {
|
|
19
|
+
toPosix
|
|
20
|
+
} from "./chunk-N2H3ZPZY.js";
|
|
14
21
|
|
|
15
22
|
// dist/clients/trivy-client.js
|
|
16
23
|
import * as fs from "node:fs";
|
|
@@ -96,6 +103,34 @@ function resolveSeverityFloor(cwd) {
|
|
|
96
103
|
const floor = Math.min(requested ?? SEVERITY_RANK.HIGH, SEVERITY_RANK.HIGH);
|
|
97
104
|
return ["LOW", "MEDIUM", "HIGH", "CRITICAL"].filter((s) => SEVERITY_RANK[s] >= floor);
|
|
98
105
|
}
|
|
106
|
+
function worktreeSkipDirs(cwd, separator = path.sep, maxArgumentChars = separator === "\\" ? 3e4 : Number.POSITIVE_INFINITY) {
|
|
107
|
+
const unsafe = separator === "\\" ? /[,"*?[\]{}]/ : /[,"*?[\]{}\\]/;
|
|
108
|
+
const skips = [];
|
|
109
|
+
let argumentChars = 0;
|
|
110
|
+
for (const offset of nestedWorktreeOffsets(cwd)) {
|
|
111
|
+
if (unsafe.test(offset)) {
|
|
112
|
+
incrementDegradationCount({
|
|
113
|
+
kind: "scan-worktree-exclusion-skipped",
|
|
114
|
+
subject: "trivy",
|
|
115
|
+
reason: `csv-or-glob-char-in-path: ${offset} not skipped under ${cwd}`
|
|
116
|
+
});
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const value = toPosix(offset);
|
|
120
|
+
const addedChars = "--skip-dirs".length + value.length + 2;
|
|
121
|
+
if (argumentChars + addedChars > maxArgumentChars) {
|
|
122
|
+
incrementDegradationCount({
|
|
123
|
+
kind: "scan-worktree-exclusion-skipped",
|
|
124
|
+
subject: "trivy",
|
|
125
|
+
reason: `windows-command-line-cap: ${offset} not skipped under ${cwd}`
|
|
126
|
+
});
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
skips.push(value);
|
|
130
|
+
argumentChars += addedChars;
|
|
131
|
+
}
|
|
132
|
+
return skips;
|
|
133
|
+
}
|
|
99
134
|
var TrivyClient = class extends SecurityScanClient {
|
|
100
135
|
constructor(verbose = false) {
|
|
101
136
|
super("trivy", verbose);
|
|
@@ -158,10 +193,10 @@ var TrivyClient = class extends SecurityScanClient {
|
|
|
158
193
|
reportPath,
|
|
159
194
|
"--quiet",
|
|
160
195
|
"--no-progress",
|
|
161
|
-
...
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
]),
|
|
196
|
+
...[
|
|
197
|
+
...getScratchTreeGlobPatterns(),
|
|
198
|
+
...worktreeSkipDirs(cwd)
|
|
199
|
+
].flatMap((glob) => ["--skip-dirs", glob]),
|
|
165
200
|
cwd
|
|
166
201
|
], { cwd, timeout: SCAN_TIMEOUT_MS });
|
|
167
202
|
if (result.error) {
|
|
@@ -342,6 +377,7 @@ export {
|
|
|
342
377
|
isTrivyEnabled,
|
|
343
378
|
shouldScanTrivy,
|
|
344
379
|
resolveSeverityFloor,
|
|
380
|
+
worktreeSkipDirs,
|
|
345
381
|
TrivyClient,
|
|
346
382
|
parseTrivyReport,
|
|
347
383
|
parseTrivySecrets,
|