@seanhogg/builderforce-memory 2026.10.27 → 2026.10.29
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/ingest/IngestionPipeline.d.ts +1 -8
- package/dist/ingest/IngestionPipeline.d.ts.map +1 -1
- package/dist/ingest/IngestionPipeline.js +3 -15
- package/dist/ingest/IngestionPipeline.js.map +1 -1
- package/dist/ingest/docsExtract.d.ts +30 -0
- package/dist/ingest/docsExtract.d.ts.map +1 -0
- package/dist/ingest/docsExtract.js +221 -0
- package/dist/ingest/docsExtract.js.map +1 -0
- package/dist/ingest/hash.d.ts +15 -0
- package/dist/ingest/hash.d.ts.map +1 -0
- package/dist/ingest/hash.js +22 -0
- package/dist/ingest/hash.js.map +1 -0
- package/dist/ingest/parsers.d.ts.map +1 -1
- package/dist/ingest/parsers.js +4 -0
- package/dist/ingest/parsers.js.map +1 -1
- package/dist/ingest/types.d.ts +7 -0
- package/dist/ingest/types.d.ts.map +1 -1
- package/dist/ingest/types.js.map +1 -1
- package/dist/knowledge/build.d.ts +24 -0
- package/dist/knowledge/build.d.ts.map +1 -0
- package/dist/knowledge/build.js +263 -0
- package/dist/knowledge/build.js.map +1 -0
- package/dist/knowledge/cards.d.ts +17 -0
- package/dist/knowledge/cards.d.ts.map +1 -0
- package/dist/knowledge/cards.js +118 -0
- package/dist/knowledge/cards.js.map +1 -0
- package/dist/knowledge/findings.d.ts +24 -0
- package/dist/knowledge/findings.d.ts.map +1 -0
- package/dist/knowledge/findings.js +152 -0
- package/dist/knowledge/findings.js.map +1 -0
- package/dist/knowledge/importance.d.ts +21 -0
- package/dist/knowledge/importance.d.ts.map +1 -0
- package/dist/knowledge/importance.js +70 -0
- package/dist/knowledge/importance.js.map +1 -0
- package/dist/knowledge/index.d.ts +31 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +26 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/judge.d.ts +86 -0
- package/dist/knowledge/judge.d.ts.map +1 -0
- package/dist/knowledge/judge.js +213 -0
- package/dist/knowledge/judge.js.map +1 -0
- package/dist/knowledge/model.d.ts +333 -0
- package/dist/knowledge/model.d.ts.map +1 -0
- package/dist/knowledge/model.js +13 -0
- package/dist/knowledge/model.js.map +1 -0
- package/dist/knowledge/packs/docs.d.ts +17 -0
- package/dist/knowledge/packs/docs.d.ts.map +1 -0
- package/dist/knowledge/packs/docs.js +89 -0
- package/dist/knowledge/packs/docs.js.map +1 -0
- package/dist/knowledge/partitions.d.ts +31 -0
- package/dist/knowledge/partitions.d.ts.map +1 -0
- package/dist/knowledge/partitions.js +135 -0
- package/dist/knowledge/partitions.js.map +1 -0
- package/dist/knowledge/plan.d.ts +33 -0
- package/dist/knowledge/plan.d.ts.map +1 -0
- package/dist/knowledge/plan.js +89 -0
- package/dist/knowledge/plan.js.map +1 -0
- package/dist/knowledge/refs.d.ts +40 -0
- package/dist/knowledge/refs.d.ts.map +1 -0
- package/dist/knowledge/refs.js +102 -0
- package/dist/knowledge/refs.js.map +1 -0
- package/dist/knowledge/resolve.d.ts +35 -0
- package/dist/knowledge/resolve.d.ts.map +1 -0
- package/dist/knowledge/resolve.js +67 -0
- package/dist/knowledge/resolve.js.map +1 -0
- package/dist/knowledge/review.d.ts +23 -0
- package/dist/knowledge/review.d.ts.map +1 -0
- package/dist/knowledge/review.js +233 -0
- package/dist/knowledge/review.js.map +1 -0
- package/dist/knowledge/sources.d.ts +47 -0
- package/dist/knowledge/sources.d.ts.map +1 -0
- package/dist/knowledge/sources.js +136 -0
- package/dist/knowledge/sources.js.map +1 -0
- package/dist/knowledge/stores/localSnapshotStore.d.ts +50 -0
- package/dist/knowledge/stores/localSnapshotStore.d.ts.map +1 -0
- package/dist/knowledge/stores/localSnapshotStore.js +125 -0
- package/dist/knowledge/stores/localSnapshotStore.js.map +1 -0
- package/dist/knowledge/trace.d.ts +32 -0
- package/dist/knowledge/trace.d.ts.map +1 -0
- package/dist/knowledge/trace.js +102 -0
- package/dist/knowledge/trace.js.map +1 -0
- package/dist/knowledge/truncate.d.ts +24 -0
- package/dist/knowledge/truncate.d.ts.map +1 -0
- package/dist/knowledge/truncate.js +128 -0
- package/dist/knowledge/truncate.js.map +1 -0
- package/dist/memory/SemanticRecall.d.ts.map +1 -1
- package/dist/memory/SemanticRecall.js +3 -1
- package/dist/memory/SemanticRecall.js.map +1 -1
- package/dist/retrieval/HybridRetriever.d.ts.map +1 -1
- package/dist/retrieval/HybridRetriever.js +3 -1
- package/dist/retrieval/HybridRetriever.js.map +1 -1
- package/dist/retrieval/bm25.d.ts +3 -2
- package/dist/retrieval/bm25.d.ts.map +1 -1
- package/dist/retrieval/bm25.js +5 -3
- package/dist/retrieval/bm25.js.map +1 -1
- package/dist/retrieval/fusion.d.ts +2 -1
- package/dist/retrieval/fusion.d.ts.map +1 -1
- package/dist/retrieval/fusion.js +4 -2
- package/dist/retrieval/fusion.js.map +1 -1
- package/dist/retrieval/hnsw.d.ts +49 -11
- package/dist/retrieval/hnsw.d.ts.map +1 -1
- package/dist/retrieval/hnsw.js +57 -29
- package/dist/retrieval/hnsw.js.map +1 -1
- package/dist/retrieval/index.d.ts +7 -3
- package/dist/retrieval/index.d.ts.map +1 -1
- package/dist/retrieval/index.js +5 -2
- package/dist/retrieval/index.js.map +1 -1
- package/dist/retrieval/knowledge-index/bytes.d.ts +43 -0
- package/dist/retrieval/knowledge-index/bytes.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/bytes.js +151 -0
- package/dist/retrieval/knowledge-index/bytes.js.map +1 -0
- package/dist/retrieval/knowledge-index/cascade.d.ts +37 -0
- package/dist/retrieval/knowledge-index/cascade.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/cascade.js +111 -0
- package/dist/retrieval/knowledge-index/cascade.js.map +1 -0
- package/dist/retrieval/knowledge-index/compact.d.ts +18 -0
- package/dist/retrieval/knowledge-index/compact.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/compact.js +64 -0
- package/dist/retrieval/knowledge-index/compact.js.map +1 -0
- package/dist/retrieval/knowledge-index/csr.d.ts +41 -0
- package/dist/retrieval/knowledge-index/csr.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/csr.js +76 -0
- package/dist/retrieval/knowledge-index/csr.js.map +1 -0
- package/dist/retrieval/knowledge-index/digest.d.ts +21 -0
- package/dist/retrieval/knowledge-index/digest.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/digest.js +50 -0
- package/dist/retrieval/knowledge-index/digest.js.map +1 -0
- package/dist/retrieval/knowledge-index/embeddings.d.ts +32 -0
- package/dist/retrieval/knowledge-index/embeddings.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/embeddings.js +78 -0
- package/dist/retrieval/knowledge-index/embeddings.js.map +1 -0
- package/dist/retrieval/knowledge-index/expand.d.ts +19 -0
- package/dist/retrieval/knowledge-index/expand.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/expand.js +49 -0
- package/dist/retrieval/knowledge-index/expand.js.map +1 -0
- package/dist/retrieval/knowledge-index/index.d.ts +40 -0
- package/dist/retrieval/knowledge-index/index.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/index.js +134 -0
- package/dist/retrieval/knowledge-index/index.js.map +1 -0
- package/dist/retrieval/knowledge-index/lexical.d.ts +26 -0
- package/dist/retrieval/knowledge-index/lexical.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/lexical.js +76 -0
- package/dist/retrieval/knowledge-index/lexical.js.map +1 -0
- package/dist/retrieval/knowledge-index/pairs.d.ts +22 -0
- package/dist/retrieval/knowledge-index/pairs.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/pairs.js +51 -0
- package/dist/retrieval/knowledge-index/pairs.js.map +1 -0
- package/dist/retrieval/knowledge-index/prune.d.ts +21 -0
- package/dist/retrieval/knowledge-index/prune.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/prune.js +43 -0
- package/dist/retrieval/knowledge-index/prune.js.map +1 -0
- package/dist/retrieval/knowledge-index/quantize.d.ts +37 -0
- package/dist/retrieval/knowledge-index/quantize.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/quantize.js +77 -0
- package/dist/retrieval/knowledge-index/quantize.js.map +1 -0
- package/dist/retrieval/knowledge-index/serialize.d.ts +18 -0
- package/dist/retrieval/knowledge-index/serialize.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/serialize.js +123 -0
- package/dist/retrieval/knowledge-index/serialize.js.map +1 -0
- package/dist/retrieval/knowledge-index/sha256.d.ts +30 -0
- package/dist/retrieval/knowledge-index/sha256.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/sha256.js +130 -0
- package/dist/retrieval/knowledge-index/sha256.js.map +1 -0
- package/dist/retrieval/knowledge-index/state.d.ts +55 -0
- package/dist/retrieval/knowledge-index/state.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/state.js +67 -0
- package/dist/retrieval/knowledge-index/state.js.map +1 -0
- package/dist/retrieval/knowledge-index/tokenize.d.ts +20 -0
- package/dist/retrieval/knowledge-index/tokenize.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/tokenize.js +42 -0
- package/dist/retrieval/knowledge-index/tokenize.js.map +1 -0
- package/dist/retrieval/knowledge-index/traverse.d.ts +26 -0
- package/dist/retrieval/knowledge-index/traverse.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/traverse.js +90 -0
- package/dist/retrieval/knowledge-index/traverse.js.map +1 -0
- package/dist/retrieval/knowledge-index/types.d.ts +85 -0
- package/dist/retrieval/knowledge-index/types.d.ts.map +1 -0
- package/dist/retrieval/knowledge-index/types.js +9 -0
- package/dist/retrieval/knowledge-index/types.js.map +1 -0
- package/dist/retrieval/mmr.d.ts +11 -4
- package/dist/retrieval/mmr.d.ts.map +1 -1
- package/dist/retrieval/mmr.js +28 -8
- package/dist/retrieval/mmr.js.map +1 -1
- package/dist/retrieval/order.d.ts +41 -0
- package/dist/retrieval/order.d.ts.map +1 -0
- package/dist/retrieval/order.js +54 -0
- package/dist/retrieval/order.js.map +1 -0
- package/dist/retrieval/weightedFusion.d.ts +2 -1
- package/dist/retrieval/weightedFusion.d.ts.map +1 -1
- package/dist/retrieval/weightedFusion.js +7 -5
- package/dist/retrieval/weightedFusion.js.map +1 -1
- package/dist/vectorstore/MemoryVectorStore.d.ts.map +1 -1
- package/dist/vectorstore/MemoryVectorStore.js +2 -1
- package/dist/vectorstore/MemoryVectorStore.js.map +1 -1
- package/package.json +16 -5
- package/src/ingest/IngestionPipeline.ts +3 -15
- package/src/ingest/docsExtract.ts +219 -0
- package/src/ingest/hash.ts +22 -0
- package/src/ingest/parsers.ts +4 -0
- package/src/ingest/types.ts +7 -0
- package/src/knowledge/build.test.ts +150 -0
- package/src/knowledge/build.ts +266 -0
- package/src/knowledge/cards.ts +130 -0
- package/src/knowledge/docs.test.ts +118 -0
- package/src/knowledge/findings.ts +159 -0
- package/src/knowledge/importance.ts +72 -0
- package/src/knowledge/index.ts +53 -0
- package/src/knowledge/judge.ts +231 -0
- package/src/knowledge/model.ts +312 -0
- package/src/knowledge/packs/docs.ts +91 -0
- package/src/knowledge/partitions.test.ts +98 -0
- package/src/knowledge/partitions.ts +119 -0
- package/src/knowledge/plan.ts +115 -0
- package/src/knowledge/refs.ts +108 -0
- package/src/knowledge/resolve.ts +78 -0
- package/src/knowledge/review.test.ts +180 -0
- package/src/knowledge/review.ts +235 -0
- package/src/knowledge/sources.ts +146 -0
- package/src/knowledge/stores/localSnapshotStore.test.ts +82 -0
- package/src/knowledge/stores/localSnapshotStore.ts +159 -0
- package/src/knowledge/testkit.test-util.ts +92 -0
- package/src/knowledge/trace.test.ts +91 -0
- package/src/knowledge/trace.ts +111 -0
- package/src/knowledge/truncate.ts +118 -0
- package/src/memory/SemanticRecall.ts +3 -1
- package/src/retrieval/HybridRetriever.ts +3 -1
- package/src/retrieval/bm25.ts +5 -3
- package/src/retrieval/fusion.ts +5 -2
- package/src/retrieval/hnsw.ts +82 -35
- package/src/retrieval/index.ts +17 -3
- package/src/retrieval/knowledge-index/bytes.ts +166 -0
- package/src/retrieval/knowledge-index/cascade.ts +125 -0
- package/src/retrieval/knowledge-index/compact.ts +68 -0
- package/src/retrieval/knowledge-index/csr.ts +102 -0
- package/src/retrieval/knowledge-index/digest.ts +54 -0
- package/src/retrieval/knowledge-index/embeddings.ts +85 -0
- package/src/retrieval/knowledge-index/expand.ts +55 -0
- package/src/retrieval/knowledge-index/index.ts +162 -0
- package/src/retrieval/knowledge-index/lexical.ts +78 -0
- package/src/retrieval/knowledge-index/pairs.ts +57 -0
- package/src/retrieval/knowledge-index/prune.ts +48 -0
- package/src/retrieval/knowledge-index/quantize.ts +78 -0
- package/src/retrieval/knowledge-index/serialize.ts +124 -0
- package/src/retrieval/knowledge-index/sha256.ts +122 -0
- package/src/retrieval/knowledge-index/state.ts +108 -0
- package/src/retrieval/knowledge-index/tokenize.ts +41 -0
- package/src/retrieval/knowledge-index/traverse.ts +95 -0
- package/src/retrieval/knowledge-index/types.ts +78 -0
- package/src/retrieval/mmr.ts +35 -10
- package/src/retrieval/order.ts +68 -0
- package/src/retrieval/weightedFusion.ts +8 -5
- package/src/vectorstore/MemoryVectorStore.ts +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/knowledge/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* knowledge/importance.ts — deterministic PageRank (node size in the view, the
|
|
3
|
+
* truncation order, the cards' "top neighbours").
|
|
4
|
+
*
|
|
5
|
+
* Fixed iterations, damping 0.85, weighted out-edges, dangling mass spread uniformly,
|
|
6
|
+
* nodes iterated in ref order so the floating-point sums are the same everywhere.
|
|
7
|
+
* Scores are normalized so the top node is 1, and rounded to 6 decimals.
|
|
8
|
+
*/
|
|
9
|
+
import type { KNode, NodeRef } from './model.js';
|
|
10
|
+
export declare const PAGERANK_DAMPING = 0.85;
|
|
11
|
+
export declare const PAGERANK_ITERATIONS = 40;
|
|
12
|
+
export declare function pageRank(refs: readonly NodeRef[], edges: ReadonlyArray<{
|
|
13
|
+
from: NodeRef;
|
|
14
|
+
to: NodeRef;
|
|
15
|
+
weight: number;
|
|
16
|
+
}>, iterations?: number, damping?: number): Map<NodeRef, number>;
|
|
17
|
+
/** Importance descending, then ref — the one order "top N" means everywhere. */
|
|
18
|
+
export declare function byImportance(a: Pick<KNode, 'importance' | 'ref'>, b: Pick<KNode, 'importance' | 'ref'>): number;
|
|
19
|
+
/** Area importance: the sum of its members' importance, renormalized so the top area is 1. */
|
|
20
|
+
export declare function areaImportance(members: ReadonlyMap<NodeRef, readonly number[]>): Map<NodeRef, number>;
|
|
21
|
+
//# sourceMappingURL=importance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importance.d.ts","sourceRoot":"","sources":["../../src/knowledge/importance.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,wBAAgB,QAAQ,CACpB,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACpE,UAAU,GAAE,MAA4B,EACxC,OAAO,GAAE,MAAyB,GACnC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAiCtB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,GAAG,MAAM,CAE/G;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAUrG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* knowledge/importance.ts — deterministic PageRank (node size in the view, the
|
|
3
|
+
* truncation order, the cards' "top neighbours").
|
|
4
|
+
*
|
|
5
|
+
* Fixed iterations, damping 0.85, weighted out-edges, dangling mass spread uniformly,
|
|
6
|
+
* nodes iterated in ref order so the floating-point sums are the same everywhere.
|
|
7
|
+
* Scores are normalized so the top node is 1, and rounded to 6 decimals.
|
|
8
|
+
*/
|
|
9
|
+
import { compareStr, round6 } from './refs.js';
|
|
10
|
+
export const PAGERANK_DAMPING = 0.85;
|
|
11
|
+
export const PAGERANK_ITERATIONS = 40;
|
|
12
|
+
export function pageRank(refs, edges, iterations = PAGERANK_ITERATIONS, damping = PAGERANK_DAMPING) {
|
|
13
|
+
const order = [...new Set(refs)].sort(compareStr);
|
|
14
|
+
const n = order.length;
|
|
15
|
+
const out = new Map();
|
|
16
|
+
if (n === 0)
|
|
17
|
+
return out;
|
|
18
|
+
const index = new Map(order.map((r, i) => [r, i]));
|
|
19
|
+
const outWeight = new Float64Array(n);
|
|
20
|
+
const inbound = order.map(() => []);
|
|
21
|
+
const sorted = [...edges].sort((a, b) => compareStr(a.from, b.from) || compareStr(a.to, b.to));
|
|
22
|
+
for (const e of sorted) {
|
|
23
|
+
const f = index.get(e.from), t = index.get(e.to);
|
|
24
|
+
const w = e.weight > 0 ? e.weight : 0;
|
|
25
|
+
if (f === undefined || t === undefined || f === t || w === 0)
|
|
26
|
+
continue;
|
|
27
|
+
outWeight[f] += w;
|
|
28
|
+
inbound[t].push({ from: f, w });
|
|
29
|
+
}
|
|
30
|
+
let rank = new Float64Array(n).fill(1 / n);
|
|
31
|
+
for (let it = 0; it < iterations; it++) {
|
|
32
|
+
let dangling = 0;
|
|
33
|
+
for (let i = 0; i < n; i++)
|
|
34
|
+
if (outWeight[i] === 0)
|
|
35
|
+
dangling += rank[i];
|
|
36
|
+
const next = new Float64Array(n);
|
|
37
|
+
const base = (1 - damping) / n + (damping * dangling) / n;
|
|
38
|
+
for (let i = 0; i < n; i++) {
|
|
39
|
+
let sum = 0;
|
|
40
|
+
for (const { from, w } of inbound[i])
|
|
41
|
+
sum += (rank[from] * w) / outWeight[from];
|
|
42
|
+
next[i] = base + damping * sum;
|
|
43
|
+
}
|
|
44
|
+
rank = next;
|
|
45
|
+
}
|
|
46
|
+
let max = 0;
|
|
47
|
+
for (let i = 0; i < n; i++)
|
|
48
|
+
max = Math.max(max, rank[i]);
|
|
49
|
+
for (let i = 0; i < n; i++)
|
|
50
|
+
out.set(order[i], max > 0 ? round6(rank[i] / max) : 0);
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
/** Importance descending, then ref — the one order "top N" means everywhere. */
|
|
54
|
+
export function byImportance(a, b) {
|
|
55
|
+
return b.importance - a.importance || compareStr(a.ref, b.ref);
|
|
56
|
+
}
|
|
57
|
+
/** Area importance: the sum of its members' importance, renormalized so the top area is 1. */
|
|
58
|
+
export function areaImportance(members) {
|
|
59
|
+
const sums = new Map();
|
|
60
|
+
let max = 0;
|
|
61
|
+
for (const area of [...members.keys()].sort(compareStr)) {
|
|
62
|
+
const sum = members.get(area).reduce((s, v) => s + v, 0);
|
|
63
|
+
sums.set(area, sum);
|
|
64
|
+
max = Math.max(max, sum);
|
|
65
|
+
}
|
|
66
|
+
for (const [area, sum] of sums)
|
|
67
|
+
sums.set(area, max > 0 ? round6(sum / max) : 0);
|
|
68
|
+
return sums;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=importance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importance.js","sourceRoot":"","sources":["../../src/knowledge/importance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@seanhogg/builderforce-memory/knowledge` — the knowledge graph: facts connected to each
|
|
3
|
+
* other and to the sources they came from (PRD 38, Builderforce.ai/docs/specs/38-prd-knowledge-graph.md).
|
|
4
|
+
*
|
|
5
|
+
* Pure TypeScript: runs in the browser, a Worker and Node. Hosts supply ports only — a
|
|
6
|
+
* DirectorySource, a KnowledgeStore, a JudgementPort — never graph logic.
|
|
7
|
+
*/
|
|
8
|
+
export type { NodeRef, Origin, StoredOrigin, KNode, EdgeVerdict, KEdge, Extracted, ExtractContext, Finding, FindingRule, PartitionRule, PartitionRegistry, JudgementSpec, JudgementRequest, JudgedClaim, JudgedEntity, JudgementResult, JudgementPort, AnalyzerPort, KnowledgeParser, KnowledgePack, StoredFact, StoredRelation, Scope, ScopeRecord, KnowledgeStore, DirectorySource, LiveOverlay, KnowledgeGraph, ReviewPlan, ReviewProgress, ReviewReport, ReviewArgs, BuildGraphInput, BuildGraphOptions, TraceStep, Trace, } from './model.js';
|
|
9
|
+
export { buildGraph, graphDigest, DEFAULT_MAX_NODES, MAX_NODES_CAP } from './build.js';
|
|
10
|
+
export { truncateGraph, TRUNCATION_HARD_CAP, UNANCHORED_AREA } from './truncate.js';
|
|
11
|
+
export type { TruncateOptions } from './truncate.js';
|
|
12
|
+
export { pageRank, byImportance, areaImportance, PAGERANK_DAMPING, PAGERANK_ITERATIONS } from './importance.js';
|
|
13
|
+
export { loadPartitions, partitionOf, partitionOrder, verdictOf, globToRegExp, matchGlob, TOP_LEVEL_FOLDER, } from './partitions.js';
|
|
14
|
+
export { traceGraph, toMermaid, DEFAULT_TRACE_EDGE_KINDS, DEFAULT_TRACE_DEPTH, DEFAULT_TRACE_STEPS, UNPARTITIONED_LANE, } from './trace.js';
|
|
15
|
+
export type { LanedTrace, TraceOptions } from './trace.js';
|
|
16
|
+
export { computeFindings, genericFindings, findingId, requestKeyFor, components, CLONE_GROUP_BADGE, MAX_FINDING_NODES, } from './findings.js';
|
|
17
|
+
export { resolveEntities, knownKeysOf, possibleSameFindings, normalizeKey, entityName, entityKey, } from './resolve.js';
|
|
18
|
+
export type { ResolvedEntity } from './resolve.js';
|
|
19
|
+
export { toCards } from './cards.js';
|
|
20
|
+
export { planReview, planDetail, AVG_SECTION_BYTES } from './plan.js';
|
|
21
|
+
export type { PlanOptions, PlannedFile, PlanDetail } from './plan.js';
|
|
22
|
+
export { reviewDirectory, assertStoredBatch } from './review.js';
|
|
23
|
+
export { validateExtract, validateCompare, DEFAULT_REVIEW_MODEL_CALLS, REVIEW_FACT_SOURCE, } from './judge.js';
|
|
24
|
+
export { composePacks, ignoreMatcher, isBinaryPath, isBinaryText, mediaTypeOfPath, resolveRelativePath, DEFAULT_MAX_FILE_BYTES, IGNORE_FILES, filesManifestKey, judgedManifestKey, } from './sources.js';
|
|
25
|
+
export { srcRef, pathOfRef, fileRefOf, factRef, factKeyOf, slugOf, canonicalJson, compareStr } from './refs.js';
|
|
26
|
+
export { DOCS_PACK, DOCS_PACK_ID, brokenLinkRule, orphanDocumentRule } from './packs/docs.js';
|
|
27
|
+
export { frontMatterOf, SECTION_INDEX_BADGE } from '../ingest/docsExtract.js';
|
|
28
|
+
export { LocalSnapshotStore, localSnapshotStore } from './stores/localSnapshotStore.js';
|
|
29
|
+
export type { SnapshotPersistence, KnowledgeSnapshot, LocalSnapshotStoreOptions } from './stores/localSnapshotStore.js';
|
|
30
|
+
export * from '../retrieval/knowledge-index/index.js';
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@seanhogg/builderforce-memory/knowledge` — the knowledge graph: facts connected to each
|
|
3
|
+
* other and to the sources they came from (PRD 38, Builderforce.ai/docs/specs/38-prd-knowledge-graph.md).
|
|
4
|
+
*
|
|
5
|
+
* Pure TypeScript: runs in the browser, a Worker and Node. Hosts supply ports only — a
|
|
6
|
+
* DirectorySource, a KnowledgeStore, a JudgementPort — never graph logic.
|
|
7
|
+
*/
|
|
8
|
+
export { buildGraph, graphDigest, DEFAULT_MAX_NODES, MAX_NODES_CAP } from './build.js';
|
|
9
|
+
export { truncateGraph, TRUNCATION_HARD_CAP, UNANCHORED_AREA } from './truncate.js';
|
|
10
|
+
export { pageRank, byImportance, areaImportance, PAGERANK_DAMPING, PAGERANK_ITERATIONS } from './importance.js';
|
|
11
|
+
export { loadPartitions, partitionOf, partitionOrder, verdictOf, globToRegExp, matchGlob, TOP_LEVEL_FOLDER, } from './partitions.js';
|
|
12
|
+
export { traceGraph, toMermaid, DEFAULT_TRACE_EDGE_KINDS, DEFAULT_TRACE_DEPTH, DEFAULT_TRACE_STEPS, UNPARTITIONED_LANE, } from './trace.js';
|
|
13
|
+
export { computeFindings, genericFindings, findingId, requestKeyFor, components, CLONE_GROUP_BADGE, MAX_FINDING_NODES, } from './findings.js';
|
|
14
|
+
export { resolveEntities, knownKeysOf, possibleSameFindings, normalizeKey, entityName, entityKey, } from './resolve.js';
|
|
15
|
+
export { toCards } from './cards.js';
|
|
16
|
+
export { planReview, planDetail, AVG_SECTION_BYTES } from './plan.js';
|
|
17
|
+
export { reviewDirectory, assertStoredBatch } from './review.js';
|
|
18
|
+
export { validateExtract, validateCompare, DEFAULT_REVIEW_MODEL_CALLS, REVIEW_FACT_SOURCE, } from './judge.js';
|
|
19
|
+
export { composePacks, ignoreMatcher, isBinaryPath, isBinaryText, mediaTypeOfPath, resolveRelativePath, DEFAULT_MAX_FILE_BYTES, IGNORE_FILES, filesManifestKey, judgedManifestKey, } from './sources.js';
|
|
20
|
+
export { srcRef, pathOfRef, fileRefOf, factRef, factKeyOf, slugOf, canonicalJson, compareStr } from './refs.js';
|
|
21
|
+
export { DOCS_PACK, DOCS_PACK_ID, brokenLinkRule, orphanDocumentRule } from './packs/docs.js';
|
|
22
|
+
export { frontMatterOf, SECTION_INDEX_BADGE } from '../ingest/docsExtract.js';
|
|
23
|
+
export { LocalSnapshotStore, localSnapshotStore } from './stores/localSnapshotStore.js';
|
|
24
|
+
// The knowledge index (search, expand, near-duplicate pairs) ships on the same subpath.
|
|
25
|
+
export * from '../retrieval/knowledge-index/index.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEpF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChH,OAAO,EACH,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,GACpG,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,UAAU,EAAE,SAAS,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,GAChH,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,GAC/G,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,GAC1F,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACH,eAAe,EAAE,eAAe,EAAE,0BAA0B,EAAE,kBAAkB,GACnF,MAAM,YAAY,CAAC;AACpB,OAAO,EACH,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAC7F,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,GAC5E,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGxF,wFAAwF;AACxF,cAAc,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* knowledge/judge.ts — the judgement pass of a review: the only step that costs model
|
|
3
|
+
* calls (PRD 38 §4.3).
|
|
4
|
+
*
|
|
5
|
+
* • extract: one call per changed section of a judged kind → claims (`claim:<hash>`) and
|
|
6
|
+
* entities (`ent:<pack>:<name>`) as `model` facts anchored with the file's content
|
|
7
|
+
* hash, plus `about` / `mentions` relations;
|
|
8
|
+
* • compare: near-duplicate claim pairs → `contradicts` / `agrees` relations.
|
|
9
|
+
*
|
|
10
|
+
* Every response is schema-validated; invalid items are dropped and counted. The budget
|
|
11
|
+
* (calls and a deadline) is shared across the whole review.
|
|
12
|
+
*/
|
|
13
|
+
import type { JudgedClaim, JudgedEntity, JudgementPort, NodeRef, StoredFact, StoredRelation } from './model.js';
|
|
14
|
+
import type { SimilarPair } from '../retrieval/knowledge-index/types.js';
|
|
15
|
+
export declare const DEFAULT_REVIEW_MODEL_CALLS = 200;
|
|
16
|
+
export declare const REVIEW_FACT_SOURCE = "knowledge-review";
|
|
17
|
+
export interface JudgeBudget {
|
|
18
|
+
modelCalls: number;
|
|
19
|
+
deadline: number;
|
|
20
|
+
used: number;
|
|
21
|
+
now(): number;
|
|
22
|
+
}
|
|
23
|
+
export declare const budgetLeft: (b: JudgeBudget) => boolean;
|
|
24
|
+
/** Facts and relations a review will write, keyed for upsert. */
|
|
25
|
+
export declare class JudgedBatch {
|
|
26
|
+
readonly facts: Map<string, StoredFact>;
|
|
27
|
+
readonly relations: Map<string, StoredRelation>;
|
|
28
|
+
judged: number;
|
|
29
|
+
unjudged: number;
|
|
30
|
+
invalid: number;
|
|
31
|
+
fact(f: StoredFact): void;
|
|
32
|
+
relation(r: StoredRelation): void;
|
|
33
|
+
take(): {
|
|
34
|
+
facts: StoredFact[];
|
|
35
|
+
relations: StoredRelation[];
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** The valid claims and entities a response holds for `ref`; everything else counted invalid. */
|
|
39
|
+
export declare function validateExtract(result: unknown, ref: NodeRef): {
|
|
40
|
+
claims: JudgedClaim[];
|
|
41
|
+
entities: JudgedEntity[];
|
|
42
|
+
invalid: number;
|
|
43
|
+
};
|
|
44
|
+
export declare function validateCompare(result: unknown, a: NodeRef, b: NodeRef): {
|
|
45
|
+
relation?: 'contradicts' | 'agrees' | 'unrelated';
|
|
46
|
+
confidence: number;
|
|
47
|
+
invalid: number;
|
|
48
|
+
};
|
|
49
|
+
export interface SectionToJudge {
|
|
50
|
+
ref: NodeRef;
|
|
51
|
+
text: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ExtractArgs {
|
|
54
|
+
port: JudgementPort;
|
|
55
|
+
pack: string;
|
|
56
|
+
path: string;
|
|
57
|
+
fileHash: string;
|
|
58
|
+
sections: readonly SectionToJudge[];
|
|
59
|
+
budget: JudgeBudget;
|
|
60
|
+
batch: JudgedBatch;
|
|
61
|
+
/** Entity facts by key: stored ones plus this review's, merged across files. */
|
|
62
|
+
entities: Map<string, StoredFact>;
|
|
63
|
+
signal?: AbortSignal;
|
|
64
|
+
/** Called for each section actually judged (for the judged-sections manifest). */
|
|
65
|
+
onJudged(ref: NodeRef): void;
|
|
66
|
+
}
|
|
67
|
+
/** Judges each section within the budget; the rest are counted `unjudged`. */
|
|
68
|
+
export declare function judgeSections(a: ExtractArgs): Promise<Array<{
|
|
69
|
+
ref: NodeRef;
|
|
70
|
+
text: string;
|
|
71
|
+
}>>;
|
|
72
|
+
export interface CompareArgs {
|
|
73
|
+
port: JudgementPort;
|
|
74
|
+
pairs: readonly SimilarPair[];
|
|
75
|
+
/** Claim ref → text and the content hash it was judged from. */
|
|
76
|
+
claims: ReadonlyMap<string, {
|
|
77
|
+
text: string;
|
|
78
|
+
hash: string;
|
|
79
|
+
}>;
|
|
80
|
+
budget: JudgeBudget;
|
|
81
|
+
batch: JudgedBatch;
|
|
82
|
+
signal?: AbortSignal;
|
|
83
|
+
}
|
|
84
|
+
/** Near-duplicate claim pairs, most similar first, compared within the budget. */
|
|
85
|
+
export declare function compareClaims(a: CompareArgs): Promise<void>;
|
|
86
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/knowledge/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACR,WAAW,EAAE,YAAY,EAAE,aAAa,EAAmB,OAAO,EAAE,UAAU,EAAE,cAAc,EACjG,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAIzE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAMrD,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,IAAI,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,GAAI,GAAG,WAAW,KAAG,OAAwD,CAAC;AAErG,iEAAiE;AACjE,qBAAa,WAAW;IACpB,QAAQ,CAAC,KAAK,0BAAiC;IAC/C,QAAQ,CAAC,SAAS,8BAAqC;IACvD,MAAM,SAAK;IACX,QAAQ,SAAK;IACb,OAAO,SAAK;IAEZ,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI;IAEzB,QAAQ,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI;IAEjC,IAAI,IAAI;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,SAAS,EAAE,cAAc,EAAE,CAAA;KAAE;CAU/D;AAwBD,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAanI;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAYnK;AAaD,MAAM,WAAW,cAAc;IAAG,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAE9D,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,gFAAgF;IAChF,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,8EAA8E;AAC9E,wBAAsB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgDlG;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,gEAAgE;IAChE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,kFAAkF;AAClF,wBAAsB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BjE"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* knowledge/judge.ts — the judgement pass of a review: the only step that costs model
|
|
3
|
+
* calls (PRD 38 §4.3).
|
|
4
|
+
*
|
|
5
|
+
* • extract: one call per changed section of a judged kind → claims (`claim:<hash>`) and
|
|
6
|
+
* entities (`ent:<pack>:<name>`) as `model` facts anchored with the file's content
|
|
7
|
+
* hash, plus `about` / `mentions` relations;
|
|
8
|
+
* • compare: near-duplicate claim pairs → `contradicts` / `agrees` relations.
|
|
9
|
+
*
|
|
10
|
+
* Every response is schema-validated; invalid items are dropped and counted. The budget
|
|
11
|
+
* (calls and a deadline) is shared across the whole review.
|
|
12
|
+
*/
|
|
13
|
+
import { hashText } from '../ingest/hash.js';
|
|
14
|
+
import { entityKey, normalizeKey } from './resolve.js';
|
|
15
|
+
import { compareStr, factRef } from './refs.js';
|
|
16
|
+
export const DEFAULT_REVIEW_MODEL_CALLS = 200;
|
|
17
|
+
export const REVIEW_FACT_SOURCE = 'knowledge-review';
|
|
18
|
+
const MAX_TERM = 200;
|
|
19
|
+
const MAX_NAME = 120;
|
|
20
|
+
const MAX_QUOTE_CHARS = 300;
|
|
21
|
+
const MAX_QUOTE_LINES = 3;
|
|
22
|
+
export const budgetLeft = (b) => b.used < b.modelCalls && b.now() < b.deadline;
|
|
23
|
+
/** Facts and relations a review will write, keyed for upsert. */
|
|
24
|
+
export class JudgedBatch {
|
|
25
|
+
facts = new Map();
|
|
26
|
+
relations = new Map();
|
|
27
|
+
judged = 0;
|
|
28
|
+
unjudged = 0;
|
|
29
|
+
invalid = 0;
|
|
30
|
+
fact(f) { this.facts.set(f.key, f); }
|
|
31
|
+
relation(r) { this.relations.set(`${r.from}\u0000${r.to}\u0000${r.kind}`, r); }
|
|
32
|
+
take() {
|
|
33
|
+
const out = {
|
|
34
|
+
facts: [...this.facts.values()].sort((a, b) => compareStr(a.key, b.key)),
|
|
35
|
+
relations: [...this.relations.values()].sort((a, b) => compareStr(a.from, b.from) || compareStr(a.to, b.to) || compareStr(a.kind, b.kind)),
|
|
36
|
+
};
|
|
37
|
+
this.facts.clear();
|
|
38
|
+
this.relations.clear();
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const str = (v, max, allowEmpty = false) => {
|
|
43
|
+
if (typeof v !== 'string')
|
|
44
|
+
return undefined;
|
|
45
|
+
const t = v.trim();
|
|
46
|
+
return (t || allowEmpty) && t.length <= max ? t : undefined;
|
|
47
|
+
};
|
|
48
|
+
function validClaim(c) {
|
|
49
|
+
if (!c || typeof c !== 'object')
|
|
50
|
+
return undefined;
|
|
51
|
+
const o = c;
|
|
52
|
+
const subject = str(o['subject'], MAX_TERM), predicate = str(o['predicate'], MAX_TERM), object = str(o['object'], MAX_TERM);
|
|
53
|
+
if (!subject || !predicate || !object || typeof o['quote'] !== 'string')
|
|
54
|
+
return undefined;
|
|
55
|
+
const quote = o['quote'].split(/\r?\n/).slice(0, MAX_QUOTE_LINES).join('\n').trim().slice(0, MAX_QUOTE_CHARS);
|
|
56
|
+
return { subject, predicate, object, quote };
|
|
57
|
+
}
|
|
58
|
+
function validEntity(e) {
|
|
59
|
+
if (!e || typeof e !== 'object')
|
|
60
|
+
return undefined;
|
|
61
|
+
const o = e;
|
|
62
|
+
const name = str(o['name'], MAX_NAME), type = str(o['type'], MAX_NAME, true);
|
|
63
|
+
return name && normalizeKey(name) && type !== undefined ? { name, type: type || 'thing' } : undefined;
|
|
64
|
+
}
|
|
65
|
+
/** The valid claims and entities a response holds for `ref`; everything else counted invalid. */
|
|
66
|
+
export function validateExtract(result, ref) {
|
|
67
|
+
const out = { claims: [], entities: [], invalid: 0 };
|
|
68
|
+
if (!result || typeof result !== 'object') {
|
|
69
|
+
out.invalid = 1;
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
const r = result;
|
|
73
|
+
out.invalid += typeof r.invalid === 'number' && r.invalid > 0 ? Math.floor(r.invalid) : 0;
|
|
74
|
+
if (!Array.isArray(r.extract)) {
|
|
75
|
+
out.invalid += 1;
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
for (const item of r.extract) {
|
|
79
|
+
const it = item;
|
|
80
|
+
if (!it || it.ref !== ref || !Array.isArray(it.claims) || !Array.isArray(it.entities)) {
|
|
81
|
+
out.invalid += 1;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
for (const c of it.claims) {
|
|
85
|
+
const v = validClaim(c);
|
|
86
|
+
if (v)
|
|
87
|
+
out.claims.push(v);
|
|
88
|
+
else
|
|
89
|
+
out.invalid += 1;
|
|
90
|
+
}
|
|
91
|
+
for (const e of it.entities) {
|
|
92
|
+
const v = validEntity(e);
|
|
93
|
+
if (v)
|
|
94
|
+
out.entities.push(v);
|
|
95
|
+
else
|
|
96
|
+
out.invalid += 1;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
export function validateCompare(result, a, b) {
|
|
102
|
+
if (!result || typeof result !== 'object')
|
|
103
|
+
return { confidence: 0, invalid: 1 };
|
|
104
|
+
const r = result;
|
|
105
|
+
let invalid = typeof r.invalid === 'number' && r.invalid > 0 ? Math.floor(r.invalid) : 0;
|
|
106
|
+
for (const item of Array.isArray(r.compare) ? r.compare : []) {
|
|
107
|
+
const ok = item && ((item.a === a && item.b === b) || (item.a === b && item.b === a))
|
|
108
|
+
&& ['contradicts', 'agrees', 'unrelated'].includes(item.relation)
|
|
109
|
+
&& typeof item.confidence === 'number' && item.confidence >= 0 && item.confidence <= 1;
|
|
110
|
+
if (ok)
|
|
111
|
+
return { relation: item.relation, confidence: item.confidence, invalid };
|
|
112
|
+
invalid += 1;
|
|
113
|
+
}
|
|
114
|
+
return { confidence: 0, invalid: Math.max(invalid, 1) };
|
|
115
|
+
}
|
|
116
|
+
/** One model call, or a counted invalid when the port throws (an abort is re-thrown). */
|
|
117
|
+
async function call(port, req, b) {
|
|
118
|
+
b.used += 1;
|
|
119
|
+
try {
|
|
120
|
+
return await port.judge(req);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (req.signal?.aborted)
|
|
124
|
+
throw err;
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Judges each section within the budget; the rest are counted `unjudged`. */
|
|
129
|
+
export async function judgeSections(a) {
|
|
130
|
+
const claims = [];
|
|
131
|
+
const anchor = { path: a.path, contentHash: a.fileHash };
|
|
132
|
+
for (const section of a.sections) {
|
|
133
|
+
if (!budgetLeft(a.budget)) {
|
|
134
|
+
a.batch.unjudged += 1;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const result = await call(a.port, {
|
|
138
|
+
kind: 'extract', items: [{ ref: section.ref, text: section.text, sourceHash: a.fileHash }],
|
|
139
|
+
...(a.signal ? { signal: a.signal } : {}),
|
|
140
|
+
}, a.budget);
|
|
141
|
+
const v = validateExtract(result, section.ref);
|
|
142
|
+
a.batch.invalid += v.invalid;
|
|
143
|
+
a.batch.judged += 1;
|
|
144
|
+
a.onJudged(section.ref);
|
|
145
|
+
const rel = (from, to, kind) => a.batch.relation({ from, to, kind, weight: 1, origin: 'model', sourceHash: a.fileHash });
|
|
146
|
+
const entityRefs = new Map();
|
|
147
|
+
for (const e of v.entities) {
|
|
148
|
+
const key = entityKey(a.pack, e.name);
|
|
149
|
+
const prior = a.entities.get(key);
|
|
150
|
+
const anchors = [...(prior?.fileAnchors ?? []).filter((x) => x.path !== a.path), anchor]
|
|
151
|
+
.sort((x, y) => compareStr(x.path, y.path));
|
|
152
|
+
const fact = {
|
|
153
|
+
key, content: prior?.content ?? `${e.name} (${e.type})`, source: REVIEW_FACT_SOURCE,
|
|
154
|
+
importance: prior?.importance ?? 0.5, origin: prior?.origin ?? 'model', fileAnchors: anchors,
|
|
155
|
+
};
|
|
156
|
+
a.entities.set(key, fact);
|
|
157
|
+
a.batch.fact(fact);
|
|
158
|
+
entityRefs.set(normalizeKey(e.name), key);
|
|
159
|
+
rel(section.ref, key, 'mentions');
|
|
160
|
+
}
|
|
161
|
+
for (const c of v.claims) {
|
|
162
|
+
const key = `claim:${hashText([section.ref, c.subject, c.predicate, c.object].join('\u0000'))}`;
|
|
163
|
+
const text = `${c.subject} ${c.predicate} ${c.object}`;
|
|
164
|
+
a.batch.fact({
|
|
165
|
+
key, content: c.quote ? `${text} — “${c.quote}”` : text, source: REVIEW_FACT_SOURCE,
|
|
166
|
+
importance: 0.5, origin: 'model', fileAnchors: [anchor],
|
|
167
|
+
});
|
|
168
|
+
const ref = factRef(key);
|
|
169
|
+
rel(ref, section.ref, 'about');
|
|
170
|
+
for (const term of [c.subject, c.object]) {
|
|
171
|
+
const ent = entityRefs.get(normalizeKey(term));
|
|
172
|
+
if (ent)
|
|
173
|
+
rel(ref, ent, 'mentions');
|
|
174
|
+
}
|
|
175
|
+
claims.push({ ref, text });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return claims;
|
|
179
|
+
}
|
|
180
|
+
/** Near-duplicate claim pairs, most similar first, compared within the budget. */
|
|
181
|
+
export async function compareClaims(a) {
|
|
182
|
+
const pairs = [...a.pairs]
|
|
183
|
+
.filter((p) => p.a !== p.b && a.claims.has(p.a) && a.claims.has(p.b))
|
|
184
|
+
.map((p) => (compareStr(p.a, p.b) <= 0 ? p : { a: p.b, b: p.a, similarity: p.similarity }))
|
|
185
|
+
.sort((x, y) => y.similarity - x.similarity || compareStr(x.a, y.a) || compareStr(x.b, y.b));
|
|
186
|
+
const seen = new Set();
|
|
187
|
+
for (const p of pairs) {
|
|
188
|
+
const id = `${p.a}\u0000${p.b}`;
|
|
189
|
+
if (seen.has(id))
|
|
190
|
+
continue;
|
|
191
|
+
seen.add(id);
|
|
192
|
+
if (!budgetLeft(a.budget)) {
|
|
193
|
+
a.batch.unjudged += 1;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const ca = a.claims.get(p.a), cb = a.claims.get(p.b);
|
|
197
|
+
const A = p.a, B = p.b;
|
|
198
|
+
const result = await call(a.port, {
|
|
199
|
+
kind: 'compare',
|
|
200
|
+
items: [{ ref: A, text: ca.text, sourceHash: ca.hash }, { ref: B, text: cb.text, sourceHash: cb.hash }],
|
|
201
|
+
...(a.signal ? { signal: a.signal } : {}),
|
|
202
|
+
}, a.budget);
|
|
203
|
+
const v = validateCompare(result, A, B);
|
|
204
|
+
a.batch.invalid += v.invalid;
|
|
205
|
+
a.batch.judged += 1;
|
|
206
|
+
if (v.relation === 'contradicts' || v.relation === 'agrees') {
|
|
207
|
+
a.batch.relation({
|
|
208
|
+
from: A, to: B, kind: v.relation, weight: 1, origin: 'model', confidence: v.confidence, sourceHash: ca.hash,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/knowledge/judge.ts"],"names":[],"mappings":"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"}
|