ghagga-core 3.3.0 → 3.5.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.
- package/README.md +16 -14
- package/dist/acp/adapter.d.ts.map +1 -1
- package/dist/acp/adapter.js +8 -1
- package/dist/acp/adapter.js.map +1 -1
- package/dist/adversarial-qa.js.map +1 -1
- package/dist/agents/consensus.d.ts +2 -2
- package/dist/agents/consensus.d.ts.map +1 -1
- package/dist/agents/consensus.js +13 -5
- package/dist/agents/consensus.js.map +1 -1
- package/dist/agents/fan-out-lenses.d.ts +33 -2
- package/dist/agents/fan-out-lenses.d.ts.map +1 -1
- package/dist/agents/fan-out-lenses.js +245 -8
- package/dist/agents/fan-out-lenses.js.map +1 -1
- package/dist/agents/issue-code-discovery.d.ts +58 -0
- package/dist/agents/issue-code-discovery.d.ts.map +1 -0
- package/dist/agents/issue-code-discovery.js +144 -0
- package/dist/agents/issue-code-discovery.js.map +1 -0
- package/dist/agents/issue-triage.d.ts +11 -1
- package/dist/agents/issue-triage.d.ts.map +1 -1
- package/dist/agents/issue-triage.js +53 -4
- package/dist/agents/issue-triage.js.map +1 -1
- package/dist/agents/prompts.d.ts +12 -3
- package/dist/agents/prompts.d.ts.map +1 -1
- package/dist/agents/prompts.js +21 -2
- package/dist/agents/prompts.js.map +1 -1
- package/dist/agents/simple.d.ts.map +1 -1
- package/dist/agents/simple.js +1 -1
- package/dist/agents/simple.js.map +1 -1
- package/dist/agents/voice-validation.d.ts +34 -0
- package/dist/agents/voice-validation.d.ts.map +1 -0
- package/dist/agents/voice-validation.js +64 -0
- package/dist/agents/voice-validation.js.map +1 -0
- package/dist/agents/workflow.d.ts.map +1 -1
- package/dist/agents/workflow.js +8 -0
- package/dist/agents/workflow.js.map +1 -1
- package/dist/aisvs.js.map +1 -1
- package/dist/code-intel/client.d.ts.map +1 -1
- package/dist/critique/critique.js +1 -1
- package/dist/critique/critique.js.map +1 -1
- package/dist/critique/prompts.d.ts +1 -1
- package/dist/critique/prompts.d.ts.map +1 -1
- package/dist/critique/prompts.js +1 -1
- package/dist/embed.d.ts.map +1 -1
- package/dist/embed.js.map +1 -1
- package/dist/enhance/prompt.d.ts +1 -1
- package/dist/enhance/prompt.d.ts.map +1 -1
- package/dist/explanation.d.ts +69 -0
- package/dist/explanation.d.ts.map +1 -0
- package/dist/explanation.js +16 -0
- package/dist/explanation.js.map +1 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +1 -0
- package/dist/format.js.map +1 -1
- package/dist/graph/loader.d.ts +1 -1
- package/dist/graph/loader.d.ts.map +1 -1
- package/dist/graph/loader.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/memory/backfill.js.map +1 -1
- package/dist/memory/contradiction.js.map +1 -1
- package/dist/memory/decay.d.ts +40 -0
- package/dist/memory/decay.d.ts.map +1 -1
- package/dist/memory/decay.js +57 -0
- package/dist/memory/decay.js.map +1 -1
- package/dist/memory/engram-client.d.ts.map +1 -1
- package/dist/memory/engram.d.ts.map +1 -1
- package/dist/memory/engram.js +15 -3
- package/dist/memory/engram.js.map +1 -1
- package/dist/memory/pageindex/chunker.d.ts.map +1 -1
- package/dist/memory/pageindex/example.js.map +1 -1
- package/dist/memory/pageindex/service.d.ts.map +1 -1
- package/dist/memory/pageindex/service.js.map +1 -1
- package/dist/memory/search.d.ts +157 -0
- package/dist/memory/search.d.ts.map +1 -1
- package/dist/memory/search.js +420 -0
- package/dist/memory/search.js.map +1 -1
- package/dist/memory/sqlite.d.ts.map +1 -1
- package/dist/memory/sqlite.js +11 -3
- package/dist/memory/sqlite.js.map +1 -1
- package/dist/memory/versioning.d.ts.map +1 -1
- package/dist/memory/versioning.js.map +1 -1
- package/dist/pipeline/execute.d.ts.map +1 -1
- package/dist/pipeline/execute.js +14 -0
- package/dist/pipeline/execute.js.map +1 -1
- package/dist/providers/cli-bridge.d.ts +13 -11
- package/dist/providers/cli-bridge.d.ts.map +1 -1
- package/dist/providers/cli-bridge.js +155 -40
- package/dist/providers/cli-bridge.js.map +1 -1
- package/dist/providers/explanation-generate-fn.d.ts +28 -0
- package/dist/providers/explanation-generate-fn.d.ts.map +1 -0
- package/dist/providers/explanation-generate-fn.js +122 -0
- package/dist/providers/explanation-generate-fn.js.map +1 -0
- package/dist/providers/gateway.js.map +1 -1
- package/dist/sanitize.js.map +1 -1
- package/dist/scope/parser.js.map +1 -1
- package/dist/scope/types.d.ts +3 -3
- package/dist/scope/types.d.ts.map +1 -1
- package/dist/search/indexer.d.ts.map +1 -1
- package/dist/search/searcher.d.ts.map +1 -1
- package/dist/search/searcher.js.map +1 -1
- package/dist/tools/budget.js.map +1 -1
- package/dist/tools/cpd.js.map +1 -1
- package/dist/tools/orchestrator.js.map +1 -1
- package/dist/tools/plugins/gitleaks.js.map +1 -1
- package/dist/tools/plugins/semgrep.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/semgrep.js.map +1 -1
- package/dist/trajectory.d.ts.map +1 -1
- package/dist/types.d.ts +43 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/concurrency.js.map +1 -1
- package/package.json +16 -16
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
* - typing — type safety, generics, strict mode
|
|
14
14
|
* - accessibility — a11y attributes, ARIA, keyboard navigation
|
|
15
15
|
*/
|
|
16
|
+
import { FINDING_LEDGER_STATUS } from '../types.js';
|
|
16
17
|
import { runWithConcurrency } from '../utils/concurrency.js';
|
|
17
18
|
import { buildMemoryContext, buildReviewLevelInstruction, COMPACT_CALIBRATION, REVIEW_CALIBRATION, STATIC_ANALYSIS_UNTRUSTED_LABEL, UNTRUSTED_CONTENT_POLICY, wrapUntrusted, wrapUntrustedDiff, } from './prompts.js';
|
|
18
19
|
import { parseFindingsBlock } from './simple.js';
|
|
20
|
+
import { getDeadVoiceReason } from './voice-validation.js';
|
|
19
21
|
// ─── Default Lenses ────────────────────────────────────────────
|
|
20
22
|
export const LENS_SECURITY = {
|
|
21
23
|
name: 'security',
|
|
@@ -321,6 +323,51 @@ const SEVERITY_RANK = {
|
|
|
321
323
|
low: 2,
|
|
322
324
|
info: 1,
|
|
323
325
|
};
|
|
326
|
+
/** Unlensed whole-diff voice. Not a specialty lens and not SIMPLE_REVIEW_SYSTEM. */
|
|
327
|
+
const CONTRARIAN_SYSTEM = `You are an unlensed whole-diff code reviewer. You have no specialty lens.
|
|
328
|
+
|
|
329
|
+
Report only real defects you are confident about. Do not invent issues.
|
|
330
|
+
|
|
331
|
+
Format your response EXACTLY as:
|
|
332
|
+
|
|
333
|
+
STATUS: [PASSED or FAILED]
|
|
334
|
+
SUMMARY: [1-2 sentence assessment]
|
|
335
|
+
FINDINGS:
|
|
336
|
+
- SEVERITY: [critical|high|medium|low|info]
|
|
337
|
+
CATEGORY: contrarian
|
|
338
|
+
FILE: [file path]
|
|
339
|
+
LINE: [line number or "N/A"]
|
|
340
|
+
MESSAGE: [clear description of the defect]
|
|
341
|
+
SUGGESTION: [specific fix]
|
|
342
|
+
|
|
343
|
+
FAILED if: Any critical or high issues. PASSED otherwise.`;
|
|
344
|
+
/** Batched closed-list refuter. Not a lens and not SIMPLE_REVIEW_SYSTEM. */
|
|
345
|
+
const REFUTER_SYSTEM = `You are a batched finding refuter. You are not a review lens.
|
|
346
|
+
|
|
347
|
+
You receive a closed candidate list. Do not add findings. Do not invent ids.
|
|
348
|
+
For each candidate id, emit exactly one verdict: stands or refute.
|
|
349
|
+
A missing or malformed verdict is treated as stands.
|
|
350
|
+
|
|
351
|
+
Format each verdict on its own line as:
|
|
352
|
+
<id>: stands
|
|
353
|
+
<id>: refute`;
|
|
354
|
+
/**
|
|
355
|
+
* Parse per-id refuter verdicts from model text.
|
|
356
|
+
* Only explicit `refute` or `stands` lines count. Unknown ids are kept in the
|
|
357
|
+
* map for the caller to ignore. Missing candidate ids have no map entry.
|
|
358
|
+
*/
|
|
359
|
+
export function parseRefuterVerdicts(text) {
|
|
360
|
+
const verdicts = new Map();
|
|
361
|
+
const pattern = /^\s*([A-Za-z0-9][A-Za-z0-9_-]*)\s*:\s*(refute|stands)\b/gim;
|
|
362
|
+
for (const match of text.matchAll(pattern)) {
|
|
363
|
+
const id = match[1];
|
|
364
|
+
const verdict = match[2]?.toLowerCase();
|
|
365
|
+
if (!id || (verdict !== 'refute' && verdict !== 'stands'))
|
|
366
|
+
continue;
|
|
367
|
+
verdicts.set(id, verdict);
|
|
368
|
+
}
|
|
369
|
+
return verdicts;
|
|
370
|
+
}
|
|
324
371
|
// ─── Merge Logic ───────────────────────────────────────────────
|
|
325
372
|
/**
|
|
326
373
|
* Deduplicate findings by file+line, taking the highest severity
|
|
@@ -357,6 +404,27 @@ export function mergeFindings(allFindings) {
|
|
|
357
404
|
return a.file.localeCompare(b.file);
|
|
358
405
|
});
|
|
359
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Stamp a first-class per-finding ledger onto fan-out results.
|
|
409
|
+
* Does not mutate inputs; returns new objects.
|
|
410
|
+
*/
|
|
411
|
+
export function stampFindingLedger(findings) {
|
|
412
|
+
const counters = new Map();
|
|
413
|
+
return findings.map((finding) => {
|
|
414
|
+
const lens = finding.category || 'unknown';
|
|
415
|
+
const next = (counters.get(lens) ?? 0) + 1;
|
|
416
|
+
counters.set(lens, next);
|
|
417
|
+
const location = typeof finding.line === 'number' ? `${finding.file}:${finding.line}` : finding.file;
|
|
418
|
+
return {
|
|
419
|
+
...finding,
|
|
420
|
+
id: `${lens}-${String(next).padStart(3, '0')}`,
|
|
421
|
+
lens,
|
|
422
|
+
location,
|
|
423
|
+
ledgerStatus: FINDING_LEDGER_STATUS.open,
|
|
424
|
+
evidence: finding.message,
|
|
425
|
+
};
|
|
426
|
+
});
|
|
427
|
+
}
|
|
360
428
|
// ─── Main Function ─────────────────────────────────────────────
|
|
361
429
|
/**
|
|
362
430
|
* Run a fan-out (multi-lens) code review.
|
|
@@ -398,6 +466,38 @@ export async function runFanOutReview(input) {
|
|
|
398
466
|
}
|
|
399
467
|
// ── Resolve GenerateTextFn array ────────────────────────────
|
|
400
468
|
const resolvedGenerateFns = input.generateFns ?? [];
|
|
469
|
+
if (input.pinLensesToFirst === true && resolvedGenerateFns.length === 0) {
|
|
470
|
+
throw new Error('pinLensesToFirst requires a non-empty generateFns array');
|
|
471
|
+
}
|
|
472
|
+
const contrarianCount = input.contrarianCount;
|
|
473
|
+
if (contrarianCount !== undefined) {
|
|
474
|
+
if (!Number.isInteger(contrarianCount) || contrarianCount < 1) {
|
|
475
|
+
throw new Error(`contrarianCount must be an integer >= 1, received: ${contrarianCount}`);
|
|
476
|
+
}
|
|
477
|
+
if (input.pinLensesToFirst !== true) {
|
|
478
|
+
throw new Error('contrarianCount requires pinLensesToFirst === true');
|
|
479
|
+
}
|
|
480
|
+
if (resolvedGenerateFns.length < 1 + contrarianCount) {
|
|
481
|
+
throw new Error(`contrarianCount ${contrarianCount} requires generateFns.length >= ${1 + contrarianCount}`);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
const refuterCount = input.refuterCount;
|
|
485
|
+
if (refuterCount !== undefined) {
|
|
486
|
+
if (!Number.isInteger(refuterCount) || refuterCount < 2) {
|
|
487
|
+
throw new Error(`refuterCount must be an integer >= 2, received: ${refuterCount}`);
|
|
488
|
+
}
|
|
489
|
+
if (input.pinLensesToFirst !== true) {
|
|
490
|
+
throw new Error('refuterCount requires pinLensesToFirst === true');
|
|
491
|
+
}
|
|
492
|
+
const contrarianN = typeof contrarianCount === 'number' &&
|
|
493
|
+
Number.isInteger(contrarianCount) &&
|
|
494
|
+
contrarianCount >= 1
|
|
495
|
+
? contrarianCount
|
|
496
|
+
: 0;
|
|
497
|
+
if (resolvedGenerateFns.length < 1 + contrarianN + refuterCount) {
|
|
498
|
+
throw new Error(`refuterCount ${refuterCount} requires generateFns.length >= ${1 + contrarianN + refuterCount}`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
401
501
|
const concurrency = input.concurrency ?? 3;
|
|
402
502
|
const delayMs = input.delayMs ?? 0;
|
|
403
503
|
const startTime = Date.now();
|
|
@@ -411,9 +511,11 @@ export async function runFanOutReview(input) {
|
|
|
411
511
|
// ── Step 1: Run lenses with bounded concurrency ─────────────
|
|
412
512
|
const lensTasks = resolvedLenses.map((lens, index) => {
|
|
413
513
|
return async () => {
|
|
414
|
-
// Round-robin generateFn assignment
|
|
514
|
+
// Round-robin generateFn assignment unless pinLensesToFirst pins all to [0].
|
|
415
515
|
const generateFn = resolvedGenerateFns.length > 0
|
|
416
|
-
?
|
|
516
|
+
? input.pinLensesToFirst === true
|
|
517
|
+
? resolvedGenerateFns[0]
|
|
518
|
+
: resolvedGenerateFns[index % resolvedGenerateFns.length]
|
|
417
519
|
: null;
|
|
418
520
|
if (!generateFn) {
|
|
419
521
|
throw new Error(`No generateFn available for lens "${lens.name}" at index ${index}`);
|
|
@@ -432,6 +534,13 @@ export async function runFanOutReview(input) {
|
|
|
432
534
|
.filter(Boolean)
|
|
433
535
|
.join('\n');
|
|
434
536
|
const result = await generateFn(system, userPrompt);
|
|
537
|
+
// A fulfilled call can still be a dead voice (e.g. gateway returned
|
|
538
|
+
// HTTP 200 whose text is a raw CLI error envelope). Route it into the
|
|
539
|
+
// existing rejected/failure path instead of counting it as a lens pass.
|
|
540
|
+
const deadReason = getDeadVoiceReason(result.text);
|
|
541
|
+
if (deadReason) {
|
|
542
|
+
throw new Error(`${lens.label} (${result.provider}/${result.model}): ${deadReason}`);
|
|
543
|
+
}
|
|
435
544
|
return {
|
|
436
545
|
name: lens.name,
|
|
437
546
|
label: lens.label,
|
|
@@ -443,6 +552,35 @@ export async function runFanOutReview(input) {
|
|
|
443
552
|
};
|
|
444
553
|
});
|
|
445
554
|
const results = await runWithConcurrency(lensTasks, { concurrency, delayMs });
|
|
555
|
+
let contrarianResults = [];
|
|
556
|
+
if (typeof contrarianCount === 'number' &&
|
|
557
|
+
Number.isInteger(contrarianCount) &&
|
|
558
|
+
contrarianCount >= 1) {
|
|
559
|
+
const contrarianTasks = Array.from({ length: contrarianCount }, (_, i) => {
|
|
560
|
+
return async () => {
|
|
561
|
+
const generateFn = resolvedGenerateFns[1 + i];
|
|
562
|
+
const system = [CONTRARIAN_SYSTEM, UNTRUSTED_CONTENT_POLICY].join('\n');
|
|
563
|
+
const result = await generateFn(system, userPrompt);
|
|
564
|
+
const deadReason = getDeadVoiceReason(result.text);
|
|
565
|
+
if (deadReason) {
|
|
566
|
+
throw new Error(`Contrarian ${i + 1} (${result.provider}/${result.model}): ${deadReason}`);
|
|
567
|
+
}
|
|
568
|
+
return {
|
|
569
|
+
name: 'contrarian',
|
|
570
|
+
label: `Contrarian ${i + 1}`,
|
|
571
|
+
text: result.text,
|
|
572
|
+
tokensUsed: result.tokensUsed,
|
|
573
|
+
providerUsed: result.provider,
|
|
574
|
+
modelUsed: result.model,
|
|
575
|
+
};
|
|
576
|
+
};
|
|
577
|
+
});
|
|
578
|
+
emit({
|
|
579
|
+
step: 'fan-out-contrarian',
|
|
580
|
+
message: `Launching ${contrarianCount} unlensed contrarian voice(s)`,
|
|
581
|
+
});
|
|
582
|
+
contrarianResults = await runWithConcurrency(contrarianTasks, { concurrency, delayMs });
|
|
583
|
+
}
|
|
446
584
|
// ── Step 2: Collect findings from all lenses ────────────────
|
|
447
585
|
let totalTokens = 0;
|
|
448
586
|
const allFindings = [];
|
|
@@ -468,7 +606,7 @@ export async function runFanOutReview(input) {
|
|
|
468
606
|
}
|
|
469
607
|
allFindings.push(...findings);
|
|
470
608
|
// Track individual lens status
|
|
471
|
-
const statusMatch = /STATUS:\s*(PASSED|FAILED|NEEDS_HUMAN_REVIEW|SKIPPED)/i.exec(result.value.text);
|
|
609
|
+
const statusMatch = /STATUS:\s*(PASSED|FAILED|NEEDS_HUMAN_REVIEW|SKIPPED|INCONCLUSIVE)/i.exec(result.value.text);
|
|
472
610
|
const lensStatus = (statusMatch?.[1]?.toUpperCase() ?? 'NEEDS_HUMAN_REVIEW');
|
|
473
611
|
lensStatuses.push(lensStatus);
|
|
474
612
|
emit({
|
|
@@ -486,15 +624,114 @@ export async function runFanOutReview(input) {
|
|
|
486
624
|
});
|
|
487
625
|
}
|
|
488
626
|
}
|
|
627
|
+
for (let i = 0; i < contrarianResults.length; i++) {
|
|
628
|
+
const result = contrarianResults[i];
|
|
629
|
+
const voiceName = `contrarian-${i + 1}`;
|
|
630
|
+
if (!result)
|
|
631
|
+
continue;
|
|
632
|
+
if (result.status === 'fulfilled') {
|
|
633
|
+
totalTokens += result.value.tokensUsed;
|
|
634
|
+
modelsUsed.push(`${voiceName}:${result.value.providerUsed}/${result.value.modelUsed}`);
|
|
635
|
+
const findings = parseFindingsBlock(result.value.text);
|
|
636
|
+
for (const finding of findings) {
|
|
637
|
+
finding.source = 'ai';
|
|
638
|
+
if (!finding.category.includes('contrarian')) {
|
|
639
|
+
finding.category = 'contrarian';
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
allFindings.push(...findings);
|
|
643
|
+
const statusMatch = /STATUS:\s*(PASSED|FAILED|NEEDS_HUMAN_REVIEW|SKIPPED|INCONCLUSIVE)/i.exec(result.value.text);
|
|
644
|
+
const voiceStatus = (statusMatch?.[1]?.toUpperCase() ?? 'NEEDS_HUMAN_REVIEW');
|
|
645
|
+
lensStatuses.push(voiceStatus);
|
|
646
|
+
emit({
|
|
647
|
+
step: voiceName,
|
|
648
|
+
message: `✓ ${result.value.label} — ${findings.length} finding(s), ${result.value.tokensUsed} tokens`,
|
|
649
|
+
detail: result.value.text,
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
const reason = result.reason instanceof Error ? result.reason.message : String(result.reason);
|
|
654
|
+
modelsUsed.push(`${voiceName}:FAILED`);
|
|
655
|
+
emit({
|
|
656
|
+
step: voiceName,
|
|
657
|
+
message: `✗ Contrarian ${i + 1} — FAILED: ${reason}`,
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
}
|
|
489
661
|
emit({
|
|
490
662
|
step: 'fan-out-merge',
|
|
491
663
|
message: `Merging ${allFindings.length} findings from ${resolvedLenses.length} lenses...`,
|
|
492
664
|
});
|
|
493
|
-
// ── Step 3: Merge and deduplicate
|
|
494
|
-
|
|
665
|
+
// ── Step 3: Merge and deduplicate, then stamp the ledger ───
|
|
666
|
+
let mergedFindings = stampFindingLedger(mergeFindings(allFindings));
|
|
667
|
+
if (typeof refuterCount === 'number' && Number.isInteger(refuterCount) && refuterCount >= 2) {
|
|
668
|
+
const candidates = mergedFindings.filter((f) => f.severity === 'critical' && f.id);
|
|
669
|
+
if (candidates.length > 0) {
|
|
670
|
+
const contrarianN = typeof contrarianCount === 'number' &&
|
|
671
|
+
Number.isInteger(contrarianCount) &&
|
|
672
|
+
contrarianCount >= 1
|
|
673
|
+
? contrarianCount
|
|
674
|
+
: 0;
|
|
675
|
+
const refuterStart = 1 + contrarianN;
|
|
676
|
+
const candidateBlock = candidates
|
|
677
|
+
.map((c) => [
|
|
678
|
+
`- ID: ${c.id}`,
|
|
679
|
+
` LENS: ${c.lens ?? c.category}`,
|
|
680
|
+
` LOCATION: ${c.location ?? c.file}`,
|
|
681
|
+
` SEVERITY: ${c.severity}`,
|
|
682
|
+
` EVIDENCE: ${c.evidence ?? c.message}`,
|
|
683
|
+
].join('\n'))
|
|
684
|
+
.join('\n');
|
|
685
|
+
const refuterUser = `${userPrompt}\n\nCANDIDATES:\n${candidateBlock}`;
|
|
686
|
+
const refuterSystem = [REFUTER_SYSTEM, UNTRUSTED_CONTENT_POLICY].join('\n');
|
|
687
|
+
const refuteVotes = new Map();
|
|
688
|
+
for (const candidate of candidates) {
|
|
689
|
+
if (candidate.id)
|
|
690
|
+
refuteVotes.set(candidate.id, 0);
|
|
691
|
+
}
|
|
692
|
+
const refuterTasks = Array.from({ length: refuterCount }, (_, i) => {
|
|
693
|
+
return async () => {
|
|
694
|
+
const generateFn = resolvedGenerateFns[refuterStart + i];
|
|
695
|
+
const result = await generateFn(refuterSystem, refuterUser);
|
|
696
|
+
const deadReason = getDeadVoiceReason(result.text);
|
|
697
|
+
if (deadReason) {
|
|
698
|
+
throw new Error(`Refuter ${i + 1} (${result.provider}/${result.model}): ${deadReason}`);
|
|
699
|
+
}
|
|
700
|
+
return result;
|
|
701
|
+
};
|
|
702
|
+
});
|
|
703
|
+
emit({
|
|
704
|
+
step: 'fan-out-refuter',
|
|
705
|
+
message: `Launching ${refuterCount} batched refuter voice(s) on ${candidates.length} critical finding(s)`,
|
|
706
|
+
});
|
|
707
|
+
const refuterResults = await runWithConcurrency(refuterTasks, { concurrency, delayMs });
|
|
708
|
+
for (const result of refuterResults) {
|
|
709
|
+
if (result.status !== 'fulfilled')
|
|
710
|
+
continue;
|
|
711
|
+
totalTokens += result.value.tokensUsed;
|
|
712
|
+
const verdicts = parseRefuterVerdicts(result.value.text);
|
|
713
|
+
for (const candidate of candidates) {
|
|
714
|
+
if (!candidate.id)
|
|
715
|
+
continue;
|
|
716
|
+
if (verdicts.get(candidate.id) === 'refute') {
|
|
717
|
+
refuteVotes.set(candidate.id, (refuteVotes.get(candidate.id) ?? 0) + 1);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
mergedFindings = mergedFindings.map((finding) => {
|
|
722
|
+
if (finding.severity !== 'critical' || !finding.id)
|
|
723
|
+
return finding;
|
|
724
|
+
const votes = refuteVotes.get(finding.id) ?? 0;
|
|
725
|
+
if (votes >= 2) {
|
|
726
|
+
return { ...finding, ledgerStatus: FINDING_LEDGER_STATUS.refuted };
|
|
727
|
+
}
|
|
728
|
+
return finding;
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
}
|
|
495
732
|
// ── Step 4: Determine overall status ────────────────────────
|
|
496
|
-
const hasCritical = mergedFindings.some((f) => f.severity === 'critical');
|
|
497
|
-
const highCount = mergedFindings.filter((f) => f.severity === 'high').length;
|
|
733
|
+
const hasCritical = mergedFindings.some((f) => f.severity === 'critical' && f.ledgerStatus !== FINDING_LEDGER_STATUS.refuted);
|
|
734
|
+
const highCount = mergedFindings.filter((f) => f.severity === 'high' && f.ledgerStatus !== FINDING_LEDGER_STATUS.refuted).length;
|
|
498
735
|
const anyFailed = lensStatuses.includes('FAILED');
|
|
499
736
|
let status;
|
|
500
737
|
if (hasCritical || highCount >= 3) {
|
|
@@ -517,7 +754,7 @@ export async function runFanOutReview(input) {
|
|
|
517
754
|
});
|
|
518
755
|
const summary = mergedFindings.length > 0
|
|
519
756
|
? `Fan-out review with ${resolvedLenses.length} lenses found ${mergedFindings.length} unique finding(s). Lenses: ${lensSummaryParts.join(', ')}.`
|
|
520
|
-
: `Fan-out review with ${resolvedLenses.length} lenses found no issues.
|
|
757
|
+
: `Fan-out review with ${resolvedLenses.length} lenses found no issues. Lenses: ${lensSummaryParts.join(', ')}.`;
|
|
521
758
|
return {
|
|
522
759
|
status,
|
|
523
760
|
summary,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out-lenses.js","sourceRoot":"","sources":["../../src/agents/fan-out-lenses.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fan-out-lenses.js","sourceRoot":"","sources":["../../src/agents/fan-out-lenses.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic discovery of the repository paths an issue references.
|
|
3
|
+
*
|
|
4
|
+
* The complement to code-in-evidence: instead of a human naming files, extract
|
|
5
|
+
* candidate repo-relative paths from the issue's own text so that (server-side,
|
|
6
|
+
* checkout-less) triage can fetch the code the issue actually talks about.
|
|
7
|
+
*
|
|
8
|
+
* DETERMINISTIC — no model. It finds path-shaped tokens (a slash + a file
|
|
9
|
+
* extension), strips surrounding markdown/punctuation, and dedupes them in
|
|
10
|
+
* first-appearance order. It never fetches: the caller fetches each best-effort
|
|
11
|
+
* (a mentioned path may be missing or renamed) and skips the misses. Ported from
|
|
12
|
+
* the evidence-review-engine (ERE) `collectors/issue-code-discovery.ts`.
|
|
13
|
+
*
|
|
14
|
+
* ReDoS-hardened for attacker-authored input (an issue is openable by ANYONE):
|
|
15
|
+
* `PATH_TOKEN` is ANCHORED to a whole whitespace-delimited token and matched PER
|
|
16
|
+
* token (never a global scan over the full text), and over-long no-whitespace
|
|
17
|
+
* blobs are skipped — so no pathological run of `.`/`-`/`/` can drive quadratic
|
|
18
|
+
* backtracking, and a URL like `https://host/a/b.ts` fails the `://` reject.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Extract candidate repo-relative code paths from free issue text (title + body
|
|
22
|
+
* + comments, joined by the caller). Rejects absolute paths, `.`/`..` traversal,
|
|
23
|
+
* and URL fragments. Returns at most `limit` distinct paths in first-appearance
|
|
24
|
+
* order. Never throws.
|
|
25
|
+
*
|
|
26
|
+
* @param text the issue's combined title/body/comments text
|
|
27
|
+
* @param opts.limit max paths to return (default 10)
|
|
28
|
+
*/
|
|
29
|
+
export declare function discoverCodePaths(text: string, opts?: {
|
|
30
|
+
readonly limit?: number;
|
|
31
|
+
}): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Extract candidate CODE-SEARCH terms from free issue text — the complement to
|
|
34
|
+
* {@link discoverCodePaths}: instead of a path (`dir/file.ext`), this looks for
|
|
35
|
+
* an IDENTIFIER a reporter named inline, e.g. `` the bug is in `fetchGraph` ``.
|
|
36
|
+
* Used when path discovery finds too few candidates, so the caller can fall back
|
|
37
|
+
* to a GitHub code-search API call keyed on the term.
|
|
38
|
+
*
|
|
39
|
+
* BACKTICK-GATED ONLY: a bare-prose token (no surrounding backticks) is never
|
|
40
|
+
* extracted — markdown backticks are the reporter's own signal that "this is
|
|
41
|
+
* code", which keeps the false-positive rate low without an LLM. Terms are
|
|
42
|
+
* matched ANY-CASE (`fetchGraph`, `SEARCH_TERM`, `snake_case`, `foo.bar` all
|
|
43
|
+
* pass), deduped case-insensitively (first-appearance casing wins), length-
|
|
44
|
+
* bounded to `[3, 64]`, trailing `[._-]+` is trimmed, and `TERM_STOP` noise is
|
|
45
|
+
* dropped. Never throws.
|
|
46
|
+
*
|
|
47
|
+
* ReDoS-hardened for attacker-authored input the same way as
|
|
48
|
+
* {@link discoverCodePaths}: the text is capped at `MAX_TEXT`, and any backtick
|
|
49
|
+
* span longer than `MAX_TOKEN` is skipped WHOLESALE (never regex-scanned) so a
|
|
50
|
+
* pathological long span cannot drive quadratic backtracking.
|
|
51
|
+
*
|
|
52
|
+
* @param text the issue's combined title/body/comments text
|
|
53
|
+
* @param opts.limit max terms to return (default 5)
|
|
54
|
+
*/
|
|
55
|
+
export declare function discoverSearchTerms(text: string, opts?: {
|
|
56
|
+
readonly limit?: number;
|
|
57
|
+
}): string[];
|
|
58
|
+
//# sourceMappingURL=issue-code-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-code-discovery.d.ts","sourceRoot":"","sources":["../../src/agents/issue-code-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAyB5F;AAmBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CA6B9F"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic discovery of the repository paths an issue references.
|
|
3
|
+
*
|
|
4
|
+
* The complement to code-in-evidence: instead of a human naming files, extract
|
|
5
|
+
* candidate repo-relative paths from the issue's own text so that (server-side,
|
|
6
|
+
* checkout-less) triage can fetch the code the issue actually talks about.
|
|
7
|
+
*
|
|
8
|
+
* DETERMINISTIC — no model. It finds path-shaped tokens (a slash + a file
|
|
9
|
+
* extension), strips surrounding markdown/punctuation, and dedupes them in
|
|
10
|
+
* first-appearance order. It never fetches: the caller fetches each best-effort
|
|
11
|
+
* (a mentioned path may be missing or renamed) and skips the misses. Ported from
|
|
12
|
+
* the evidence-review-engine (ERE) `collectors/issue-code-discovery.ts`.
|
|
13
|
+
*
|
|
14
|
+
* ReDoS-hardened for attacker-authored input (an issue is openable by ANYONE):
|
|
15
|
+
* `PATH_TOKEN` is ANCHORED to a whole whitespace-delimited token and matched PER
|
|
16
|
+
* token (never a global scan over the full text), and over-long no-whitespace
|
|
17
|
+
* blobs are skipped — so no pathological run of `.`/`-`/`/` can drive quadratic
|
|
18
|
+
* backtracking, and a URL like `https://host/a/b.ts` fails the `://` reject.
|
|
19
|
+
*/
|
|
20
|
+
/** A path-shaped token: `dir/.../file.ext` — segments of `[\w.-]`, ending in `.ext`. */
|
|
21
|
+
const PATH_TOKEN = /^[\w.-]+(?:\/[\w.-]+)+\.[A-Za-z0-9]+$/;
|
|
22
|
+
const DEFAULT_LIMIT = 10;
|
|
23
|
+
/** Cap the scanned text (defensive belt) — the attacker controls issue/comment bodies. */
|
|
24
|
+
const MAX_TEXT = 262_144;
|
|
25
|
+
/** A real repo path is short; a longer no-whitespace token is skipped (kills ReDoS). */
|
|
26
|
+
const MAX_TOKEN = 400;
|
|
27
|
+
/**
|
|
28
|
+
* Extract candidate repo-relative code paths from free issue text (title + body
|
|
29
|
+
* + comments, joined by the caller). Rejects absolute paths, `.`/`..` traversal,
|
|
30
|
+
* and URL fragments. Returns at most `limit` distinct paths in first-appearance
|
|
31
|
+
* order. Never throws.
|
|
32
|
+
*
|
|
33
|
+
* @param text the issue's combined title/body/comments text
|
|
34
|
+
* @param opts.limit max paths to return (default 10)
|
|
35
|
+
*/
|
|
36
|
+
export function discoverCodePaths(text, opts) {
|
|
37
|
+
const limit = opts?.limit ?? DEFAULT_LIMIT;
|
|
38
|
+
if (typeof text !== 'string' || text.length === 0 || limit <= 0)
|
|
39
|
+
return [];
|
|
40
|
+
const scanned = text.slice(0, MAX_TEXT);
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
const out = [];
|
|
43
|
+
for (const rawToken of scanned.split(/\s+/)) {
|
|
44
|
+
// Skip empties and over-long no-whitespace blobs (the ReDoS belt).
|
|
45
|
+
if (rawToken.length === 0 || rawToken.length > MAX_TOKEN)
|
|
46
|
+
continue;
|
|
47
|
+
// A URL is not a repo-relative path — reject the whole token.
|
|
48
|
+
if (rawToken.includes('://'))
|
|
49
|
+
continue;
|
|
50
|
+
// Strip surrounding markdown/quote/punctuation the token may carry, e.g.
|
|
51
|
+
// `src/x.ts`, (src/x.ts), "src/x.ts", src/x.ts. — WITHOUT touching the interior.
|
|
52
|
+
const path = rawToken.replace(/^[([`'"]+/, '').replace(/[)\].,:;'"`]+$/, '');
|
|
53
|
+
// Absolute paths are not repo-relative; re-check the length after stripping.
|
|
54
|
+
if (path.length === 0 || path.length > MAX_TOKEN || path.startsWith('/'))
|
|
55
|
+
continue;
|
|
56
|
+
if (!PATH_TOKEN.test(path))
|
|
57
|
+
continue;
|
|
58
|
+
// Reject `.`/`..` segments (traversal) even though the fetch layer guards too.
|
|
59
|
+
if (path.split('/').some((seg) => seg === '.' || seg === '..'))
|
|
60
|
+
continue;
|
|
61
|
+
if (seen.has(path))
|
|
62
|
+
continue;
|
|
63
|
+
seen.add(path);
|
|
64
|
+
out.push(path);
|
|
65
|
+
if (out.length >= limit)
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
// ─── discoverSearchTerms ──────────────────────────────────────────
|
|
71
|
+
/** A backtick-quoted span: `` `...` ``. Matched globally over the (capped) text. */
|
|
72
|
+
const BACKTICK = /`([^`]+)`/g;
|
|
73
|
+
/**
|
|
74
|
+
* An identifier-shaped token inside a backtick span: starts with a letter, then
|
|
75
|
+
* letters/digits/`_`/`.`/`-`. This is the SAME charset the emitted terms are
|
|
76
|
+
* validated against downstream (the server `GH_SEARCH_TERM` regex) — kept in
|
|
77
|
+
* sync BY CONSTRUCTION since both are `[A-Za-z0-9_.-]`.
|
|
78
|
+
*/
|
|
79
|
+
const TERM_TOKEN = /[A-Za-z][A-Za-z0-9_.-]*/g;
|
|
80
|
+
const DEFAULT_TERM_LIMIT = 5;
|
|
81
|
+
const TERM_MIN = 3;
|
|
82
|
+
const TERM_MAX = 64;
|
|
83
|
+
/** Common template noise that is never a useful search term. */
|
|
84
|
+
const TERM_STOP = new Set(['const_cast', 'static_cast']);
|
|
85
|
+
/**
|
|
86
|
+
* Extract candidate CODE-SEARCH terms from free issue text — the complement to
|
|
87
|
+
* {@link discoverCodePaths}: instead of a path (`dir/file.ext`), this looks for
|
|
88
|
+
* an IDENTIFIER a reporter named inline, e.g. `` the bug is in `fetchGraph` ``.
|
|
89
|
+
* Used when path discovery finds too few candidates, so the caller can fall back
|
|
90
|
+
* to a GitHub code-search API call keyed on the term.
|
|
91
|
+
*
|
|
92
|
+
* BACKTICK-GATED ONLY: a bare-prose token (no surrounding backticks) is never
|
|
93
|
+
* extracted — markdown backticks are the reporter's own signal that "this is
|
|
94
|
+
* code", which keeps the false-positive rate low without an LLM. Terms are
|
|
95
|
+
* matched ANY-CASE (`fetchGraph`, `SEARCH_TERM`, `snake_case`, `foo.bar` all
|
|
96
|
+
* pass), deduped case-insensitively (first-appearance casing wins), length-
|
|
97
|
+
* bounded to `[3, 64]`, trailing `[._-]+` is trimmed, and `TERM_STOP` noise is
|
|
98
|
+
* dropped. Never throws.
|
|
99
|
+
*
|
|
100
|
+
* ReDoS-hardened for attacker-authored input the same way as
|
|
101
|
+
* {@link discoverCodePaths}: the text is capped at `MAX_TEXT`, and any backtick
|
|
102
|
+
* span longer than `MAX_TOKEN` is skipped WHOLESALE (never regex-scanned) so a
|
|
103
|
+
* pathological long span cannot drive quadratic backtracking.
|
|
104
|
+
*
|
|
105
|
+
* @param text the issue's combined title/body/comments text
|
|
106
|
+
* @param opts.limit max terms to return (default 5)
|
|
107
|
+
*/
|
|
108
|
+
export function discoverSearchTerms(text, opts) {
|
|
109
|
+
const limit = opts?.limit ?? DEFAULT_TERM_LIMIT;
|
|
110
|
+
if (typeof text !== 'string' || text.length === 0 || limit <= 0)
|
|
111
|
+
return [];
|
|
112
|
+
const scanned = text.slice(0, MAX_TEXT);
|
|
113
|
+
const seenKeys = new Set();
|
|
114
|
+
const out = [];
|
|
115
|
+
const add = (raw) => {
|
|
116
|
+
if (out.length >= limit)
|
|
117
|
+
return;
|
|
118
|
+
const trimmed = raw.replace(/[._-]+$/, '');
|
|
119
|
+
if (trimmed.length < TERM_MIN || trimmed.length > TERM_MAX)
|
|
120
|
+
return;
|
|
121
|
+
const key = trimmed.toLowerCase();
|
|
122
|
+
if (TERM_STOP.has(key))
|
|
123
|
+
return;
|
|
124
|
+
if (seenKeys.has(key))
|
|
125
|
+
return;
|
|
126
|
+
seenKeys.add(key);
|
|
127
|
+
out.push(trimmed);
|
|
128
|
+
};
|
|
129
|
+
for (const spanMatch of scanned.matchAll(BACKTICK)) {
|
|
130
|
+
if (out.length >= limit)
|
|
131
|
+
break;
|
|
132
|
+
const span = spanMatch[1] ?? '';
|
|
133
|
+
// Skip an over-long span WHOLESALE (the ReDoS belt) — never regex-scan it.
|
|
134
|
+
if (span.length > MAX_TOKEN)
|
|
135
|
+
continue;
|
|
136
|
+
for (const tokenMatch of span.matchAll(TERM_TOKEN)) {
|
|
137
|
+
if (out.length >= limit)
|
|
138
|
+
break;
|
|
139
|
+
add(tokenMatch[0]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return out;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=issue-code-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-code-discovery.js","sourceRoot":"","sources":["../../src/agents/issue-code-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ export interface IssueTriageSource {
|
|
|
47
47
|
ref: string;
|
|
48
48
|
}
|
|
49
49
|
/** Issue classification taxonomy (locked scope — bug | feature | question). */
|
|
50
|
-
export declare const ISSUE_CLASSIFICATIONS: readonly [
|
|
50
|
+
export declare const ISSUE_CLASSIFICATIONS: readonly ['bug', 'feature', 'question'];
|
|
51
51
|
export type IssueClassification = (typeof ISSUE_CLASSIFICATIONS)[number];
|
|
52
52
|
/** A single issue comment (author + body) — untrusted, fenced as DATA. */
|
|
53
53
|
export interface IssueComment {
|
|
@@ -82,6 +82,16 @@ export interface IssueTriageInput {
|
|
|
82
82
|
* succeeded, no error"), not omitted.
|
|
83
83
|
*/
|
|
84
84
|
reproductionEvidence?: string | null;
|
|
85
|
+
/**
|
|
86
|
+
* Repository source the issue references, fetched for the model to VERIFY the
|
|
87
|
+
* claim against (the CLI locates it from a checkout; the server fetches it
|
|
88
|
+
* remotely). Its own OPTIONAL fenced input via `wrapUntrustedSourceCode`
|
|
89
|
+
* (<SOURCE_CODE>) — semantically distinct from `memoryContext` (dedup context,
|
|
90
|
+
* framed "do not flag from this") and `reproductionEvidence` (live-app output).
|
|
91
|
+
* Attacker-influenceable (a reporter may control the branch it was read from) —
|
|
92
|
+
* absent/null preserves existing behavior exactly (no fence emitted).
|
|
93
|
+
*/
|
|
94
|
+
sourceCode?: string | null;
|
|
85
95
|
/** Provider id — carried for progress/metadata (caller resolves the backend). */
|
|
86
96
|
provider: LLMProvider;
|
|
87
97
|
/** Model id — carried for progress/metadata. */
|