@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,417 @@
1
+ // src/brain/brain-query-expander.ts — Query expansion + HyDE
2
+ // v6.0.2 — Hive Mind Edition
3
+ //
4
+ // Short user queries make noisy embeddings. Expanding "fix auth" →
5
+ // "fix authentication login session token bearer" produces a denser
6
+ // query vector with more lexical surface area for the reranker to bite on.
7
+ //
8
+ // HyDE (Hypothetical Document Embeddings) takes this further: ask a local
9
+ // LLM to draft a 1-paragraph "ideal answer" to the query and search by
10
+ // THAT document. Empirically this beats raw query embedding for
11
+ // underspecified questions. Falls through to a templated pseudo-answer
12
+ // when no Ollama model is reachable so the technique always returns
13
+ // something usable.
14
+ //
15
+ // Persists every expansion to ~/.shadow-brain/query-expansions.jsonl so
16
+ // downstream analysis can correlate (expansion technique → click vs ignore).
17
+ //
18
+ // Exposed: BrainQueryExpander, getBrainQueryExpander(),
19
+ // resetBrainQueryExpanderForTests().
20
+ // .expand(query, opts)
21
+ // .combineAll(query, opts)
22
+ import * as fs from 'fs';
23
+ import * as path from 'path';
24
+ import * as os from 'os';
25
+ const BRAIN_DIR = path.join(os.homedir(), '.shadow-brain');
26
+ const EXPANSIONS_LOG = path.join(BRAIN_DIR, 'query-expansions.jsonl');
27
+ const DEFAULT_MAX_TERMS = 12;
28
+ const HYDE_TIMEOUT_MS = 12000;
29
+ const HYDE_PROBE_TIMEOUT_MS = 1500;
30
+ const HYDE_CANDIDATES = ['qwen2.5-coder:1.5b', 'deepseek-coder:1.3b', 'llama3.2'];
31
+ const OLLAMA_URL = 'http://127.0.0.1:11434';
32
+ // 80+ programmer-domain synonym mappings. Each key maps to a list of related
33
+ // terms; the expander pulls all of them when the key appears in the query.
34
+ const SYNONYMS = {
35
+ auth: ['authentication', 'login', 'session', 'credentials', 'token', 'bearer', 'signin'],
36
+ authentication: ['auth', 'login', 'session', 'credentials', 'oauth'],
37
+ login: ['signin', 'auth', 'authentication', 'session'],
38
+ logout: ['signout', 'session', 'invalidate'],
39
+ signin: ['login', 'auth', 'authenticate'],
40
+ signup: ['register', 'registration', 'onboarding', 'create account'],
41
+ register: ['signup', 'enrollment', 'create user'],
42
+ password: ['credential', 'secret', 'passphrase', 'hash'],
43
+ token: ['jwt', 'bearer', 'session', 'access token', 'refresh'],
44
+ jwt: ['token', 'bearer', 'json web token', 'claim'],
45
+ session: ['cookie', 'token', 'auth', 'login state'],
46
+ oauth: ['authentication', 'token', 'provider', 'scope'],
47
+ permission: ['authorization', 'access', 'role', 'rbac', 'grant'],
48
+ authorization: ['permission', 'access control', 'rbac', 'authz'],
49
+ role: ['permission', 'authorization', 'group', 'rbac'],
50
+ bug: ['issue', 'defect', 'error', 'fault', 'problem', 'glitch'],
51
+ issue: ['bug', 'defect', 'problem', 'ticket'],
52
+ error: ['exception', 'failure', 'bug', 'fault', 'crash'],
53
+ exception: ['error', 'throw', 'panic', 'failure'],
54
+ crash: ['failure', 'error', 'segfault', 'panic', 'fatal'],
55
+ fail: ['error', 'failure', 'broken', 'crash'],
56
+ failure: ['fail', 'error', 'crash', 'outage'],
57
+ fix: ['patch', 'repair', 'resolve', 'correct', 'mend'],
58
+ patch: ['fix', 'hotfix', 'update', 'change'],
59
+ resolve: ['fix', 'solve', 'address', 'handle'],
60
+ debug: ['investigate', 'trace', 'inspect', 'troubleshoot'],
61
+ trace: ['log', 'debug', 'stack trace', 'instrument'],
62
+ refactor: ['cleanup', 'redesign', 'restructure', 'rewrite', 'tidy'],
63
+ cleanup: ['refactor', 'tidy', 'normalize', 'sanitize'],
64
+ redesign: ['refactor', 'rewrite', 'architecture', 'restructure'],
65
+ rewrite: ['refactor', 'redo', 'reimplement'],
66
+ optimize: ['improve', 'speedup', 'performance', 'tune'],
67
+ performance: ['speed', 'perf', 'latency', 'throughput', 'optimize'],
68
+ speed: ['performance', 'fast', 'latency', 'throughput'],
69
+ latency: ['delay', 'response time', 'performance', 'slow'],
70
+ cache: ['caching', 'memoize', 'store', 'buffer'],
71
+ memoize: ['cache', 'memoization', 'store'],
72
+ api: ['application programming interface', 'endpoint', 'service', 'rest', 'rpc'],
73
+ endpoint: ['api', 'route', 'url', 'handler'],
74
+ route: ['endpoint', 'path', 'url', 'handler'],
75
+ rest: ['restful', 'http api', 'endpoint'],
76
+ graphql: ['gql', 'query language', 'api'],
77
+ rpc: ['grpc', 'remote procedure', 'api'],
78
+ service: ['microservice', 'api', 'daemon', 'server'],
79
+ microservice: ['service', 'api', 'container'],
80
+ database: ['db', 'datastore', 'storage', 'sql', 'persistence'],
81
+ db: ['database', 'datastore', 'storage'],
82
+ sql: ['database', 'query', 'relational'],
83
+ query: ['sql', 'search', 'lookup', 'select'],
84
+ schema: ['model', 'structure', 'migration', 'definition'],
85
+ migration: ['schema change', 'alembic', 'flyway', 'db update'],
86
+ table: ['relation', 'schema', 'collection'],
87
+ index: ['indexing', 'btree', 'hash', 'lookup'],
88
+ transaction: ['tx', 'commit', 'rollback', 'atomic'],
89
+ test: ['testing', 'spec', 'unit test', 'check', 'assert'],
90
+ testing: ['test', 'qa', 'verification', 'validate'],
91
+ unit: ['unittest', 'jest', 'pytest', 'spec'],
92
+ integration: ['e2e', 'end to end', 'smoke', 'cross module'],
93
+ mock: ['stub', 'fake', 'spy', 'fixture'],
94
+ fixture: ['mock', 'sample', 'seed data'],
95
+ deploy: ['deployment', 'release', 'ship', 'rollout', 'publish'],
96
+ deployment: ['deploy', 'release', 'rollout', 'cicd'],
97
+ release: ['deploy', 'version', 'publish', 'ship'],
98
+ cicd: ['continuous integration', 'pipeline', 'jenkins', 'github actions'],
99
+ pipeline: ['cicd', 'workflow', 'build chain'],
100
+ build: ['compile', 'bundle', 'package'],
101
+ compile: ['build', 'transpile', 'tsc'],
102
+ ml: ['machine learning', 'model', 'training', 'ai'],
103
+ ai: ['artificial intelligence', 'ml', 'model', 'llm'],
104
+ llm: ['language model', 'ai', 'gpt', 'transformer'],
105
+ embedding: ['vector', 'representation', 'encoding'],
106
+ vector: ['embedding', 'array', 'tensor'],
107
+ rag: ['retrieval augmented generation', 'vector search', 'context injection'],
108
+ security: ['secure', 'vuln', 'vulnerability', 'hardening', 'protection'],
109
+ vuln: ['vulnerability', 'cve', 'security', 'exploit'],
110
+ vulnerability: ['vuln', 'cve', 'exploit', 'weakness'],
111
+ encrypt: ['encryption', 'cipher', 'crypto', 'tls'],
112
+ crypto: ['encryption', 'cipher', 'hash', 'signature'],
113
+ hash: ['digest', 'checksum', 'crypto', 'bcrypt'],
114
+ ui: ['interface', 'frontend', 'view', 'screen'],
115
+ frontend: ['ui', 'client', 'browser', 'react'],
116
+ backend: ['server', 'api', 'service'],
117
+ fullstack: ['full stack', 'frontend backend', 'end to end'],
118
+ component: ['widget', 'element', 'module', 'block'],
119
+ state: ['store', 'context', 'redux', 'data'],
120
+ redux: ['state', 'store', 'flux'],
121
+ log: ['logging', 'trace', 'record', 'audit'],
122
+ logging: ['log', 'trace', 'observability'],
123
+ monitor: ['observability', 'metrics', 'alerting', 'health'],
124
+ metric: ['measurement', 'gauge', 'counter', 'telemetry'],
125
+ alert: ['notification', 'warning', 'page', 'incident'],
126
+ config: ['configuration', 'settings', 'env', 'options'],
127
+ configuration: ['config', 'settings', 'env'],
128
+ env: ['environment', 'variable', 'config'],
129
+ setting: ['config', 'preference', 'option'],
130
+ docker: ['container', 'image', 'compose'],
131
+ container: ['docker', 'pod', 'image'],
132
+ kubernetes: ['k8s', 'pod', 'cluster', 'helm'],
133
+ k8s: ['kubernetes', 'pod', 'cluster'],
134
+ git: ['version control', 'commit', 'branch', 'merge'],
135
+ commit: ['git', 'change', 'snapshot'],
136
+ branch: ['git', 'feature', 'merge'],
137
+ merge: ['git', 'pull request', 'integrate'],
138
+ pr: ['pull request', 'merge request', 'review'],
139
+ };
140
+ // 50+ programmer abbreviations. Single-token in → expanded phrase out.
141
+ const ABBREVIATIONS = {
142
+ api: 'application programming interface',
143
+ db: 'database',
144
+ sql: 'structured query language',
145
+ cli: 'command line interface',
146
+ gui: 'graphical user interface',
147
+ ui: 'user interface',
148
+ ux: 'user experience',
149
+ auth: 'authentication',
150
+ authz: 'authorization',
151
+ ml: 'machine learning',
152
+ ai: 'artificial intelligence',
153
+ llm: 'large language model',
154
+ nlp: 'natural language processing',
155
+ ocr: 'optical character recognition',
156
+ cv: 'computer vision',
157
+ os: 'operating system',
158
+ fs: 'file system',
159
+ io: 'input output',
160
+ ipc: 'inter process communication',
161
+ rpc: 'remote procedure call',
162
+ rest: 'representational state transfer',
163
+ http: 'hypertext transfer protocol',
164
+ https: 'http secure',
165
+ url: 'uniform resource locator',
166
+ uri: 'uniform resource identifier',
167
+ dns: 'domain name system',
168
+ cdn: 'content delivery network',
169
+ tls: 'transport layer security',
170
+ ssl: 'secure sockets layer',
171
+ jwt: 'json web token',
172
+ oauth: 'open authorization',
173
+ rbac: 'role based access control',
174
+ cors: 'cross origin resource sharing',
175
+ csrf: 'cross site request forgery',
176
+ xss: 'cross site scripting',
177
+ cve: 'common vulnerabilities exposures',
178
+ ci: 'continuous integration',
179
+ cd: 'continuous deployment',
180
+ cicd: 'continuous integration continuous deployment',
181
+ vcs: 'version control system',
182
+ pr: 'pull request',
183
+ mr: 'merge request',
184
+ ide: 'integrated development environment',
185
+ sdk: 'software development kit',
186
+ npm: 'node package manager',
187
+ pip: 'python package installer',
188
+ k8s: 'kubernetes',
189
+ vm: 'virtual machine',
190
+ iam: 'identity access management',
191
+ sso: 'single sign on',
192
+ mfa: 'multi factor authentication',
193
+ rag: 'retrieval augmented generation',
194
+ ann: 'approximate nearest neighbors',
195
+ hnsw: 'hierarchical navigable small world',
196
+ bm25: 'best matching 25',
197
+ tdd: 'test driven development',
198
+ bdd: 'behavior driven development',
199
+ dx: 'developer experience',
200
+ };
201
+ export class BrainQueryExpander {
202
+ /** Expand a query using selected techniques; returns the densified search text. */
203
+ async expand(query, opts) {
204
+ const start = Date.now();
205
+ const original = (query ?? '').trim();
206
+ if (!original) {
207
+ return { original, expanded: original, techniques_used: [], terms_added: [], durationMs: 0 };
208
+ }
209
+ const techniques = opts?.techniques ?? ['synonyms', 'abbrev', 'related'];
210
+ const maxTerms = opts?.maxTerms ?? DEFAULT_MAX_TERMS;
211
+ const used = [];
212
+ const added = [];
213
+ let hydeDoc;
214
+ const queryTokens = tokenize(original);
215
+ const baseSet = new Set(queryTokens);
216
+ if (techniques.includes('synonyms')) {
217
+ const before = added.length;
218
+ for (const tok of queryTokens) {
219
+ const syns = SYNONYMS[tok];
220
+ if (!syns)
221
+ continue;
222
+ for (const s of syns) {
223
+ if (added.length >= maxTerms)
224
+ break;
225
+ if (baseSet.has(s))
226
+ continue;
227
+ added.push(s);
228
+ baseSet.add(s);
229
+ }
230
+ }
231
+ if (added.length > before)
232
+ used.push('synonyms');
233
+ }
234
+ if (techniques.includes('abbrev')) {
235
+ const before = added.length;
236
+ for (const tok of queryTokens) {
237
+ const exp = ABBREVIATIONS[tok];
238
+ if (!exp)
239
+ continue;
240
+ for (const w of exp.split(/\s+/)) {
241
+ if (added.length >= maxTerms)
242
+ break;
243
+ if (baseSet.has(w))
244
+ continue;
245
+ added.push(w);
246
+ baseSet.add(w);
247
+ }
248
+ }
249
+ if (added.length > before)
250
+ used.push('abbrev');
251
+ }
252
+ if (techniques.includes('related')) {
253
+ const before = added.length;
254
+ const related = await this.lookupRelatedEntities(queryTokens, maxTerms - added.length);
255
+ for (const r of related) {
256
+ if (baseSet.has(r))
257
+ continue;
258
+ added.push(r);
259
+ baseSet.add(r);
260
+ }
261
+ if (added.length > before)
262
+ used.push('related');
263
+ }
264
+ let expanded = added.length > 0 ? `${original} ${added.join(' ')}` : original;
265
+ if (techniques.includes('hyde')) {
266
+ const doc = await this.generateHyde(original, opts?.hydeModel);
267
+ if (doc) {
268
+ hydeDoc = doc;
269
+ // HyDE replaces — the hypothetical answer IS the new search text.
270
+ expanded = doc;
271
+ used.push('hyde');
272
+ }
273
+ }
274
+ const result = {
275
+ original,
276
+ expanded,
277
+ techniques_used: used,
278
+ terms_added: added,
279
+ hyde_doc: hydeDoc,
280
+ durationMs: Date.now() - start,
281
+ };
282
+ this.persist(result).catch(() => { });
283
+ return result;
284
+ }
285
+ /**
286
+ * Run all techniques and return the densest expansion. Best for direct use
287
+ * by retrievers that don't want to think about technique selection.
288
+ */
289
+ async combineAll(query, opts) {
290
+ return this.expand(query, {
291
+ ...opts,
292
+ techniques: opts?.techniques ?? ['synonyms', 'abbrev', 'related', 'hyde'],
293
+ });
294
+ }
295
+ // ── Related entities (brain entity co-occurrence) ─────────────────────
296
+ async lookupRelatedEntities(queryTokens, budget) {
297
+ if (budget <= 0)
298
+ return [];
299
+ try {
300
+ const entityDir = path.join(BRAIN_DIR, 'entities');
301
+ if (!fs.existsSync(entityDir))
302
+ return [];
303
+ const cooc = new Map();
304
+ const files = fs.readdirSync(entityDir).filter(f => f.endsWith('.json'));
305
+ // Scan up to ~500 entities, fine for desktop use.
306
+ for (const file of files.slice(0, 500)) {
307
+ try {
308
+ const raw = fs.readFileSync(path.join(entityDir, file), 'utf-8');
309
+ const obj = JSON.parse(raw);
310
+ const surface = `${obj.name ?? ''} ${(obj.observations ?? []).join(' ')} ${(obj.tags ?? []).join(' ')}`;
311
+ const toks = tokenize(surface);
312
+ const hit = queryTokens.some(qt => toks.includes(qt));
313
+ if (!hit)
314
+ continue;
315
+ for (const t of toks) {
316
+ if (queryTokens.includes(t))
317
+ continue;
318
+ cooc.set(t, (cooc.get(t) ?? 0) + 1);
319
+ }
320
+ }
321
+ catch { /* skip corrupt entity */ }
322
+ }
323
+ const ranked = [...cooc.entries()].sort((a, b) => b[1] - a[1]).slice(0, 3 + budget);
324
+ return ranked.map(([term]) => term).slice(0, budget);
325
+ }
326
+ catch {
327
+ return [];
328
+ }
329
+ }
330
+ // ── HyDE ──────────────────────────────────────────────────────────────
331
+ async generateHyde(query, preferredModel) {
332
+ const model = await this.probeHydeModel(preferredModel);
333
+ if (!model)
334
+ return this.templateHyde(query);
335
+ try {
336
+ const res = await fetch(`${OLLAMA_URL}/api/generate`, {
337
+ method: 'POST',
338
+ headers: { 'Content-Type': 'application/json' },
339
+ body: JSON.stringify({
340
+ model,
341
+ prompt: `Write ONE concise paragraph (2-4 sentences) answering the following question as if it were a documentation excerpt. Use specific technical vocabulary. Do not say "I" or address the reader.\n\nQuestion: ${query}\n\nAnswer:`,
342
+ stream: false,
343
+ options: { temperature: 0.3, num_predict: 220 },
344
+ }),
345
+ signal: AbortSignal.timeout(HYDE_TIMEOUT_MS),
346
+ });
347
+ if (!res.ok)
348
+ return this.templateHyde(query);
349
+ const json = (await res.json());
350
+ const doc = (json.response ?? '').trim();
351
+ return doc || this.templateHyde(query);
352
+ }
353
+ catch {
354
+ return this.templateHyde(query);
355
+ }
356
+ }
357
+ async probeHydeModel(preferred) {
358
+ try {
359
+ const res = await fetch(`${OLLAMA_URL}/api/tags`, {
360
+ signal: AbortSignal.timeout(HYDE_PROBE_TIMEOUT_MS),
361
+ });
362
+ if (!res.ok)
363
+ return null;
364
+ const json = (await res.json());
365
+ const installed = (json.models ?? []).map(m => m.name);
366
+ if (installed.length === 0)
367
+ return null;
368
+ const candidates = preferred ? [preferred, ...HYDE_CANDIDATES] : HYDE_CANDIDATES;
369
+ for (const c of candidates) {
370
+ const match = installed.find(name => name === c || name.startsWith(c));
371
+ if (match)
372
+ return match;
373
+ }
374
+ // Fallback to first installed model so HyDE isn't dead weight.
375
+ return installed[0];
376
+ }
377
+ catch {
378
+ return null;
379
+ }
380
+ }
381
+ templateHyde(query) {
382
+ const tokens = tokenize(query);
383
+ const subject = tokens.slice(0, 3).join(' ') || query;
384
+ const enriched = tokens
385
+ .flatMap(t => SYNONYMS[t] ?? [])
386
+ .filter(t => !tokens.includes(t))
387
+ .slice(0, 4);
388
+ const tail = enriched.length ? `, which usually involves ${enriched.join(', ')}` : '';
389
+ return `This is likely about ${subject}${tail}. A typical solution involves identifying the relevant component, verifying its current behavior, and applying a targeted change covered by tests.`;
390
+ }
391
+ // ── Persistence ───────────────────────────────────────────────────────
392
+ async persist(result) {
393
+ try {
394
+ fs.mkdirSync(BRAIN_DIR, { recursive: true });
395
+ const entry = JSON.stringify({ ts: new Date().toISOString(), ...result }) + '\n';
396
+ fs.appendFileSync(EXPANSIONS_LOG, entry);
397
+ }
398
+ catch { /* non-fatal */ }
399
+ }
400
+ }
401
+ function tokenize(text) {
402
+ if (!text)
403
+ return [];
404
+ const stop = new Set(['the', 'a', 'an', 'and', 'or', 'of', 'to', 'for', 'in', 'on', 'is', 'it', 'this', 'that', 'as', 'by', 'be', 'do']);
405
+ return text
406
+ .toLowerCase()
407
+ .split(/[^a-z0-9]+/)
408
+ .filter(t => t.length >= 2 && !stop.has(t));
409
+ }
410
+ let _instance = null;
411
+ export function getBrainQueryExpander() {
412
+ if (!_instance)
413
+ _instance = new BrainQueryExpander();
414
+ return _instance;
415
+ }
416
+ export function resetBrainQueryExpanderForTests() { _instance = null; }
417
+ //# sourceMappingURL=brain-query-expander.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-query-expander.js","sourceRoot":"","sources":["../../src/brain/brain-query-expander.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export interface QuestStepDef {
2
+ id: string;
3
+ narrative: string;
4
+ prompt: string;
5
+ verify: (project: string) => boolean;
6
+ branches?: Record<string, string>;
7
+ nextId?: string;
8
+ }
9
+ export interface QuestDef {
10
+ id: string;
11
+ title: string;
12
+ subtitle: string;
13
+ emoji: string;
14
+ estimatedMinutes: number;
15
+ steps: QuestStepDef[];
16
+ rewardAchievement: string;
17
+ rewardMessage: string;
18
+ }
19
+ export interface QuestState {
20
+ questId: string;
21
+ project: string;
22
+ currentStepId: string;
23
+ startedAt: number;
24
+ completedAt?: number;
25
+ completedSteps: string[];
26
+ branchHistory: Array<{
27
+ stepId: string;
28
+ choice: string;
29
+ ts: number;
30
+ }>;
31
+ }
32
+ export declare class BrainQuest {
33
+ private quests;
34
+ private states;
35
+ constructor();
36
+ availableQuests(): QuestDef[];
37
+ start(questId: string, project: string): Promise<QuestState>;
38
+ current(project: string): QuestState | null;
39
+ step(project: string, choice?: string): Promise<{
40
+ state: QuestState;
41
+ narrative: string;
42
+ options?: string[];
43
+ complete?: boolean;
44
+ reward?: {
45
+ achievementId?: string;
46
+ message: string;
47
+ };
48
+ }>;
49
+ reset(project: string): void;
50
+ private registerQuests;
51
+ private defaultNext;
52
+ private unlockTrophy;
53
+ private loadFile;
54
+ private persist;
55
+ }
56
+ export declare function getBrainQuest(): BrainQuest;
57
+ export declare function resetBrainQuestForTests(): void;
58
+ //# sourceMappingURL=brain-quest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-quest.d.ts","sourceRoot":"","sources":["../../src/brain/brain-quest.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAQD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAqC;;IAMnD,eAAe,IAAI,QAAQ,EAAE;IAIvB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBlE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIrC,IAAI,CACR,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QACT,KAAK,EAAE,UAAU,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE;YAAE,aAAa,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KACtD,CAAC;IAoFF,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS5B,OAAO,CAAC,cAAc;IA0StB,OAAO,CAAC,WAAW;YAML,YAAY;IAgB1B,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,OAAO;CAShB;AAyED,wBAAgB,aAAa,IAAI,UAAU,CAG1C;AACD,wBAAgB,uBAAuB,IAAI,IAAI,CAAsB"}