ghagga-core 2.8.0 → 2.9.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/dist/acp/adapter.d.ts +91 -0
- package/dist/acp/adapter.d.ts.map +1 -0
- package/dist/acp/adapter.js +315 -0
- package/dist/acp/adapter.js.map +1 -0
- package/dist/acp/index.d.ts +4 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +2 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/types.d.ts +142 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +13 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/adversarial-qa.d.ts +60 -0
- package/dist/adversarial-qa.d.ts.map +1 -0
- package/dist/adversarial-qa.js +85 -0
- package/dist/adversarial-qa.js.map +1 -0
- package/dist/agents/audit.d.ts +18 -0
- package/dist/agents/audit.d.ts.map +1 -0
- package/dist/agents/audit.js +78 -0
- package/dist/agents/audit.js.map +1 -0
- package/dist/agents/consensus.d.ts +1 -1
- package/dist/agents/consensus.d.ts.map +1 -1
- package/dist/agents/consensus.js +10 -8
- package/dist/agents/consensus.js.map +1 -1
- package/dist/agents/diagnostic.d.ts.map +1 -1
- package/dist/agents/diagnostic.js +22 -20
- package/dist/agents/diagnostic.js.map +1 -1
- package/dist/agents/fan-out-lenses.d.ts +41 -0
- package/dist/agents/fan-out-lenses.d.ts.map +1 -1
- package/dist/agents/fan-out-lenses.js +117 -3
- package/dist/agents/fan-out-lenses.js.map +1 -1
- package/dist/agents/prompts.d.ts +12 -0
- package/dist/agents/prompts.d.ts.map +1 -1
- package/dist/agents/prompts.js +31 -0
- package/dist/agents/prompts.js.map +1 -1
- package/dist/agents/simple.d.ts +1 -1
- package/dist/agents/simple.d.ts.map +1 -1
- package/dist/agents/simple.js +10 -6
- package/dist/agents/simple.js.map +1 -1
- package/dist/agents/workflow.d.ts +1 -1
- package/dist/agents/workflow.d.ts.map +1 -1
- package/dist/agents/workflow.js +9 -8
- package/dist/agents/workflow.js.map +1 -1
- package/dist/aisvs.d.ts +44 -0
- package/dist/aisvs.d.ts.map +1 -0
- package/dist/aisvs.js +189 -0
- package/dist/aisvs.js.map +1 -0
- package/dist/checklist/context.d.ts.map +1 -1
- package/dist/checklist/context.js +2 -8
- package/dist/checklist/context.js.map +1 -1
- package/dist/checklist/defaults.d.ts.map +1 -1
- package/dist/checklist/defaults.js.map +1 -1
- package/dist/checklist/scorer.d.ts.map +1 -1
- package/dist/checklist/scorer.js +105 -12
- package/dist/checklist/scorer.js.map +1 -1
- package/dist/code-intel/client.d.ts +30 -0
- package/dist/code-intel/client.d.ts.map +1 -0
- package/dist/code-intel/client.js +91 -0
- package/dist/code-intel/client.js.map +1 -0
- package/dist/code-intel/context.d.ts +21 -0
- package/dist/code-intel/context.d.ts.map +1 -0
- package/dist/code-intel/context.js +72 -0
- package/dist/code-intel/context.js.map +1 -0
- package/dist/code-intel/index.d.ts +10 -0
- package/dist/code-intel/index.d.ts.map +1 -0
- package/dist/code-intel/index.js +11 -0
- package/dist/code-intel/index.js.map +1 -0
- package/dist/code-intel/types.d.ts +63 -0
- package/dist/code-intel/types.d.ts.map +1 -0
- package/dist/code-intel/types.js +9 -0
- package/dist/code-intel/types.js.map +1 -0
- package/dist/compress/index.d.ts +55 -0
- package/dist/compress/index.d.ts.map +1 -0
- package/dist/compress/index.js +166 -0
- package/dist/compress/index.js.map +1 -0
- package/dist/cost-footer.d.ts +38 -0
- package/dist/cost-footer.d.ts.map +1 -0
- package/dist/cost-footer.js +95 -0
- package/dist/cost-footer.js.map +1 -0
- package/dist/critique/critique.d.ts +40 -0
- package/dist/critique/critique.d.ts.map +1 -0
- package/dist/critique/critique.js +194 -0
- package/dist/critique/critique.js.map +1 -0
- package/dist/critique/cross-model.d.ts +123 -0
- package/dist/critique/cross-model.d.ts.map +1 -0
- package/dist/critique/cross-model.js +267 -0
- package/dist/critique/cross-model.js.map +1 -0
- package/dist/critique/index.d.ts +8 -0
- package/dist/critique/index.d.ts.map +1 -0
- package/dist/critique/index.js +6 -0
- package/dist/critique/index.js.map +1 -0
- package/dist/critique/prompts.d.ts +11 -0
- package/dist/critique/prompts.d.ts.map +1 -0
- package/dist/critique/prompts.js +66 -0
- package/dist/critique/prompts.js.map +1 -0
- package/dist/critique/types.d.ts +84 -0
- package/dist/critique/types.d.ts.map +1 -0
- package/dist/critique/types.js +13 -0
- package/dist/critique/types.js.map +1 -0
- package/dist/doc-validation/index.d.ts +9 -0
- package/dist/doc-validation/index.d.ts.map +1 -0
- package/dist/doc-validation/index.js +9 -0
- package/dist/doc-validation/index.js.map +1 -0
- package/dist/doc-validation/scanner.d.ts +40 -0
- package/dist/doc-validation/scanner.d.ts.map +1 -0
- package/dist/doc-validation/scanner.js +163 -0
- package/dist/doc-validation/scanner.js.map +1 -0
- package/dist/doc-validation/types.d.ts +27 -0
- package/dist/doc-validation/types.d.ts.map +1 -0
- package/dist/doc-validation/types.js +8 -0
- package/dist/doc-validation/types.js.map +1 -0
- package/dist/embed.d.ts +27 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +47 -0
- package/dist/embed.js.map +1 -0
- package/dist/enhance/enhance.d.ts.map +1 -1
- package/dist/enhance/enhance.js +7 -25
- package/dist/enhance/enhance.js.map +1 -1
- package/dist/enhance/types.d.ts +5 -0
- package/dist/enhance/types.d.ts.map +1 -1
- package/dist/exploitability/analyzer.d.ts +42 -0
- package/dist/exploitability/analyzer.d.ts.map +1 -1
- package/dist/exploitability/analyzer.js +225 -0
- package/dist/exploitability/analyzer.js.map +1 -1
- package/dist/exploitability/index.d.ts +3 -2
- package/dist/exploitability/index.d.ts.map +1 -1
- package/dist/exploitability/index.js +1 -2
- package/dist/exploitability/index.js.map +1 -1
- package/dist/exploitability/types.d.ts +27 -0
- package/dist/exploitability/types.d.ts.map +1 -1
- package/dist/fetch-fix.d.ts +60 -0
- package/dist/fetch-fix.d.ts.map +1 -0
- package/dist/fetch-fix.js +137 -0
- package/dist/fetch-fix.js.map +1 -0
- package/dist/flood/index.d.ts +34 -0
- package/dist/flood/index.d.ts.map +1 -0
- package/dist/flood/index.js +67 -0
- package/dist/flood/index.js.map +1 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +6 -1
- package/dist/format.js.map +1 -1
- package/dist/graph/blast-radius.js +2 -2
- package/dist/graph/blast-radius.js.map +1 -1
- package/dist/graph/call-chain.d.ts +36 -0
- package/dist/graph/call-chain.d.ts.map +1 -0
- package/dist/graph/call-chain.js +291 -0
- package/dist/graph/call-chain.js.map +1 -0
- package/dist/graph/index.d.ts +4 -0
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js +2 -0
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/reverse-deps.d.ts +37 -0
- package/dist/graph/reverse-deps.d.ts.map +1 -0
- package/dist/graph/reverse-deps.js +136 -0
- package/dist/graph/reverse-deps.js.map +1 -0
- package/dist/index.d.ts +50 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -7
- package/dist/index.js.map +1 -1
- package/dist/injection-corpus.d.ts +41 -0
- package/dist/injection-corpus.d.ts.map +1 -0
- package/dist/injection-corpus.js +181 -0
- package/dist/injection-corpus.js.map +1 -0
- package/dist/latent-comms.d.ts +31 -0
- package/dist/latent-comms.d.ts.map +1 -0
- package/dist/latent-comms.js +139 -0
- package/dist/latent-comms.js.map +1 -0
- package/dist/memory/pageindex/chunker.d.ts +33 -0
- package/dist/memory/pageindex/chunker.d.ts.map +1 -0
- package/dist/memory/pageindex/chunker.js +112 -0
- package/dist/memory/pageindex/chunker.js.map +1 -0
- package/dist/memory/pageindex/example.d.ts +22 -0
- package/dist/memory/pageindex/example.d.ts.map +1 -0
- package/dist/memory/pageindex/example.js +94 -0
- package/dist/memory/pageindex/example.js.map +1 -0
- package/dist/memory/pageindex/index.d.ts +15 -0
- package/dist/memory/pageindex/index.d.ts.map +1 -0
- package/dist/memory/pageindex/index.js +17 -0
- package/dist/memory/pageindex/index.js.map +1 -0
- package/dist/memory/pageindex/service.d.ts +53 -0
- package/dist/memory/pageindex/service.d.ts.map +1 -0
- package/dist/memory/pageindex/service.js +229 -0
- package/dist/memory/pageindex/service.js.map +1 -0
- package/dist/memory/pageindex/types.d.ts +67 -0
- package/dist/memory/pageindex/types.d.ts.map +1 -0
- package/dist/memory/pageindex/types.js +14 -0
- package/dist/memory/pageindex/types.js.map +1 -0
- package/dist/memory/persist.d.ts.map +1 -1
- package/dist/memory/persist.js +6 -2
- package/dist/memory/persist.js.map +1 -1
- package/dist/memory/sqlite.d.ts +69 -2
- package/dist/memory/sqlite.d.ts.map +1 -1
- package/dist/memory/sqlite.js +312 -5
- package/dist/memory/sqlite.js.map +1 -1
- package/dist/memory/taxonomy.d.ts +34 -0
- package/dist/memory/taxonomy.d.ts.map +1 -0
- package/dist/memory/taxonomy.js +189 -0
- package/dist/memory/taxonomy.js.map +1 -0
- package/dist/memory/versioning.d.ts.map +1 -1
- package/dist/memory/versioning.js.map +1 -1
- package/dist/negative.d.ts +23 -0
- package/dist/negative.d.ts.map +1 -0
- package/dist/negative.js +40 -0
- package/dist/negative.js.map +1 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +455 -46
- package/dist/pipeline.js.map +1 -1
- package/dist/prompt-intel.d.ts +39 -0
- package/dist/prompt-intel.d.ts.map +1 -0
- package/dist/prompt-intel.js +148 -0
- package/dist/prompt-intel.js.map +1 -0
- package/dist/providers/cli-bridge.d.ts +4 -0
- package/dist/providers/cli-bridge.d.ts.map +1 -1
- package/dist/providers/cli-bridge.js +4 -0
- package/dist/providers/cli-bridge.js.map +1 -1
- package/dist/providers/generate-fn.d.ts +3 -15
- package/dist/providers/generate-fn.d.ts.map +1 -1
- package/dist/providers/generate-fn.js +3 -30
- package/dist/providers/generate-fn.js.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.d.ts +15 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +30 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/ranking/index.d.ts +9 -0
- package/dist/ranking/index.d.ts.map +1 -0
- package/dist/ranking/index.js +82 -0
- package/dist/ranking/index.js.map +1 -0
- package/dist/recursive/circuit-breaker.d.ts +36 -0
- package/dist/recursive/circuit-breaker.d.ts.map +1 -0
- package/dist/recursive/circuit-breaker.js +62 -0
- package/dist/recursive/circuit-breaker.js.map +1 -0
- package/dist/recursive/index.d.ts +4 -0
- package/dist/recursive/index.d.ts.map +1 -1
- package/dist/recursive/index.js +18 -1
- package/dist/recursive/index.js.map +1 -1
- package/dist/recursive/types.d.ts +2 -0
- package/dist/recursive/types.d.ts.map +1 -1
- package/dist/recursive/types.js +1 -0
- package/dist/recursive/types.js.map +1 -1
- package/dist/scope/diff-mapper.js.map +1 -1
- package/dist/scope/entity-diff.d.ts +58 -0
- package/dist/scope/entity-diff.d.ts.map +1 -0
- package/dist/scope/entity-diff.js +224 -0
- package/dist/scope/entity-diff.js.map +1 -0
- package/dist/scope/extractor.d.ts.map +1 -1
- package/dist/scope/extractor.js.map +1 -1
- package/dist/scope/index.d.ts +3 -1
- package/dist/scope/index.d.ts.map +1 -1
- package/dist/scope/index.js +3 -0
- package/dist/scope/index.js.map +1 -1
- package/dist/scope/parser.d.ts +1 -1
- package/dist/scope/parser.d.ts.map +1 -1
- package/dist/scope/parser.js.map +1 -1
- package/dist/scope/types.d.ts +32 -0
- package/dist/scope/types.d.ts.map +1 -1
- package/dist/scope/types.js +7 -1
- package/dist/scope/types.js.map +1 -1
- package/dist/search/index.d.ts +11 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +10 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/indexer.d.ts +67 -0
- package/dist/search/indexer.d.ts.map +1 -0
- package/dist/search/indexer.js +196 -0
- package/dist/search/indexer.js.map +1 -0
- package/dist/search/searcher.d.ts +34 -0
- package/dist/search/searcher.d.ts.map +1 -0
- package/dist/search/searcher.js +101 -0
- package/dist/search/searcher.js.map +1 -0
- package/dist/search/types.d.ts +81 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +8 -0
- package/dist/search/types.js.map +1 -0
- package/dist/self-improve/index.d.ts +53 -0
- package/dist/self-improve/index.d.ts.map +1 -0
- package/dist/self-improve/index.js +136 -0
- package/dist/self-improve/index.js.map +1 -0
- package/dist/semantic-diff/index.d.ts +31 -0
- package/dist/semantic-diff/index.d.ts.map +1 -0
- package/dist/semantic-diff/index.js +215 -0
- package/dist/semantic-diff/index.js.map +1 -0
- package/dist/testing/index.d.ts +67 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +76 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/vitest-helpers.d.ts +26 -0
- package/dist/testing/vitest-helpers.d.ts.map +1 -0
- package/dist/testing/vitest-helpers.js +37 -0
- package/dist/testing/vitest-helpers.js.map +1 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/remote-query.d.ts +40 -0
- package/dist/tools/remote-query.d.ts.map +1 -0
- package/dist/tools/remote-query.js +71 -0
- package/dist/tools/remote-query.js.map +1 -0
- package/dist/tracing/index.d.ts +39 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +70 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/trajectory.d.ts +65 -0
- package/dist/trajectory.d.ts.map +1 -0
- package/dist/trajectory.js +126 -0
- package/dist/trajectory.js.map +1 -0
- package/dist/trust/index.d.ts +34 -0
- package/dist/trust/index.d.ts.map +1 -0
- package/dist/trust/index.js +78 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/types.d.ts +144 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -11
- package/dist/types.js.map +1 -1
- package/package.json +1 -3
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doc-Validation module barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Bidirectional code-doc validation that detects stale
|
|
5
|
+
* documentation references when code symbols change.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Scanner ──────────────────────────────────────────────────
|
|
8
|
+
export { extractChangedSymbols, isDocFile, scanDocsForSymbols } from './scanner.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doc-validation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,iEAAiE;AAEjE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doc-Validation Scanner
|
|
3
|
+
*
|
|
4
|
+
* Extracts changed symbol names from unified diffs and scans
|
|
5
|
+
* documentation files for references to those symbols.
|
|
6
|
+
*
|
|
7
|
+
* Pure functions with no side effects.
|
|
8
|
+
*/
|
|
9
|
+
import type { DiffFile } from '../utils/diff.js';
|
|
10
|
+
import type { DocValidationResult } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Extract changed symbol names from a unified diff string.
|
|
13
|
+
*
|
|
14
|
+
* Scans added lines (lines starting with `+`) for function, class,
|
|
15
|
+
* interface, and type declarations. Returns unique symbol names.
|
|
16
|
+
*
|
|
17
|
+
* @param diff - Full unified diff string
|
|
18
|
+
* @returns Array of unique changed symbol names (filtered by min length)
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractChangedSymbols(diff: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Check if a file path is a documentation file based on extension.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isDocFile(filePath: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Scan documentation files for references to changed symbols.
|
|
27
|
+
*
|
|
28
|
+
* For each doc file, searches line-by-line for symbol references
|
|
29
|
+
* (backtick-wrapped or plain word boundaries). If the doc file
|
|
30
|
+
* was NOT in the changed files list, its references are flagged
|
|
31
|
+
* as stale.
|
|
32
|
+
*
|
|
33
|
+
* @param symbols - Changed symbol names to search for
|
|
34
|
+
* @param allFiles - All files from the diff (used to find doc content and check if updated)
|
|
35
|
+
* @param changedCodeFiles - Paths of files that were changed in the diff
|
|
36
|
+
* @param docContents - Optional map of doc file path → content (for docs NOT in the diff)
|
|
37
|
+
* @returns DocValidationResult with stale references
|
|
38
|
+
*/
|
|
39
|
+
export declare function scanDocsForSymbols(symbols: string[], allFiles: DiffFile[], changedCodeFiles: string[], docContents?: Map<string, string>): DocValidationResult;
|
|
40
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/doc-validation/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAgB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAwCpE;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB5D;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,QAAQ,EAAE,EACpB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,mBAAmB,CAyCrB"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doc-Validation Scanner
|
|
3
|
+
*
|
|
4
|
+
* Extracts changed symbol names from unified diffs and scans
|
|
5
|
+
* documentation files for references to those symbols.
|
|
6
|
+
*
|
|
7
|
+
* Pure functions with no side effects.
|
|
8
|
+
*/
|
|
9
|
+
// ─── Constants ────────────────────────────────────────────────
|
|
10
|
+
/** Minimum symbol name length to avoid false positives on common words. */
|
|
11
|
+
const MIN_SYMBOL_LENGTH = 3;
|
|
12
|
+
/**
|
|
13
|
+
* Regex patterns to extract symbol declarations from diff added lines.
|
|
14
|
+
*
|
|
15
|
+
* Matches:
|
|
16
|
+
* - `function name(` / `async function name(`
|
|
17
|
+
* - `class Name` / `abstract class Name`
|
|
18
|
+
* - `interface Name`
|
|
19
|
+
* - `type Name`
|
|
20
|
+
* - `export function name(`
|
|
21
|
+
* - `def name(` (Python)
|
|
22
|
+
* - `func name(` / `func (r *Receiver) name(` (Go)
|
|
23
|
+
*/
|
|
24
|
+
const SYMBOL_DECLARATION_PATTERNS = [
|
|
25
|
+
// TypeScript / JavaScript
|
|
26
|
+
/(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*[(<]/,
|
|
27
|
+
/(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/,
|
|
28
|
+
/(?:export\s+)?interface\s+(\w+)/,
|
|
29
|
+
/(?:export\s+)?type\s+(\w+)\s*[=<{]/,
|
|
30
|
+
// Arrow function: const name = (...) =>
|
|
31
|
+
/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(/,
|
|
32
|
+
// Python
|
|
33
|
+
/def\s+(\w+)\s*\(/,
|
|
34
|
+
/class\s+(\w+)\s*[:(]/,
|
|
35
|
+
// Go
|
|
36
|
+
/func\s+(\w+)\s*\(/,
|
|
37
|
+
/func\s+\([^)]+\)\s+(\w+)\s*\(/,
|
|
38
|
+
];
|
|
39
|
+
/** File extensions considered documentation. */
|
|
40
|
+
const DOC_EXTENSIONS = new Set(['.md', '.mdx', '.rst', '.txt', '.adoc']);
|
|
41
|
+
// ─── Symbol Extraction ───────────────────────────────────────
|
|
42
|
+
/**
|
|
43
|
+
* Extract changed symbol names from a unified diff string.
|
|
44
|
+
*
|
|
45
|
+
* Scans added lines (lines starting with `+`) for function, class,
|
|
46
|
+
* interface, and type declarations. Returns unique symbol names.
|
|
47
|
+
*
|
|
48
|
+
* @param diff - Full unified diff string
|
|
49
|
+
* @returns Array of unique changed symbol names (filtered by min length)
|
|
50
|
+
*/
|
|
51
|
+
export function extractChangedSymbols(diff) {
|
|
52
|
+
const symbols = new Set();
|
|
53
|
+
const lines = diff.split('\n');
|
|
54
|
+
for (const line of lines) {
|
|
55
|
+
// Only scan added/modified lines (start with +, but not +++ header)
|
|
56
|
+
if (!line.startsWith('+') || line.startsWith('+++'))
|
|
57
|
+
continue;
|
|
58
|
+
const content = line.slice(1); // Remove the leading +
|
|
59
|
+
for (const pattern of SYMBOL_DECLARATION_PATTERNS) {
|
|
60
|
+
const match = pattern.exec(content);
|
|
61
|
+
if (match?.[1] && match[1].length >= MIN_SYMBOL_LENGTH) {
|
|
62
|
+
symbols.add(match[1]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return [...symbols];
|
|
67
|
+
}
|
|
68
|
+
// ─── Doc Reference Scanning ──────────────────────────────────
|
|
69
|
+
/**
|
|
70
|
+
* Check if a file path is a documentation file based on extension.
|
|
71
|
+
*/
|
|
72
|
+
export function isDocFile(filePath) {
|
|
73
|
+
const lastDot = filePath.lastIndexOf('.');
|
|
74
|
+
if (lastDot === -1)
|
|
75
|
+
return false;
|
|
76
|
+
return DOC_EXTENSIONS.has(filePath.slice(lastDot).toLowerCase());
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Scan documentation files for references to changed symbols.
|
|
80
|
+
*
|
|
81
|
+
* For each doc file, searches line-by-line for symbol references
|
|
82
|
+
* (backtick-wrapped or plain word boundaries). If the doc file
|
|
83
|
+
* was NOT in the changed files list, its references are flagged
|
|
84
|
+
* as stale.
|
|
85
|
+
*
|
|
86
|
+
* @param symbols - Changed symbol names to search for
|
|
87
|
+
* @param allFiles - All files from the diff (used to find doc content and check if updated)
|
|
88
|
+
* @param changedCodeFiles - Paths of files that were changed in the diff
|
|
89
|
+
* @param docContents - Optional map of doc file path → content (for docs NOT in the diff)
|
|
90
|
+
* @returns DocValidationResult with stale references
|
|
91
|
+
*/
|
|
92
|
+
export function scanDocsForSymbols(symbols, allFiles, changedCodeFiles, docContents) {
|
|
93
|
+
if (symbols.length === 0) {
|
|
94
|
+
return { changedSymbols: [], staleReferences: [], docsScanned: 0 };
|
|
95
|
+
}
|
|
96
|
+
const changedSet = new Set(changedCodeFiles);
|
|
97
|
+
const staleReferences = [];
|
|
98
|
+
let docsScanned = 0;
|
|
99
|
+
// Build regex for all symbols (word boundary match)
|
|
100
|
+
const symbolPatterns = symbols.map((s) => ({
|
|
101
|
+
symbol: s,
|
|
102
|
+
regex: new RegExp(`(?:\`${escapeRegex(s)}(?:\\(\\))?\`|\\b${escapeRegex(s)}\\b)`, 'g'),
|
|
103
|
+
}));
|
|
104
|
+
// Scan doc files from the diff
|
|
105
|
+
for (const file of allFiles) {
|
|
106
|
+
if (!isDocFile(file.path))
|
|
107
|
+
continue;
|
|
108
|
+
docsScanned++;
|
|
109
|
+
// If doc is in the diff (was updated), skip — it's not stale
|
|
110
|
+
if (changedSet.has(file.path))
|
|
111
|
+
continue;
|
|
112
|
+
// This doc was NOT changed — scan for symbol references
|
|
113
|
+
scanContent(file.path, file.content, symbolPatterns, staleReferences);
|
|
114
|
+
}
|
|
115
|
+
// Scan external doc contents (docs not in the diff at all)
|
|
116
|
+
if (docContents) {
|
|
117
|
+
for (const [filePath, content] of docContents) {
|
|
118
|
+
if (!isDocFile(filePath))
|
|
119
|
+
continue;
|
|
120
|
+
docsScanned++;
|
|
121
|
+
scanContent(filePath, content, symbolPatterns, staleReferences);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
changedSymbols: symbols,
|
|
126
|
+
staleReferences,
|
|
127
|
+
docsScanned,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// ─── Helpers ─────────────────────────────────────────────────
|
|
131
|
+
/**
|
|
132
|
+
* Scan a single document's content for symbol references.
|
|
133
|
+
*/
|
|
134
|
+
function scanContent(filePath, content, symbolPatterns, results) {
|
|
135
|
+
const lines = content.split('\n');
|
|
136
|
+
for (let i = 0; i < lines.length; i++) {
|
|
137
|
+
const line = lines[i];
|
|
138
|
+
// Skip diff header lines
|
|
139
|
+
if (line.startsWith('diff --git') || line.startsWith('---') || line.startsWith('+++')) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Strip diff markers for content matching
|
|
143
|
+
const cleanLine = line.startsWith('+') || line.startsWith('-') ? line.slice(1) : line;
|
|
144
|
+
for (const { symbol, regex } of symbolPatterns) {
|
|
145
|
+
regex.lastIndex = 0; // Reset regex state
|
|
146
|
+
if (regex.test(cleanLine)) {
|
|
147
|
+
results.push({
|
|
148
|
+
file: filePath,
|
|
149
|
+
line: i + 1,
|
|
150
|
+
symbol,
|
|
151
|
+
context: cleanLine.trim().slice(0, 120),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Escape special regex characters in a string.
|
|
159
|
+
*/
|
|
160
|
+
function escapeRegex(str) {
|
|
161
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/doc-validation/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,iEAAiE;AAEjE,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;;;;;;;;GAWG;AACH,MAAM,2BAA2B,GAAa;IAC5C,0BAA0B;IAC1B,oDAAoD;IACpD,6CAA6C;IAC7C,iCAAiC;IACjC,oCAAoC;IACpC,wCAAwC;IACxC,+DAA+D;IAC/D,SAAS;IACT,kBAAkB;IAClB,sBAAsB;IACtB,KAAK;IACL,mBAAmB;IACnB,+BAA+B;CAChC,CAAC;AAEF,gDAAgD;AAChD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzE,gEAAgE;AAEhE;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QAE9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAEtD,KAAK,MAAM,OAAO,IAAI,2BAA2B,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,gEAAgE;AAEhE;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAiB,EACjB,QAAoB,EACpB,gBAA0B,EAC1B,WAAiC;IAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAmB,EAAE,CAAC;IAC3C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,oDAAoD;IACpD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC,oBAAoB,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;KACvF,CAAC,CAAC,CAAC;IAEJ,+BAA+B;IAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,WAAW,EAAE,CAAC;QAEd,6DAA6D;QAC7D,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAExC,wDAAwD;QACxD,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IACxE,CAAC;IAED,2DAA2D;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACnC,WAAW,EAAE,CAAC;YACd,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO;QACL,cAAc,EAAE,OAAO;QACvB,eAAe;QACf,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,gEAAgE;AAEhE;;GAEG;AACH,SAAS,WAAW,CAClB,QAAgB,EAChB,OAAe,EACf,cAAwD,EACxD,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAEvB,yBAAyB;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtF,SAAS;QACX,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtF,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,cAAc,EAAE,CAAC;YAC/C,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,oBAAoB;YACzC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM;oBACN,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doc-Validation Types
|
|
3
|
+
*
|
|
4
|
+
* Types for the bidirectional code-doc validation module.
|
|
5
|
+
* Detects stale documentation references when code symbols change.
|
|
6
|
+
*/
|
|
7
|
+
/** A reference to a code symbol found in a documentation file. */
|
|
8
|
+
export interface DocReference {
|
|
9
|
+
/** Path to the documentation file */
|
|
10
|
+
file: string;
|
|
11
|
+
/** 1-based line number where the reference was found */
|
|
12
|
+
line: number;
|
|
13
|
+
/** The matched symbol name */
|
|
14
|
+
symbol: string;
|
|
15
|
+
/** Surrounding text snippet for context */
|
|
16
|
+
context: string;
|
|
17
|
+
}
|
|
18
|
+
/** Result of the code-doc validation step. */
|
|
19
|
+
export interface DocValidationResult {
|
|
20
|
+
/** Symbol names extracted from the diff as changed */
|
|
21
|
+
changedSymbols: string[];
|
|
22
|
+
/** Doc references to changed symbols where the doc was NOT updated */
|
|
23
|
+
staleReferences: DocReference[];
|
|
24
|
+
/** Number of documentation files scanned */
|
|
25
|
+
docsScanned: number;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/doc-validation/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IAEb,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IAEf,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,sEAAsE;IACtE,eAAe,EAAE,YAAY,EAAE,CAAC;IAEhC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/doc-validation/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/embed.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding abstraction layer for GHAGGA intelligence features.
|
|
3
|
+
*
|
|
4
|
+
* Provides the shared EmbeddingProvider interface used by:
|
|
5
|
+
* - Feature #4: Hybrid search (BM25 + semantic vector search)
|
|
6
|
+
* - Feature #12: Semantic ranking of findings
|
|
7
|
+
* - Feature #13: Negative example filtering
|
|
8
|
+
*/
|
|
9
|
+
export interface EmbeddingProvider {
|
|
10
|
+
embed(text: string): Promise<number[]>;
|
|
11
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
12
|
+
dimension: number;
|
|
13
|
+
}
|
|
14
|
+
export type EmbeddingProviderFactory = () => EmbeddingProvider | null;
|
|
15
|
+
/**
|
|
16
|
+
* Cosine similarity between two vectors of equal length.
|
|
17
|
+
*/
|
|
18
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
19
|
+
/**
|
|
20
|
+
* Serialize a float32 embedding vector to a Buffer for SQLite BLOB storage.
|
|
21
|
+
*/
|
|
22
|
+
export declare function serializeEmbedding(vec: number[]): Buffer;
|
|
23
|
+
/**
|
|
24
|
+
* Deserialize a Buffer from SQLite BLOB back to a float32 embedding vector.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deserializeEmbedding(buf: Buffer): number[];
|
|
27
|
+
//# sourceMappingURL=embed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAItE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAWjE;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAMxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAO1D"}
|
package/dist/embed.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding abstraction layer for GHAGGA intelligence features.
|
|
3
|
+
*
|
|
4
|
+
* Provides the shared EmbeddingProvider interface used by:
|
|
5
|
+
* - Feature #4: Hybrid search (BM25 + semantic vector search)
|
|
6
|
+
* - Feature #12: Semantic ranking of findings
|
|
7
|
+
* - Feature #13: Negative example filtering
|
|
8
|
+
*/
|
|
9
|
+
// ─── Vector Math ───────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Cosine similarity between two vectors of equal length.
|
|
12
|
+
*/
|
|
13
|
+
export function cosineSimilarity(a, b) {
|
|
14
|
+
let dot = 0;
|
|
15
|
+
let normA = 0;
|
|
16
|
+
let normB = 0;
|
|
17
|
+
for (let i = 0; i < a.length; i++) {
|
|
18
|
+
dot += a[i] * b[i];
|
|
19
|
+
normA += a[i] * a[i];
|
|
20
|
+
normB += b[i] * b[i];
|
|
21
|
+
}
|
|
22
|
+
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
23
|
+
return denom === 0 ? 0 : dot / denom;
|
|
24
|
+
}
|
|
25
|
+
// ─── SQLite Serialization ──────────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Serialize a float32 embedding vector to a Buffer for SQLite BLOB storage.
|
|
28
|
+
*/
|
|
29
|
+
export function serializeEmbedding(vec) {
|
|
30
|
+
const buf = Buffer.allocUnsafe(vec.length * 4);
|
|
31
|
+
for (let i = 0; i < vec.length; i++) {
|
|
32
|
+
buf.writeFloatLE(vec[i], i * 4);
|
|
33
|
+
}
|
|
34
|
+
return buf;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Deserialize a Buffer from SQLite BLOB back to a float32 embedding vector.
|
|
38
|
+
*/
|
|
39
|
+
export function deserializeEmbedding(buf) {
|
|
40
|
+
const len = buf.length / 4;
|
|
41
|
+
const vec = new Array(len);
|
|
42
|
+
for (let i = 0; i < len; i++) {
|
|
43
|
+
vec[i] = buf.readFloatLE(i * 4);
|
|
44
|
+
}
|
|
45
|
+
return vec;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=embed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,kEAAkE;AAElE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;AACvC,CAAC;AAED,kEAAkE;AAElE;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAa,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhance.d.ts","sourceRoot":"","sources":["../../src/enhance/enhance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"enhance.d.ts","sourceRoot":"","sources":["../../src/enhance/enhance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/E,0DAA0D;AAC1D,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC,CAkD/D;AA+BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,aAAa,EAAE,aAAa,GAC3B,qBAAqB,EAAE,CAmCzB"}
|
package/dist/enhance/enhance.js
CHANGED
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* Calls an LLM to group, prioritize, and filter static analysis findings.
|
|
5
5
|
* Failures are non-blocking — returns empty result on any error.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import { generateTextWithTimeout } from '../utils/llm-timeout.js';
|
|
7
|
+
import { createOllamaGenerateFn } from '../providers/ollama.js';
|
|
9
8
|
import { buildEnhancePrompt, ENHANCE_SYSTEM_PROMPT, truncateByTokenBudget } from './prompt.js';
|
|
10
9
|
/** Default token budget for the enhance prompt (4K tokens). */
|
|
11
10
|
const DEFAULT_TOKEN_BUDGET = 4000;
|
|
@@ -39,35 +38,18 @@ export async function enhanceFindings(input) {
|
|
|
39
38
|
// Truncate to fit token budget
|
|
40
39
|
const truncated = truncateByTokenBudget(input.findings, DEFAULT_TOKEN_BUDGET);
|
|
41
40
|
const prompt = buildEnhancePrompt(truncated);
|
|
42
|
-
//
|
|
43
|
-
const
|
|
44
|
-
const response = await
|
|
45
|
-
model,
|
|
46
|
-
system: ENHANCE_SYSTEM_PROMPT,
|
|
47
|
-
prompt,
|
|
48
|
-
maxOutputTokens: 2000,
|
|
49
|
-
}, { provider: input.provider, model: input.model });
|
|
50
|
-
// Timeout: return empty result (enhance is already non-blocking)
|
|
51
|
-
if (response === null) {
|
|
52
|
-
return {
|
|
53
|
-
result: EMPTY_RESULT,
|
|
54
|
-
metadata: {
|
|
55
|
-
model: input.model,
|
|
56
|
-
tokenUsage: { input: 0, output: 0 },
|
|
57
|
-
groupCount: 0,
|
|
58
|
-
filteredCount: 0,
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
41
|
+
// Use injected generateFn if provided, otherwise fall back to Ollama
|
|
42
|
+
const generateFn = input.generateFn ?? createOllamaGenerateFn(input.model);
|
|
43
|
+
const response = await generateFn(ENHANCE_SYSTEM_PROMPT, prompt);
|
|
62
44
|
// Parse response
|
|
63
45
|
const parsed = parseEnhanceResponse(response.text);
|
|
64
46
|
return {
|
|
65
47
|
result: parsed,
|
|
66
48
|
metadata: {
|
|
67
|
-
model:
|
|
49
|
+
model: response.model,
|
|
68
50
|
tokenUsage: {
|
|
69
|
-
input: response.
|
|
70
|
-
output:
|
|
51
|
+
input: response.tokensUsed,
|
|
52
|
+
output: 0,
|
|
71
53
|
},
|
|
72
54
|
groupCount: parsed.groups.length,
|
|
73
55
|
filteredCount: parsed.filtered.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../src/enhance/enhance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../src/enhance/enhance.ts"],"names":[],"mappings":"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"}
|
package/dist/enhance/types.d.ts
CHANGED
|
@@ -9,6 +9,11 @@ export interface EnhanceInput {
|
|
|
9
9
|
provider: string;
|
|
10
10
|
model: string;
|
|
11
11
|
apiKey: string;
|
|
12
|
+
/**
|
|
13
|
+
* Optional backend-agnostic generation function.
|
|
14
|
+
* When provided, used instead of creating one from provider/model/apiKey.
|
|
15
|
+
*/
|
|
16
|
+
generateFn?: import('../providers/generate-fn.js').GenerateTextFn;
|
|
12
17
|
}
|
|
13
18
|
/** Compact finding representation for the AI prompt (token-efficient). */
|
|
14
19
|
export interface EnhanceFindingSummary {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enhance/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enhance/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;CACnE;AAED,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kDAAkD;IAClD,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -72,4 +72,46 @@ export declare function checkReachability(graph: DependencyGraph, entryPoints: s
|
|
|
72
72
|
* @returns The same findings array with exploitability fields added to CVE findings
|
|
73
73
|
*/
|
|
74
74
|
export declare function analyzeExploitability(findings: ReviewFinding[], graph: DependencyGraph | null): ReviewFinding[];
|
|
75
|
+
/**
|
|
76
|
+
* Callback to read a file's content by path.
|
|
77
|
+
* Returns null if the file cannot be read.
|
|
78
|
+
*/
|
|
79
|
+
export type FileReader = (filePath: string) => Promise<string | null>;
|
|
80
|
+
/**
|
|
81
|
+
* Extract imported symbol names from file content for a given package.
|
|
82
|
+
*
|
|
83
|
+
* @param content - File source content
|
|
84
|
+
* @param packageName - External package to search for
|
|
85
|
+
* @returns Array of imported symbol names (deduplicated)
|
|
86
|
+
*/
|
|
87
|
+
export declare function extractImportedSymbols(content: string, packageName: string): string[];
|
|
88
|
+
/**
|
|
89
|
+
* Detect which of the given symbols are actually called in file content.
|
|
90
|
+
*
|
|
91
|
+
* Uses regex to find function-call-like patterns: `symbol(`, `symbol.`, `symbol[`
|
|
92
|
+
* Excludes matches inside comments (single-line // and multi-line).
|
|
93
|
+
*
|
|
94
|
+
* @param content - File source content
|
|
95
|
+
* @param symbols - Symbol names to search for
|
|
96
|
+
* @returns Array of symbols that appear to be used (called/accessed)
|
|
97
|
+
*/
|
|
98
|
+
export declare function detectSymbolCalls(content: string, symbols: string[]): string[];
|
|
99
|
+
/**
|
|
100
|
+
* Analyze function-level usage of vulnerable packages in CVE findings.
|
|
101
|
+
*
|
|
102
|
+
* For each Trivy CVE finding that has import sites (from exploitability analysis),
|
|
103
|
+
* reads the importing files, extracts the imported symbols, and checks if those
|
|
104
|
+
* symbols are actually called.
|
|
105
|
+
*
|
|
106
|
+
* Degrades gracefully:
|
|
107
|
+
* - No graph → skips analysis (no usageLabel set)
|
|
108
|
+
* - No import sites → labels as not-in-use
|
|
109
|
+
* - Namespace imports → labels as imported-not-called (can't determine specific usage)
|
|
110
|
+
*
|
|
111
|
+
* @param findings - Review findings (already enriched with exploitability)
|
|
112
|
+
* @param graph - The project's dependency graph (null if unavailable)
|
|
113
|
+
* @param readFile - Callback to read file content by path
|
|
114
|
+
* @returns The same findings array with usage fields added to CVE findings
|
|
115
|
+
*/
|
|
116
|
+
export declare function analyzeUsage(findings: ReviewFinding[], graph: DependencyGraph | null, readFile: FileReader): Promise<ReviewFinding[]>;
|
|
75
117
|
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/exploitability/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/exploitability/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqBjD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAyBpF;AAID;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBzF;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,CAsBhE;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,MAAM,EAAE,GACpB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA8CvB;AAoDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,EAAE,eAAe,GAAG,IAAI,GAC5B,aAAa,EAAE,CAqFjB;AAID;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AA4CtE;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAmCrF;AAID;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAkC9E;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,EAAE,eAAe,GAAG,IAAI,EAC7B,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,EAAE,CAAC,CAqG1B"}
|