@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.
Files changed (253) hide show
  1. package/dist/ingest/IngestionPipeline.d.ts +1 -8
  2. package/dist/ingest/IngestionPipeline.d.ts.map +1 -1
  3. package/dist/ingest/IngestionPipeline.js +3 -15
  4. package/dist/ingest/IngestionPipeline.js.map +1 -1
  5. package/dist/ingest/docsExtract.d.ts +30 -0
  6. package/dist/ingest/docsExtract.d.ts.map +1 -0
  7. package/dist/ingest/docsExtract.js +221 -0
  8. package/dist/ingest/docsExtract.js.map +1 -0
  9. package/dist/ingest/hash.d.ts +15 -0
  10. package/dist/ingest/hash.d.ts.map +1 -0
  11. package/dist/ingest/hash.js +22 -0
  12. package/dist/ingest/hash.js.map +1 -0
  13. package/dist/ingest/parsers.d.ts.map +1 -1
  14. package/dist/ingest/parsers.js +4 -0
  15. package/dist/ingest/parsers.js.map +1 -1
  16. package/dist/ingest/types.d.ts +7 -0
  17. package/dist/ingest/types.d.ts.map +1 -1
  18. package/dist/ingest/types.js.map +1 -1
  19. package/dist/knowledge/build.d.ts +24 -0
  20. package/dist/knowledge/build.d.ts.map +1 -0
  21. package/dist/knowledge/build.js +263 -0
  22. package/dist/knowledge/build.js.map +1 -0
  23. package/dist/knowledge/cards.d.ts +17 -0
  24. package/dist/knowledge/cards.d.ts.map +1 -0
  25. package/dist/knowledge/cards.js +118 -0
  26. package/dist/knowledge/cards.js.map +1 -0
  27. package/dist/knowledge/findings.d.ts +24 -0
  28. package/dist/knowledge/findings.d.ts.map +1 -0
  29. package/dist/knowledge/findings.js +152 -0
  30. package/dist/knowledge/findings.js.map +1 -0
  31. package/dist/knowledge/importance.d.ts +21 -0
  32. package/dist/knowledge/importance.d.ts.map +1 -0
  33. package/dist/knowledge/importance.js +70 -0
  34. package/dist/knowledge/importance.js.map +1 -0
  35. package/dist/knowledge/index.d.ts +31 -0
  36. package/dist/knowledge/index.d.ts.map +1 -0
  37. package/dist/knowledge/index.js +26 -0
  38. package/dist/knowledge/index.js.map +1 -0
  39. package/dist/knowledge/judge.d.ts +86 -0
  40. package/dist/knowledge/judge.d.ts.map +1 -0
  41. package/dist/knowledge/judge.js +213 -0
  42. package/dist/knowledge/judge.js.map +1 -0
  43. package/dist/knowledge/model.d.ts +333 -0
  44. package/dist/knowledge/model.d.ts.map +1 -0
  45. package/dist/knowledge/model.js +13 -0
  46. package/dist/knowledge/model.js.map +1 -0
  47. package/dist/knowledge/packs/docs.d.ts +17 -0
  48. package/dist/knowledge/packs/docs.d.ts.map +1 -0
  49. package/dist/knowledge/packs/docs.js +89 -0
  50. package/dist/knowledge/packs/docs.js.map +1 -0
  51. package/dist/knowledge/partitions.d.ts +31 -0
  52. package/dist/knowledge/partitions.d.ts.map +1 -0
  53. package/dist/knowledge/partitions.js +135 -0
  54. package/dist/knowledge/partitions.js.map +1 -0
  55. package/dist/knowledge/plan.d.ts +33 -0
  56. package/dist/knowledge/plan.d.ts.map +1 -0
  57. package/dist/knowledge/plan.js +89 -0
  58. package/dist/knowledge/plan.js.map +1 -0
  59. package/dist/knowledge/refs.d.ts +40 -0
  60. package/dist/knowledge/refs.d.ts.map +1 -0
  61. package/dist/knowledge/refs.js +102 -0
  62. package/dist/knowledge/refs.js.map +1 -0
  63. package/dist/knowledge/resolve.d.ts +35 -0
  64. package/dist/knowledge/resolve.d.ts.map +1 -0
  65. package/dist/knowledge/resolve.js +67 -0
  66. package/dist/knowledge/resolve.js.map +1 -0
  67. package/dist/knowledge/review.d.ts +23 -0
  68. package/dist/knowledge/review.d.ts.map +1 -0
  69. package/dist/knowledge/review.js +233 -0
  70. package/dist/knowledge/review.js.map +1 -0
  71. package/dist/knowledge/sources.d.ts +47 -0
  72. package/dist/knowledge/sources.d.ts.map +1 -0
  73. package/dist/knowledge/sources.js +136 -0
  74. package/dist/knowledge/sources.js.map +1 -0
  75. package/dist/knowledge/stores/localSnapshotStore.d.ts +50 -0
  76. package/dist/knowledge/stores/localSnapshotStore.d.ts.map +1 -0
  77. package/dist/knowledge/stores/localSnapshotStore.js +125 -0
  78. package/dist/knowledge/stores/localSnapshotStore.js.map +1 -0
  79. package/dist/knowledge/trace.d.ts +32 -0
  80. package/dist/knowledge/trace.d.ts.map +1 -0
  81. package/dist/knowledge/trace.js +102 -0
  82. package/dist/knowledge/trace.js.map +1 -0
  83. package/dist/knowledge/truncate.d.ts +24 -0
  84. package/dist/knowledge/truncate.d.ts.map +1 -0
  85. package/dist/knowledge/truncate.js +128 -0
  86. package/dist/knowledge/truncate.js.map +1 -0
  87. package/dist/memory/SemanticRecall.d.ts.map +1 -1
  88. package/dist/memory/SemanticRecall.js +3 -1
  89. package/dist/memory/SemanticRecall.js.map +1 -1
  90. package/dist/retrieval/HybridRetriever.d.ts.map +1 -1
  91. package/dist/retrieval/HybridRetriever.js +3 -1
  92. package/dist/retrieval/HybridRetriever.js.map +1 -1
  93. package/dist/retrieval/bm25.d.ts +3 -2
  94. package/dist/retrieval/bm25.d.ts.map +1 -1
  95. package/dist/retrieval/bm25.js +5 -3
  96. package/dist/retrieval/bm25.js.map +1 -1
  97. package/dist/retrieval/fusion.d.ts +2 -1
  98. package/dist/retrieval/fusion.d.ts.map +1 -1
  99. package/dist/retrieval/fusion.js +4 -2
  100. package/dist/retrieval/fusion.js.map +1 -1
  101. package/dist/retrieval/hnsw.d.ts +49 -11
  102. package/dist/retrieval/hnsw.d.ts.map +1 -1
  103. package/dist/retrieval/hnsw.js +57 -29
  104. package/dist/retrieval/hnsw.js.map +1 -1
  105. package/dist/retrieval/index.d.ts +7 -3
  106. package/dist/retrieval/index.d.ts.map +1 -1
  107. package/dist/retrieval/index.js +5 -2
  108. package/dist/retrieval/index.js.map +1 -1
  109. package/dist/retrieval/knowledge-index/bytes.d.ts +43 -0
  110. package/dist/retrieval/knowledge-index/bytes.d.ts.map +1 -0
  111. package/dist/retrieval/knowledge-index/bytes.js +151 -0
  112. package/dist/retrieval/knowledge-index/bytes.js.map +1 -0
  113. package/dist/retrieval/knowledge-index/cascade.d.ts +37 -0
  114. package/dist/retrieval/knowledge-index/cascade.d.ts.map +1 -0
  115. package/dist/retrieval/knowledge-index/cascade.js +111 -0
  116. package/dist/retrieval/knowledge-index/cascade.js.map +1 -0
  117. package/dist/retrieval/knowledge-index/compact.d.ts +18 -0
  118. package/dist/retrieval/knowledge-index/compact.d.ts.map +1 -0
  119. package/dist/retrieval/knowledge-index/compact.js +64 -0
  120. package/dist/retrieval/knowledge-index/compact.js.map +1 -0
  121. package/dist/retrieval/knowledge-index/csr.d.ts +41 -0
  122. package/dist/retrieval/knowledge-index/csr.d.ts.map +1 -0
  123. package/dist/retrieval/knowledge-index/csr.js +76 -0
  124. package/dist/retrieval/knowledge-index/csr.js.map +1 -0
  125. package/dist/retrieval/knowledge-index/digest.d.ts +21 -0
  126. package/dist/retrieval/knowledge-index/digest.d.ts.map +1 -0
  127. package/dist/retrieval/knowledge-index/digest.js +50 -0
  128. package/dist/retrieval/knowledge-index/digest.js.map +1 -0
  129. package/dist/retrieval/knowledge-index/embeddings.d.ts +32 -0
  130. package/dist/retrieval/knowledge-index/embeddings.d.ts.map +1 -0
  131. package/dist/retrieval/knowledge-index/embeddings.js +78 -0
  132. package/dist/retrieval/knowledge-index/embeddings.js.map +1 -0
  133. package/dist/retrieval/knowledge-index/expand.d.ts +19 -0
  134. package/dist/retrieval/knowledge-index/expand.d.ts.map +1 -0
  135. package/dist/retrieval/knowledge-index/expand.js +49 -0
  136. package/dist/retrieval/knowledge-index/expand.js.map +1 -0
  137. package/dist/retrieval/knowledge-index/index.d.ts +40 -0
  138. package/dist/retrieval/knowledge-index/index.d.ts.map +1 -0
  139. package/dist/retrieval/knowledge-index/index.js +134 -0
  140. package/dist/retrieval/knowledge-index/index.js.map +1 -0
  141. package/dist/retrieval/knowledge-index/lexical.d.ts +26 -0
  142. package/dist/retrieval/knowledge-index/lexical.d.ts.map +1 -0
  143. package/dist/retrieval/knowledge-index/lexical.js +76 -0
  144. package/dist/retrieval/knowledge-index/lexical.js.map +1 -0
  145. package/dist/retrieval/knowledge-index/pairs.d.ts +22 -0
  146. package/dist/retrieval/knowledge-index/pairs.d.ts.map +1 -0
  147. package/dist/retrieval/knowledge-index/pairs.js +51 -0
  148. package/dist/retrieval/knowledge-index/pairs.js.map +1 -0
  149. package/dist/retrieval/knowledge-index/prune.d.ts +21 -0
  150. package/dist/retrieval/knowledge-index/prune.d.ts.map +1 -0
  151. package/dist/retrieval/knowledge-index/prune.js +43 -0
  152. package/dist/retrieval/knowledge-index/prune.js.map +1 -0
  153. package/dist/retrieval/knowledge-index/quantize.d.ts +37 -0
  154. package/dist/retrieval/knowledge-index/quantize.d.ts.map +1 -0
  155. package/dist/retrieval/knowledge-index/quantize.js +77 -0
  156. package/dist/retrieval/knowledge-index/quantize.js.map +1 -0
  157. package/dist/retrieval/knowledge-index/serialize.d.ts +18 -0
  158. package/dist/retrieval/knowledge-index/serialize.d.ts.map +1 -0
  159. package/dist/retrieval/knowledge-index/serialize.js +123 -0
  160. package/dist/retrieval/knowledge-index/serialize.js.map +1 -0
  161. package/dist/retrieval/knowledge-index/sha256.d.ts +30 -0
  162. package/dist/retrieval/knowledge-index/sha256.d.ts.map +1 -0
  163. package/dist/retrieval/knowledge-index/sha256.js +130 -0
  164. package/dist/retrieval/knowledge-index/sha256.js.map +1 -0
  165. package/dist/retrieval/knowledge-index/state.d.ts +55 -0
  166. package/dist/retrieval/knowledge-index/state.d.ts.map +1 -0
  167. package/dist/retrieval/knowledge-index/state.js +67 -0
  168. package/dist/retrieval/knowledge-index/state.js.map +1 -0
  169. package/dist/retrieval/knowledge-index/tokenize.d.ts +20 -0
  170. package/dist/retrieval/knowledge-index/tokenize.d.ts.map +1 -0
  171. package/dist/retrieval/knowledge-index/tokenize.js +42 -0
  172. package/dist/retrieval/knowledge-index/tokenize.js.map +1 -0
  173. package/dist/retrieval/knowledge-index/traverse.d.ts +26 -0
  174. package/dist/retrieval/knowledge-index/traverse.d.ts.map +1 -0
  175. package/dist/retrieval/knowledge-index/traverse.js +90 -0
  176. package/dist/retrieval/knowledge-index/traverse.js.map +1 -0
  177. package/dist/retrieval/knowledge-index/types.d.ts +85 -0
  178. package/dist/retrieval/knowledge-index/types.d.ts.map +1 -0
  179. package/dist/retrieval/knowledge-index/types.js +9 -0
  180. package/dist/retrieval/knowledge-index/types.js.map +1 -0
  181. package/dist/retrieval/mmr.d.ts +11 -4
  182. package/dist/retrieval/mmr.d.ts.map +1 -1
  183. package/dist/retrieval/mmr.js +28 -8
  184. package/dist/retrieval/mmr.js.map +1 -1
  185. package/dist/retrieval/order.d.ts +41 -0
  186. package/dist/retrieval/order.d.ts.map +1 -0
  187. package/dist/retrieval/order.js +54 -0
  188. package/dist/retrieval/order.js.map +1 -0
  189. package/dist/retrieval/weightedFusion.d.ts +2 -1
  190. package/dist/retrieval/weightedFusion.d.ts.map +1 -1
  191. package/dist/retrieval/weightedFusion.js +7 -5
  192. package/dist/retrieval/weightedFusion.js.map +1 -1
  193. package/dist/vectorstore/MemoryVectorStore.d.ts.map +1 -1
  194. package/dist/vectorstore/MemoryVectorStore.js +2 -1
  195. package/dist/vectorstore/MemoryVectorStore.js.map +1 -1
  196. package/package.json +16 -5
  197. package/src/ingest/IngestionPipeline.ts +3 -15
  198. package/src/ingest/docsExtract.ts +219 -0
  199. package/src/ingest/hash.ts +22 -0
  200. package/src/ingest/parsers.ts +4 -0
  201. package/src/ingest/types.ts +7 -0
  202. package/src/knowledge/build.test.ts +150 -0
  203. package/src/knowledge/build.ts +266 -0
  204. package/src/knowledge/cards.ts +130 -0
  205. package/src/knowledge/docs.test.ts +118 -0
  206. package/src/knowledge/findings.ts +159 -0
  207. package/src/knowledge/importance.ts +72 -0
  208. package/src/knowledge/index.ts +53 -0
  209. package/src/knowledge/judge.ts +231 -0
  210. package/src/knowledge/model.ts +312 -0
  211. package/src/knowledge/packs/docs.ts +91 -0
  212. package/src/knowledge/partitions.test.ts +98 -0
  213. package/src/knowledge/partitions.ts +119 -0
  214. package/src/knowledge/plan.ts +115 -0
  215. package/src/knowledge/refs.ts +108 -0
  216. package/src/knowledge/resolve.ts +78 -0
  217. package/src/knowledge/review.test.ts +180 -0
  218. package/src/knowledge/review.ts +235 -0
  219. package/src/knowledge/sources.ts +146 -0
  220. package/src/knowledge/stores/localSnapshotStore.test.ts +82 -0
  221. package/src/knowledge/stores/localSnapshotStore.ts +159 -0
  222. package/src/knowledge/testkit.test-util.ts +92 -0
  223. package/src/knowledge/trace.test.ts +91 -0
  224. package/src/knowledge/trace.ts +111 -0
  225. package/src/knowledge/truncate.ts +118 -0
  226. package/src/memory/SemanticRecall.ts +3 -1
  227. package/src/retrieval/HybridRetriever.ts +3 -1
  228. package/src/retrieval/bm25.ts +5 -3
  229. package/src/retrieval/fusion.ts +5 -2
  230. package/src/retrieval/hnsw.ts +82 -35
  231. package/src/retrieval/index.ts +17 -3
  232. package/src/retrieval/knowledge-index/bytes.ts +166 -0
  233. package/src/retrieval/knowledge-index/cascade.ts +125 -0
  234. package/src/retrieval/knowledge-index/compact.ts +68 -0
  235. package/src/retrieval/knowledge-index/csr.ts +102 -0
  236. package/src/retrieval/knowledge-index/digest.ts +54 -0
  237. package/src/retrieval/knowledge-index/embeddings.ts +85 -0
  238. package/src/retrieval/knowledge-index/expand.ts +55 -0
  239. package/src/retrieval/knowledge-index/index.ts +162 -0
  240. package/src/retrieval/knowledge-index/lexical.ts +78 -0
  241. package/src/retrieval/knowledge-index/pairs.ts +57 -0
  242. package/src/retrieval/knowledge-index/prune.ts +48 -0
  243. package/src/retrieval/knowledge-index/quantize.ts +78 -0
  244. package/src/retrieval/knowledge-index/serialize.ts +124 -0
  245. package/src/retrieval/knowledge-index/sha256.ts +122 -0
  246. package/src/retrieval/knowledge-index/state.ts +108 -0
  247. package/src/retrieval/knowledge-index/tokenize.ts +41 -0
  248. package/src/retrieval/knowledge-index/traverse.ts +95 -0
  249. package/src/retrieval/knowledge-index/types.ts +78 -0
  250. package/src/retrieval/mmr.ts +35 -10
  251. package/src/retrieval/order.ts +68 -0
  252. package/src/retrieval/weightedFusion.ts +8 -5
  253. package/src/vectorstore/MemoryVectorStore.ts +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partitions.js","sourceRoot":"","sources":["../../src/knowledge/partitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * knowledge/plan.ts — `planReview`: the confirm chip's numbers (PRD 38 §4.3).
3
+ *
4
+ * A walk plus a manifest diff by hash, nothing more: a file whose hash is unchanged is
5
+ * never read. The only reads are the ignore files (`.gitignore`, `.builderforce/ignore`)
6
+ * when the listing has them. Binary files (by extension), oversized files and files no
7
+ * pack accepts are skipped with a reason.
8
+ */
9
+ import type { IngestManifest } from '../ingest/types.js';
10
+ import type { DirectorySource, KnowledgePack, ReviewPlan } from './model.js';
11
+ /** ≈ bytes per judged section, for the estimate (the plan does not read changed files). */
12
+ export declare const AVG_SECTION_BYTES = 1500;
13
+ export interface PlanOptions {
14
+ /** Per-file size cap in bytes. Default 2 MB. */
15
+ maxFileBytes?: number;
16
+ }
17
+ export interface PlannedFile {
18
+ path: string;
19
+ hash: string;
20
+ size: number;
21
+ pack: string;
22
+ changed: boolean;
23
+ }
24
+ export interface PlanDetail {
25
+ plan: ReviewPlan;
26
+ /** Every included file (changed and unchanged), sorted by path. */
27
+ files: PlannedFile[];
28
+ /** The manifest's prior `path → hash`. */
29
+ prior: Map<string, string>;
30
+ }
31
+ export declare function planReview(source: DirectorySource, manifest: IngestManifest, packs: KnowledgePack[], opts?: PlanOptions): Promise<ReviewPlan>;
32
+ export declare function planDetail(source: DirectorySource, manifest: IngestManifest, packs: readonly KnowledgePack[], opts?: PlanOptions): Promise<PlanDetail>;
33
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/knowledge/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7E,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAItC,MAAM,WAAW,WAAW;IACxB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,mEAAmE;IACnE,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,0CAA0C;IAC1C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,wBAAsB,UAAU,CAC5B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,GAAE,WAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAsB,UAAU,CAC5B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,IAAI,GAAE,WAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CAyDrB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * knowledge/plan.ts — `planReview`: the confirm chip's numbers (PRD 38 §4.3).
3
+ *
4
+ * A walk plus a manifest diff by hash, nothing more: a file whose hash is unchanged is
5
+ * never read. The only reads are the ignore files (`.gitignore`, `.builderforce/ignore`)
6
+ * when the listing has them. Binary files (by extension), oversized files and files no
7
+ * pack accepts are skipped with a reason.
8
+ */
9
+ import { composePacks, DEFAULT_MAX_FILE_BYTES, filesManifestKey, IGNORE_FILES, ignoreMatcher, isBinaryPath, manifestMap, stubSource, } from './sources.js';
10
+ import { compareStr, sortBy } from './refs.js';
11
+ /** ≈ bytes per judged section, for the estimate (the plan does not read changed files). */
12
+ export const AVG_SECTION_BYTES = 1500;
13
+ /** ≈ one compare call per this many judged sections when contradictions are asked for. */
14
+ const SECTIONS_PER_COMPARE = 10;
15
+ export async function planReview(source, manifest, packs, opts = {}) {
16
+ return (await planDetail(source, manifest, packs, opts)).plan;
17
+ }
18
+ export async function planDetail(source, manifest, packs, opts = {}) {
19
+ const maxBytes = opts.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;
20
+ const listed = [];
21
+ for await (const entry of source.list())
22
+ listed.push({ ...entry, path: entry.path.replace(/\\/g, '/').replace(/^\.?\//, '') });
23
+ const entries = sortBy(listed, (e) => e.path);
24
+ const ignoreTexts = [];
25
+ for (const name of IGNORE_FILES) {
26
+ if (!entries.some((e) => e.path === name))
27
+ continue;
28
+ const doc = await source.read(name);
29
+ if (doc.content.kind === 'text')
30
+ ignoreTexts.push(doc.content.text);
31
+ }
32
+ const ignored = ignoreMatcher(ignoreTexts);
33
+ const composed = composePacks(packs);
34
+ const prior = await manifestMap(manifest, filesManifestKey(source.rootId));
35
+ const packById = new Map(packs.map((p) => [p.id, p]));
36
+ const files = [];
37
+ const skipped = [];
38
+ const byPack = {};
39
+ let estimatedSections = 0;
40
+ let compareSections = 0;
41
+ for (const e of entries) {
42
+ if (ignored(e.path)) {
43
+ skipped.push({ path: e.path, reason: 'ignored' });
44
+ continue;
45
+ }
46
+ if (isBinaryPath(e.path)) {
47
+ skipped.push({ path: e.path, reason: 'binary' });
48
+ continue;
49
+ }
50
+ if (e.size > maxBytes) {
51
+ skipped.push({ path: e.path, reason: 'too-large' });
52
+ continue;
53
+ }
54
+ const hit = composed.resolve(stubSource(e.path));
55
+ if (!hit) {
56
+ skipped.push({ path: e.path, reason: 'no-pack' });
57
+ continue;
58
+ }
59
+ const changed = prior.get(e.path) !== e.hash;
60
+ files.push({ path: e.path, hash: e.hash, size: e.size, pack: hit.pack.id, changed });
61
+ byPack[hit.pack.id] = (byPack[hit.pack.id] ?? 0) + 1;
62
+ const spec = packById.get(hit.pack.id)?.judgement;
63
+ if (changed && spec && (spec.claims || spec.entities)) {
64
+ const sections = Math.max(1, Math.ceil(e.size / AVG_SECTION_BYTES));
65
+ estimatedSections += sections;
66
+ if (spec.contradictions)
67
+ compareSections += sections;
68
+ }
69
+ }
70
+ const present = new Set(entries.map((e) => e.path));
71
+ const removed = [...prior.keys()].filter((p) => !present.has(p)).sort(compareStr);
72
+ const changed = files.filter((f) => f.changed).map((f) => f.path);
73
+ const sortedByPack = Object.fromEntries(Object.keys(byPack).sort(compareStr).map((k) => [k, byPack[k]]));
74
+ return {
75
+ plan: {
76
+ rootId: source.rootId,
77
+ files: files.length,
78
+ byPack: sortedByPack,
79
+ unchanged: files.length - changed.length,
80
+ changed,
81
+ removed,
82
+ skipped,
83
+ estimatedModelCalls: estimatedSections + Math.ceil(compareSections / SECTIONS_PER_COMPARE),
84
+ },
85
+ files,
86
+ prior,
87
+ };
88
+ }
89
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/knowledge/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * knowledge/refs.ts — the NodeRef grammar and the deterministic primitives every
3
+ * knowledge module shares (ordering, canonical JSON, entity keys).
4
+ *
5
+ * Pure and import-free of `ingest` runtime code, so ingest's extractors can use it
6
+ * without an import cycle.
7
+ *
8
+ * src:${rootId}::${path} a source file (or an area: a directory path)
9
+ * src:${rootId}::${path}#${slug} a section of a source
10
+ * ent:${pack}:${normalizedName} an entity (also its project_facts key)
11
+ * fact:${key} any other fact (claims: fact:claim:${hash})
12
+ */
13
+ import type { NodeRef } from './model.js';
14
+ /** Code-unit ordering — never `localeCompare`, whose result depends on the host's ICU. */
15
+ export declare function compareStr(a: string, b: string): number;
16
+ export declare function srcRef(rootId: string, path: string): NodeRef;
17
+ /** The root-relative path of a `src:` ref (the section suffix dropped), else undefined. */
18
+ export declare function pathOfRef(ref: string): string | undefined;
19
+ /** The ref of the file a `src:` ref belongs to (itself for a file). */
20
+ export declare function fileRefOf(ref: NodeRef): NodeRef;
21
+ /** The node ref of a stored fact key: `ent:` keys are refs already; the rest are `fact:`. */
22
+ export declare function factRef(key: string): NodeRef;
23
+ /** The stored fact key of a fact/entity ref (inverse of {@link factRef}). */
24
+ export declare function factKeyOf(ref: NodeRef): string | undefined;
25
+ /**
26
+ * The normalized key of a name: NFKC, case-folded, punctuation stripped (dashes,
27
+ * underscores and slashes read as spaces so `run-store` and `run store` agree),
28
+ * whitespace collapsed.
29
+ */
30
+ export declare function normalizeKey(name: string): string;
31
+ /** A heading slug: the normalized key with spaces as dashes. */
32
+ export declare function slugOf(text: string): string;
33
+ export declare function basenameOf(path: string): string;
34
+ /** Rounds to 6 decimals so floating noise never reaches the JSON. */
35
+ export declare function round6(n: number): number;
36
+ /** JSON with object keys sorted and `undefined` members dropped — the canonical form for digests. */
37
+ export declare function canonicalJson(value: unknown): string;
38
+ /** Sorts a copy by the given string keys, in order. */
39
+ export declare function sortBy<T>(items: readonly T[], ...keys: Array<(t: T) => string>): T[];
40
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/knowledge/refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOzD;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG/C;AAED,6FAA6F;AAC7F,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,qEAAqE;AACrE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAaD,uDAAuD;AACvD,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAQpF"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * knowledge/refs.ts — the NodeRef grammar and the deterministic primitives every
3
+ * knowledge module shares (ordering, canonical JSON, entity keys).
4
+ *
5
+ * Pure and import-free of `ingest` runtime code, so ingest's extractors can use it
6
+ * without an import cycle.
7
+ *
8
+ * src:${rootId}::${path} a source file (or an area: a directory path)
9
+ * src:${rootId}::${path}#${slug} a section of a source
10
+ * ent:${pack}:${normalizedName} an entity (also its project_facts key)
11
+ * fact:${key} any other fact (claims: fact:claim:${hash})
12
+ */
13
+ /** Code-unit ordering — never `localeCompare`, whose result depends on the host's ICU. */
14
+ export function compareStr(a, b) {
15
+ return a < b ? -1 : a > b ? 1 : 0;
16
+ }
17
+ export function srcRef(rootId, path) {
18
+ return `src:${rootId}::${path}`;
19
+ }
20
+ /** The root-relative path of a `src:` ref (the section suffix dropped), else undefined. */
21
+ export function pathOfRef(ref) {
22
+ if (!ref.startsWith('src:'))
23
+ return undefined;
24
+ const at = ref.indexOf('::');
25
+ if (at < 0)
26
+ return undefined;
27
+ const rest = ref.slice(at + 2);
28
+ const hash = rest.indexOf('#');
29
+ return hash < 0 ? rest : rest.slice(0, hash);
30
+ }
31
+ /** The ref of the file a `src:` ref belongs to (itself for a file). */
32
+ export function fileRefOf(ref) {
33
+ const hash = ref.startsWith('src:') ? ref.indexOf('#', ref.indexOf('::')) : -1;
34
+ return hash < 0 ? ref : ref.slice(0, hash);
35
+ }
36
+ /** The node ref of a stored fact key: `ent:` keys are refs already; the rest are `fact:`. */
37
+ export function factRef(key) {
38
+ return key.startsWith('ent:') ? key : `fact:${key}`;
39
+ }
40
+ /** The stored fact key of a fact/entity ref (inverse of {@link factRef}). */
41
+ export function factKeyOf(ref) {
42
+ if (ref.startsWith('ent:'))
43
+ return ref;
44
+ if (ref.startsWith('fact:'))
45
+ return ref.slice(5);
46
+ return undefined;
47
+ }
48
+ /**
49
+ * The normalized key of a name: NFKC, case-folded, punctuation stripped (dashes,
50
+ * underscores and slashes read as spaces so `run-store` and `run store` agree),
51
+ * whitespace collapsed.
52
+ */
53
+ export function normalizeKey(name) {
54
+ return name
55
+ .normalize('NFKC')
56
+ .toLowerCase()
57
+ .replace(/[\p{Pd}\p{Pc}/\\]+/gu, ' ')
58
+ .replace(/[\p{P}\p{S}]+/gu, '')
59
+ .replace(/\s+/g, ' ')
60
+ .trim();
61
+ }
62
+ /** A heading slug: the normalized key with spaces as dashes. */
63
+ export function slugOf(text) {
64
+ return normalizeKey(text).replace(/ /g, '-') || 'section';
65
+ }
66
+ export function basenameOf(path) {
67
+ const i = path.lastIndexOf('/');
68
+ return i < 0 ? path : path.slice(i + 1);
69
+ }
70
+ /** Rounds to 6 decimals so floating noise never reaches the JSON. */
71
+ export function round6(n) {
72
+ return Math.round(n * 1e6) / 1e6;
73
+ }
74
+ /** JSON with object keys sorted and `undefined` members dropped — the canonical form for digests. */
75
+ export function canonicalJson(value) {
76
+ return JSON.stringify(sortKeys(value));
77
+ }
78
+ function sortKeys(value) {
79
+ if (Array.isArray(value))
80
+ return value.map(sortKeys);
81
+ if (value === null || typeof value !== 'object')
82
+ return value;
83
+ const out = {};
84
+ for (const key of Object.keys(value).sort(compareStr)) {
85
+ const v = value[key];
86
+ if (v !== undefined)
87
+ out[key] = sortKeys(v);
88
+ }
89
+ return out;
90
+ }
91
+ /** Sorts a copy by the given string keys, in order. */
92
+ export function sortBy(items, ...keys) {
93
+ return [...items].sort((a, b) => {
94
+ for (const key of keys) {
95
+ const c = compareStr(key(a), key(b));
96
+ if (c !== 0)
97
+ return c;
98
+ }
99
+ return 0;
100
+ });
101
+ }
102
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/knowledge/refs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * knowledge/resolve.ts — deterministic entity resolution (PRD 38 §4.3).
3
+ *
4
+ * • Exact: names whose normalized keys ({@link normalizeKey}) are equal are ONE entity.
5
+ * • Near: pairs the knowledge index calls similar become `possible-same` findings for a
6
+ * person to judge. They are never merged automatically.
7
+ */
8
+ import type { Finding, NodeRef } from './model.js';
9
+ import type { SimilarPair } from '../retrieval/knowledge-index/types.js';
10
+ import { normalizeKey } from './refs.js';
11
+ export { normalizeKey };
12
+ export interface ResolvedEntity {
13
+ key: string;
14
+ /** The canonical ref (the smallest of the group). */
15
+ ref: NodeRef;
16
+ /** Every ref with this key, sorted. */
17
+ refs: NodeRef[];
18
+ }
19
+ /** Groups refs by exact normalized key. Empty keys are ignored. Sorted by key. */
20
+ export declare function resolveEntities(entries: ReadonlyArray<{
21
+ ref: NodeRef;
22
+ key: string;
23
+ }>): ResolvedEntity[];
24
+ /** Normalized key → canonical ref, for an extractor's `ctx.knownKeys`. */
25
+ export declare function knownKeysOf(resolved: readonly ResolvedEntity[]): Map<string, NodeRef>;
26
+ /**
27
+ * `possible-same` findings from near-duplicate pairs between two DIFFERENT entities (pairs
28
+ * already merged by key, or naming a non-entity, are not reported).
29
+ */
30
+ export declare function possibleSameFindings(pairs: readonly SimilarPair[], pack?: string): Finding[];
31
+ /** The name part of `ent:<pack>:<name>`. */
32
+ export declare function entityName(ref: string): string;
33
+ /** The stored key of an entity named `name` in `pack`. */
34
+ export declare function entityKey(pack: string, name: string): NodeRef;
35
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/knowledge/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAc,YAAY,EAAU,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,GAAG,EAAE,OAAO,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,cAAc,EAAE,CAavG;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAErF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,SAAW,GAAG,OAAO,EAAE,CAiB9F;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * knowledge/resolve.ts — deterministic entity resolution (PRD 38 §4.3).
3
+ *
4
+ * • Exact: names whose normalized keys ({@link normalizeKey}) are equal are ONE entity.
5
+ * • Near: pairs the knowledge index calls similar become `possible-same` findings for a
6
+ * person to judge. They are never merged automatically.
7
+ */
8
+ import { hashText } from '../ingest/hash.js';
9
+ import { compareStr, normalizeKey, round6 } from './refs.js';
10
+ export { normalizeKey };
11
+ /** Groups refs by exact normalized key. Empty keys are ignored. Sorted by key. */
12
+ export function resolveEntities(entries) {
13
+ const groups = new Map();
14
+ for (const { ref, key } of entries) {
15
+ const k = normalizeKey(key);
16
+ if (!k)
17
+ continue;
18
+ let g = groups.get(k);
19
+ if (!g)
20
+ groups.set(k, (g = new Set()));
21
+ g.add(ref);
22
+ }
23
+ return [...groups.keys()].sort(compareStr).map((key) => {
24
+ const refs = [...groups.get(key)].sort(compareStr);
25
+ return { key, ref: refs[0], refs };
26
+ });
27
+ }
28
+ /** Normalized key → canonical ref, for an extractor's `ctx.knownKeys`. */
29
+ export function knownKeysOf(resolved) {
30
+ return new Map(resolved.map((r) => [r.key, r.ref]));
31
+ }
32
+ /**
33
+ * `possible-same` findings from near-duplicate pairs between two DIFFERENT entities (pairs
34
+ * already merged by key, or naming a non-entity, are not reported).
35
+ */
36
+ export function possibleSameFindings(pairs, pack = 'memory') {
37
+ const seen = new Set();
38
+ const out = [];
39
+ for (const p of pairs) {
40
+ if (!p.a.startsWith('ent:') || !p.b.startsWith('ent:') || p.a === p.b)
41
+ continue;
42
+ const [a, b] = compareStr(p.a, p.b) <= 0 ? [p.a, p.b] : [p.b, p.a];
43
+ if (normalizeKey(entityName(a)) === normalizeKey(entityName(b)))
44
+ continue;
45
+ const id = `possible-same:${hashText(`${a}\u0000${b}`)}`;
46
+ if (seen.has(id))
47
+ continue;
48
+ seen.add(id);
49
+ out.push({
50
+ id, kind: 'possible-same', pack, nodes: [a, b], severity: 'info',
51
+ params: { similarity: round6(p.similarity) },
52
+ requestKey: 'knowledgeGraph.fix.possibleSame',
53
+ });
54
+ }
55
+ return out.sort((x, y) => compareStr(x.id, y.id));
56
+ }
57
+ /** The name part of `ent:<pack>:<name>`. */
58
+ export function entityName(ref) {
59
+ const rest = ref.startsWith('ent:') ? ref.slice(4) : ref;
60
+ const colon = rest.indexOf(':');
61
+ return colon < 0 ? rest : rest.slice(colon + 1);
62
+ }
63
+ /** The stored key of an entity named `name` in `pack`. */
64
+ export function entityKey(pack, name) {
65
+ return `ent:${pack}:${normalizeKey(name)}`;
66
+ }
67
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/knowledge/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * knowledge/review.ts — `reviewDirectory`: point it at a folder and it learns what the
3
+ * folder says (PRD 38 §4.3).
4
+ *
5
+ * plan (walk + manifest diff) → per changed file: read · parse (the ONE ParserRegistry,
6
+ * composed from the packs) · extract (cached by content hash) · judge (changed sections
7
+ * of judged kinds, within budget) · write · markStale → analyzers → compare near-duplicate
8
+ * claims → manifest + scope digest.
9
+ *
10
+ * Store judgement, compute perception: only `model` facts and relations are written —
11
+ * `extracted` output goes to the extracted cache, never to memory ({@link assertStoredBatch}).
12
+ * Abort is honoured between files; a file is written whole or not at all. A file whose
13
+ * sections were cut by the budget stays "changed" in the manifest, so continuing re-plans it
14
+ * and judges only the sections not judged yet.
15
+ */
16
+ import type { ReviewArgs, ReviewReport, StoredFact, StoredRelation } from './model.js';
17
+ /** Throws if a batch carries `extracted` items — perception is never memory. */
18
+ export declare function assertStoredBatch(batch: {
19
+ facts: readonly StoredFact[];
20
+ relations: readonly StoredRelation[];
21
+ }): void;
22
+ export declare function reviewDirectory(args: ReviewArgs): Promise<ReviewReport>;
23
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/knowledge/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAC6D,UAAU,EAAE,YAAY,EAC7F,UAAU,EAAE,cAAc,EAC7B,MAAM,YAAY,CAAC;AAcpB,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GAAG,IAAI,CAGrH;AA8DD,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAqI7E"}