@mirnoorata/codexa 0.2.0 → 0.2.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/README.md +42 -3
- package/dist/cache-lock.js +72 -12
- package/dist/cache-lock.js.map +1 -1
- package/dist/cli.js +7 -2
- package/dist/cli.js.map +1 -1
- package/dist/graph.js +4 -2
- package/dist/graph.js.map +1 -1
- package/dist/init.d.ts +2 -0
- package/dist/init.js +28 -23
- package/dist/init.js.map +1 -1
- package/dist/mcp.js +21 -0
- package/dist/mcp.js.map +1 -1
- package/dist/query/verification/masking.d.ts +8 -0
- package/dist/query/verification/masking.js +82 -0
- package/dist/query/verification/masking.js.map +1 -0
- package/dist/query/verification/script-credit.d.ts +14 -0
- package/dist/query/verification/script-credit.js +232 -0
- package/dist/query/verification/script-credit.js.map +1 -0
- package/dist/query/verification/shell.d.ts +5 -1
- package/dist/query/verification/shell.js +288 -9
- package/dist/query/verification/shell.js.map +1 -1
- package/dist/query/verification.js +187 -21
- package/dist/query/verification.js.map +1 -1
- package/dist/query/workflow.js +2 -2
- package/dist/query/workflow.js.map +1 -1
- package/dist/repo-files.js +74 -14
- package/dist/repo-files.js.map +1 -1
- package/dist/resolver.js +20 -2
- package/dist/resolver.js.map +1 -1
- package/dist/retrieval.js +5 -5
- package/dist/retrieval.js.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.js +7 -0
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// Package-script credit gating: what can a script body vouch for? Two evidence
|
|
2
|
+
// channels with distinct falsifiers — NAME trust (a script called "typecheck"
|
|
3
|
+
// is believed to typecheck) fails when the body's exit cannot reflect the named
|
|
4
|
+
// check; TOOL evidence (a runner visible in command position of the
|
|
5
|
+
// substitution-stripped body) fails when the token is not actually an
|
|
6
|
+
// invocation. Both channels resolve commands identically (resolveToolInvocation)
|
|
7
|
+
// so they cannot drift — drift between them caused real laundering bugs.
|
|
8
|
+
import { commandSubstitutionContents, shellWords, shellWrappedCommand, shellWrapperBodyIsAmbiguous, splitShellSequence, stripCommandSubstitutions, stripLeadingEnvironment, stripPackageManagerFlags, stripShellControlWords } from "./shell.js";
|
|
9
|
+
import { EXIT_CONSUMING_OPENERS, segmentMasksExit, stripFlowPrefix } from "./masking.js";
|
|
10
|
+
// Prefixes that run their argument as the command without changing its exit
|
|
11
|
+
// semantics — `command echo`, `exec echo`, `nohup echo`, `timeout 5 echo` all
|
|
12
|
+
// still run echo. A leading backslash (`\echo`) only suppresses alias lookup,
|
|
13
|
+
// and brace-group/subshell openers (`{ echo ...`, `(echo ...`) propagate the
|
|
14
|
+
// inner command's behavior.
|
|
15
|
+
const TRANSPARENT_EXEC_PREFIXES = new Set(["command", "builtin", "busybox", "exec", "nohup", "nice", "time", "sudo", "doas", "stdbuf", "timeout", "env"]);
|
|
16
|
+
// Resolve the effective command word through the transparent prefixes above,
|
|
17
|
+
// skipping their flags and duration arguments, group openers, and backslashes.
|
|
18
|
+
function resolveCommandIndex(words) {
|
|
19
|
+
let index = 0;
|
|
20
|
+
let sawPrefix = false;
|
|
21
|
+
while (index < words.length) {
|
|
22
|
+
const word = words[index].replace(/^[({\\]+/u, "");
|
|
23
|
+
if (word === "" || TRANSPARENT_EXEC_PREFIXES.has(word)) {
|
|
24
|
+
sawPrefix = true;
|
|
25
|
+
index += 1;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (sawPrefix && (word.startsWith("-") || /^\d+(?:\.\d+)?[smhd]?$/u.test(word))) {
|
|
29
|
+
index += 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
return { word, index };
|
|
33
|
+
}
|
|
34
|
+
return { word: undefined, index };
|
|
35
|
+
}
|
|
36
|
+
// Launchers that expose the next word as the real tool (`npx tsc`).
|
|
37
|
+
const TOOL_LAUNCHERS = new Set(["npx", "bunx"]);
|
|
38
|
+
const PACKAGE_MANAGER_EXEC_WORDS = new Set(["exec", "x", "dlx"]);
|
|
39
|
+
// Launcher flags that take a value (`npx -p typescript tsc`).
|
|
40
|
+
const LAUNCHER_VALUE_FLAGS = new Set(["-p", "--package", "-c", "--call"]);
|
|
41
|
+
function skipLauncherFlags(args) {
|
|
42
|
+
let index = 0;
|
|
43
|
+
while (index < args.length) {
|
|
44
|
+
const arg = args[index];
|
|
45
|
+
if (arg === "--") {
|
|
46
|
+
index += 1;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
if (LAUNCHER_VALUE_FLAGS.has(arg)) {
|
|
50
|
+
index += 2;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (arg.startsWith("-")) {
|
|
54
|
+
index += 1;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
return args.slice(index);
|
|
60
|
+
}
|
|
61
|
+
function commandBasename(word) {
|
|
62
|
+
return (word.replace(/^[({\\]+/u, "").replace(/[)}]+$/u, "").split("/").pop() ?? "").toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
// The single command-resolution path for BOTH credit channels: transparent
|
|
65
|
+
// prefixes, then npx/bunx and pm exec/x/dlx launchers (with their flags), down
|
|
66
|
+
// to the tool that actually runs. The name-veto and the evidence extractor
|
|
67
|
+
// must agree on what a command is — they once didn't, and the drift laundered
|
|
68
|
+
// `npx -y tsc --version` into a credited typecheck.
|
|
69
|
+
function resolveToolInvocation(words) {
|
|
70
|
+
const { index } = resolveCommandIndex(words);
|
|
71
|
+
let command = commandBasename(words[index] ?? "");
|
|
72
|
+
let args = words.slice(index + 1);
|
|
73
|
+
if (TOOL_LAUNCHERS.has(command) || ((command === "npm" || command === "pnpm" || command === "yarn") && PACKAGE_MANAGER_EXEC_WORDS.has(args[0] ?? ""))) {
|
|
74
|
+
const rest = skipLauncherFlags(TOOL_LAUNCHERS.has(command) ? args : args.slice(1));
|
|
75
|
+
command = commandBasename(rest[0] ?? "");
|
|
76
|
+
args = rest.slice(1);
|
|
77
|
+
}
|
|
78
|
+
return { command, args };
|
|
79
|
+
}
|
|
80
|
+
// True when a script body's exit does NOT faithfully reflect its named check, so
|
|
81
|
+
// the name-based credit (script "build" => build coverage) would launder a
|
|
82
|
+
// masked failure into a pass. Unsafe when a later segment masks an earlier
|
|
83
|
+
// runner, a compound opener consumes the runner's exit, a `!` negation inverts
|
|
84
|
+
// it, or a shell wrapper's recursively-unwrapped body is itself unsafe or could
|
|
85
|
+
// not be cleanly tokenized. A clean wrapper such as `sh -c "vite build"` — or a
|
|
86
|
+
// runner that merely takes a substitution as an argument (`vite build --define
|
|
87
|
+
// X=$(git rev-parse HEAD)`) — stays safe.
|
|
88
|
+
export function scriptNameCreditUnsafe(command) {
|
|
89
|
+
const segments = splitShellSequence(command);
|
|
90
|
+
if (segments.slice(1).some(segmentMasksExit)) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
return segments.some((segment) => {
|
|
94
|
+
const words = stripLeadingEnvironment(shellWords(segment.text));
|
|
95
|
+
// Resolve through group openers so `( if tsc; then :; fi )` is still seen
|
|
96
|
+
// as an exit-consuming compound.
|
|
97
|
+
const first = stripFlowPrefix(words)[0];
|
|
98
|
+
if (first !== undefined && (first.startsWith("!") || EXIT_CONSUMING_OPENERS.has(first) || first.startsWith("$(") || first.startsWith("`"))) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
const wrapped = shellWrappedCommand(words);
|
|
102
|
+
return wrapped !== undefined && (shellWrapperBodyIsAmbiguous(words) || scriptNameCreditUnsafe(wrapped));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Commands a script name could plausibly be vouching for. A carrier-discarded
|
|
106
|
+
// substitution containing one of these means the named check itself was run
|
|
107
|
+
// and its exit thrown away; a substitution holding only metadata commands
|
|
108
|
+
// (`date`, `git rev-parse`) does not poison the name. Any package-manager
|
|
109
|
+
// invocation counts — `yarn build`, `pnpm run lint`, `npx tsc` — since those
|
|
110
|
+
// are exactly how named checks are launched.
|
|
111
|
+
const DISCARDED_CHECK_PATTERN = /\b(tsc|vitest|jest|pytest|eslint|biome|verify-source-hygiene|verify-public-hygiene)\b|\b(vite|next)\s+build\b|\b(?:npm|pnpm|yarn|npx|bun|bunx)\s+\S|\bnode\s+--test\b/u;
|
|
112
|
+
// A substitution carried by ANY command is exit-discarded — `echo $(tsc)`,
|
|
113
|
+
// `export X=$(tsc)`, and `git commit -m "$(tsc)"` all throw the inner exit
|
|
114
|
+
// away. The only propagating form is a bare assignment (`X=$(tsc)` — the
|
|
115
|
+
// assignment's exit IS the substitution's), which stripLeadingEnvironment
|
|
116
|
+
// consumes entirely, leaving no command word.
|
|
117
|
+
function commandDiscardedSubstitution(segment) {
|
|
118
|
+
const first = resolveCommandIndex(stripLeadingEnvironment(shellWords(segment.text))).word;
|
|
119
|
+
return first !== undefined && stripCommandSubstitutions(segment.text) !== segment.text;
|
|
120
|
+
}
|
|
121
|
+
// True when the script NAME alone cannot be trusted as evidence: somewhere in
|
|
122
|
+
// the body a command discards the exit of a substitution that LOOKS like the
|
|
123
|
+
// named check (`echo $(tsc)`, `export X=$(tsc) && echo passed`, `git commit -m
|
|
124
|
+
// "$(tsc)"`, or the same inside a wrapper). The discarded check never
|
|
125
|
+
// contributes an exit-faithful result no matter what ends the chain, so the
|
|
126
|
+
// name proves nothing about it. A substitution holding only metadata
|
|
127
|
+
// (`node build.mjs && echo $(date)`) does not poison the name, and tool
|
|
128
|
+
// evidence on the substitution-stripped body is unaffected either way — a
|
|
129
|
+
// runner visible outside substitutions keeps its own credit.
|
|
130
|
+
export function scriptNameTrustUnsafe(command) {
|
|
131
|
+
return splitShellSequence(command).some((segment) => {
|
|
132
|
+
if (commandDiscardedSubstitution(segment) && DISCARDED_CHECK_PATTERN.test(commandSubstitutionContents(segment.text))) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
const words = stripLeadingEnvironment(shellWords(segment.text));
|
|
136
|
+
const wrapped = shellWrappedCommand(words);
|
|
137
|
+
return wrapped !== undefined && (shellWrapperBodyIsAmbiguous(words) || scriptNameTrustUnsafe(wrapped));
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export const NON_COMPILING_TSC_FLAG = /^(--help|-h|--version|-v|--init|--all|--showConfig|--listFilesOnly)$/u;
|
|
141
|
+
// True when a tsc invocation only prints info and does not typecheck, so it must
|
|
142
|
+
// not satisfy a TypeScript verification check.
|
|
143
|
+
export function isNonCompilingTscCommand(words) {
|
|
144
|
+
const { command, args } = resolveToolInvocation(stripPackageManagerFlags(words));
|
|
145
|
+
if (command !== "tsc") {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return args.some((arg) => NON_COMPILING_TSC_FLAG.test(arg.replace(/[)}]+$/u, "")));
|
|
149
|
+
}
|
|
150
|
+
// True when a package-script body that would otherwise count as a TypeScript
|
|
151
|
+
// check is actually a non-compiling tsc invocation (e.g. "tsc --help") —
|
|
152
|
+
// including one hidden inside a shell wrapper (`sh -c 'tsc --help'`).
|
|
153
|
+
export function scriptBodyIsNonCompilingTsc(scriptCommand) {
|
|
154
|
+
return splitShellSequence(scriptCommand).some((segment) => {
|
|
155
|
+
const words = stripLeadingEnvironment(shellWords(segment.text));
|
|
156
|
+
const wrapped = shellWrappedCommand(words);
|
|
157
|
+
if (wrapped !== undefined) {
|
|
158
|
+
return !shellWrapperBodyIsAmbiguous(words) && scriptBodyIsNonCompilingTsc(wrapped);
|
|
159
|
+
}
|
|
160
|
+
return isNonCompilingTscCommand(words);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// Tool evidence from command-position tokens of the substitution-stripped body
|
|
164
|
+
// — never a substring scan, so paths (`scripts/run-tsc.mjs`), env-var names
|
|
165
|
+
// (`TSC=1`), and prose cannot masquerade as invocations, while
|
|
166
|
+
// `./node_modules/.bin/tsc` still counts via its basename.
|
|
167
|
+
export function scriptToolEvidence(strippedCommand) {
|
|
168
|
+
const evidence = { tscCompile: false, tscNoEmit: false, bundlerBuild: false, lint: false, privacy: false, audit: false };
|
|
169
|
+
collectToolEvidence(strippedCommand, evidence);
|
|
170
|
+
return evidence;
|
|
171
|
+
}
|
|
172
|
+
function collectToolEvidence(strippedCommand, evidence) {
|
|
173
|
+
for (const segment of splitShellSequence(strippedCommand)) {
|
|
174
|
+
const words = stripPackageManagerFlags(stripShellControlWords(stripLeadingEnvironment(shellWords(segment.text))));
|
|
175
|
+
const wrapped = shellWrappedCommand(words);
|
|
176
|
+
if (wrapped !== undefined) {
|
|
177
|
+
if (!shellWrapperBodyIsAmbiguous(words)) {
|
|
178
|
+
collectToolEvidence(wrapped, evidence);
|
|
179
|
+
}
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const { command, args } = resolveToolInvocation(words);
|
|
183
|
+
recordToolEvidence(command, args, evidence);
|
|
184
|
+
if ((command === "node" || command === "bash" || command === "sh") && !invocationIsInformational(args)) {
|
|
185
|
+
for (const arg of args) {
|
|
186
|
+
recordVerifyScriptEvidence(commandBasename(arg), evidence);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// True for invocations that only print info (`--help`, `--version`) and so
|
|
192
|
+
// run nothing they could vouch for. Args are normalized for glued group
|
|
193
|
+
// closers (`(tsc --noEmit)` leaves `--noEmit)`).
|
|
194
|
+
function invocationIsInformational(args) {
|
|
195
|
+
return args.some((arg) => {
|
|
196
|
+
const flag = arg.replace(/[)}]+$/u, "");
|
|
197
|
+
return NON_COMPILING_TSC_FLAG.test(flag) || flag === "help";
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function recordToolEvidence(command, args, evidence) {
|
|
201
|
+
if (invocationIsInformational(args)) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const flags = args.map((arg) => arg.replace(/[)}]+$/u, ""));
|
|
205
|
+
if (command === "tsc") {
|
|
206
|
+
if (flags.some((flag) => flag === "--noEmit" || flag === "--noemit")) {
|
|
207
|
+
evidence.tscNoEmit = true;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
evidence.tscCompile = true;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if ((command === "vite" || command === "next") && flags[0] === "build") {
|
|
214
|
+
evidence.bundlerBuild = true;
|
|
215
|
+
}
|
|
216
|
+
if (command === "eslint" || command === "biome") {
|
|
217
|
+
evidence.lint = true;
|
|
218
|
+
}
|
|
219
|
+
if ((command === "npm" || command === "pnpm") && flags[0] === "audit") {
|
|
220
|
+
evidence.audit = true;
|
|
221
|
+
}
|
|
222
|
+
recordVerifyScriptEvidence(command, evidence);
|
|
223
|
+
}
|
|
224
|
+
function recordVerifyScriptEvidence(basename, evidence) {
|
|
225
|
+
if (basename.startsWith("verify-source-hygiene")) {
|
|
226
|
+
evidence.lint = true;
|
|
227
|
+
}
|
|
228
|
+
if (basename.startsWith("verify-public-hygiene")) {
|
|
229
|
+
evidence.privacy = true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=script-credit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-credit.js","sourceRoot":"","sources":["../../../src/query/verification/script-credit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
export type ShellControlOperator = "start" | "&&" | "||" | "|" | ";";
|
|
1
|
+
export type ShellControlOperator = "start" | "&&" | "||" | "|" | ";" | "&";
|
|
2
2
|
export type ShellTruthiness = "true" | "false" | "unknown";
|
|
3
3
|
export declare function splitShellSequence(command: string): Array<{
|
|
4
4
|
text: string;
|
|
5
5
|
operator: ShellControlOperator;
|
|
6
6
|
}>;
|
|
7
|
+
export declare function stripCommandSubstitutions(command: string): string;
|
|
8
|
+
export declare function commandSubstitutionContents(command: string): string;
|
|
9
|
+
export declare function hasBalancedQuotes(command: string): boolean;
|
|
7
10
|
export declare function segmentTruthiness(segment: string): ShellTruthiness;
|
|
8
11
|
export declare function shellWords(value: string): string[];
|
|
9
12
|
export declare function shellQuote(value: string): string;
|
|
10
13
|
export declare function stripQuotes(value: string): string;
|
|
11
14
|
export declare function isNonRunningCommand(words: string[]): boolean;
|
|
12
15
|
export declare function shellWrappedCommand(words: string[]): string | undefined;
|
|
16
|
+
export declare function shellWrapperBodyIsAmbiguous(words: string[]): boolean;
|
|
13
17
|
export declare function hasNonRunningJavaScriptTestArg(args: string[]): boolean;
|
|
14
18
|
export declare function hasNonRunningPythonTestArg(args: string[]): boolean;
|
|
15
19
|
export declare function hasNonRunningCommandArg(args: string[]): boolean;
|
|
@@ -3,6 +3,7 @@ export function splitShellSequence(command) {
|
|
|
3
3
|
let quote;
|
|
4
4
|
let current = "";
|
|
5
5
|
let operator = "start";
|
|
6
|
+
command = stripCommentsAndHeredocs(command);
|
|
6
7
|
for (let index = 0; index < command.length; index += 1) {
|
|
7
8
|
const char = command[index];
|
|
8
9
|
const next = command[index + 1];
|
|
@@ -15,24 +16,38 @@ export function splitShellSequence(command) {
|
|
|
15
16
|
if (current.trim()) {
|
|
16
17
|
segments.push({ text: current.trim(), operator });
|
|
17
18
|
}
|
|
19
|
+
else if (operator === "&") {
|
|
20
|
+
// A pending background marker must survive a following separator
|
|
21
|
+
// (`cmd &\n`): flush it before the operator is overwritten, or the
|
|
22
|
+
// backgrounded runner would lose its masking.
|
|
23
|
+
segments.push({ text: "", operator });
|
|
24
|
+
}
|
|
18
25
|
operator = char === "&" ? "&&" : "||";
|
|
19
26
|
current = "";
|
|
20
27
|
index += 1;
|
|
21
28
|
continue;
|
|
22
29
|
}
|
|
23
|
-
|
|
30
|
+
// A bare `&` backgrounds the preceding command, decoupling its exit code, in
|
|
31
|
+
// every position EXCEPT a redirection — like a real shell, `cmd&next` and
|
|
32
|
+
// `cmd&` background `cmd` regardless of surrounding whitespace. It is not a
|
|
33
|
+
// background only for `2>&1`/`>&2` (prev is `<`/`>`/`&`), `&>file` (next is
|
|
34
|
+
// `>`), the `&&` form (handled above), or an escaped `\&` (prev is `\`).
|
|
35
|
+
// Unquoted newlines terminate a command just like `;`.
|
|
36
|
+
const prev = command[index - 1];
|
|
37
|
+
const backgroundAmp = char === "&" && prev !== undefined && !/[<>&\\]/u.test(prev) && next !== ">";
|
|
38
|
+
if (!quote && (char === "|" || char === ";" || char === "\n" || char === "\r" || backgroundAmp)) {
|
|
24
39
|
if (current.trim()) {
|
|
25
40
|
segments.push({ text: current.trim(), operator });
|
|
26
41
|
}
|
|
27
|
-
operator
|
|
28
|
-
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
if (!quote && char === ";") {
|
|
32
|
-
if (current.trim()) {
|
|
33
|
-
segments.push({ text: current.trim(), operator });
|
|
42
|
+
else if (operator === "&" && char !== "&") {
|
|
43
|
+
segments.push({ text: "", operator });
|
|
34
44
|
}
|
|
35
|
-
operator
|
|
45
|
+
else if ((char === "\n" || char === "\r") && (operator === "&&" || operator === "||" || operator === "|")) {
|
|
46
|
+
// Line continuation: `cmd &&\n next` — the newline does not terminate
|
|
47
|
+
// the command; the pending operator still binds the next segment.
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
operator = char === "|" ? "|" : char === "&" ? "&" : ";";
|
|
36
51
|
current = "";
|
|
37
52
|
continue;
|
|
38
53
|
}
|
|
@@ -41,8 +56,253 @@ export function splitShellSequence(command) {
|
|
|
41
56
|
if (current.trim()) {
|
|
42
57
|
segments.push({ text: current.trim(), operator });
|
|
43
58
|
}
|
|
59
|
+
else if (operator === "&") {
|
|
60
|
+
// Trailing `&` (e.g. `npm test &`) — preserve the background marker so
|
|
61
|
+
// callers can see the preceding runner's exit was decoupled.
|
|
62
|
+
segments.push({ text: "", operator });
|
|
63
|
+
}
|
|
44
64
|
return segments;
|
|
45
65
|
}
|
|
66
|
+
// Strip what a tokenizer must not mistake for commands: unquoted `#` comments
|
|
67
|
+
// (to end of line) and heredoc BODIES (`cat <<EOF ... EOF`). Both are removed
|
|
68
|
+
// in a single source-order pass so a `<<WORD` hidden inside a comment is never
|
|
69
|
+
// read as a real marker, and a comment can never absorb a pending operator.
|
|
70
|
+
// Quoting and `$(( ))` arithmetic are tracked so `2>&1`-style content, `||#`
|
|
71
|
+
// glued comments, `${#var}`, and `$((1 << 2))` are handled correctly. Dropped
|
|
72
|
+
// text only ever reduces credit (fail closed). Newlines are preserved as
|
|
73
|
+
// separators/continuations for the caller.
|
|
74
|
+
function stripCommentsAndHeredocs(command) {
|
|
75
|
+
if (!command.includes("#") && !command.includes("<<")) {
|
|
76
|
+
return command;
|
|
77
|
+
}
|
|
78
|
+
let out = "";
|
|
79
|
+
let quote;
|
|
80
|
+
let pos = 0;
|
|
81
|
+
while (pos < command.length) {
|
|
82
|
+
const newline = command.indexOf("\n", pos);
|
|
83
|
+
const hasNewline = newline !== -1;
|
|
84
|
+
const lineEnd = hasNewline ? newline : command.length;
|
|
85
|
+
const scanned = scanShellLine(command.slice(pos, lineEnd), quote);
|
|
86
|
+
quote = scanned.quote;
|
|
87
|
+
out += scanned.kept;
|
|
88
|
+
if (hasNewline) {
|
|
89
|
+
out += "\n";
|
|
90
|
+
}
|
|
91
|
+
pos = lineEnd + (hasNewline ? 1 : 0);
|
|
92
|
+
// Drop the body of each heredoc opened on this line, in order (`cmd <<A <<B`
|
|
93
|
+
// reads body A then body B). The delimiter line ends the body — leading tabs
|
|
94
|
+
// are stripped only for the `<<-` form, matching bash.
|
|
95
|
+
for (const marker of scanned.markers) {
|
|
96
|
+
while (pos < command.length) {
|
|
97
|
+
const bodyEnd = command.indexOf("\n", pos);
|
|
98
|
+
const hasBody = bodyEnd !== -1;
|
|
99
|
+
const bodyLine = command.slice(pos, hasBody ? bodyEnd : command.length).replace(/\r$/u, "");
|
|
100
|
+
pos = (hasBody ? bodyEnd : command.length) + (hasBody ? 1 : 0);
|
|
101
|
+
if ((marker.dash ? bodyLine.replace(/^\t+/u, "") : bodyLine) === marker.delimiter) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (!hasBody) {
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
function scanShellLine(line, quoteIn) {
|
|
113
|
+
let kept = "";
|
|
114
|
+
let quote = quoteIn;
|
|
115
|
+
let arithParens = 0;
|
|
116
|
+
const markers = [];
|
|
117
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
118
|
+
const char = line[i];
|
|
119
|
+
if (quote) {
|
|
120
|
+
kept += char;
|
|
121
|
+
if (char === quote && line[i - 1] !== "\\") {
|
|
122
|
+
quote = undefined;
|
|
123
|
+
}
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (char === "'" || char === '"') {
|
|
127
|
+
quote = char;
|
|
128
|
+
kept += char;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// A `#` only starts a comment at a word boundary (start, whitespace, or an
|
|
132
|
+
// operator) — not inside `file#1` or `${X#pat}`.
|
|
133
|
+
if (char === "#" && (i === 0 || /[\s;|&]/u.test(line[i - 1]))) {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
if (char === "$" && line[i + 1] === "(" && line[i + 2] === "(") {
|
|
137
|
+
arithParens += 2;
|
|
138
|
+
kept += "$((";
|
|
139
|
+
i += 2;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (arithParens > 0) {
|
|
143
|
+
if (char === "(") {
|
|
144
|
+
arithParens += 1;
|
|
145
|
+
}
|
|
146
|
+
else if (char === ")") {
|
|
147
|
+
arithParens -= 1;
|
|
148
|
+
}
|
|
149
|
+
kept += char;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (char === "<" && line[i + 1] === "<") {
|
|
153
|
+
if (line[i + 2] === "<") {
|
|
154
|
+
kept += "<<<";
|
|
155
|
+
i += 2;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
// Match the FULL bash delimiter word (any run of non-blank shell-word
|
|
159
|
+
// chars: `EOF`, `EOF-1`, `EOF.txt`, digit-led `1-2`), so the body
|
|
160
|
+
// terminates only on an exact full-word line — capturing just a `\w+`
|
|
161
|
+
// prefix would end the body early and re-expose its data as commands.
|
|
162
|
+
// Arithmetic `$((1 << 2))` is already consumed above, so this cannot
|
|
163
|
+
// misfire on a shift.
|
|
164
|
+
const marker = /^<<(-?)[ \t]*(['"]?)([^\s'"`<>|&;()]+)\2/u.exec(line.slice(i));
|
|
165
|
+
if (marker) {
|
|
166
|
+
markers.push({ delimiter: marker[3], dash: marker[1] === "-" });
|
|
167
|
+
kept += marker[0];
|
|
168
|
+
i += marker[0].length - 1;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
kept += char;
|
|
173
|
+
}
|
|
174
|
+
return { kept, quote, markers };
|
|
175
|
+
}
|
|
176
|
+
// Remove `$(...)` (depth-tracked) and backtick command-substitution spans that
|
|
177
|
+
// are not single-quoted literals. A command inside a substitution never directly
|
|
178
|
+
// decides the script's exit, so name-credit matching must not see it; the text
|
|
179
|
+
// outside substitutions is returned intact. Follows shell quoting: `'` is a
|
|
180
|
+
// literal inside double quotes (an apostrophe must not flip quote state), `"`
|
|
181
|
+
// is a literal inside single quotes, substitutions still expand inside double
|
|
182
|
+
// quotes, and quotes inside a substitution shield its parens from depth
|
|
183
|
+
// counting. Unbalanced spans strip to the end (fail closed: less text to match
|
|
184
|
+
// means less credit).
|
|
185
|
+
export function stripCommandSubstitutions(command) {
|
|
186
|
+
return scanCommandSubstitutions(command).outside;
|
|
187
|
+
}
|
|
188
|
+
// The text INSIDE `$(...)`/backtick substitutions — what a script discards when
|
|
189
|
+
// a non-running carrier wraps them. Callers use it to ask whether the discarded
|
|
190
|
+
// command looks like a named check.
|
|
191
|
+
export function commandSubstitutionContents(command) {
|
|
192
|
+
return scanCommandSubstitutions(command).inside;
|
|
193
|
+
}
|
|
194
|
+
// Each removed substitution leaves a sentinel token in the outside text so
|
|
195
|
+
// stripping can never glue two surrounding words into a phrase that was not in
|
|
196
|
+
// the command (`vite $(X) build` must not fabricate a `vite build` match).
|
|
197
|
+
const SUBSTITUTION_SENTINEL = "__codexa_substitution__";
|
|
198
|
+
function scanCommandSubstitutions(command) {
|
|
199
|
+
let outside = "";
|
|
200
|
+
let inside = "";
|
|
201
|
+
let quote;
|
|
202
|
+
let outerQuote;
|
|
203
|
+
let backtick = false;
|
|
204
|
+
let depth = 0;
|
|
205
|
+
for (let index = 0; index < command.length; index += 1) {
|
|
206
|
+
const char = command[index];
|
|
207
|
+
if (char === "\\" && quote !== "'") {
|
|
208
|
+
if (depth === 0 && !backtick) {
|
|
209
|
+
outside += char + (command[index + 1] ?? "");
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
inside += char + (command[index + 1] ?? "");
|
|
213
|
+
}
|
|
214
|
+
index += 1;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if ((char === "'" || char === '"') && (quote === undefined || quote === char)) {
|
|
218
|
+
quote = quote === char ? undefined : char;
|
|
219
|
+
if (depth === 0 && !backtick) {
|
|
220
|
+
outside += char;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
inside += char;
|
|
224
|
+
}
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (quote === "'") {
|
|
228
|
+
if (depth === 0 && !backtick) {
|
|
229
|
+
outside += char;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
inside += char;
|
|
233
|
+
}
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (char === "`") {
|
|
237
|
+
backtick = !backtick;
|
|
238
|
+
if (!backtick) {
|
|
239
|
+
outside += SUBSTITUTION_SENTINEL;
|
|
240
|
+
inside += "\n";
|
|
241
|
+
}
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (backtick) {
|
|
245
|
+
inside += char;
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (char === "$" && command[index + 1] === "(") {
|
|
249
|
+
if (depth === 0) {
|
|
250
|
+
// The substitution opens a fresh quoting context; remember the outer
|
|
251
|
+
// double-quote state so it resumes when the substitution closes.
|
|
252
|
+
outerQuote = quote;
|
|
253
|
+
quote = undefined;
|
|
254
|
+
}
|
|
255
|
+
depth += 1;
|
|
256
|
+
index += 1;
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
if (depth > 0) {
|
|
260
|
+
if (quote === undefined) {
|
|
261
|
+
if (char === "(") {
|
|
262
|
+
depth += 1;
|
|
263
|
+
}
|
|
264
|
+
else if (char === ")") {
|
|
265
|
+
depth -= 1;
|
|
266
|
+
if (depth === 0) {
|
|
267
|
+
quote = outerQuote;
|
|
268
|
+
outside += SUBSTITUTION_SENTINEL;
|
|
269
|
+
inside += "\n";
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
inside += char;
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
outside += char;
|
|
278
|
+
}
|
|
279
|
+
if (depth > 0 || backtick) {
|
|
280
|
+
// Unbalanced span stripped to the end — still mark that one was here.
|
|
281
|
+
outside += SUBSTITUTION_SENTINEL;
|
|
282
|
+
}
|
|
283
|
+
return { outside, inside };
|
|
284
|
+
}
|
|
285
|
+
// True when single/double quotes in a command string are balanced. The word
|
|
286
|
+
// tokenizer cannot represent nested quoting, so a doubly shell-wrapped command
|
|
287
|
+
// unwraps to a mangled, unbalanced inner string whose masking operators are lost
|
|
288
|
+
// on re-tokenization; callers treat an unbalanced result as unverifiable.
|
|
289
|
+
export function hasBalancedQuotes(command) {
|
|
290
|
+
let quote;
|
|
291
|
+
for (let index = 0; index < command.length; index += 1) {
|
|
292
|
+
const char = command[index];
|
|
293
|
+
if (char === "\\" && quote !== "'") {
|
|
294
|
+
index += 1;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
if (quote === undefined && (char === "'" || char === '"')) {
|
|
298
|
+
quote = char;
|
|
299
|
+
}
|
|
300
|
+
else if (char === quote) {
|
|
301
|
+
quote = undefined;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return quote === undefined;
|
|
305
|
+
}
|
|
46
306
|
export function segmentTruthiness(segment) {
|
|
47
307
|
const words = stripShellControlWords(stripLeadingEnvironment(shellWords(segment)));
|
|
48
308
|
const first = words[0];
|
|
@@ -88,6 +348,25 @@ export function shellWrappedCommand(words) {
|
|
|
88
348
|
}
|
|
89
349
|
return undefined;
|
|
90
350
|
}
|
|
351
|
+
// True when a shell wrapper's `-c` body could not be cleanly isolated. A
|
|
352
|
+
// well-formed `sh -c "<body>"` keeps the whole body in one token, so any extra
|
|
353
|
+
// tokens after it mean the tokenizer split a body containing escaped/nested
|
|
354
|
+
// quotes it cannot represent (e.g. `bash -lc "npm test --grep \"x\" || true"`).
|
|
355
|
+
// The extracted body is then a truncated prefix that silently drops a trailing
|
|
356
|
+
// mask, so callers must fail closed instead of analyzing it.
|
|
357
|
+
export function shellWrapperBodyIsAmbiguous(words) {
|
|
358
|
+
const first = words[0];
|
|
359
|
+
if (first !== "bash" && first !== "sh" && first !== "zsh") {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
for (let index = 1; index < words.length; index += 1) {
|
|
363
|
+
const word = words[index];
|
|
364
|
+
if (word === "-c" || word === "-lc" || word === "-cl" || (word.startsWith("-") && word.includes("c"))) {
|
|
365
|
+
return index + 2 < words.length;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
91
370
|
export function hasNonRunningJavaScriptTestArg(args) {
|
|
92
371
|
return args.some((arg) => ["--version", "-v", "-V", "--help", "-h", "help"].includes(arg));
|
|
93
372
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/query/verification/shell.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/query/verification/shell.ts"],"names":[],"mappings":"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"}
|