@theihtisham/agent-shadow-brain 5.2.0 → 6.0.2

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 (301) hide show
  1. package/README.md +310 -1014
  2. package/dist/brain/agent-firewall.d.ts +7 -0
  3. package/dist/brain/agent-firewall.d.ts.map +1 -0
  4. package/dist/brain/agent-firewall.js +152 -0
  5. package/dist/brain/agent-firewall.js.map +1 -0
  6. package/dist/brain/agent-handoff.d.ts +19 -0
  7. package/dist/brain/agent-handoff.d.ts.map +1 -0
  8. package/dist/brain/agent-handoff.js +127 -0
  9. package/dist/brain/agent-handoff.js.map +1 -0
  10. package/dist/brain/air-gap.d.ts +23 -0
  11. package/dist/brain/air-gap.d.ts.map +1 -0
  12. package/dist/brain/air-gap.js +137 -0
  13. package/dist/brain/air-gap.js.map +1 -0
  14. package/dist/brain/attention-heatmap.d.ts +24 -0
  15. package/dist/brain/attention-heatmap.d.ts.map +1 -0
  16. package/dist/brain/attention-heatmap.js +108 -0
  17. package/dist/brain/attention-heatmap.js.map +1 -0
  18. package/dist/brain/auto-setup.js +19 -14
  19. package/dist/brain/auto-setup.js.map +1 -1
  20. package/dist/brain/auto-update.js +1 -1
  21. package/dist/brain/brain-3d.d.ts +79 -0
  22. package/dist/brain/brain-3d.d.ts.map +1 -0
  23. package/dist/brain/brain-3d.js +468 -0
  24. package/dist/brain/brain-3d.js.map +1 -0
  25. package/dist/brain/brain-active-learner.d.ts +74 -0
  26. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  27. package/dist/brain/brain-active-learner.js +425 -0
  28. package/dist/brain/brain-active-learner.js.map +1 -0
  29. package/dist/brain/brain-ascii.d.ts +32 -0
  30. package/dist/brain/brain-ascii.d.ts.map +1 -0
  31. package/dist/brain/brain-ascii.js +402 -0
  32. package/dist/brain/brain-ascii.js.map +1 -0
  33. package/dist/brain/brain-chat.d.ts +42 -0
  34. package/dist/brain/brain-chat.d.ts.map +1 -0
  35. package/dist/brain/brain-chat.js +162 -0
  36. package/dist/brain/brain-chat.js.map +1 -0
  37. package/dist/brain/brain-cinema.d.ts +45 -0
  38. package/dist/brain/brain-cinema.d.ts.map +1 -0
  39. package/dist/brain/brain-cinema.js +393 -0
  40. package/dist/brain/brain-cinema.js.map +1 -0
  41. package/dist/brain/brain-coach.d.ts +45 -0
  42. package/dist/brain/brain-coach.d.ts.map +1 -0
  43. package/dist/brain/brain-coach.js +383 -0
  44. package/dist/brain/brain-coach.js.map +1 -0
  45. package/dist/brain/brain-consolidator.d.ts +56 -0
  46. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  47. package/dist/brain/brain-consolidator.js +386 -0
  48. package/dist/brain/brain-consolidator.js.map +1 -0
  49. package/dist/brain/brain-contradictions.d.ts +57 -0
  50. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  51. package/dist/brain/brain-contradictions.js +443 -0
  52. package/dist/brain/brain-contradictions.js.map +1 -0
  53. package/dist/brain/brain-diff.d.ts +61 -0
  54. package/dist/brain/brain-diff.d.ts.map +1 -0
  55. package/dist/brain/brain-diff.js +439 -0
  56. package/dist/brain/brain-diff.js.map +1 -0
  57. package/dist/brain/brain-dna.d.ts +59 -0
  58. package/dist/brain/brain-dna.d.ts.map +1 -0
  59. package/dist/brain/brain-dna.js +336 -0
  60. package/dist/brain/brain-dna.js.map +1 -0
  61. package/dist/brain/brain-doppelganger.d.ts +32 -0
  62. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  63. package/dist/brain/brain-doppelganger.js +417 -0
  64. package/dist/brain/brain-doppelganger.js.map +1 -0
  65. package/dist/brain/brain-encryption.d.ts +14 -0
  66. package/dist/brain/brain-encryption.d.ts.map +1 -0
  67. package/dist/brain/brain-encryption.js +68 -0
  68. package/dist/brain/brain-encryption.js.map +1 -0
  69. package/dist/brain/brain-exchange.d.ts +30 -0
  70. package/dist/brain/brain-exchange.d.ts.map +1 -0
  71. package/dist/brain/brain-exchange.js +106 -0
  72. package/dist/brain/brain-exchange.js.map +1 -0
  73. package/dist/brain/brain-garden.d.ts +18 -0
  74. package/dist/brain/brain-garden.d.ts.map +1 -0
  75. package/dist/brain/brain-garden.js +81 -0
  76. package/dist/brain/brain-garden.js.map +1 -0
  77. package/dist/brain/brain-graph-walker.d.ts +54 -0
  78. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  79. package/dist/brain/brain-graph-walker.js +412 -0
  80. package/dist/brain/brain-graph-walker.js.map +1 -0
  81. package/dist/brain/brain-holiday-card.d.ts +50 -0
  82. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  83. package/dist/brain/brain-holiday-card.js +432 -0
  84. package/dist/brain/brain-holiday-card.js.map +1 -0
  85. package/dist/brain/brain-memes.d.ts +44 -0
  86. package/dist/brain/brain-memes.d.ts.map +1 -0
  87. package/dist/brain/brain-memes.js +438 -0
  88. package/dist/brain/brain-memes.js.map +1 -0
  89. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  90. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  91. package/dist/brain/brain-memory-tiers.js +292 -0
  92. package/dist/brain/brain-memory-tiers.js.map +1 -0
  93. package/dist/brain/brain-notebook.d.ts +68 -0
  94. package/dist/brain/brain-notebook.d.ts.map +1 -0
  95. package/dist/brain/brain-notebook.js +379 -0
  96. package/dist/brain/brain-notebook.js.map +1 -0
  97. package/dist/brain/brain-portability.js +1 -1
  98. package/dist/brain/brain-quantize.d.ts +62 -0
  99. package/dist/brain/brain-quantize.d.ts.map +1 -0
  100. package/dist/brain/brain-quantize.js +346 -0
  101. package/dist/brain/brain-quantize.js.map +1 -0
  102. package/dist/brain/brain-query-expander.d.ts +31 -0
  103. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  104. package/dist/brain/brain-query-expander.js +417 -0
  105. package/dist/brain/brain-query-expander.js.map +1 -0
  106. package/dist/brain/brain-quest.d.ts +58 -0
  107. package/dist/brain/brain-quest.d.ts.map +1 -0
  108. package/dist/brain/brain-quest.js +541 -0
  109. package/dist/brain/brain-quest.js.map +1 -0
  110. package/dist/brain/brain-recall-cache.d.ts +73 -0
  111. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  112. package/dist/brain/brain-recall-cache.js +444 -0
  113. package/dist/brain/brain-recall-cache.js.map +1 -0
  114. package/dist/brain/brain-reflex.d.ts +55 -0
  115. package/dist/brain/brain-reflex.d.ts.map +1 -0
  116. package/dist/brain/brain-reflex.js +364 -0
  117. package/dist/brain/brain-reflex.js.map +1 -0
  118. package/dist/brain/brain-replay.d.ts +74 -0
  119. package/dist/brain/brain-replay.d.ts.map +1 -0
  120. package/dist/brain/brain-replay.js +336 -0
  121. package/dist/brain/brain-replay.js.map +1 -0
  122. package/dist/brain/brain-rerank.d.ts +39 -0
  123. package/dist/brain/brain-rerank.d.ts.map +1 -0
  124. package/dist/brain/brain-rerank.js +216 -0
  125. package/dist/brain/brain-rerank.js.map +1 -0
  126. package/dist/brain/brain-roast.d.ts +44 -0
  127. package/dist/brain/brain-roast.d.ts.map +1 -0
  128. package/dist/brain/brain-roast.js +566 -0
  129. package/dist/brain/brain-roast.js.map +1 -0
  130. package/dist/brain/brain-sonification.d.ts +57 -0
  131. package/dist/brain/brain-sonification.d.ts.map +1 -0
  132. package/dist/brain/brain-sonification.js +286 -0
  133. package/dist/brain/brain-sonification.js.map +1 -0
  134. package/dist/brain/brain-tarot.d.ts +49 -0
  135. package/dist/brain/brain-tarot.d.ts.map +1 -0
  136. package/dist/brain/brain-tarot.js +634 -0
  137. package/dist/brain/brain-tarot.js.map +1 -0
  138. package/dist/brain/brain-time-capsule.d.ts +80 -0
  139. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  140. package/dist/brain/brain-time-capsule.js +289 -0
  141. package/dist/brain/brain-time-capsule.js.map +1 -0
  142. package/dist/brain/brain-trophies.d.ts +60 -0
  143. package/dist/brain/brain-trophies.d.ts.map +1 -0
  144. package/dist/brain/brain-trophies.js +431 -0
  145. package/dist/brain/brain-trophies.js.map +1 -0
  146. package/dist/brain/brain-working-memory.d.ts +78 -0
  147. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  148. package/dist/brain/brain-working-memory.js +367 -0
  149. package/dist/brain/brain-working-memory.js.map +1 -0
  150. package/dist/brain/branch-brain.d.ts +23 -0
  151. package/dist/brain/branch-brain.d.ts.map +1 -0
  152. package/dist/brain/branch-brain.js +159 -0
  153. package/dist/brain/branch-brain.js.map +1 -0
  154. package/dist/brain/calibration-monitor.d.ts +20 -0
  155. package/dist/brain/calibration-monitor.d.ts.map +1 -0
  156. package/dist/brain/calibration-monitor.js +144 -0
  157. package/dist/brain/calibration-monitor.js.map +1 -0
  158. package/dist/brain/causal-chains.d.ts +37 -0
  159. package/dist/brain/causal-chains.d.ts.map +1 -0
  160. package/dist/brain/causal-chains.js +250 -0
  161. package/dist/brain/causal-chains.js.map +1 -0
  162. package/dist/brain/collision-detective.d.ts +32 -0
  163. package/dist/brain/collision-detective.d.ts.map +1 -0
  164. package/dist/brain/collision-detective.js +233 -0
  165. package/dist/brain/collision-detective.js.map +1 -0
  166. package/dist/brain/confidence-gate.d.ts +69 -0
  167. package/dist/brain/confidence-gate.d.ts.map +1 -0
  168. package/dist/brain/confidence-gate.js +244 -0
  169. package/dist/brain/confidence-gate.js.map +1 -0
  170. package/dist/brain/constitution.d.ts +59 -0
  171. package/dist/brain/constitution.d.ts.map +1 -0
  172. package/dist/brain/constitution.js +315 -0
  173. package/dist/brain/constitution.js.map +1 -0
  174. package/dist/brain/cost-aware-spawner.d.ts +7 -0
  175. package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
  176. package/dist/brain/cost-aware-spawner.js +77 -0
  177. package/dist/brain/cost-aware-spawner.js.map +1 -0
  178. package/dist/brain/dream-engine.d.ts +35 -0
  179. package/dist/brain/dream-engine.d.ts.map +1 -0
  180. package/dist/brain/dream-engine.js +273 -0
  181. package/dist/brain/dream-engine.js.map +1 -0
  182. package/dist/brain/embeddings-v2.d.ts +58 -0
  183. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  184. package/dist/brain/embeddings-v2.js +344 -0
  185. package/dist/brain/embeddings-v2.js.map +1 -0
  186. package/dist/brain/embeddings.d.ts +27 -0
  187. package/dist/brain/embeddings.d.ts.map +1 -0
  188. package/dist/brain/embeddings.js +175 -0
  189. package/dist/brain/embeddings.js.map +1 -0
  190. package/dist/brain/forgetting-curve.d.ts +21 -0
  191. package/dist/brain/forgetting-curve.d.ts.map +1 -0
  192. package/dist/brain/forgetting-curve.js +174 -0
  193. package/dist/brain/forgetting-curve.js.map +1 -0
  194. package/dist/brain/formal-verification-bridge.d.ts +26 -0
  195. package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
  196. package/dist/brain/formal-verification-bridge.js +219 -0
  197. package/dist/brain/formal-verification-bridge.js.map +1 -0
  198. package/dist/brain/global-brain.d.ts +8 -1
  199. package/dist/brain/global-brain.d.ts.map +1 -1
  200. package/dist/brain/global-brain.js +24 -0
  201. package/dist/brain/global-brain.js.map +1 -1
  202. package/dist/brain/hallucination-quarantine.d.ts +26 -0
  203. package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
  204. package/dist/brain/hallucination-quarantine.js +135 -0
  205. package/dist/brain/hallucination-quarantine.js.map +1 -0
  206. package/dist/brain/hive-accelerator.d.ts +39 -0
  207. package/dist/brain/hive-accelerator.d.ts.map +1 -0
  208. package/dist/brain/hive-accelerator.js +152 -0
  209. package/dist/brain/hive-accelerator.js.map +1 -0
  210. package/dist/brain/hive-voice.d.ts +71 -0
  211. package/dist/brain/hive-voice.d.ts.map +1 -0
  212. package/dist/brain/hive-voice.js +352 -0
  213. package/dist/brain/hive-voice.js.map +1 -0
  214. package/dist/brain/json-output.d.ts +26 -0
  215. package/dist/brain/json-output.d.ts.map +1 -0
  216. package/dist/brain/json-output.js +112 -0
  217. package/dist/brain/json-output.js.map +1 -0
  218. package/dist/brain/l0-cache.js +1 -1
  219. package/dist/brain/l0-cache.js.map +1 -1
  220. package/dist/brain/local-llm.d.ts +20 -0
  221. package/dist/brain/local-llm.d.ts.map +1 -0
  222. package/dist/brain/local-llm.js +132 -0
  223. package/dist/brain/local-llm.js.map +1 -0
  224. package/dist/brain/markdown-export.d.ts +48 -0
  225. package/dist/brain/markdown-export.d.ts.map +1 -0
  226. package/dist/brain/markdown-export.js +382 -0
  227. package/dist/brain/markdown-export.js.map +1 -0
  228. package/dist/brain/mcp-server.d.ts +40 -0
  229. package/dist/brain/mcp-server.d.ts.map +1 -1
  230. package/dist/brain/mcp-server.js +395 -12
  231. package/dist/brain/mcp-server.js.map +1 -1
  232. package/dist/brain/model-registry.d.ts +96 -0
  233. package/dist/brain/model-registry.d.ts.map +1 -0
  234. package/dist/brain/model-registry.js +585 -0
  235. package/dist/brain/model-registry.js.map +1 -0
  236. package/dist/brain/multimodal-vision.d.ts +38 -0
  237. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  238. package/dist/brain/multimodal-vision.js +257 -0
  239. package/dist/brain/multimodal-vision.js.map +1 -0
  240. package/dist/brain/orchestrator.js +1 -1
  241. package/dist/brain/otel-lite.d.ts +71 -0
  242. package/dist/brain/otel-lite.d.ts.map +1 -0
  243. package/dist/brain/otel-lite.js +232 -0
  244. package/dist/brain/otel-lite.js.map +1 -0
  245. package/dist/brain/pr-auto-review.d.ts +17 -0
  246. package/dist/brain/pr-auto-review.d.ts.map +1 -0
  247. package/dist/brain/pr-auto-review.js +73 -0
  248. package/dist/brain/pr-auto-review.js.map +1 -0
  249. package/dist/brain/pre-mortem.d.ts +21 -0
  250. package/dist/brain/pre-mortem.d.ts.map +1 -0
  251. package/dist/brain/pre-mortem.js +210 -0
  252. package/dist/brain/pre-mortem.js.map +1 -0
  253. package/dist/brain/prompt-cache.d.ts +54 -0
  254. package/dist/brain/prompt-cache.d.ts.map +1 -0
  255. package/dist/brain/prompt-cache.js +105 -0
  256. package/dist/brain/prompt-cache.js.map +1 -0
  257. package/dist/brain/reputation-ledger.d.ts +42 -0
  258. package/dist/brain/reputation-ledger.d.ts.map +1 -0
  259. package/dist/brain/reputation-ledger.js +326 -0
  260. package/dist/brain/reputation-ledger.js.map +1 -0
  261. package/dist/brain/session-hooks.d.ts +19 -0
  262. package/dist/brain/session-hooks.d.ts.map +1 -1
  263. package/dist/brain/session-hooks.js +249 -18
  264. package/dist/brain/session-hooks.js.map +1 -1
  265. package/dist/brain/subagent-bridge.d.ts +46 -0
  266. package/dist/brain/subagent-bridge.d.ts.map +1 -0
  267. package/dist/brain/subagent-bridge.js +364 -0
  268. package/dist/brain/subagent-bridge.js.map +1 -0
  269. package/dist/brain/swarm-debate.d.ts +22 -0
  270. package/dist/brain/swarm-debate.d.ts.map +1 -0
  271. package/dist/brain/swarm-debate.js +134 -0
  272. package/dist/brain/swarm-debate.js.map +1 -0
  273. package/dist/brain/team-brain-sync.d.ts +22 -0
  274. package/dist/brain/team-brain-sync.d.ts.map +1 -0
  275. package/dist/brain/team-brain-sync.js +132 -0
  276. package/dist/brain/team-brain-sync.js.map +1 -0
  277. package/dist/brain/token-economy.d.ts +25 -0
  278. package/dist/brain/token-economy.d.ts.map +1 -0
  279. package/dist/brain/token-economy.js +216 -0
  280. package/dist/brain/token-economy.js.map +1 -0
  281. package/dist/brain/voice-mode.d.ts +15 -0
  282. package/dist/brain/voice-mode.d.ts.map +1 -0
  283. package/dist/brain/voice-mode.js +97 -0
  284. package/dist/brain/voice-mode.js.map +1 -0
  285. package/dist/cli.js +1702 -4
  286. package/dist/cli.js.map +1 -1
  287. package/dist/dashboard/server.d.ts +6 -0
  288. package/dist/dashboard/server.d.ts.map +1 -1
  289. package/dist/dashboard/server.js +1118 -368
  290. package/dist/dashboard/server.js.map +1 -1
  291. package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
  292. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
  293. package/dist/dashboard/v6-dashboard-html.js +2474 -0
  294. package/dist/dashboard/v6-dashboard-html.js.map +1 -0
  295. package/dist/index.d.ts +27 -0
  296. package/dist/index.d.ts.map +1 -1
  297. package/dist/index.js +29 -1
  298. package/dist/index.js.map +1 -1
  299. package/dist/types.d.ts +518 -2
  300. package/dist/types.d.ts.map +1 -1
  301. package/package.json +33 -4
@@ -0,0 +1,346 @@
1
+ // src/brain/brain-quantize.ts — int8 vector quantization for the brain
2
+ // v6.0.2 — Hive Mind Edition
3
+ //
4
+ // Float32 vectors are 4x bigger on disk and in memory than they need to be for
5
+ // approximate-nearest-neighbor recall. Symmetric int8 quantization preserves
6
+ // recall to within ~1% on unit-norm vectors while shrinking the working set
7
+ // by 4x. That means the same RAM budget covers four times as many memories
8
+ // and the cold-start read of a sharded JSON index is dramatically faster.
9
+ //
10
+ // Design:
11
+ // - Symmetric per-vector int8: scale = max(|v_i|) / 127, q_i = round(v_i/scale).
12
+ // Per-vector scale (not per-tensor) handles the case where some memories
13
+ // have a much wider dynamic range than others (e.g. Ollama dense vs hash).
14
+ // - Compressed format ".q8" is a tight binary:
15
+ // magic : 4 bytes ascii "Q8I0"
16
+ // version : uint32 1
17
+ // dim : uint32 embedding dimension
18
+ // count : uint32 number of entries
19
+ // entries[] : { float64 scale; int8[dim] q; uint16 idLen; utf8 id[idLen] }
20
+ // - Direct cosine on int8: integer dot then divide by scaleA*scaleB and
21
+ // (dim * 127^2). Skips a dequantize-into-float32 round trip in the hot path.
22
+ //
23
+ // Exposed: BrainQuantize, getBrainQuantize(), resetBrainQuantizeForTests().
24
+ // .quantize(vec)
25
+ // .dequantize(q, scale)
26
+ // .cosineQuantized(a, scaleA, b, scaleB)
27
+ // .compressIndex(srcPath, outPath)
28
+ // .loadCompressedIndex(path)
29
+ // .quantizeRoundtripError(vectors)
30
+ import * as fs from 'fs';
31
+ import * as path from 'path';
32
+ const MAGIC = Buffer.from('Q8I0', 'ascii');
33
+ const VERSION = 1;
34
+ const HEADER_BYTES = 4 + 4 + 4 + 4; // magic + version + dim + count
35
+ export class BrainQuantize {
36
+ /** Symmetric int8 quantization with per-vector scale. */
37
+ quantize(vector) {
38
+ if (!vector || vector.length === 0)
39
+ return new Int8Array(0);
40
+ let maxAbs = 0;
41
+ for (let i = 0; i < vector.length; i++) {
42
+ const a = Math.abs(vector[i]);
43
+ if (a > maxAbs)
44
+ maxAbs = a;
45
+ }
46
+ const out = new Int8Array(vector.length);
47
+ if (maxAbs === 0)
48
+ return out; // all zeros — quantizes to all zeros
49
+ const scale = maxAbs / 127;
50
+ const inv = 1 / scale;
51
+ for (let i = 0; i < vector.length; i++) {
52
+ const q = Math.round(vector[i] * inv);
53
+ out[i] = q > 127 ? 127 : q < -127 ? -127 : q;
54
+ }
55
+ return out;
56
+ }
57
+ /** Recover an approximation of the original float vector. */
58
+ dequantize(q, scale) {
59
+ if (!q || q.length === 0)
60
+ return [];
61
+ const out = new Array(q.length);
62
+ for (let i = 0; i < q.length; i++)
63
+ out[i] = q[i] * scale;
64
+ return out;
65
+ }
66
+ /**
67
+ * Cosine similarity on quantized vectors WITHOUT dequantizing first.
68
+ *
69
+ * If `a` and `b` were derived from unit-norm float vectors, the cosine is
70
+ * just the dot product after rescaling. We compute the integer dot then
71
+ * apply `scaleA * scaleB` to convert back to the float dot, and clamp to
72
+ * [-1, 1] for numeric safety. Note: the dim/127^2 factor in the spec is the
73
+ * theoretical worst-case scale (when every element is ±127); the actual
74
+ * normalization is captured entirely by scaleA*scaleB, so we use that and
75
+ * do not double-divide. The clamp guards against quantization rounding
76
+ * pushing the result slightly out of range.
77
+ */
78
+ cosineQuantized(a, scaleA, b, scaleB) {
79
+ if (!a || !b || a.length === 0 || b.length === 0)
80
+ return 0;
81
+ const n = Math.min(a.length, b.length);
82
+ let dot = 0;
83
+ for (let i = 0; i < n; i++)
84
+ dot += a[i] * b[i];
85
+ const sim = dot * scaleA * scaleB;
86
+ if (sim > 1)
87
+ return 1;
88
+ if (sim < -1)
89
+ return -1;
90
+ return sim;
91
+ }
92
+ /** Convert a v2 sharded JSON index into a single compressed .q8 binary. */
93
+ async compressIndex(srcPath, outPath) {
94
+ const start = Date.now();
95
+ const docs = this.readShardDocs(srcPath);
96
+ if (docs.length === 0) {
97
+ // Empty index → still write a valid empty file.
98
+ const header = Buffer.alloc(HEADER_BYTES);
99
+ MAGIC.copy(header, 0);
100
+ header.writeUInt32LE(VERSION, 4);
101
+ header.writeUInt32LE(0, 8);
102
+ header.writeUInt32LE(0, 12);
103
+ this.atomicWrite(outPath, header);
104
+ return {
105
+ originalBytes: this.measureBytes(srcPath),
106
+ compressedBytes: header.length,
107
+ compressionRatio: 0,
108
+ vectorCount: 0,
109
+ dim: 0,
110
+ encodingError: { meanAbs: 0, max: 0 },
111
+ durationMs: Date.now() - start,
112
+ };
113
+ }
114
+ const dim = docs[0].vector.length;
115
+ const quantized = [];
116
+ for (const d of docs) {
117
+ if (!d.vector || d.vector.length !== dim)
118
+ continue; // skip ragged
119
+ const q = this.quantize(d.vector);
120
+ const scale = this.scaleOf(d.vector);
121
+ quantized.push({ id: d.id, q, scale, original: d.vector });
122
+ }
123
+ // Estimate output size up front so we allocate one Buffer.
124
+ let bodyBytes = 0;
125
+ const idBufs = [];
126
+ for (const e of quantized) {
127
+ const idBuf = Buffer.from(e.id, 'utf-8');
128
+ idBufs.push(idBuf);
129
+ bodyBytes += 8 + dim + 2 + idBuf.length;
130
+ }
131
+ const totalBytes = HEADER_BYTES + bodyBytes;
132
+ const buf = Buffer.alloc(totalBytes);
133
+ MAGIC.copy(buf, 0);
134
+ buf.writeUInt32LE(VERSION, 4);
135
+ buf.writeUInt32LE(dim, 8);
136
+ buf.writeUInt32LE(quantized.length, 12);
137
+ let offset = HEADER_BYTES;
138
+ for (let i = 0; i < quantized.length; i++) {
139
+ const e = quantized[i];
140
+ buf.writeDoubleLE(e.scale, offset);
141
+ offset += 8;
142
+ // int8 array copy — Buffer views the Int8Array directly.
143
+ Buffer.from(e.q.buffer, e.q.byteOffset, e.q.byteLength).copy(buf, offset);
144
+ offset += dim;
145
+ const idBuf = idBufs[i];
146
+ buf.writeUInt16LE(idBuf.length, offset);
147
+ offset += 2;
148
+ idBuf.copy(buf, offset);
149
+ offset += idBuf.length;
150
+ }
151
+ this.atomicWrite(outPath, buf);
152
+ // Encoding error sample (cap at 500 vectors so this stays cheap).
153
+ const sampleN = Math.min(500, quantized.length);
154
+ let sumAbs = 0, maxAbs = 0, count = 0;
155
+ for (let i = 0; i < sampleN; i++) {
156
+ const e = quantized[i];
157
+ const recon = this.dequantize(e.q, e.scale);
158
+ for (let j = 0; j < dim; j++) {
159
+ const err = Math.abs(recon[j] - e.original[j]);
160
+ sumAbs += err;
161
+ if (err > maxAbs)
162
+ maxAbs = err;
163
+ count++;
164
+ }
165
+ }
166
+ const originalBytes = this.measureBytes(srcPath);
167
+ return {
168
+ originalBytes,
169
+ compressedBytes: totalBytes,
170
+ compressionRatio: originalBytes > 0 ? +(originalBytes / totalBytes).toFixed(3) : 0,
171
+ vectorCount: quantized.length,
172
+ dim,
173
+ encodingError: {
174
+ meanAbs: count > 0 ? +(sumAbs / count).toFixed(6) : 0,
175
+ max: +maxAbs.toFixed(6),
176
+ },
177
+ durationMs: Date.now() - start,
178
+ };
179
+ }
180
+ /** Load a .q8 file and return vectors plus a ready-to-use recall function. */
181
+ async loadCompressedIndex(filePath) {
182
+ const buf = await fs.promises.readFile(filePath);
183
+ if (buf.length < HEADER_BYTES)
184
+ throw new Error(`q8 index too short: ${buf.length} bytes`);
185
+ if (buf.subarray(0, 4).compare(MAGIC) !== 0)
186
+ throw new Error('q8 index: bad magic');
187
+ const version = buf.readUInt32LE(4);
188
+ if (version !== VERSION)
189
+ throw new Error(`q8 index: unsupported version ${version}`);
190
+ const dim = buf.readUInt32LE(8);
191
+ const count = buf.readUInt32LE(12);
192
+ const vectors = new Map();
193
+ let offset = HEADER_BYTES;
194
+ for (let i = 0; i < count; i++) {
195
+ if (offset + 8 + dim + 2 > buf.length)
196
+ throw new Error(`q8 index truncated at entry ${i}`);
197
+ const scale = buf.readDoubleLE(offset);
198
+ offset += 8;
199
+ // Copy out of the parent buffer so the underlying ArrayBuffer can be GC'd
200
+ // and the Int8Array view stays tight to its dim bytes.
201
+ const q = new Int8Array(dim);
202
+ buf.copy(Buffer.from(q.buffer, q.byteOffset, q.byteLength), 0, offset, offset + dim);
203
+ offset += dim;
204
+ const idLen = buf.readUInt16LE(offset);
205
+ offset += 2;
206
+ if (offset + idLen > buf.length)
207
+ throw new Error(`q8 index truncated id at entry ${i}`);
208
+ const id = buf.subarray(offset, offset + idLen).toString('utf-8');
209
+ offset += idLen;
210
+ vectors.set(id, { q, scale });
211
+ }
212
+ const recallFn = (query, topK) => {
213
+ if (vectors.size === 0 || !query || query.length === 0 || topK <= 0)
214
+ return [];
215
+ const qVec = query.length === dim ? query : padOrTruncate(query, dim);
216
+ const qInt = this.quantize(qVec);
217
+ const qScale = this.scaleOf(qVec);
218
+ const hits = [];
219
+ for (const [id, entry] of vectors) {
220
+ const score = this.cosineQuantized(qInt, qScale, entry.q, entry.scale);
221
+ hits.push({ id, score });
222
+ }
223
+ hits.sort((a, b) => b.score - a.score);
224
+ return hits.slice(0, topK);
225
+ };
226
+ return { vectors, dim, recallFn };
227
+ }
228
+ /** Self-test: report mean / max absolute reconstruction error on `vectors`. */
229
+ quantizeRoundtripError(vectors) {
230
+ if (!vectors || vectors.length === 0)
231
+ return { meanAbs: 0, max: 0, samples: 0 };
232
+ let sum = 0, maxAbs = 0, n = 0;
233
+ for (const v of vectors) {
234
+ if (!v || v.length === 0)
235
+ continue;
236
+ const q = this.quantize(v);
237
+ const scale = this.scaleOf(v);
238
+ for (let i = 0; i < v.length; i++) {
239
+ const recon = q[i] * scale;
240
+ const err = Math.abs(recon - v[i]);
241
+ sum += err;
242
+ if (err > maxAbs)
243
+ maxAbs = err;
244
+ n++;
245
+ }
246
+ }
247
+ return {
248
+ meanAbs: n > 0 ? +(sum / n).toFixed(6) : 0,
249
+ max: +maxAbs.toFixed(6),
250
+ samples: n,
251
+ };
252
+ }
253
+ // ── Internals ──────────────────────────────────────────────────────────
254
+ scaleOf(vector) {
255
+ let maxAbs = 0;
256
+ for (let i = 0; i < vector.length; i++) {
257
+ const a = Math.abs(vector[i]);
258
+ if (a > maxAbs)
259
+ maxAbs = a;
260
+ }
261
+ return maxAbs === 0 ? 0 : maxAbs / 127;
262
+ }
263
+ readShardDocs(srcPath) {
264
+ // Accept either a single JSON file with {docs: [...]} or a directory of shards.
265
+ const docs = [];
266
+ try {
267
+ const stat = fs.statSync(srcPath);
268
+ if (stat.isDirectory()) {
269
+ for (const f of fs.readdirSync(srcPath)) {
270
+ if (!f.endsWith('.json'))
271
+ continue;
272
+ const raw = fs.readFileSync(path.join(srcPath, f), 'utf-8');
273
+ this.collectDocs(raw, docs);
274
+ }
275
+ }
276
+ else {
277
+ const raw = fs.readFileSync(srcPath, 'utf-8');
278
+ this.collectDocs(raw, docs);
279
+ }
280
+ }
281
+ catch { /* missing or unreadable → empty result */ }
282
+ return docs;
283
+ }
284
+ collectDocs(raw, out) {
285
+ try {
286
+ const parsed = JSON.parse(raw);
287
+ if (Array.isArray(parsed.docs)) {
288
+ for (const d of parsed.docs) {
289
+ if (d && typeof d.id === 'string' && Array.isArray(d.vector))
290
+ out.push({ id: d.id, vector: d.vector });
291
+ }
292
+ }
293
+ else if (parsed.vectors && typeof parsed.vectors === 'object') {
294
+ // Legacy v1 cache shape: { vectors: { id: number[] } }
295
+ for (const [id, vec] of Object.entries(parsed.vectors)) {
296
+ if (Array.isArray(vec))
297
+ out.push({ id, vector: vec });
298
+ }
299
+ }
300
+ }
301
+ catch { /* skip corrupt shard */ }
302
+ }
303
+ measureBytes(srcPath) {
304
+ try {
305
+ const stat = fs.statSync(srcPath);
306
+ if (stat.isFile())
307
+ return stat.size;
308
+ if (stat.isDirectory()) {
309
+ let total = 0;
310
+ for (const f of fs.readdirSync(srcPath)) {
311
+ try {
312
+ total += fs.statSync(path.join(srcPath, f)).size;
313
+ }
314
+ catch { /* skip */ }
315
+ }
316
+ return total;
317
+ }
318
+ }
319
+ catch { /* missing */ }
320
+ return 0;
321
+ }
322
+ atomicWrite(filePath, data) {
323
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
324
+ const tmp = filePath + '.tmp';
325
+ fs.writeFileSync(tmp, data);
326
+ fs.renameSync(tmp, filePath);
327
+ }
328
+ }
329
+ function padOrTruncate(v, dim) {
330
+ if (v.length === dim)
331
+ return v;
332
+ if (v.length > dim)
333
+ return v.slice(0, dim);
334
+ const out = v.slice();
335
+ while (out.length < dim)
336
+ out.push(0);
337
+ return out;
338
+ }
339
+ let _instance = null;
340
+ export function getBrainQuantize() {
341
+ if (!_instance)
342
+ _instance = new BrainQuantize();
343
+ return _instance;
344
+ }
345
+ export function resetBrainQuantizeForTests() { _instance = null; }
346
+ //# sourceMappingURL=brain-quantize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-quantize.js","sourceRoot":"","sources":["../../src/brain/brain-quantize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type ExpansionTechnique = 'synonyms' | 'abbrev' | 'related' | 'hyde';
2
+ export interface ExpansionOptions {
3
+ techniques?: ExpansionTechnique[];
4
+ maxTerms?: number;
5
+ hydeModel?: string;
6
+ }
7
+ export interface ExpansionResult {
8
+ original: string;
9
+ expanded: string;
10
+ techniques_used: string[];
11
+ terms_added: string[];
12
+ hyde_doc?: string;
13
+ durationMs: number;
14
+ }
15
+ export declare class BrainQueryExpander {
16
+ /** Expand a query using selected techniques; returns the densified search text. */
17
+ expand(query: string, opts?: ExpansionOptions): Promise<ExpansionResult>;
18
+ /**
19
+ * Run all techniques and return the densest expansion. Best for direct use
20
+ * by retrievers that don't want to think about technique selection.
21
+ */
22
+ combineAll(query: string, opts?: ExpansionOptions): Promise<ExpansionResult>;
23
+ private lookupRelatedEntities;
24
+ private generateHyde;
25
+ private probeHydeModel;
26
+ private templateHyde;
27
+ private persist;
28
+ }
29
+ export declare function getBrainQueryExpander(): BrainQueryExpander;
30
+ export declare function resetBrainQueryExpanderForTests(): void;
31
+ //# sourceMappingURL=brain-query-expander.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-query-expander.d.ts","sourceRoot":"","sources":["../../src/brain/brain-query-expander.ts"],"names":[],"mappings":"AAkCA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0LD,qBAAa,kBAAkB;IAC7B,mFAAmF;IAC7E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkF9E;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YASpE,qBAAqB;YAiCrB,YAAY;YAyBZ,cAAc;IAsB5B,OAAO,CAAC,YAAY;YAaN,OAAO;CAOtB;AAYD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAG1D;AACD,wBAAgB,+BAA+B,IAAI,IAAI,CAAsB"}