@rbalchii/anchor-engine 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +609 -0
  2. package/README.md +317 -0
  3. package/anchor.bat +5 -0
  4. package/docs/API.md +314 -0
  5. package/docs/DEPLOYMENT.md +448 -0
  6. package/docs/INDEX.md +226 -0
  7. package/docs/STAR_Whitepaper_Executive.md +216 -0
  8. package/docs/TROUBLESHOOTING.md +535 -0
  9. package/docs/archive/GIT_BACKUP_VERIFICATION.md +297 -0
  10. package/docs/archive/adoption-guide.md +264 -0
  11. package/docs/archive/adoption-preparation.md +179 -0
  12. package/docs/archive/agent-harness-integration.md +227 -0
  13. package/docs/archive/api-reference.md +106 -0
  14. package/docs/archive/api_flows_diagram.md +118 -0
  15. package/docs/archive/architecture.md +410 -0
  16. package/docs/archive/architecture_diagram.md +174 -0
  17. package/docs/archive/broader-adoption-preparation.md +175 -0
  18. package/docs/archive/browser-paradigm-architecture.md +163 -0
  19. package/docs/archive/chat-integration.md +124 -0
  20. package/docs/archive/community-adoption-materials.md +103 -0
  21. package/docs/archive/community-adoption.md +147 -0
  22. package/docs/archive/comparison-with-siloed-solutions.md +192 -0
  23. package/docs/archive/comprehensive-docs.md +156 -0
  24. package/docs/archive/data_flow_diagram.md +251 -0
  25. package/docs/archive/enhancement-implementation-summary.md +146 -0
  26. package/docs/archive/evolution-summary.md +141 -0
  27. package/docs/archive/ingestion_pipeline_diagram.md +198 -0
  28. package/docs/archive/native-module-profiling-results.md +135 -0
  29. package/docs/archive/positioning-document.md +158 -0
  30. package/docs/archive/positioning.md +175 -0
  31. package/docs/archive/query-builder-documentation.md +218 -0
  32. package/docs/archive/quick-reference.md +40 -0
  33. package/docs/archive/quickstart.md +63 -0
  34. package/docs/archive/relationship-narrative-discovery.md +141 -0
  35. package/docs/archive/search-logic-improvement-plan.md +336 -0
  36. package/docs/archive/search_architecture_diagram.md +212 -0
  37. package/docs/archive/semantic-architecture-guide.md +97 -0
  38. package/docs/archive/sequence-diagrams.md +128 -0
  39. package/docs/archive/system_components_diagram.md +296 -0
  40. package/docs/archive/test-framework-integration.md +109 -0
  41. package/docs/archive/testing-framework-documentation.md +397 -0
  42. package/docs/archive/testing-framework-summary.md +121 -0
  43. package/docs/archive/testing-framework.md +377 -0
  44. package/docs/archive/ui-architecture.md +75 -0
  45. package/docs/arxiv/BIBLIOGRAPHY.bib +145 -0
  46. package/docs/arxiv/RELATED_WORK.tex +39 -0
  47. package/docs/arxiv/compile.bat +48 -0
  48. package/docs/arxiv/joss_response.md +33 -0
  49. package/docs/arxiv/prepare-submission.bat +46 -0
  50. package/docs/arxiv/review.md +128 -0
  51. package/docs/arxiv/star-whitepaper.tex +657 -0
  52. package/docs/code-patterns.md +289 -0
  53. package/docs/whitepaper.md +445 -0
  54. package/engine/dist/agent/runtime.d.ts +41 -0
  55. package/engine/dist/agent/runtime.d.ts.map +1 -0
  56. package/engine/dist/agent/runtime.js +73 -0
  57. package/engine/dist/agent/runtime.js.map +1 -0
  58. package/engine/dist/commands/audit-tags.d.ts +14 -0
  59. package/engine/dist/commands/audit-tags.d.ts.map +1 -0
  60. package/engine/dist/commands/audit-tags.js +180 -0
  61. package/engine/dist/commands/audit-tags.js.map +1 -0
  62. package/engine/dist/commands/distill.d.ts +19 -0
  63. package/engine/dist/commands/distill.d.ts.map +1 -0
  64. package/engine/dist/commands/distill.js +114 -0
  65. package/engine/dist/commands/distill.js.map +1 -0
  66. package/engine/dist/commands/generate-synonyms.d.ts +14 -0
  67. package/engine/dist/commands/generate-synonyms.d.ts.map +1 -0
  68. package/engine/dist/commands/generate-synonyms.js +91 -0
  69. package/engine/dist/commands/generate-synonyms.js.map +1 -0
  70. package/engine/dist/config/index.d.ts +115 -0
  71. package/engine/dist/config/index.d.ts.map +1 -0
  72. package/engine/dist/config/index.js +326 -0
  73. package/engine/dist/config/index.js.map +1 -0
  74. package/engine/dist/config/max-recall-config.d.ts +102 -0
  75. package/engine/dist/config/max-recall-config.d.ts.map +1 -0
  76. package/engine/dist/config/max-recall-config.js +102 -0
  77. package/engine/dist/config/max-recall-config.js.map +1 -0
  78. package/engine/dist/config/paths.d.ts +40 -0
  79. package/engine/dist/config/paths.d.ts.map +1 -0
  80. package/engine/dist/config/paths.js +49 -0
  81. package/engine/dist/config/paths.js.map +1 -0
  82. package/engine/dist/core/batch.d.ts +19 -0
  83. package/engine/dist/core/batch.d.ts.map +1 -0
  84. package/engine/dist/core/batch.js +37 -0
  85. package/engine/dist/core/batch.js.map +1 -0
  86. package/engine/dist/core/db.d.ts +58 -0
  87. package/engine/dist/core/db.d.ts.map +1 -0
  88. package/engine/dist/core/db.js +563 -0
  89. package/engine/dist/core/db.js.map +1 -0
  90. package/engine/dist/core/inference/ChatWorker.d.ts +2 -0
  91. package/engine/dist/core/inference/ChatWorker.d.ts.map +1 -0
  92. package/engine/dist/core/inference/ChatWorker.js +28 -0
  93. package/engine/dist/core/inference/ChatWorker.js.map +1 -0
  94. package/engine/dist/core/inference/context_manager.d.ts +49 -0
  95. package/engine/dist/core/inference/context_manager.d.ts.map +1 -0
  96. package/engine/dist/core/inference/context_manager.js +199 -0
  97. package/engine/dist/core/inference/context_manager.js.map +1 -0
  98. package/engine/dist/core/inference/llamaLoaderWorker.d.ts +2 -0
  99. package/engine/dist/core/inference/llamaLoaderWorker.d.ts.map +1 -0
  100. package/engine/dist/core/inference/llamaLoaderWorker.js +23 -0
  101. package/engine/dist/core/inference/llamaLoaderWorker.js.map +1 -0
  102. package/engine/dist/core/vector.d.ts +40 -0
  103. package/engine/dist/core/vector.d.ts.map +1 -0
  104. package/engine/dist/core/vector.js +167 -0
  105. package/engine/dist/core/vector.js.map +1 -0
  106. package/engine/dist/index.d.ts +4 -0
  107. package/engine/dist/index.d.ts.map +1 -0
  108. package/engine/dist/index.js +400 -0
  109. package/engine/dist/index.js.map +1 -0
  110. package/engine/dist/middleware/auth.d.ts +14 -0
  111. package/engine/dist/middleware/auth.d.ts.map +1 -0
  112. package/engine/dist/middleware/auth.js +44 -0
  113. package/engine/dist/middleware/auth.js.map +1 -0
  114. package/engine/dist/middleware/request-tracing.d.ts +29 -0
  115. package/engine/dist/middleware/request-tracing.d.ts.map +1 -0
  116. package/engine/dist/middleware/request-tracing.js +115 -0
  117. package/engine/dist/middleware/request-tracing.js.map +1 -0
  118. package/engine/dist/middleware/validate.d.ts +30 -0
  119. package/engine/dist/middleware/validate.d.ts.map +1 -0
  120. package/engine/dist/middleware/validate.js +117 -0
  121. package/engine/dist/middleware/validate.js.map +1 -0
  122. package/engine/dist/native/index.d.ts +106 -0
  123. package/engine/dist/native/index.d.ts.map +1 -0
  124. package/engine/dist/native/index.js +230 -0
  125. package/engine/dist/native/index.js.map +1 -0
  126. package/engine/dist/native/types.d.ts +45 -0
  127. package/engine/dist/native/types.d.ts.map +1 -0
  128. package/engine/dist/native/types.js +6 -0
  129. package/engine/dist/native/types.js.map +1 -0
  130. package/engine/dist/profiling/atomization-profiling.d.ts +8 -0
  131. package/engine/dist/profiling/atomization-profiling.d.ts.map +1 -0
  132. package/engine/dist/profiling/atomization-profiling.js +108 -0
  133. package/engine/dist/profiling/atomization-profiling.js.map +1 -0
  134. package/engine/dist/profiling/bottleneck-identification.d.ts +8 -0
  135. package/engine/dist/profiling/bottleneck-identification.d.ts.map +1 -0
  136. package/engine/dist/profiling/bottleneck-identification.js +249 -0
  137. package/engine/dist/profiling/bottleneck-identification.js.map +1 -0
  138. package/engine/dist/profiling/content-sanitization-profiling.d.ts +12 -0
  139. package/engine/dist/profiling/content-sanitization-profiling.d.ts.map +1 -0
  140. package/engine/dist/profiling/content-sanitization-profiling.js +266 -0
  141. package/engine/dist/profiling/content-sanitization-profiling.js.map +1 -0
  142. package/engine/dist/profiling/simhash-profiling.d.ts +11 -0
  143. package/engine/dist/profiling/simhash-profiling.d.ts.map +1 -0
  144. package/engine/dist/profiling/simhash-profiling.js +168 -0
  145. package/engine/dist/profiling/simhash-profiling.js.map +1 -0
  146. package/engine/dist/routes/api.d.ts +9 -0
  147. package/engine/dist/routes/api.d.ts.map +1 -0
  148. package/engine/dist/routes/api.js +37 -0
  149. package/engine/dist/routes/api.js.map +1 -0
  150. package/engine/dist/routes/enhanced-api.d.ts +9 -0
  151. package/engine/dist/routes/enhanced-api.d.ts.map +1 -0
  152. package/engine/dist/routes/enhanced-api.js +139 -0
  153. package/engine/dist/routes/enhanced-api.js.map +1 -0
  154. package/engine/dist/routes/health.d.ts +8 -0
  155. package/engine/dist/routes/health.d.ts.map +1 -0
  156. package/engine/dist/routes/health.js +89 -0
  157. package/engine/dist/routes/health.js.map +1 -0
  158. package/engine/dist/routes/monitoring.d.ts +8 -0
  159. package/engine/dist/routes/monitoring.d.ts.map +1 -0
  160. package/engine/dist/routes/monitoring.js +509 -0
  161. package/engine/dist/routes/monitoring.js.map +1 -0
  162. package/engine/dist/routes/v1/admin.d.ts +3 -0
  163. package/engine/dist/routes/v1/admin.d.ts.map +1 -0
  164. package/engine/dist/routes/v1/admin.js +261 -0
  165. package/engine/dist/routes/v1/admin.js.map +1 -0
  166. package/engine/dist/routes/v1/atoms.d.ts +3 -0
  167. package/engine/dist/routes/v1/atoms.d.ts.map +1 -0
  168. package/engine/dist/routes/v1/atoms.js +172 -0
  169. package/engine/dist/routes/v1/atoms.js.map +1 -0
  170. package/engine/dist/routes/v1/backup.d.ts +3 -0
  171. package/engine/dist/routes/v1/backup.d.ts.map +1 -0
  172. package/engine/dist/routes/v1/backup.js +100 -0
  173. package/engine/dist/routes/v1/backup.js.map +1 -0
  174. package/engine/dist/routes/v1/git.d.ts +3 -0
  175. package/engine/dist/routes/v1/git.d.ts.map +1 -0
  176. package/engine/dist/routes/v1/git.js +316 -0
  177. package/engine/dist/routes/v1/git.js.map +1 -0
  178. package/engine/dist/routes/v1/ingest.d.ts +3 -0
  179. package/engine/dist/routes/v1/ingest.d.ts.map +1 -0
  180. package/engine/dist/routes/v1/ingest.js +66 -0
  181. package/engine/dist/routes/v1/ingest.js.map +1 -0
  182. package/engine/dist/routes/v1/memory.d.ts +14 -0
  183. package/engine/dist/routes/v1/memory.d.ts.map +1 -0
  184. package/engine/dist/routes/v1/memory.js +87 -0
  185. package/engine/dist/routes/v1/memory.js.map +1 -0
  186. package/engine/dist/routes/v1/research.d.ts +3 -0
  187. package/engine/dist/routes/v1/research.d.ts.map +1 -0
  188. package/engine/dist/routes/v1/research.js +109 -0
  189. package/engine/dist/routes/v1/research.js.map +1 -0
  190. package/engine/dist/routes/v1/search.d.ts +3 -0
  191. package/engine/dist/routes/v1/search.d.ts.map +1 -0
  192. package/engine/dist/routes/v1/search.js +180 -0
  193. package/engine/dist/routes/v1/search.js.map +1 -0
  194. package/engine/dist/routes/v1/settings.d.ts +8 -0
  195. package/engine/dist/routes/v1/settings.d.ts.map +1 -0
  196. package/engine/dist/routes/v1/settings.js +211 -0
  197. package/engine/dist/routes/v1/settings.js.map +1 -0
  198. package/engine/dist/routes/v1/system.d.ts +3 -0
  199. package/engine/dist/routes/v1/system.d.ts.map +1 -0
  200. package/engine/dist/routes/v1/system.js +326 -0
  201. package/engine/dist/routes/v1/system.js.map +1 -0
  202. package/engine/dist/routes/v1/tags.d.ts +3 -0
  203. package/engine/dist/routes/v1/tags.d.ts.map +1 -0
  204. package/engine/dist/routes/v1/tags.js +102 -0
  205. package/engine/dist/routes/v1/tags.js.map +1 -0
  206. package/engine/dist/server-8080.d.ts +2 -0
  207. package/engine/dist/server-8080.d.ts.map +1 -0
  208. package/engine/dist/server-8080.js +74 -0
  209. package/engine/dist/server-8080.js.map +1 -0
  210. package/engine/dist/services/backup/backup-restore.d.ts +37 -0
  211. package/engine/dist/services/backup/backup-restore.d.ts.map +1 -0
  212. package/engine/dist/services/backup/backup-restore.js +385 -0
  213. package/engine/dist/services/backup/backup-restore.js.map +1 -0
  214. package/engine/dist/services/backup/backup.d.ts +14 -0
  215. package/engine/dist/services/backup/backup.d.ts.map +1 -0
  216. package/engine/dist/services/backup/backup.js +442 -0
  217. package/engine/dist/services/backup/backup.js.map +1 -0
  218. package/engine/dist/services/distillation/radial-distiller-v2.d.ts +127 -0
  219. package/engine/dist/services/distillation/radial-distiller-v2.d.ts.map +1 -0
  220. package/engine/dist/services/distillation/radial-distiller-v2.js +503 -0
  221. package/engine/dist/services/distillation/radial-distiller-v2.js.map +1 -0
  222. package/engine/dist/services/distillation/radial-distiller.d.ts +63 -0
  223. package/engine/dist/services/distillation/radial-distiller.d.ts.map +1 -0
  224. package/engine/dist/services/distillation/radial-distiller.js +394 -0
  225. package/engine/dist/services/distillation/radial-distiller.js.map +1 -0
  226. package/engine/dist/services/health-check-enhanced.d.ts +89 -0
  227. package/engine/dist/services/health-check-enhanced.d.ts.map +1 -0
  228. package/engine/dist/services/health-check-enhanced.js +417 -0
  229. package/engine/dist/services/health-check-enhanced.js.map +1 -0
  230. package/engine/dist/services/idle-manager.d.ts +56 -0
  231. package/engine/dist/services/idle-manager.d.ts.map +1 -0
  232. package/engine/dist/services/idle-manager.js +210 -0
  233. package/engine/dist/services/idle-manager.js.map +1 -0
  234. package/engine/dist/services/inference/inference-service.d.ts +27 -0
  235. package/engine/dist/services/inference/inference-service.d.ts.map +1 -0
  236. package/engine/dist/services/inference/inference-service.js +89 -0
  237. package/engine/dist/services/inference/inference-service.js.map +1 -0
  238. package/engine/dist/services/inference/inference.d.ts +59 -0
  239. package/engine/dist/services/inference/inference.d.ts.map +1 -0
  240. package/engine/dist/services/inference/inference.js +131 -0
  241. package/engine/dist/services/inference/inference.js.map +1 -0
  242. package/engine/dist/services/ingest/atomizer-service.d.ts +74 -0
  243. package/engine/dist/services/ingest/atomizer-service.d.ts.map +1 -0
  244. package/engine/dist/services/ingest/atomizer-service.js +982 -0
  245. package/engine/dist/services/ingest/atomizer-service.js.map +1 -0
  246. package/engine/dist/services/ingest/content-cleaner.d.ts +43 -0
  247. package/engine/dist/services/ingest/content-cleaner.d.ts.map +1 -0
  248. package/engine/dist/services/ingest/content-cleaner.js +166 -0
  249. package/engine/dist/services/ingest/content-cleaner.js.map +1 -0
  250. package/engine/dist/services/ingest/github-ingest-service.d.ts +103 -0
  251. package/engine/dist/services/ingest/github-ingest-service.d.ts.map +1 -0
  252. package/engine/dist/services/ingest/github-ingest-service.js +537 -0
  253. package/engine/dist/services/ingest/github-ingest-service.js.map +1 -0
  254. package/engine/dist/services/ingest/ingest-atomic.d.ts +16 -0
  255. package/engine/dist/services/ingest/ingest-atomic.d.ts.map +1 -0
  256. package/engine/dist/services/ingest/ingest-atomic.js +437 -0
  257. package/engine/dist/services/ingest/ingest-atomic.js.map +1 -0
  258. package/engine/dist/services/ingest/ingest.d.ts +50 -0
  259. package/engine/dist/services/ingest/ingest.d.ts.map +1 -0
  260. package/engine/dist/services/ingest/ingest.js +230 -0
  261. package/engine/dist/services/ingest/ingest.js.map +1 -0
  262. package/engine/dist/services/ingest/watchdog.d.ts +31 -0
  263. package/engine/dist/services/ingest/watchdog.d.ts.map +1 -0
  264. package/engine/dist/services/ingest/watchdog.js +400 -0
  265. package/engine/dist/services/ingest/watchdog.js.map +1 -0
  266. package/engine/dist/services/llm/context.d.ts +6 -0
  267. package/engine/dist/services/llm/context.d.ts.map +1 -0
  268. package/engine/dist/services/llm/context.js +80 -0
  269. package/engine/dist/services/llm/context.js.map +1 -0
  270. package/engine/dist/services/llm/provider.d.ts +23 -0
  271. package/engine/dist/services/llm/provider.d.ts.map +1 -0
  272. package/engine/dist/services/llm/provider.js +338 -0
  273. package/engine/dist/services/llm/provider.js.map +1 -0
  274. package/engine/dist/services/llm/reader.d.ts +12 -0
  275. package/engine/dist/services/llm/reader.d.ts.map +1 -0
  276. package/engine/dist/services/llm/reader.js +40 -0
  277. package/engine/dist/services/llm/reader.js.map +1 -0
  278. package/engine/dist/services/mirror/mirror.d.ts +28 -0
  279. package/engine/dist/services/mirror/mirror.d.ts.map +1 -0
  280. package/engine/dist/services/mirror/mirror.js +208 -0
  281. package/engine/dist/services/mirror/mirror.js.map +1 -0
  282. package/engine/dist/services/nlp/nlp-service.d.ts +70 -0
  283. package/engine/dist/services/nlp/nlp-service.d.ts.map +1 -0
  284. package/engine/dist/services/nlp/nlp-service.js +151 -0
  285. package/engine/dist/services/nlp/nlp-service.js.map +1 -0
  286. package/engine/dist/services/nlp/query-parser.d.ts +9 -0
  287. package/engine/dist/services/nlp/query-parser.d.ts.map +1 -0
  288. package/engine/dist/services/nlp/query-parser.js +29 -0
  289. package/engine/dist/services/nlp/query-parser.js.map +1 -0
  290. package/engine/dist/services/query-builder/DataFrame.d.ts +95 -0
  291. package/engine/dist/services/query-builder/DataFrame.d.ts.map +1 -0
  292. package/engine/dist/services/query-builder/DataFrame.js +263 -0
  293. package/engine/dist/services/query-builder/DataFrame.js.map +1 -0
  294. package/engine/dist/services/query-builder/QueryBuilder.d.ts +106 -0
  295. package/engine/dist/services/query-builder/QueryBuilder.d.ts.map +1 -0
  296. package/engine/dist/services/query-builder/QueryBuilder.js +235 -0
  297. package/engine/dist/services/query-builder/QueryBuilder.js.map +1 -0
  298. package/engine/dist/services/query-builder/utils/export.d.ts +11 -0
  299. package/engine/dist/services/query-builder/utils/export.d.ts.map +1 -0
  300. package/engine/dist/services/query-builder/utils/export.js +130 -0
  301. package/engine/dist/services/query-builder/utils/export.js.map +1 -0
  302. package/engine/dist/services/research/researcher.d.ts +15 -0
  303. package/engine/dist/services/research/researcher.d.ts.map +1 -0
  304. package/engine/dist/services/research/researcher.js +123 -0
  305. package/engine/dist/services/research/researcher.js.map +1 -0
  306. package/engine/dist/services/scribe/scribe.d.ts +43 -0
  307. package/engine/dist/services/scribe/scribe.d.ts.map +1 -0
  308. package/engine/dist/services/scribe/scribe.js +135 -0
  309. package/engine/dist/services/scribe/scribe.js.map +1 -0
  310. package/engine/dist/services/search/bright-nodes.d.ts +41 -0
  311. package/engine/dist/services/search/bright-nodes.d.ts.map +1 -0
  312. package/engine/dist/services/search/bright-nodes.js +117 -0
  313. package/engine/dist/services/search/bright-nodes.js.map +1 -0
  314. package/engine/dist/services/search/context-inflator.d.ts +63 -0
  315. package/engine/dist/services/search/context-inflator.d.ts.map +1 -0
  316. package/engine/dist/services/search/context-inflator.js +649 -0
  317. package/engine/dist/services/search/context-inflator.js.map +1 -0
  318. package/engine/dist/services/search/context-manager.d.ts +34 -0
  319. package/engine/dist/services/search/context-manager.d.ts.map +1 -0
  320. package/engine/dist/services/search/context-manager.js +124 -0
  321. package/engine/dist/services/search/context-manager.js.map +1 -0
  322. package/engine/dist/services/search/distributed-query.d.ts +38 -0
  323. package/engine/dist/services/search/distributed-query.d.ts.map +1 -0
  324. package/engine/dist/services/search/distributed-query.js +105 -0
  325. package/engine/dist/services/search/distributed-query.js.map +1 -0
  326. package/engine/dist/services/search/explore.d.ts +73 -0
  327. package/engine/dist/services/search/explore.d.ts.map +1 -0
  328. package/engine/dist/services/search/explore.js +388 -0
  329. package/engine/dist/services/search/explore.js.map +1 -0
  330. package/engine/dist/services/search/graph-context-serializer.d.ts +76 -0
  331. package/engine/dist/services/search/graph-context-serializer.d.ts.map +1 -0
  332. package/engine/dist/services/search/graph-context-serializer.js +435 -0
  333. package/engine/dist/services/search/graph-context-serializer.js.map +1 -0
  334. package/engine/dist/services/search/llm-context-formatter.d.ts +122 -0
  335. package/engine/dist/services/search/llm-context-formatter.d.ts.map +1 -0
  336. package/engine/dist/services/search/llm-context-formatter.js +394 -0
  337. package/engine/dist/services/search/llm-context-formatter.js.map +1 -0
  338. package/engine/dist/services/search/physics-tag-walker.d.ts +115 -0
  339. package/engine/dist/services/search/physics-tag-walker.d.ts.map +1 -0
  340. package/engine/dist/services/search/physics-tag-walker.js +611 -0
  341. package/engine/dist/services/search/physics-tag-walker.js.map +1 -0
  342. package/engine/dist/services/search/query-parser.d.ts +66 -0
  343. package/engine/dist/services/search/query-parser.d.ts.map +1 -0
  344. package/engine/dist/services/search/query-parser.js +346 -0
  345. package/engine/dist/services/search/query-parser.js.map +1 -0
  346. package/engine/dist/services/search/search-utils.d.ts +100 -0
  347. package/engine/dist/services/search/search-utils.d.ts.map +1 -0
  348. package/engine/dist/services/search/search-utils.js +473 -0
  349. package/engine/dist/services/search/search-utils.js.map +1 -0
  350. package/engine/dist/services/search/search.d.ts +116 -0
  351. package/engine/dist/services/search/search.d.ts.map +1 -0
  352. package/engine/dist/services/search/search.js +1286 -0
  353. package/engine/dist/services/search/search.js.map +1 -0
  354. package/engine/dist/services/search/sovereign-system-prompt.d.ts +48 -0
  355. package/engine/dist/services/search/sovereign-system-prompt.d.ts.map +1 -0
  356. package/engine/dist/services/search/sovereign-system-prompt.js +101 -0
  357. package/engine/dist/services/search/sovereign-system-prompt.js.map +1 -0
  358. package/engine/dist/services/search/streaming-search.d.ts +51 -0
  359. package/engine/dist/services/search/streaming-search.d.ts.map +1 -0
  360. package/engine/dist/services/search/streaming-search.js +94 -0
  361. package/engine/dist/services/search/streaming-search.js.map +1 -0
  362. package/engine/dist/services/semantic/semantic-ingestion-service.d.ts +53 -0
  363. package/engine/dist/services/semantic/semantic-ingestion-service.d.ts.map +1 -0
  364. package/engine/dist/services/semantic/semantic-ingestion-service.js +625 -0
  365. package/engine/dist/services/semantic/semantic-ingestion-service.js.map +1 -0
  366. package/engine/dist/services/semantic/semantic-molecule-processor.d.ts +68 -0
  367. package/engine/dist/services/semantic/semantic-molecule-processor.d.ts.map +1 -0
  368. package/engine/dist/services/semantic/semantic-molecule-processor.js +176 -0
  369. package/engine/dist/services/semantic/semantic-molecule-processor.js.map +1 -0
  370. package/engine/dist/services/semantic/semantic-search.d.ts +52 -0
  371. package/engine/dist/services/semantic/semantic-search.d.ts.map +1 -0
  372. package/engine/dist/services/semantic/semantic-search.js +649 -0
  373. package/engine/dist/services/semantic/semantic-search.js.map +1 -0
  374. package/engine/dist/services/semantic/semantic-tag-deriver.d.ts +64 -0
  375. package/engine/dist/services/semantic/semantic-tag-deriver.d.ts.map +1 -0
  376. package/engine/dist/services/semantic/semantic-tag-deriver.js +191 -0
  377. package/engine/dist/services/semantic/semantic-tag-deriver.js.map +1 -0
  378. package/engine/dist/services/semantic/types/semantic.d.ts +26 -0
  379. package/engine/dist/services/semantic/types/semantic.d.ts.map +1 -0
  380. package/engine/dist/services/semantic/types/semantic.js +7 -0
  381. package/engine/dist/services/semantic/types/semantic.js.map +1 -0
  382. package/engine/dist/services/synonyms/auto-synonym-generator.d.ts +79 -0
  383. package/engine/dist/services/synonyms/auto-synonym-generator.d.ts.map +1 -0
  384. package/engine/dist/services/synonyms/auto-synonym-generator.js +415 -0
  385. package/engine/dist/services/synonyms/auto-synonym-generator.js.map +1 -0
  386. package/engine/dist/services/system-status.d.ts +68 -0
  387. package/engine/dist/services/system-status.d.ts.map +1 -0
  388. package/engine/dist/services/system-status.js +107 -0
  389. package/engine/dist/services/system-status.js.map +1 -0
  390. package/engine/dist/services/tags/discovery.d.ts +16 -0
  391. package/engine/dist/services/tags/discovery.d.ts.map +1 -0
  392. package/engine/dist/services/tags/discovery.js +206 -0
  393. package/engine/dist/services/tags/discovery.js.map +1 -0
  394. package/engine/dist/services/tags/gliner.d.ts +18 -0
  395. package/engine/dist/services/tags/gliner.d.ts.map +1 -0
  396. package/engine/dist/services/tags/gliner.js +119 -0
  397. package/engine/dist/services/tags/gliner.js.map +1 -0
  398. package/engine/dist/services/tags/infector.d.ts +21 -0
  399. package/engine/dist/services/tags/infector.d.ts.map +1 -0
  400. package/engine/dist/services/tags/infector.js +168 -0
  401. package/engine/dist/services/tags/infector.js.map +1 -0
  402. package/engine/dist/services/tags/tag-auditor.d.ts +77 -0
  403. package/engine/dist/services/tags/tag-auditor.d.ts.map +1 -0
  404. package/engine/dist/services/tags/tag-auditor.js +283 -0
  405. package/engine/dist/services/tags/tag-auditor.js.map +1 -0
  406. package/engine/dist/services/taxonomy/taxonomy-manager.d.ts +50 -0
  407. package/engine/dist/services/taxonomy/taxonomy-manager.d.ts.map +1 -0
  408. package/engine/dist/services/taxonomy/taxonomy-manager.js +291 -0
  409. package/engine/dist/services/taxonomy/taxonomy-manager.js.map +1 -0
  410. package/engine/dist/services/vision/vision_service.d.ts +4 -0
  411. package/engine/dist/services/vision/vision_service.d.ts.map +1 -0
  412. package/engine/dist/services/vision/vision_service.js +197 -0
  413. package/engine/dist/services/vision/vision_service.js.map +1 -0
  414. package/engine/dist/test-framework/core.d.ts +133 -0
  415. package/engine/dist/test-framework/core.d.ts.map +1 -0
  416. package/engine/dist/test-framework/core.js +313 -0
  417. package/engine/dist/test-framework/core.js.map +1 -0
  418. package/engine/dist/test-framework/dataset-runner.d.ts +78 -0
  419. package/engine/dist/test-framework/dataset-runner.d.ts.map +1 -0
  420. package/engine/dist/test-framework/dataset-runner.js +223 -0
  421. package/engine/dist/test-framework/dataset-runner.js.map +1 -0
  422. package/engine/dist/test-framework/diagnostic-tests.d.ts +38 -0
  423. package/engine/dist/test-framework/diagnostic-tests.d.ts.map +1 -0
  424. package/engine/dist/test-framework/diagnostic-tests.js +283 -0
  425. package/engine/dist/test-framework/diagnostic-tests.js.map +1 -0
  426. package/engine/dist/test-framework/performance-regression-tests.d.ts +30 -0
  427. package/engine/dist/test-framework/performance-regression-tests.d.ts.map +1 -0
  428. package/engine/dist/test-framework/performance-regression-tests.js +331 -0
  429. package/engine/dist/test-framework/performance-regression-tests.js.map +1 -0
  430. package/engine/dist/types/api.d.ts +53 -0
  431. package/engine/dist/types/api.d.ts.map +1 -0
  432. package/engine/dist/types/api.js +2 -0
  433. package/engine/dist/types/api.js.map +1 -0
  434. package/engine/dist/types/atomic.d.ts +42 -0
  435. package/engine/dist/types/atomic.d.ts.map +1 -0
  436. package/engine/dist/types/atomic.js +10 -0
  437. package/engine/dist/types/atomic.js.map +1 -0
  438. package/engine/dist/types/context-protocol.d.ts +137 -0
  439. package/engine/dist/types/context-protocol.d.ts.map +1 -0
  440. package/engine/dist/types/context-protocol.js +28 -0
  441. package/engine/dist/types/context-protocol.js.map +1 -0
  442. package/engine/dist/types/context.d.ts +2 -0
  443. package/engine/dist/types/context.d.ts.map +1 -0
  444. package/engine/dist/types/context.js +2 -0
  445. package/engine/dist/types/context.js.map +1 -0
  446. package/engine/dist/types/index.d.ts +20 -0
  447. package/engine/dist/types/index.d.ts.map +1 -0
  448. package/engine/dist/types/index.js +18 -0
  449. package/engine/dist/types/index.js.map +1 -0
  450. package/engine/dist/types/search.d.ts +31 -0
  451. package/engine/dist/types/search.d.ts.map +1 -0
  452. package/engine/dist/types/search.js +2 -0
  453. package/engine/dist/types/search.js.map +1 -0
  454. package/engine/dist/types/taxonomy.d.ts +137 -0
  455. package/engine/dist/types/taxonomy.d.ts.map +1 -0
  456. package/engine/dist/types/taxonomy.js +138 -0
  457. package/engine/dist/types/taxonomy.js.map +1 -0
  458. package/engine/dist/types/taxonomy.simple.d.ts +131 -0
  459. package/engine/dist/types/taxonomy.simple.d.ts.map +1 -0
  460. package/engine/dist/types/taxonomy.simple.js +132 -0
  461. package/engine/dist/types/taxonomy.simple.js.map +1 -0
  462. package/engine/dist/types/tool-call.d.ts +16 -0
  463. package/engine/dist/types/tool-call.d.ts.map +1 -0
  464. package/engine/dist/types/tool-call.js +6 -0
  465. package/engine/dist/types/tool-call.js.map +1 -0
  466. package/engine/dist/types/trace.d.ts +25 -0
  467. package/engine/dist/types/trace.d.ts.map +1 -0
  468. package/engine/dist/types/trace.js +5 -0
  469. package/engine/dist/types/trace.js.map +1 -0
  470. package/engine/dist/utils/adaptive-concurrency.d.ts +81 -0
  471. package/engine/dist/utils/adaptive-concurrency.d.ts.map +1 -0
  472. package/engine/dist/utils/adaptive-concurrency.js +266 -0
  473. package/engine/dist/utils/adaptive-concurrency.js.map +1 -0
  474. package/engine/dist/utils/date_extractor.d.ts +2 -0
  475. package/engine/dist/utils/date_extractor.d.ts.map +1 -0
  476. package/engine/dist/utils/date_extractor.js +32 -0
  477. package/engine/dist/utils/date_extractor.js.map +1 -0
  478. package/engine/dist/utils/native-module-manager.d.ts +48 -0
  479. package/engine/dist/utils/native-module-manager.d.ts.map +1 -0
  480. package/engine/dist/utils/native-module-manager.js +265 -0
  481. package/engine/dist/utils/native-module-manager.js.map +1 -0
  482. package/engine/dist/utils/native-module-profiler.d.ts +66 -0
  483. package/engine/dist/utils/native-module-profiler.d.ts.map +1 -0
  484. package/engine/dist/utils/native-module-profiler.js +182 -0
  485. package/engine/dist/utils/native-module-profiler.js.map +1 -0
  486. package/engine/dist/utils/path-manager.d.ts +59 -0
  487. package/engine/dist/utils/path-manager.d.ts.map +1 -0
  488. package/engine/dist/utils/path-manager.js +154 -0
  489. package/engine/dist/utils/path-manager.js.map +1 -0
  490. package/engine/dist/utils/performance-monitor.d.ts +92 -0
  491. package/engine/dist/utils/performance-monitor.d.ts.map +1 -0
  492. package/engine/dist/utils/performance-monitor.js +221 -0
  493. package/engine/dist/utils/performance-monitor.js.map +1 -0
  494. package/engine/dist/utils/process-manager.d.ts +18 -0
  495. package/engine/dist/utils/process-manager.d.ts.map +1 -0
  496. package/engine/dist/utils/process-manager.js +100 -0
  497. package/engine/dist/utils/process-manager.js.map +1 -0
  498. package/engine/dist/utils/request-tracer.d.ts +131 -0
  499. package/engine/dist/utils/request-tracer.d.ts.map +1 -0
  500. package/engine/dist/utils/request-tracer.js +414 -0
  501. package/engine/dist/utils/request-tracer.js.map +1 -0
  502. package/engine/dist/utils/resource-manager.d.ts +108 -0
  503. package/engine/dist/utils/resource-manager.d.ts.map +1 -0
  504. package/engine/dist/utils/resource-manager.js +235 -0
  505. package/engine/dist/utils/resource-manager.js.map +1 -0
  506. package/engine/dist/utils/safe-dns.d.ts +14 -0
  507. package/engine/dist/utils/safe-dns.d.ts.map +1 -0
  508. package/engine/dist/utils/safe-dns.js +105 -0
  509. package/engine/dist/utils/safe-dns.js.map +1 -0
  510. package/engine/dist/utils/structured-logger.d.ts +124 -0
  511. package/engine/dist/utils/structured-logger.d.ts.map +1 -0
  512. package/engine/dist/utils/structured-logger.js +332 -0
  513. package/engine/dist/utils/structured-logger.js.map +1 -0
  514. package/engine/dist/utils/tag-cleanup.d.ts +11 -0
  515. package/engine/dist/utils/tag-cleanup.d.ts.map +1 -0
  516. package/engine/dist/utils/tag-cleanup.js +111 -0
  517. package/engine/dist/utils/tag-cleanup.js.map +1 -0
  518. package/engine/dist/utils/tag-filter.d.ts +19 -0
  519. package/engine/dist/utils/tag-filter.d.ts.map +1 -0
  520. package/engine/dist/utils/tag-filter.js +147 -0
  521. package/engine/dist/utils/tag-filter.js.map +1 -0
  522. package/engine/dist/utils/tag-modulation.d.ts +80 -0
  523. package/engine/dist/utils/tag-modulation.d.ts.map +1 -0
  524. package/engine/dist/utils/tag-modulation.js +284 -0
  525. package/engine/dist/utils/tag-modulation.js.map +1 -0
  526. package/engine/dist/utils/timer.d.ts +40 -0
  527. package/engine/dist/utils/timer.d.ts.map +1 -0
  528. package/engine/dist/utils/timer.js +76 -0
  529. package/engine/dist/utils/timer.js.map +1 -0
  530. package/engine/dist/utils/token-utils.d.ts +19 -0
  531. package/engine/dist/utils/token-utils.d.ts.map +1 -0
  532. package/engine/dist/utils/token-utils.js +71 -0
  533. package/engine/dist/utils/token-utils.js.map +1 -0
  534. package/engine/dist/utils/wasm-module-loader.d.ts +50 -0
  535. package/engine/dist/utils/wasm-module-loader.d.ts.map +1 -0
  536. package/engine/dist/utils/wasm-module-loader.js +136 -0
  537. package/engine/dist/utils/wasm-module-loader.js.map +1 -0
  538. package/engine/package.json +105 -0
  539. package/package.json +106 -0
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Search Utilities Module — "The Tools"
3
+ *
4
+ * Types, interfaces, Hamming distance calculation, result formatting,
5
+ * and display helpers used across the search subsystem.
6
+ * Extracted from search.ts for clean separation of concerns.
7
+ */
8
+ import { config } from '../../config/index.js';
9
+ import { wasmModuleLoader } from '../../utils/wasm-module-loader.js';
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { getMirrorPath } from '../mirror/mirror.js';
13
+ import { NOTEBOOK_DIR } from '../../config/paths.js';
14
+ /**
15
+ * Remove inline hashtag tokens from content (Standard 123).
16
+ * Tags are stored separately in result.tags; they add noise when embedded in text.
17
+ */
18
+ function stripInlineTags(content) {
19
+ if (!content)
20
+ return content;
21
+ let s = content.replace(/\\?"#[^"\\]+\\?"/g, '');
22
+ s = s.replace(/##?[A-Za-z0-9_]+/g, '');
23
+ // Only strip " - " list separators (space-hyphen-space), not bare hyphens
24
+ // in kebab-case identifiers like p-6, text-xl, font-bold, etc.
25
+ s = s.replace(/[ \t]+-[ \t]+/g, ' ').trim();
26
+ return s;
27
+ }
28
+ /**
29
+ * Remove tag footers from truncated snippets (Standard 123 extension).
30
+ * When YAML session records are truncated mid-record, structural metadata
31
+ * footers appear (e.g., ##19864Residen ##1Okay ##3am ##ABQLo).
32
+ * These are serialization artifacts, not content.
33
+ */
34
+ function stripTagFooters(content) {
35
+ if (!content)
36
+ return content;
37
+ const lines = content.split('\n');
38
+ // Remove trailing lines that are predominantly tag tokens (##*)
39
+ while (lines.length > 0) {
40
+ const lastLine = lines[lines.length - 1].trim();
41
+ // Pattern: one or more "##Token" separated by spaces (structural footer)
42
+ if (/^(##[A-Za-z0-9_]*\s*)+$/.test(lastLine)) {
43
+ lines.pop();
44
+ }
45
+ else {
46
+ break;
47
+ }
48
+ }
49
+ return lines.join('\n').trim();
50
+ }
51
+ /**
52
+ * Helper: Calculate Hamming Distance between two hex strings
53
+ * Uses the native module or fallback if available
54
+ */
55
+ export function getHammingDistance(hashA, hashB) {
56
+ try {
57
+ // Validate inputs before processing
58
+ if (!hashA || !hashB) {
59
+ console.warn('[Search] Invalid hash inputs for Hamming distance calculation:', { hashA, hashB });
60
+ return 64; // Max distance on error (assume different)
61
+ }
62
+ // Ensure valid hex strings
63
+ if (!/^[0-9a-fA-F]+$/.test(hashA) || !/^[0-9a-fA-F]+$/.test(hashB)) {
64
+ console.warn('[Search] Invalid hex string format for Hamming distance:', { hashA, hashB });
65
+ return 64; // Max distance on error (assume different)
66
+ }
67
+ const a = BigInt(`0x${hashA}`);
68
+ const b = BigInt(`0x${hashB}`);
69
+ // Use WASM module for distance calculation (Standard 074 - WASM Edition)
70
+ try {
71
+ return wasmModuleLoader.distance(a, b);
72
+ }
73
+ catch (wasmError) {
74
+ console.warn('[Search] WASM distance function failed, using JS fallback:', wasmError);
75
+ }
76
+ // JavaScript fallback implementation
77
+ let xor = a ^ b;
78
+ let count = 0;
79
+ while (xor > 0n) {
80
+ xor &= (xor - 1n);
81
+ count++;
82
+ }
83
+ return count;
84
+ }
85
+ catch (e) {
86
+ console.error('[Search] Hamming distance calculation failed:', e);
87
+ return 64; // Max distance on error (assume different)
88
+ }
89
+ }
90
+ /**
91
+ * Helper: safely extract array from possibly undefined input
92
+ */
93
+ export function getItems(input) {
94
+ return Array.isArray(input) ? input : [];
95
+ }
96
+ /**
97
+ * Coalesce atoms by proximity - merges nearby atoms from same source file
98
+ * into coherent snippets for better LLM consumption
99
+ *
100
+ * @param results - Search results to coalesce
101
+ * @param proximityThreshold - Bytes within which to merge atoms (default 500)
102
+ * @returns Coalesced snippets with expanded content
103
+ */
104
+ export async function coalesceByProximity(results, proximityThreshold = 500, maxSnippets = 500) {
105
+ // Group by compound_id (source file)
106
+ const byCompound = new Map();
107
+ results.forEach(r => {
108
+ if (!r.compound_id || !r.source)
109
+ return;
110
+ if (!byCompound.has(r.compound_id))
111
+ byCompound.set(r.compound_id, []);
112
+ byCompound.get(r.compound_id).push(r);
113
+ });
114
+ const coalesced = [];
115
+ let mergedCount = 0;
116
+ for (const [compoundId, atoms] of byCompound.entries()) {
117
+ if (atoms.length === 0)
118
+ continue;
119
+ // Sort by byte offset
120
+ atoms.sort((a, b) => (a.start_byte || 0) - (b.start_byte || 0));
121
+ // Merge atoms within proximity threshold
122
+ const merged = [];
123
+ let current = null;
124
+ for (const atom of atoms) {
125
+ const atomStart = atom.start_byte || 0;
126
+ const atomEnd = atom.end_byte || 0;
127
+ if (!current) {
128
+ current = {
129
+ source: atom.source,
130
+ compoundId,
131
+ startByte: atomStart,
132
+ endByte: atomEnd,
133
+ timestamp: atom.timestamp,
134
+ content: atom.content,
135
+ sourceAtoms: [atom],
136
+ relevanceScore: atom.score,
137
+ provenance: atom.provenance || 'internal',
138
+ tags: (atom.tags || []).slice(0, 10) // Limit to top 10 tags initially
139
+ };
140
+ }
141
+ else {
142
+ const gap = atomStart - current.endByte;
143
+ // Merge if overlapping or within proximity threshold
144
+ if (gap <= proximityThreshold) {
145
+ // Extend window
146
+ current.endByte = Math.max(current.endByte, atomEnd);
147
+ current.sourceAtoms.push(atom);
148
+ current.relevanceScore = Math.max(current.relevanceScore, atom.score);
149
+ current.timestamp = Math.min(current.timestamp, atom.timestamp); // Use earliest timestamp
150
+ // Merge tags but limit to top 10 most relevant
151
+ const mergedTags = Array.from(new Set([...current.tags, ...(atom.tags || [])]));
152
+ current.tags = mergedTags.slice(0, 15); // Allow slightly more during merge, final limit applied later
153
+ mergedCount++;
154
+ }
155
+ else {
156
+ // Push current and start new
157
+ merged.push(current);
158
+ current = {
159
+ source: atom.source,
160
+ compoundId,
161
+ startByte: atomStart,
162
+ endByte: atomEnd,
163
+ timestamp: atom.timestamp,
164
+ content: atom.content,
165
+ sourceAtoms: [atom],
166
+ relevanceScore: atom.score,
167
+ provenance: atom.provenance || 'internal',
168
+ tags: (atom.tags || []).slice(0, 10) // Limit to top 10 tags for new snippets
169
+ };
170
+ }
171
+ }
172
+ }
173
+ if (current)
174
+ merged.push(current);
175
+ // Per-source cap: prevent a single file from dominating the results.
176
+ // Keep the top-scoring snippets per source before the global maxSnippets cap.
177
+ // maxPerSource scales with budget: 3 for small budgets, up to 8 for large.
178
+ const maxPerSource = Math.max(3, Math.min(8, Math.ceil(maxSnippets / 15)));
179
+ const perSourceCapped = merged
180
+ .sort((a, b) => b.relevanceScore - a.relevanceScore)
181
+ .slice(0, maxPerSource);
182
+ coalesced.push(...perSourceCapped);
183
+ }
184
+ // Sort all snippets by relevance score DESC, keep only top-maxSnippets before
185
+ // inflating from disk. This prevents inflating 200+ snippets when only 20-30
186
+ // will fit in the token budget.
187
+ coalesced.sort((a, b) => b.relevanceScore - a.relevanceScore);
188
+ const cappedCoalesced = coalesced.slice(0, maxSnippets);
189
+ // Re-inflate content from disk only for the snippets we're keeping
190
+ for (const snippet of cappedCoalesced) {
191
+ try {
192
+ const inflatedContent = await inflateSnippetFromDisk(snippet);
193
+ if (inflatedContent) {
194
+ snippet.content = inflatedContent;
195
+ }
196
+ }
197
+ catch (e) {
198
+ console.warn(`[Coalesce] Failed to inflate snippet from ${snippet.source}`, e);
199
+ }
200
+ }
201
+ console.log(`[Coalesce] Merged ${results.length} atoms -> ${coalesced.length} snippets (${mergedCount} merges), inflating top ${cappedCoalesced.length}`);
202
+ return cappedCoalesced;
203
+ }
204
+ /**
205
+ * Inflate a coalesced snippet from disk
206
+ */
207
+ // Hard limit per snippet to prevent OOM when coalesced byte ranges span large files.
208
+ // With 800px proximity threshold in max-recall, merged windows can be multi-MB.
209
+ // 100KB is ample for any single context snippet (≈25k tokens).
210
+ const MAX_SNIPPET_BYTES = 100_000;
211
+ async function inflateSnippetFromDisk(snippet) {
212
+ try {
213
+ // Resolve file path - try mirrored first
214
+ const mirrorPath = getMirrorPath(snippet.source, snippet.provenance);
215
+ let absolutePath = mirrorPath;
216
+ if (!fs.existsSync(mirrorPath)) {
217
+ absolutePath = path.isAbsolute(snippet.source)
218
+ ? snippet.source
219
+ : path.join(NOTEBOOK_DIR, snippet.source);
220
+ }
221
+ if (!fs.existsSync(absolutePath))
222
+ return null;
223
+ const stats = fs.statSync(absolutePath);
224
+ const fileSize = stats.size;
225
+ // Clamp to file bounds
226
+ const start = Math.max(0, snippet.startByte);
227
+ const rawEnd = Math.min(fileSize, snippet.endByte);
228
+ if (start >= rawEnd)
229
+ return null;
230
+ // Cap read size: if the merged window is huge, read from the start of the window
231
+ // up to MAX_SNIPPET_BYTES only. Content is truncated, not silently dropped.
232
+ const readLength = Math.min(rawEnd - start, MAX_SNIPPET_BYTES);
233
+ const end = start + readLength;
234
+ const truncated = end < rawEnd;
235
+ // Read content
236
+ const buffer = Buffer.alloc(readLength);
237
+ const fd = fs.openSync(absolutePath, 'r');
238
+ try {
239
+ fs.readSync(fd, buffer, 0, readLength, start);
240
+ }
241
+ finally {
242
+ fs.closeSync(fd);
243
+ }
244
+ let content = buffer.toString('utf-8');
245
+ // Snap to sentence boundaries for coherence
246
+ content = snapToSentenceBoundaries(content, 0, content.length).text;
247
+ // Strip tag footers (##19864Residen, ##1Okay, etc.) that appear when truncating YAML records
248
+ content = stripTagFooters(content);
249
+ // Add ellipsis to indicate truncation
250
+ if (start > 0)
251
+ content = '...' + content;
252
+ if (truncated || end < fileSize)
253
+ content = content + '...';
254
+ return content.trim();
255
+ }
256
+ catch (e) {
257
+ console.warn(`[Coalesce] inflateSnippetFromDisk failed:`, e);
258
+ return null;
259
+ }
260
+ }
261
+ /**
262
+ * Snap to sentence boundaries for cleaner snippets
263
+ */
264
+ function snapToSentenceBoundaries(content, targetStart, targetEnd) {
265
+ // Snap start: find previous sentence end
266
+ const preceding = content.substring(0, targetStart);
267
+ const matchStart = preceding.match(/([.!?]\s|\n\s*\n)(?=[^.!?\n]*$)/);
268
+ const snappedStart = matchStart && matchStart.index !== undefined
269
+ ? matchStart.index + matchStart[0].length
270
+ : 0;
271
+ // Snap end: find next sentence end
272
+ const succeeding = content.substring(targetEnd);
273
+ const matchEnd = succeeding.match(/([.!?]\s|\n\s*\n)/);
274
+ const snappedEnd = matchEnd && matchEnd.index !== undefined
275
+ ? targetEnd + matchEnd.index + 1
276
+ : content.length;
277
+ return {
278
+ start: snappedStart,
279
+ end: snappedEnd,
280
+ text: content.substring(snappedStart, snappedEnd).trim()
281
+ };
282
+ }
283
+ /**
284
+ * Format search results within character budget
285
+ * Uses molecular coordinates (start_byte/end_byte) for precise content slicing
286
+ *
287
+ * Features:
288
+ * - Coalesces nearby atoms into coherent snippets (500-1000 chars)
289
+ * - Adds metadata headers with file, range, timestamp, atom count
290
+ * - Sorts chronologically for causal narrative
291
+ * - Wraps in XML with relevance scores for LLM prioritization
292
+ */
293
+ export async function formatResults(results, maxChars, options) {
294
+ try {
295
+ const enableCoalescing = options?.enableCoalescing ?? true;
296
+ const proximityThreshold = options?.proximityThreshold ?? 500;
297
+ // Step 1: Coalesce atoms into coherent snippets
298
+ let snippets;
299
+ let coalescingStats = {
300
+ original_atoms: results.length,
301
+ coalesced_snippets: results.length,
302
+ compression_ratio: 1.0
303
+ };
304
+ if (enableCoalescing) {
305
+ // Cap snippets to inflate based on budget: minimum 50, max one per 500 chars of budget
306
+ // (reduced from 300 to prevent OOM when processing large result sets)
307
+ const maxSnippetsForBudget = Math.max(50, Math.ceil(maxChars / 500));
308
+ snippets = await coalesceByProximity(results, proximityThreshold, maxSnippetsForBudget);
309
+ coalescingStats = {
310
+ original_atoms: results.length,
311
+ coalesced_snippets: snippets.length,
312
+ compression_ratio: results.length > 0 ? (results.length / snippets.length) : 1.0
313
+ };
314
+ }
315
+ else {
316
+ // Convert SearchResult[] to CoalescedSnippet[] for uniform handling
317
+ snippets = results.map(r => ({
318
+ source: r.source,
319
+ compoundId: r.compound_id || '',
320
+ startByte: r.start_byte || 0,
321
+ endByte: r.end_byte || 0,
322
+ timestamp: r.timestamp,
323
+ content: r.content,
324
+ sourceAtoms: [r],
325
+ relevanceScore: r.score,
326
+ provenance: r.provenance || 'internal',
327
+ tags: (r.tags || []).slice(0, 10) // Limit to top 10 most relevant tags per molecule
328
+ }));
329
+ }
330
+ // Step 2: Sort chronologically (causal narrative)
331
+ snippets.sort((a, b) => a.timestamp - b.timestamp);
332
+ // Step 3: Calculate temporal weights
333
+ const now = Date.now();
334
+ const lambda = 0.00001; // h⁻¹ - 7.9 year half-life (matches paper.md line 69)
335
+ const enrichedSnippets = snippets.map(s => {
336
+ const ageMs = now - s.timestamp;
337
+ const ageHours = ageMs / (1000 * 60 * 60); // Convert ms to hours for λ in h⁻¹
338
+ const decayFactor = lambda * ageHours;
339
+ const temporalWeight = Math.exp(-decayFactor);
340
+ const relevanceScore = (s.relevanceScore * temporalWeight).toFixed(3);
341
+ return {
342
+ ...s,
343
+ content: stripInlineTags(s.content), // Standard 123: strip inline #Tag tokens
344
+ temporal_weight: temporalWeight,
345
+ decay_factor: decayFactor,
346
+ weighted_score: relevanceScore
347
+ };
348
+ });
349
+ // Step 3.5: Semantic word-overlap deduplication.
350
+ // Drop snippets whose significant words are already well-covered by a higher-scored snippet.
351
+ // "Significant words" = >4 chars, not stopwords. Overlap threshold = 60%.
352
+ const OVERLAP_THRESHOLD = 0.60;
353
+ const STOPWORDS = new Set(['this', 'that', 'with', 'from', 'they', 'were', 'have', 'been', 'their', 'which', 'when', 'will', 'also', 'what', 'your', 'more', 'some', 'than', 'then', 'into', 'there', 'about', 'would', 'could', 'should', 'other', 'after', 'these', 'those', 'just', 'over', 'such', 'even', 'like', 'much', 'well', 'also', 'here', 'very', 'only', 'its']);
354
+ const sigWords = (text) => {
355
+ const words = text.toLowerCase().match(/\b[a-z]{5,}\b/g) || [];
356
+ return new Set(words.filter(w => !STOPWORDS.has(w)));
357
+ };
358
+ const jaccardOverlap = (a, b) => {
359
+ if (a.size === 0 || b.size === 0)
360
+ return 0;
361
+ let intersection = 0;
362
+ for (const w of a)
363
+ if (b.has(w))
364
+ intersection++;
365
+ return intersection / Math.min(a.size, b.size);
366
+ };
367
+ const deduped = [];
368
+ const acceptedWordSets = [];
369
+ // Sort by weighted_score DESC for dedup pass (best snippets win), then re-sort chronologically below
370
+ const scoreOrdered = [...enrichedSnippets].sort((a, b) => parseFloat(b.weighted_score) - parseFloat(a.weighted_score));
371
+ for (const s of scoreOrdered) {
372
+ const words = sigWords(s.content);
373
+ const isDuplicate = acceptedWordSets.some(accepted => jaccardOverlap(words, accepted) >= OVERLAP_THRESHOLD);
374
+ if (!isDuplicate) {
375
+ deduped.push(s);
376
+ acceptedWordSets.push(words);
377
+ }
378
+ }
379
+ // Restore chronological order for causal narrative
380
+ deduped.sort((a, b) => a.timestamp - b.timestamp);
381
+ const deduplicatedSnippets = deduped;
382
+ const dedupRemovedCount = enrichedSnippets.length - deduplicatedSnippets.length;
383
+ if (dedupRemovedCount > 0) {
384
+ console.log(`[Dedup] Removed ${dedupRemovedCount} semantically overlapping snippets (${enrichedSnippets.length} → ${deduplicatedSnippets.length})`);
385
+ }
386
+ // Force garbage collection after dedup to free memory from enrichedSnippets
387
+ if (global.gc) {
388
+ global.gc();
389
+ }
390
+ // Step 4: Build XML-wrapped context with metadata headers
391
+ const xmlContext = deduplicatedSnippets.map((s, idx) => {
392
+ const timestamp = new Date(s.timestamp).toISOString();
393
+ const persona = s.tags[0] || s.provenance || 'unknown';
394
+ const atomCount = s.sourceAtoms.length;
395
+ const charCount = s.content.length;
396
+ const startHex = s.startByte.toString(16).toUpperCase().padStart(4, '0');
397
+ const endHex = s.endByte.toString(16).toUpperCase().padStart(4, '0');
398
+ const fileName = path.basename(s.source);
399
+ // Metadata header for each snippet
400
+ const header = `[GROUP:${idx + 1}] [File:${fileName}] [Range: 0x${startHex}-0x${endHex}] [Time: ${timestamp}] [Atoms: ${atomCount}] [Chars: ${charCount}]`;
401
+ return `${header}
402
+ <atom id="${s.sourceAtoms.map(a => a.id.substring(0, 8)).join(',')}" relevance="${s.weighted_score}" timestamp="${timestamp}" persona="${persona}" source="${s.source}">
403
+ ${s.content}
404
+ </atom>`;
405
+ }).join('\n\n');
406
+ // Force garbage collection after building XML context to free dedup arrays
407
+ if (global.gc) {
408
+ global.gc();
409
+ }
410
+ // Step 5: Calculate budget allocation
411
+ const totalContentChars = deduplicatedSnippets.reduce((sum, s) => sum + s.content.length, 0);
412
+ const overheadChars = xmlContext.length - totalContentChars;
413
+ const budgetUtilization = maxChars > 0 ? ((totalContentChars + overheadChars) / maxChars * 100).toFixed(1) : 'N/A';
414
+ // Step 6: Convert snippets back to SearchResult[] for API compatibility
415
+ const enrichedResults = deduplicatedSnippets.map(s => ({
416
+ id: s.sourceAtoms.map(a => a.id).join('+'),
417
+ content: s.content,
418
+ source: s.source,
419
+ timestamp: s.timestamp,
420
+ buckets: [],
421
+ tags: s.tags,
422
+ epochs: '',
423
+ provenance: s.provenance,
424
+ score: s.relevanceScore,
425
+ compound_id: s.compoundId,
426
+ start_byte: s.startByte,
427
+ end_byte: s.endByte,
428
+ temporal_weight: s.temporal_weight,
429
+ decay_factor: s.decay_factor,
430
+ is_inflated: true
431
+ }));
432
+ return {
433
+ context: xmlContext || 'No results found.',
434
+ results: enrichedResults,
435
+ toAgentString: () => {
436
+ return deduplicatedSnippets.map(s => `[${s.provenance}] ${s.source} (t=${s.temporal_weight.toFixed(3)}, atoms=${s.sourceAtoms.length}): ${s.content.substring(0, 200)}...`).join('\n');
437
+ },
438
+ metadata: {
439
+ coalescing: coalescingStats,
440
+ deduplication: { removed: dedupRemovedCount, remaining: deduplicatedSnippets.length },
441
+ budget_allocation: {
442
+ total_chars: totalContentChars + overheadChars,
443
+ content_chars: totalContentChars,
444
+ overhead_chars: overheadChars,
445
+ utilization_percent: parseFloat(budgetUtilization)
446
+ },
447
+ provenance_enabled: true,
448
+ temporal_decay_lambda: lambda,
449
+ xml_wrapped: true,
450
+ chronological_sort: true
451
+ }
452
+ };
453
+ }
454
+ catch (error) {
455
+ console.error('[Search] formatResults failed:', error);
456
+ return {
457
+ context: 'Error occurred during result formatting.',
458
+ results: [],
459
+ toAgentString: () => 'Error occurred during result formatting.',
460
+ metadata: { error: true, message: 'Failed to format search results' }
461
+ };
462
+ }
463
+ }
464
+ /**
465
+ * Helper to filter tags for display (User Request: Hide Year Numbers)
466
+ */
467
+ export function filterDisplayTags(tags) {
468
+ if (!config.SEARCH?.hide_years_in_tags)
469
+ return tags;
470
+ // Remove if exactly 4 digits (approx year check)
471
+ return tags.filter(t => !/^\d{4}$/.test(t));
472
+ }
473
+ //# sourceMappingURL=search-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-utils.js","sourceRoot":"","sources":["../../../src/services/search/search-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Search Orchestrator — "The Brain"
3
+ *
4
+ * Core search orchestration, Tag-Walker physics engine, engram lookup,
5
+ * and result merging. All NLP parsing lives in query-parser.ts ("The Ears"),
6
+ * utilities in search-utils.ts ("The Tools"), and graph reasoning in
7
+ * bright-nodes.ts ("The Illuminator").
8
+ *
9
+ * Standard 086 Compliant.
10
+ * Standard 086 = "Dual-Strategy Search" (internal specification numbering).
11
+ * See specs/standards/STANDARD_086_DUAL_STRATEGY_SEARCH.md for full spec.
12
+ * Two modes: Standard Search (70/30 budget, temporal decay) and Max-Recall
13
+ * (zero decay, 3-hop traversal). Mode auto-selects based on token budget.
14
+ */
15
+ import { getGlobalTags, splitQueryIntoMolecules, parseQuery } from './query-parser.js';
16
+ import { SearchResult, filterDisplayTags } from './search-utils.js';
17
+ import { KnowledgeCluster } from '../../types/api.js';
18
+ export { getGlobalTags, filterDisplayTags, parseQuery, splitQueryIntoMolecules };
19
+ export type { SearchResult };
20
+ export type { BrightNode, BrightNodeRelationship } from './bright-nodes.js';
21
+ export { getBrightNodes, getStructuredGraph } from './bright-nodes.js';
22
+ /**
23
+ * Create or update an engram (lexical sidecar) for fast entity lookup
24
+ */
25
+ export declare function createEngram(key: string, memoryIds: string[]): Promise<void>;
26
+ /**
27
+ * Lookup memories by engram key (O(1) operation)
28
+ */
29
+ export declare function lookupByEngram(key: string): Promise<string[]>;
30
+ /**
31
+ * Hydrate engram IDs into full SearchResult objects
32
+ */
33
+ export declare function hydrateEngrams(ids: string[]): Promise<SearchResult[]>;
34
+ import { UserContext } from '../../types/context.js';
35
+ /**
36
+ * Find Anchors (Direct Hits) - Formerly part of tagWalkerSearch
37
+ * Executes Strategy A (Atom positions) and Strategy B (Molecules FTS)
38
+ */
39
+ export declare function findAnchors(query: string, buckets?: string[], tags?: string[], _maxChars?: number, provenance?: 'internal' | 'external' | 'quarantine' | 'all', filters?: {
40
+ type?: string;
41
+ minVal?: number;
42
+ maxVal?: number;
43
+ }, fuzzy?: boolean): Promise<SearchResult[]>;
44
+ /**
45
+ * Execute search with Intelligent Expansion and Physics Tag-Walker Protocol (GCP)
46
+ *
47
+ * @param query - Search query string
48
+ * @param buckets - Array of buckets to search
49
+ * @param maxChars - Maximum characters to return
50
+ * @param provenance - Provenance filter (internal/external/quarantine/all)
51
+ * @param explicitTags - Explicit tags to filter by
52
+ * @param filters - Additional filters
53
+ * @param useMaxRecall - If true, uses MAX_RECALL_CONFIG for comprehensive retrieval
54
+ * @param userContext - User context for personalization
55
+ */
56
+ export declare function executeSearch(query: string, buckets?: string[], maxChars?: number, provenance?: 'internal' | 'external' | 'quarantine' | 'all', explicitTags?: string[], filters?: {
57
+ type?: string;
58
+ minVal?: number;
59
+ maxVal?: number;
60
+ }, useMaxRecall?: boolean, userContext?: UserContext): Promise<{
61
+ context: string;
62
+ results: SearchResult[];
63
+ toAgentString: () => string;
64
+ metadata?: any;
65
+ }>;
66
+ /**
67
+ * Execute molecule-based search - splits query into sentence-like chunks and searches each separately
68
+ */
69
+ export declare function executeMoleculeSearch(query: string, bucket?: string, buckets?: string[], maxChars?: number, deep?: boolean, provenance?: 'internal' | 'external' | 'quarantine' | 'all', explicitTags?: string[], userContext?: UserContext): Promise<{
70
+ context: string;
71
+ results: SearchResult[];
72
+ toAgentString: () => string;
73
+ metadata?: any;
74
+ }>;
75
+ /**
76
+ * Traditional FTS fallback
77
+ */
78
+ export declare function runTraditionalSearch(query: string, buckets: string[]): Promise<SearchResult[]>;
79
+ /**
80
+ * Iterative Search with Back-off Strategy
81
+ * Attempts to retrieve results by progressively simplifying the query.
82
+ *
83
+ * @param useMaxRecall - If true, uses MAX_RECALL_CONFIG for comprehensive retrieval
84
+ */
85
+ export declare function iterativeSearch(query: string, buckets?: string[], maxChars?: number, tags?: string[], provenance?: 'internal' | 'external' | 'quarantine' | 'all', useMaxRecall?: boolean, userContext?: UserContext): Promise<{
86
+ context: string;
87
+ results: SearchResult[];
88
+ attempt: number;
89
+ metadata?: any;
90
+ toAgentString: () => string;
91
+ }>;
92
+ /**
93
+ * Smart Chat Search (The "Markovian" Context Gatherer)
94
+ * Logic:
95
+ * 1. Try standard Iterative Search.
96
+ * 2. If Recall is Low (< 10 atoms), TRIGGER SPLIT.
97
+ * 3. Split Query into Top Entities (Alice, Bob, etc.).
98
+ * 4. Run Parallel Searches for each entity.
99
+ * 5. Aggregate & Deduplicate.
100
+ *
101
+ * @param useMaxRecall - If true, uses MAX_RECALL_CONFIG for comprehensive retrieval
102
+ */
103
+ export declare function smartChatSearch(query: string, buckets?: string[], maxChars?: number, tags?: string[], provenance?: 'internal' | 'external' | 'quarantine' | 'all', useMaxRecall?: boolean, userContext?: UserContext): Promise<{
104
+ context: string;
105
+ results: SearchResult[];
106
+ strategy: string;
107
+ splitQueries?: string[];
108
+ metadata?: any;
109
+ toAgentString: () => string;
110
+ }>;
111
+ /**
112
+ * Cluster SearchResults into KnowledgeClusters for high-density JSON.
113
+ * Groups by source file and sorts by chronological timestamp.
114
+ */
115
+ export declare function clusterMolecules(results: SearchResult[]): KnowledgeCluster[];
116
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/services/search/search.ts"],"names":[],"mappings":"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"}