@ai-dossier/core 1.13.0 → 1.14.0

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.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Small per-language extractors for the dry-run analyzer (issue #933).
3
+ *
4
+ * Each extractor pattern-matches the *obvious* exec / delete / network / write
5
+ * calls of a non-shell fence and returns hits. Hits that embed a shell command
6
+ * (`os.system("rm -rf ~")`, `RUN rm -rf /`, `execSync('...')`) carry the literal
7
+ * text in `shell`, which the caller re-analyses with the shell classifier.
8
+ *
9
+ * Every regex here is a fixed alternation with bounded (or single-pass) repeats,
10
+ * so matching is linear in the line length; lines are additionally clipped to
11
+ * MAX_LINE_CHARS before matching.
12
+ */
13
+ import type { DryRunKind } from './dry-run';
14
+ export type CodeLang = 'python' | 'js' | 'powershell' | 'dockerfile' | 'ruby' | 'perl' | 'sql' | 'yaml';
15
+ export interface CodeHit {
16
+ /** Command text shown in the plan; empty for a hit that only carries `shell`. */
17
+ command: string;
18
+ kind: DryRunKind;
19
+ line: number;
20
+ /** Literal shell command lines embedded in the call, to be analysed as shell. */
21
+ shell?: string[];
22
+ file?: {
23
+ path: string;
24
+ operation: 'write' | 'delete' | 'move';
25
+ };
26
+ network?: {
27
+ tool: string;
28
+ target: string;
29
+ mutates: boolean;
30
+ };
31
+ reason?: string;
32
+ }
33
+ /** Lines longer than this are clipped before regex matching (keeps matching cheap and bounded). */
34
+ export declare const MAX_LINE_CHARS = 4000;
35
+ /** Extract hits from a non-shell fence. `lines` are raw fence lines; `startLine` is the first line's number. */
36
+ export declare function extractCodeHits(lang: CodeLang, lines: string[], startLine: number): CodeHit[];
37
+ //# sourceMappingURL=dry-run-langs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run-langs.d.ts","sourceRoot":"","sources":["../src/dry-run-langs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,IAAI,GACJ,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,MAAM,GACN,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,WAAW,OAAO;IACtB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;KAAE,CAAC;IAChE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mGAAmG;AACnG,eAAO,MAAM,cAAc,OAAO,CAAC;AAkWnC,gHAAgH;AAChH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAkD7F"}
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ /**
3
+ * Small per-language extractors for the dry-run analyzer (issue #933).
4
+ *
5
+ * Each extractor pattern-matches the *obvious* exec / delete / network / write
6
+ * calls of a non-shell fence and returns hits. Hits that embed a shell command
7
+ * (`os.system("rm -rf ~")`, `RUN rm -rf /`, `execSync('...')`) carry the literal
8
+ * text in `shell`, which the caller re-analyses with the shell classifier.
9
+ *
10
+ * Every regex here is a fixed alternation with bounded (or single-pass) repeats,
11
+ * so matching is linear in the line length; lines are additionally clipped to
12
+ * MAX_LINE_CHARS before matching.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MAX_LINE_CHARS = void 0;
16
+ exports.extractCodeHits = extractCodeHits;
17
+ /** Lines longer than this are clipped before regex matching (keeps matching cheap and bounded). */
18
+ exports.MAX_LINE_CHARS = 4000;
19
+ const STRING_LITERAL = /"(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*'|`(?:[^`\\]|\\.)*`/g;
20
+ /** String literals appearing after `from` on the line, unquoted, at most `max` of them. */
21
+ function literalsAfter(line, from, max = 24) {
22
+ const out = [];
23
+ for (const m of line.slice(from).matchAll(STRING_LITERAL)) {
24
+ out.push(m[0].slice(1, -1).replace(/\\(["'`\\])/g, '$1'));
25
+ if (out.length >= max)
26
+ break;
27
+ }
28
+ return out;
29
+ }
30
+ function hostFromText(s) {
31
+ const m = s.match(/[a-z][a-z0-9+.-]*:\/\/([^/\s:'"`)]+)/i);
32
+ return m ? m[1] : 'unknown host';
33
+ }
34
+ const FETCH_OR_DECODE_HINT = /\b(?:requests\.|urlopen|urllib|httpx\.|fetch\s*\(|axios|https?\.get|b64decode|atob|Buffer\.from|zlib\.|Invoke-WebRequest|Invoke-RestMethod|iwr|irm|DownloadString|FromBase64String|Net::HTTP|open-uri|URI\.open|LWP)/;
35
+ // --- python ----------------------------------------------------------------
36
+ const PY_EXEC = /\.(?:system|popen)\s*\(|\bsubprocess\.\w+\s*\(|(?<![\w.])(?:check_output|check_call|getoutput|Popen)\s*\(|\bos\.(?:exec|spawn)\w*\s*\(|\bpty\.spawn\s*\(|\basyncio\.create_subprocess_\w+\s*\(|\bpexpect\.(?:spawn|run)\s*\(/g;
37
+ const PY_DELETE = /\b(?:shutil\.rmtree|os\.(?:remove|unlink|rmdir|removedirs)|send2trash)\s*\(|\.(?:unlink|rmdir|rmtree)\s*\(/g;
38
+ const PY_WRITE = /\bshutil\.(?:copy\w*|move)\s*\(|\bos\.(?:rename|replace|makedirs|mkdir|chmod|chown)\s*\(|\.(?:write_text|write_bytes|mkdir|touch)\s*\(|\bopen\s*\(\s*(?:"[^"\n]*"|'[^'\n]*')\s*,\s*["'][wax]/g;
39
+ const PY_NET = /\brequests\.(get|post|put|delete|patch|head)\s*\(|\b(?:urlopen|urlretrieve)\s*\(|\bhttpx\.(?:get|post|put|delete|patch|Client|AsyncClient)\b|\baiohttp\.\w+|\bparamiko\.\w+|\bsmtplib\.\w+/g;
40
+ const PY_EVAL = /\b(?:exec|eval)\s*\(/;
41
+ // --- js / ts ---------------------------------------------------------------
42
+ const JS_EXEC = /(?<![\w.$])(?:execSync|execFileSync|spawnSync|spawn|execFile|exec|fork)\s*\(|\.(?:execSync|execFileSync|spawnSync|spawn|execFile)\s*\(|\b(?:child_process|childProcess|cp)\.exec\s*\(|\bBun\.(?:spawn|spawnSync)\s*\(|\bDeno\.Command\s*\(|\bexeca(?:Sync|Command|CommandSync)?\s*\(|(?<![\w$])\$\s*`|\bshell(?:js)?\.exec\s*\(|\bBun\.\$\s*`/g;
43
+ const JS_DELETE = /\b(?:fs|fsp|promises|fse|fsExtra)\.(?:rmSync|rmdirSync|unlinkSync|rm|rmdir|unlink|remove|removeSync|emptyDir|emptyDirSync)\s*\(|(?<![\w.$])(?:rmSync|unlinkSync|rmdirSync|rimraf|rimrafSync)\s*\(|\.(?:rmSync|unlinkSync|rmdirSync)\s*\(|\brimraf(?:\.sync)?\s*\(|\bDeno\.remove(?:Sync)?\s*\(/g;
44
+ const JS_WRITE = /\b(?:fs|fsp|promises|fse|fsExtra)\.(?:writeFile|writeFileSync|appendFile|appendFileSync|mkdir|mkdirSync|copyFile|copyFileSync|rename|renameSync|cp|cpSync|createWriteStream|chmod|chmodSync|outputFile|outputFileSync)\s*\(|\bDeno\.writeTextFile(?:Sync)?\s*\(|\bBun\.write\s*\(/g;
45
+ const JS_NET = /(?<![\w.$])fetch\s*\(|\baxios(?:\.(get|post|put|delete|patch|head))?\s*\(|\b(?:https?|http2)\.(?:request|get)\s*\(|(?<![\w.$])got(?:\.(get|post|put|delete|patch))?\s*\(|\bnew\s+(?:XMLHttpRequest|WebSocket)\b/g;
46
+ const JS_EVAL = /\b(?:eval|new\s+Function|vm\.runIn\w+)\s*\(/;
47
+ // --- powershell / cmd ------------------------------------------------------
48
+ const PS_DELETE = /(?<![\w-])(?:Remove-Item|Remove-ItemProperty|Remove-\w+|Clear-Disk|Clear-Content|Format-Volume|Initialize-Disk|Stop-Computer|Restart-Computer|Uninstall-\w+|Unregister-\w+|Disable-\w+)(?![\w-])|(?<![\w-])(?:ri|rd|rmdir|del|erase)\s+(?:[-/]\S+\s+)*[^\s/-]|(?<![\w-])(?:reg(?:\.exe)?\s+delete|format\s+[a-z]:|diskpart)\b/gi;
49
+ const PS_FETCH = /(?<![\w-])(?:Invoke-WebRequest|Invoke-RestMethod|Start-BitsTransfer|iwr|irm)(?![\w-])|\bNet\.WebClient\b|\.Download(?:String|File|Data)\s*\(|\bcertutil\b[^\n]*-urlcache/gi;
50
+ const PS_EXEC = /(?<![\w-])(?:iex|Invoke-Expression)(?![\w-])/i;
51
+ const PS_WRITE = /(?<![\w-])(?:Set-Content|Add-Content|Out-File|New-Item|Copy-Item|Move-Item|Rename-Item|Export-\w+|Tee-Object|Start-Process|Invoke-Command)(?![\w-])/gi;
52
+ const PS_ENCODED = /-(?:enc|encodedcommand|e)\b|FromBase64String/i;
53
+ const PS_CLI_LINE = /^\s*(?:git|gh|npm|pnpm|yarn|npx|docker|kubectl|terraform|aws|az|gcloud|curl|wget|ssh|scp|make|cargo|pip3?|python[\d.]*|node|rm|mv|cp|dd|sudo)\b/;
54
+ // --- ruby / perl -----------------------------------------------------------
55
+ const RB_EXEC = /(?<![\w.])(?:system|exec|spawn)\s*\(|(?<![\w.])(?:system|exec|spawn)\s+["']|%x[[{(]|\bIO\.popen\s*\(|\bOpen3\.\w+\s*\(|\bKernel\.(?:system|exec|spawn)\b|\bqx\s*[/{([]|\bopen\s*\(\s*["']\s*\|/g;
56
+ const RB_DELETE = /\b(?:File\.(?:delete|unlink)|FileUtils\.(?:rm|rm_rf|rm_r|rm_f|remove_entry|remove_dir)|Dir\.rmdir|unlink|rmtree)\b/g;
57
+ const RB_NET = /\b(?:Net::HTTP|URI\.open|open-uri|LWP::\w+|HTTP::Tiny)\b/g;
58
+ const RB_BACKTICK = /`([^`\n]+)`/g;
59
+ // --- sql -------------------------------------------------------------------
60
+ const SQL_DESTRUCTIVE = /\b(?:DROP\s+(?:TABLE|DATABASE|SCHEMA|INDEX|USER|ROLE|VIEW|COLLECTION)|TRUNCATE(?:\s+TABLE)?|dropDatabase|FLUSH(?:ALL|DB))\b/i;
61
+ const SQL_WRITE = /\b(?:INSERT\s+INTO|UPDATE\s+\w+\s+SET|ALTER\s+TABLE|CREATE\s+(?:TABLE|DATABASE|USER)|GRANT)\b/i;
62
+ const SQL_DELETE = /\bDELETE\s+FROM\b/i;
63
+ // ---------------------------------------------------------------------------
64
+ function pushShellFromCall(hits, line, lineNo, at, matchLen, label) {
65
+ const lits = literalsAfter(line, at + matchLen);
66
+ hits.push({
67
+ command: line.trim(),
68
+ kind: 'local_write',
69
+ line: lineNo,
70
+ shell: lits.length > 0 ? [lits.join(' ')] : undefined,
71
+ reason: label,
72
+ });
73
+ }
74
+ function scanPython(line, no, hits) {
75
+ for (const m of line.matchAll(PY_EXEC))
76
+ pushShellFromCall(hits, line, no, m.index ?? 0, m[0].length, 'python process execution');
77
+ for (const m of line.matchAll(PY_DELETE)) {
78
+ const lit = literalsAfter(line, (m.index ?? 0) + m[0].length, 1)[0];
79
+ hits.push({
80
+ command: line.trim(),
81
+ kind: 'destructive',
82
+ line: no,
83
+ file: { path: lit ?? '(computed path)', operation: 'delete' },
84
+ });
85
+ }
86
+ for (const m of line.matchAll(PY_WRITE)) {
87
+ const lit = literalsAfter(line, (m.index ?? 0) + m[0].length, 1)[0];
88
+ hits.push({
89
+ command: line.trim(),
90
+ kind: 'local_write',
91
+ line: no,
92
+ file: lit ? { path: lit, operation: 'write' } : undefined,
93
+ });
94
+ }
95
+ for (const m of line.matchAll(PY_NET)) {
96
+ const verb = (m[1] ?? '').toLowerCase();
97
+ const mutates = verb !== '' && verb !== 'get' && verb !== 'head';
98
+ hits.push({
99
+ command: line.trim(),
100
+ kind: verb === 'delete' ? 'destructive' : 'remote',
101
+ line: no,
102
+ network: { tool: 'python', target: hostFromText(line), mutates },
103
+ });
104
+ }
105
+ if (PY_EVAL.test(line) && FETCH_OR_DECODE_HINT.test(line)) {
106
+ hits.push({
107
+ command: line.trim(),
108
+ kind: 'destructive',
109
+ line: no,
110
+ reason: 'executes fetched or decoded code',
111
+ });
112
+ }
113
+ }
114
+ function scanJs(line, no, hits) {
115
+ for (const m of line.matchAll(JS_EXEC))
116
+ pushShellFromCall(hits, line, no, m.index ?? 0, m[0].length, 'javascript process execution');
117
+ for (const m of line.matchAll(JS_DELETE)) {
118
+ const lit = literalsAfter(line, (m.index ?? 0) + m[0].length, 1)[0];
119
+ hits.push({
120
+ command: line.trim(),
121
+ kind: 'destructive',
122
+ line: no,
123
+ file: { path: lit ?? '(computed path)', operation: 'delete' },
124
+ });
125
+ }
126
+ for (const m of line.matchAll(JS_WRITE)) {
127
+ const lit = literalsAfter(line, (m.index ?? 0) + m[0].length, 1)[0];
128
+ hits.push({
129
+ command: line.trim(),
130
+ kind: 'local_write',
131
+ line: no,
132
+ file: lit ? { path: lit, operation: 'write' } : undefined,
133
+ });
134
+ }
135
+ for (const m of line.matchAll(JS_NET)) {
136
+ const verb = (m[1] ?? m[2] ?? '').toLowerCase();
137
+ const explicit = line.match(/method\s*:\s*['"`](POST|PUT|PATCH|DELETE)['"`]/i)?.[1];
138
+ const method = (explicit ?? verb).toLowerCase();
139
+ const mutates = method !== '' && method !== 'get' && method !== 'head';
140
+ hits.push({
141
+ command: line.trim(),
142
+ kind: method === 'delete' ? 'destructive' : 'remote',
143
+ line: no,
144
+ network: { tool: 'javascript', target: hostFromText(line), mutates },
145
+ });
146
+ }
147
+ if (JS_EVAL.test(line)) {
148
+ const fetched = FETCH_OR_DECODE_HINT.test(line);
149
+ hits.push({
150
+ command: line.trim(),
151
+ kind: fetched ? 'destructive' : 'local_write',
152
+ line: no,
153
+ reason: fetched ? 'executes fetched or decoded code' : 'dynamic code evaluation',
154
+ });
155
+ }
156
+ }
157
+ function scanPowerShell(line, no, hits, state) {
158
+ let matched = false;
159
+ for (const m of line.matchAll(PS_DELETE)) {
160
+ matched = true;
161
+ const rest = line.slice((m.index ?? 0) + m[0].length);
162
+ const target = rest.match(/(?:-Path\s+)?(["']?)([^\s"'|;-][^\s"'|;]*)\1/)?.[2];
163
+ hits.push({
164
+ command: line.trim(),
165
+ kind: 'destructive',
166
+ line: no,
167
+ file: { path: target ?? '(computed path)', operation: 'delete' },
168
+ });
169
+ }
170
+ const fetches = [...line.matchAll(PS_FETCH)];
171
+ if (fetches.length > 0) {
172
+ matched = true;
173
+ state.fetched = true;
174
+ const mutates = /-Method\s+(?:POST|PUT|PATCH|DELETE)\b/i.test(line);
175
+ hits.push({
176
+ command: line.trim(),
177
+ kind: 'remote',
178
+ line: no,
179
+ network: { tool: 'powershell', target: hostFromText(line), mutates },
180
+ });
181
+ }
182
+ if (PS_EXEC.test(line)) {
183
+ matched = true;
184
+ const remoteExec = state.fetched || fetches.length > 0 || PS_ENCODED.test(line);
185
+ hits.push({
186
+ command: line.trim(),
187
+ kind: remoteExec ? 'destructive' : 'local_write',
188
+ line: no,
189
+ reason: remoteExec ? 'executes fetched or decoded code (iex)' : 'dynamic code evaluation',
190
+ });
191
+ }
192
+ else if (/(?:powershell|pwsh)(?:\.exe)?\b[^\n]*\s-(?:enc|encodedcommand)\b/i.test(line)) {
193
+ matched = true;
194
+ hits.push({
195
+ command: line.trim(),
196
+ kind: 'destructive',
197
+ line: no,
198
+ reason: 'encoded PowerShell command (opaque payload)',
199
+ });
200
+ }
201
+ for (const _m of line.matchAll(PS_WRITE)) {
202
+ matched = true;
203
+ hits.push({ command: line.trim(), kind: 'local_write', line: no });
204
+ break;
205
+ }
206
+ if (!matched && PS_CLI_LINE.test(line)) {
207
+ hits.push({ command: '', kind: 'read', line: no, shell: [line.trim()] });
208
+ }
209
+ }
210
+ function scanRubyPerl(line, no, hits) {
211
+ for (const m of line.matchAll(RB_EXEC))
212
+ pushShellFromCall(hits, line, no, m.index ?? 0, m[0].length, 'process execution');
213
+ for (const m of line.matchAll(RB_BACKTICK)) {
214
+ hits.push({
215
+ command: line.trim(),
216
+ kind: 'local_write',
217
+ line: no,
218
+ shell: [m[1]],
219
+ reason: 'backtick process execution',
220
+ });
221
+ }
222
+ for (const m of line.matchAll(RB_DELETE)) {
223
+ const lit = literalsAfter(line, (m.index ?? 0) + m[0].length, 1)[0];
224
+ hits.push({
225
+ command: line.trim(),
226
+ kind: 'destructive',
227
+ line: no,
228
+ file: { path: lit ?? '(computed path)', operation: 'delete' },
229
+ });
230
+ }
231
+ for (const _m of line.matchAll(RB_NET)) {
232
+ hits.push({
233
+ command: line.trim(),
234
+ kind: 'remote',
235
+ line: no,
236
+ network: { tool: 'script', target: hostFromText(line), mutates: false },
237
+ });
238
+ break;
239
+ }
240
+ if (/\b(?:eval|instance_eval)\b/.test(line) && FETCH_OR_DECODE_HINT.test(line)) {
241
+ hits.push({
242
+ command: line.trim(),
243
+ kind: 'destructive',
244
+ line: no,
245
+ reason: 'executes fetched or decoded code',
246
+ });
247
+ }
248
+ }
249
+ function scanSql(line, no, hits) {
250
+ const network = { tool: 'sql', target: 'database', mutates: true };
251
+ if (SQL_DESTRUCTIVE.test(line) || (SQL_DELETE.test(line) && !/\bWHERE\b/i.test(line))) {
252
+ hits.push({ command: line.trim(), kind: 'destructive', line: no, network });
253
+ }
254
+ else if (SQL_DELETE.test(line) || SQL_WRITE.test(line)) {
255
+ hits.push({ command: line.trim(), kind: 'remote', line: no, network });
256
+ }
257
+ }
258
+ /** `["a", "b"]` exec-form or plain shell-form instruction argument -> one shell command line. */
259
+ function instructionToShell(rest) {
260
+ const t = rest.trim();
261
+ if (t.startsWith('['))
262
+ return literalsAfter(t, 0, 40).join(' ');
263
+ return t;
264
+ }
265
+ function scanDockerfile(line, no, hits) {
266
+ const m = line.match(/^\s*(?:ONBUILD\s+)?(RUN|CMD|ENTRYPOINT|HEALTHCHECK\s+(?:--\S+\s+)*CMD|ADD|COPY)\s+(?:--\S+\s+)*(.*)$/i);
267
+ if (!m)
268
+ return;
269
+ const instr = m[1].toUpperCase();
270
+ const rest = m[2];
271
+ if (instr === 'ADD' || instr === 'COPY') {
272
+ if (/https?:\/\//i.test(rest)) {
273
+ hits.push({
274
+ command: line.trim(),
275
+ kind: 'remote',
276
+ line: no,
277
+ network: { tool: 'docker', target: hostFromText(rest), mutates: false },
278
+ });
279
+ }
280
+ return;
281
+ }
282
+ const shell = instructionToShell(rest);
283
+ hits.push({
284
+ command: line.trim(),
285
+ kind: 'local_write',
286
+ line: no,
287
+ shell: shell ? [shell] : undefined,
288
+ });
289
+ }
290
+ const YAML_RUN_KEYS = /^(\s*)(?:-\s+)?(run|script|before_script|after_script|command|commands|entrypoint)\s*:\s*(.*)$/;
291
+ function scanYaml(lines, startLine, hits) {
292
+ for (let i = 0; i < lines.length; i++) {
293
+ const m = lines[i].slice(0, exports.MAX_LINE_CHARS).match(YAML_RUN_KEYS);
294
+ if (!m)
295
+ continue;
296
+ const indent = m[1].length;
297
+ const rest = m[3].trim();
298
+ const shell = [];
299
+ if (rest === '' || /^[|>][+-]?\d*$/.test(rest)) {
300
+ // Block scalar or nested list: every more-indented following line is a command.
301
+ let acc = '';
302
+ for (let j = i + 1; j < lines.length; j++) {
303
+ const raw = lines[j].slice(0, exports.MAX_LINE_CHARS);
304
+ if (raw.trim() === '')
305
+ continue;
306
+ const ind = raw.length - raw.trimStart().length;
307
+ if (ind <= indent)
308
+ break;
309
+ const text = raw.trim().replace(/^-\s+/, '');
310
+ if (text.startsWith('#'))
311
+ continue;
312
+ if (/\\\s*$/.test(text)) {
313
+ acc += `${text.replace(/\\\s*$/, '')} `;
314
+ continue;
315
+ }
316
+ shell.push((acc + text).trim());
317
+ acc = '';
318
+ }
319
+ if (acc.trim())
320
+ shell.push(acc.trim());
321
+ }
322
+ else if (!rest.startsWith('#')) {
323
+ shell.push(instructionToShell(rest.replace(/^(["'])(.*)\1$/, '$2')));
324
+ }
325
+ if (shell.length > 0) {
326
+ hits.push({ command: '', kind: 'read', line: startLine + i, shell });
327
+ }
328
+ }
329
+ }
330
+ /** Extract hits from a non-shell fence. `lines` are raw fence lines; `startLine` is the first line's number. */
331
+ function extractCodeHits(lang, lines, startLine) {
332
+ const hits = [];
333
+ if (lang === 'yaml') {
334
+ scanYaml(lines, startLine, hits);
335
+ return hits;
336
+ }
337
+ const psState = { fetched: false };
338
+ // Dockerfile / python lines joined on `\` continuation keep the first physical line number.
339
+ let acc = '';
340
+ let accLine = 0;
341
+ const flush = (text, no) => {
342
+ const line = text.slice(0, exports.MAX_LINE_CHARS);
343
+ const trimmed = line.trim();
344
+ if (!trimmed)
345
+ return;
346
+ switch (lang) {
347
+ case 'python':
348
+ if (!trimmed.startsWith('#'))
349
+ scanPython(line, no, hits);
350
+ break;
351
+ case 'js':
352
+ if (!trimmed.startsWith('//') && !trimmed.startsWith('*'))
353
+ scanJs(line, no, hits);
354
+ break;
355
+ case 'powershell':
356
+ if (!trimmed.startsWith('#') && !/^(?:rem|::)\b/i.test(trimmed))
357
+ scanPowerShell(line, no, hits, psState);
358
+ break;
359
+ case 'dockerfile':
360
+ if (!trimmed.startsWith('#'))
361
+ scanDockerfile(line, no, hits);
362
+ break;
363
+ case 'ruby':
364
+ case 'perl':
365
+ if (!trimmed.startsWith('#'))
366
+ scanRubyPerl(line, no, hits);
367
+ break;
368
+ case 'sql':
369
+ if (!trimmed.startsWith('--'))
370
+ scanSql(line, no, hits);
371
+ break;
372
+ }
373
+ };
374
+ lines.forEach((raw, idx) => {
375
+ const no = startLine + idx;
376
+ const continues = lang === 'dockerfile' && /\\\s*$/.test(raw);
377
+ if (!acc)
378
+ accLine = no;
379
+ if (continues) {
380
+ acc += `${raw.replace(/\\\s*$/, '')} `;
381
+ return;
382
+ }
383
+ flush(acc + raw, accLine);
384
+ acc = '';
385
+ });
386
+ if (acc.trim())
387
+ flush(acc, accLine);
388
+ return hits;
389
+ }
390
+ //# sourceMappingURL=dry-run-langs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run-langs.js","sourceRoot":"","sources":["../src/dry-run-langs.ts"],"names":[],"mappings":"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"}
package/dist/dry-run.d.ts CHANGED
@@ -28,6 +28,8 @@ export interface DryRunCommand {
28
28
  recognized: boolean;
29
29
  /** 1-based line within the dossier body. */
30
30
  line: number;
31
+ /** Why this command was escalated beyond its plain classification (e.g. remote code execution). */
32
+ reason?: string;
31
33
  }
32
34
  export interface DryRunFile {
33
35
  path: string;
@@ -76,6 +78,18 @@ export interface DryRunPlan {
76
78
  risk_score: number;
77
79
  level: DryRunLevel;
78
80
  score_breakdown: DryRunScoreComponent[];
81
+ /** Declared risk_level vs what the code blocks actually do; `mismatch` when observed outranks declared. */
82
+ declared_vs_observed: {
83
+ declared_level: string | null;
84
+ observed_level: DryRunLevel;
85
+ mismatch: boolean;
86
+ note: string;
87
+ };
88
+ /** Code fences in a language the analyzer has no extractor for (their content is NOT reflected in the score). */
89
+ unanalyzed_fences: Array<{
90
+ lang: string;
91
+ line: number;
92
+ }>;
79
93
  }
80
94
  /** Base points for the dossier's declared risk_level. */
81
95
  export declare const SCORE_BASE: Record<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../src/dry-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../src/dry-run.ts"],"names":[],"mappings":"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"}