Merge pull request #26 from mane/fix/redact-whitebox-source-context

fix: redact secrets from whitebox source context
This commit is contained in:
pliny authored and GitHub committed 2026-07-06 11:35:36 -04:00
commit 4ccf9952c8
2 files changed
+28 -1

No files matched your search

+26
View File
@@ -349,4 +349,30 @@ describe('packAnalysisUnits', () => {
expect(text).toContain('risk signals:'); expect(text).toContain('risk signals:');
expect(text).toContain('requests.get(url)'); // body included expect(text).toContain('requests.get(url)'); // body included
}); });
it('redacts source secrets before producing LLM-facing context', () => {
const blocks = parseFile('secrets.py', `def leak():\n api_key = "sk-ant-api03-ABCDEFGHIJKLMNOP"\n return "Authorization: Bearer abcdefghijklmnop"\n`);
const block = blocks[0];
if (!block) throw new Error('expected parseFile to return a block');
const unit: AnalysisUnit = {
block,
exposure: 'neutral',
callers: [],
callees: [],
reachable: false,
reachDepth: Infinity,
reachabilityPaths: [],
riskSignals: [],
priority: 0,
};
const formatted = formatUnitForLLM(unit);
const packed = packAnalysisUnits([unit], 100_000).text;
for (const text of [formatted, packed]) {
expect(text).not.toContain('sk-ant-api03-ABCDEFGHIJKLMNOP');
expect(text).not.toContain('Bearer abcdefghijklmnop');
expect(text).toContain('[redacted]');
}
});
}); });
+2 -1
View File
@@ -43,6 +43,7 @@ import {
type SourceFile, type SourceFile,
type SourceBundle, type SourceBundle,
} from '../orchestration/context-pack.js'; } from '../orchestration/context-pack.js';
import { redactString } from '../redact.js';
// ============================================================================= // =============================================================================
// TYPES // TYPES
@@ -863,7 +864,7 @@ export function formatUnitForLLM(unit: AnalysisUnit): string {
`risk signals: ${unit.riskSignals.length ? unit.riskSignals.join(', ') : '(none)'}`, `risk signals: ${unit.riskSignals.length ? unit.riskSignals.join(', ') : '(none)'}`,
); );
lines.push('---'); lines.push('---');
lines.push(b.body); lines.push(redactString(b.body));
return lines.join('\n'); return lines.join('\n');
} }