@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,611 @@
1
+ /**
2
+ * Physics-Based Tag Walker for ECE
3
+ *
4
+ * Implements mathematical approach to graph traversal using SQL matrix operations
5
+ * leveraging the relational nature of PGlite for efficient sparse matrix processing.
6
+ *
7
+ * Architecture: Treats the database as a Knowledge Graph.
8
+ * - Atoms (memories) and Tags (concepts) form a bipartite graph.
9
+ * - JOIN operations simulate sparse matrix multiplication (M × M^T).
10
+ * - The Unified Field Equation weights every connection deterministically.
11
+ *
12
+ * The "Planets and Moons" Model:
13
+ * - Planets: Direct search hits (FTS/SimHash) — heavy, explicit anchors.
14
+ * - Moons: Physics-discovered associations — orbit via shared tags, time, simhash.
15
+ * - Serendipity: Weighted reservoir sampling occasionally surfaces faint but relevant signals.
16
+ */
17
+ import { db } from '../../core/db.js';
18
+ /** Maximum time (ms) any single physics walker SQL query is allowed to run */
19
+ const QUERY_TIMEOUT_MS = 2000; // Reduced from 10s to 2s for better UX
20
+ /** Maximum number of anchor IDs to feed into a single SQL query */
21
+ const MAX_ANCHOR_IDS = 30; // Reduced from 50 to prevent SQL bloat
22
+ /**
23
+ * Run a DB query with a timeout. If the query takes longer than `timeoutMs`,
24
+ * the promise rejects with an error (PGlite has no native cancel, but this
25
+ * prevents the physics walker from blocking the search pipeline forever).
26
+ */
27
+ async function sqlWithTimeout(query, params, timeoutMs = QUERY_TIMEOUT_MS) {
28
+ return Promise.race([
29
+ db.run(query, params),
30
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`[PhysicsWalker] SQL query timed out after ${timeoutMs}ms`)), timeoutMs))
31
+ ]);
32
+ }
33
+ export class PhysicsTagWalker {
34
+ // Hyperparameters (The "Laws of Physics" for your mind)
35
+ // Now configurable via constructor for max-recall mode
36
+ DAMPING_FACTOR;
37
+ TIME_DECAY_LAMBDA;
38
+ MAX_PER_HOP;
39
+ WALK_RADIUS;
40
+ GRAVITY_THRESHOLD;
41
+ TEMPERATURE;
42
+ constructor(config) {
43
+ // Default values (balanced production config)
44
+ // λ = 0.00001 h⁻¹ gives ~7.9 year half-life, appropriate for personal knowledge bases
45
+ // where old memories retain value. See paper.md line 69.
46
+ this.DAMPING_FACTOR = config?.damping ?? 0.85;
47
+ this.TIME_DECAY_LAMBDA = config?.temporalDecay ?? 0.00001; // h⁻¹ (per hour)
48
+ this.MAX_PER_HOP = config?.maxPerHop ?? 50;
49
+ this.WALK_RADIUS = config?.walkRadius ?? 1;
50
+ this.GRAVITY_THRESHOLD = config?.gravityThreshold ?? 0.01;
51
+ this.TEMPERATURE = config?.temperature ?? 0.2;
52
+ }
53
+ /**
54
+ * Safely parse a simhash string into a BigInt (hex with or without 0x).
55
+ */
56
+ safeParseHex(hash) {
57
+ if (!hash || hash === '0')
58
+ return 0n;
59
+ const clean = hash.startsWith('0x') ? hash : `0x${hash}`;
60
+ try {
61
+ return BigInt(clean);
62
+ }
63
+ catch (e) {
64
+ console.warn(`[PhysicsWalker] Invalid simhash format: ${hash}`);
65
+ return 0n;
66
+ }
67
+ }
68
+ /**
69
+ * Performs radial inflation using SQL matrix operations.
70
+ * This executes the equivalent of: r = (M * M^T) * q
71
+ *
72
+ * Now includes the Unified Field Equation directly in the SQL query:
73
+ * Weight = (SharedTags) * Exp(-Lambda * DeltaT) * (1 - SimHashDist/64)
74
+ *
75
+ * Uses instance configuration from constructor for max-recall support.
76
+ */
77
+ async performRadialInflation(anchorIds, radius, // Uses instance WALK_RADIUS if not provided
78
+ maxPerHop, // Uses instance MAX_PER_HOP if not provided
79
+ temperature, // Uses instance TEMPERATURE if not provided
80
+ gravityThreshold // Uses instance GRAVITY_THRESHOLD if not provided
81
+ ) {
82
+ // Use instance defaults if not overridden
83
+ const hopRadius = radius ?? this.WALK_RADIUS;
84
+ const hopMaxPerHop = maxPerHop ?? this.MAX_PER_HOP;
85
+ const hopTemperature = temperature ?? this.TEMPERATURE;
86
+ const hopGravityThreshold = gravityThreshold ?? this.GRAVITY_THRESHOLD;
87
+ let currentAnchors = anchorIds;
88
+ let allPhysicsResults = [];
89
+ const seenIds = new Set(anchorIds); // Prevent revisiting anchors
90
+ // We only support radius=1 fully optimized in SQL for now.
91
+ // Iteration for radius > 1 would require feeding results back in.
92
+ // Given the efficiency, radius=1 is usually sufficient if the first hop is high quality.
93
+ // Get connected nodes via shared tags with SQL weighting
94
+ // BUGFIX 2026-03-03: Reduced from hopMaxPerHop * 3 to hopMaxPerHop * 1.5
95
+ // to prevent memory overflow on large datasets (207K molecules)
96
+ // The SQL LIMIT already filters by gravity_score, no need to over-fetch
97
+ const connectedNodes = await this.getConnectedNodesWeighted(currentAnchors, Math.min(hopMaxPerHop, 100), // Cap at 100 total to bound WASM heap (50 standard, 100 max-recall)
98
+ hopGravityThreshold);
99
+ for (const node of connectedNodes) {
100
+ if (seenIds.has(node.atomId))
101
+ continue;
102
+ seenIds.add(node.atomId);
103
+ // Determine connection type based on physics
104
+ // Note: We don't have the *exact* partial scores from SQL separate easily
105
+ // without more complex queries, so we infer reason from properties.
106
+ let connectionType = 'tag_walk_neighbor';
107
+ const hopInfo = node.hopDistance !== undefined ? ` (${node.hopDistance}-hop)` : '';
108
+ let linkReason = `via ${node.sharedTags} shared tag(s)${hopInfo}`;
109
+ // Re-calculate some factors for explanation text (cheap in JS)
110
+ // We don't need exact anchor match here, just general properties
111
+ if (node.gravityScore > 0.8 && node.sharedTags > 2) {
112
+ connectionType = 'tag_walk_neighbor'; // Strong bond is just a high-quality tag walk
113
+ linkReason = `strong bond via ${node.sharedTags} shared tag(s)${hopInfo}`;
114
+ }
115
+ // Calculate simhash distance to *best anchor* if we had it, but SQL aggregation
116
+ // hides the specific anchor relation.
117
+ // Ideally SQL returns "best_anchor_id". It does!
118
+ const timeDeltaMs = 0; // SQL handled time decay, we don't need exact delta for now unless we query it.
119
+ // (Actually we can't easily get the specific edge delta from the aggregate)
120
+ const isRecurring = (node.frequency || 0) > 1 || node.sharedTags >= 3;
121
+ const result = {
122
+ id: node.atomId,
123
+ content: node.content || '',
124
+ source: node.source || '',
125
+ timestamp: node.timestamp,
126
+ buckets: [],
127
+ tags: node.tags || [],
128
+ epochs: '',
129
+ provenance: node.provenance || 'internal',
130
+ score: node.gravityScore,
131
+ molecular_signature: node.simhash.toString(16),
132
+ frequency: node.frequency || 1,
133
+ type: node.type || 'thought',
134
+ compound_id: node.compoundId,
135
+ start_byte: node.startByte,
136
+ end_byte: node.endByte,
137
+ temporal_state: {
138
+ first_seen: node.timestamp,
139
+ last_seen: node.timestamp,
140
+ occurrence_count: node.frequency || 1,
141
+ timestamps: [node.timestamp]
142
+ }
143
+ };
144
+ const physics = {
145
+ gravity_score: node.gravityScore,
146
+ time_drift: 'calculated_in_flux', // Placeholder as we aggregate
147
+ is_recurring: isRecurring,
148
+ frequency: node.frequency || 1,
149
+ connection_type: connectionType,
150
+ source_anchor_id: node.bestAnchorId || '',
151
+ link_reason: linkReason,
152
+ hop_distance: node.hopDistance
153
+ };
154
+ allPhysicsResults.push({ result, physics });
155
+ }
156
+ // Sort by gravity score
157
+ allPhysicsResults.sort((a, b) => b.physics.gravity_score - a.physics.gravity_score);
158
+ // Weighted Reservoir Sampling / Serendipity could be applied here if needed
159
+ // But SQL ranking is "Unified Field" based.
160
+ // If temperature is high, we might want to shuffle the top K?
161
+ // For now, returning the physics-sorted list.
162
+ return allPhysicsResults.slice(0, maxPerHop);
163
+ }
164
+ /**
165
+ * Gets connected nodes via shared tags using SQL matrix operations w/ Physics equations.
166
+ *
167
+ * The SQL performs:
168
+ * 1. Collect Anchor Stats (ID, Timestamp, SimHash)
169
+ * 2. Find Shared Tags (Sparse Matrix Multiply)
170
+ * 3. Calculate Weight:
171
+ * W = (SharedTags) * Exp(-lambda * delta_t) * (1 - Hamming/64)
172
+ * 4. Aggregate: Take the MAX weight overlapping with any anchor.
173
+ */
174
+ async getConnectedNodesWeighted(anchorIds, limit = 50, threshold = 0.1) {
175
+ if (anchorIds.length === 0)
176
+ return [];
177
+ // BUGFIX 2026-03-03: Guard against excessive limit values that cause heap overflow
178
+ // Ensure limit is always a positive integer (guards against float args causing
179
+ // "invalid input syntax for type bigint" in the LIMIT $3 SQL parameter)
180
+ // Also cap at 300 to prevent memory exhaustion on large datasets
181
+ const safeLimit = Math.max(1, Math.min(Math.floor(limit), 300));
182
+ // Cap anchors
183
+ const cappedIds = anchorIds.length > MAX_ANCHOR_IDS
184
+ ? anchorIds.slice(0, MAX_ANCHOR_IDS)
185
+ : anchorIds;
186
+ const startTime = Date.now();
187
+ // Cap PostgreSQL sort/hash memory per query node to prevent WASM heap spikes
188
+ await db.run("SET work_mem = '32MB'");
189
+ // 1. Prepare Anchor Params
190
+ // We pass the anchor IDs as a single array as the first parameter.
191
+ // Physics constants and query params follow
192
+ // $1 = anchorIds array
193
+ // $2 = threshold
194
+ // $3 = safeLimit
195
+ // $4 = WALK_RADIUS
196
+ // $5 = DAMPING_FACTOR
197
+ // $6 = TIME_DECAY_LAMBDA
198
+ // Big-O summary for this query (N = total molecules, A = atoms, T = tags):
199
+ // resolved_atoms: O(|anchors|) — subquery fence ensures PK lookup, not full-table cross join
200
+ // anchor_stats: O(A) → LIMIT 10 — scan atoms WHERE id IN small set
201
+ // anchor_tag_set: O(10 × avg_tags) — materialized once, replaces correlated subquery
202
+ // hop_traversal: O(anchor_count × avg_tag_neighbors) — recursive, bounded by WALK_RADIUS
203
+ // atom_hop_distance: O(hop_traversal rows) — GROUP BY
204
+ // candidates: O(atom_hop_distance × avg_tags_per_atom) — no correlated subquery
205
+ // candidates_limited/physical: O(LIMIT 50) each
206
+ // weighted_ids CROSS JOIN: O(100 candidates × 10 anchors) = O(1000) — manageable
207
+ // Final JOIN atoms: O(safeLimit × row_size) — only materialized content
208
+ const refinedQuery = `
209
+ WITH RECURSIVE
210
+ -- Resolve both Atoms and Molecules to a unified set of Atom IDs.
211
+ -- CRITICAL: The molecule branch uses a subquery fence to materialize anchor molecules
212
+ -- (small set, O(|anchors|) via PK) BEFORE joining to atoms.
213
+ -- Without this, "atoms JOIN molecules ON compound_id" produces an O(A×N) cross product
214
+ -- when all molecules share a single compound_id (e.g. one large file = 207K molecules).
215
+ resolved_atoms AS (
216
+ SELECT id as atom_id FROM atoms WHERE id = ANY($1::text[])
217
+ UNION ALL
218
+ SELECT a.id as atom_id
219
+ FROM (
220
+ SELECT id, compound_id, start_byte, end_byte
221
+ FROM molecules
222
+ WHERE id = ANY($1::text[])
223
+ LIMIT 50
224
+ ) anc_mol
225
+ JOIN atoms a ON a.compound_id = anc_mol.compound_id
226
+ AND a.start_byte >= (anc_mol.start_byte - 500::int)
227
+ AND a.end_byte <= (anc_mol.end_byte + 500::int)
228
+ LIMIT 100
229
+ ),
230
+ anchor_stats AS (
231
+ SELECT
232
+ id as anchor_id,
233
+ timestamp as anchor_ts,
234
+ simhash as anchor_sh,
235
+ 0::int as hop_distance
236
+ FROM atoms
237
+ WHERE id IN (SELECT atom_id FROM resolved_atoms)
238
+ ORDER BY timestamp DESC
239
+ LIMIT 10
240
+ ),
241
+ -- Materialized anchor tag set: replaces the correlated subquery
242
+ -- "t.tag IN (SELECT tag FROM tags WHERE atom_id = ast.anchor_id)"
243
+ -- that previously ran once per (candidate_atom × anchor) pair.
244
+ anchor_tag_set AS (
245
+ SELECT DISTINCT tag
246
+ FROM tags
247
+ WHERE atom_id IN (SELECT anchor_id FROM anchor_stats)
248
+ ),
249
+ -- HOP TRACKING: Recursive CTE for multi-hop traversal with hop distance
250
+ hop_traversal AS (
251
+ SELECT
252
+ anchor_id as atom_id,
253
+ anchor_ts,
254
+ anchor_sh,
255
+ hop_distance,
256
+ CAST(ARRAY[anchor_id] as TEXT[]) as path
257
+ FROM anchor_stats
258
+
259
+ UNION ALL
260
+
261
+ SELECT DISTINCT
262
+ t2.atom_id,
263
+ a2.timestamp as anchor_ts,
264
+ a2.simhash as anchor_sh,
265
+ ht.hop_distance + 1,
266
+ ht.path || t2.atom_id
267
+ FROM hop_traversal ht
268
+ JOIN atoms a1 ON ht.atom_id = a1.id
269
+ JOIN tags t1 ON a1.id = t1.atom_id
270
+ JOIN tags t2 ON t1.tag = t2.tag AND t1.atom_id != t2.atom_id
271
+ JOIN atoms a2 ON t2.atom_id = a2.id
272
+ WHERE ht.hop_distance < $4
273
+ AND NOT t2.atom_id = ANY(ht.path)
274
+ AND a2.id NOT IN (SELECT anchor_id FROM anchor_stats)
275
+ ),
276
+ atom_hop_distance AS (
277
+ SELECT
278
+ atom_id,
279
+ anchor_ts,
280
+ anchor_sh,
281
+ MIN(hop_distance) as hop_distance
282
+ FROM hop_traversal
283
+ WHERE hop_distance > 0
284
+ GROUP BY atom_id, anchor_ts, anchor_sh
285
+ ),
286
+ -- Candidate Generation: uses anchor_tag_set (hash join) instead of correlated subquery
287
+ candidates AS (
288
+ SELECT
289
+ h.atom_id,
290
+ a.timestamp,
291
+ a.simhash,
292
+ COUNT(DISTINCT t.tag) as shared_tags,
293
+ 0.0 as physical_bonus,
294
+ MIN(h.hop_distance) as hop_distance
295
+ FROM atom_hop_distance h
296
+ JOIN atoms a ON h.atom_id = a.id
297
+ JOIN tags t ON a.id = t.atom_id AND t.tag IN (SELECT tag FROM anchor_tag_set)
298
+ GROUP BY h.atom_id, a.timestamp, a.simhash
299
+ ),
300
+ candidates_limited AS (
301
+ SELECT * FROM candidates
302
+ ORDER BY shared_tags DESC
303
+ LIMIT 50
304
+ ),
305
+ candidates_physical AS (
306
+ -- Part B: Physical proximity
307
+ SELECT
308
+ a.id as atom_id,
309
+ a.timestamp,
310
+ a.simhash,
311
+ 0::bigint as shared_tags,
312
+ 1.0 as physical_bonus,
313
+ 1::int as hop_distance -- Physical proximity treated as hop 1
314
+ FROM atoms a
315
+ JOIN anchor_stats ast ON a.compound_id = (SELECT compound_id FROM atoms WHERE id = ast.anchor_id)
316
+ WHERE a.id NOT IN (SELECT anchor_id FROM anchor_stats)
317
+ AND a.start_byte >= ((SELECT start_byte FROM atoms WHERE id = ast.anchor_id) - 1000::int)
318
+ AND a.end_byte <= ((SELECT end_byte FROM atoms WHERE id = ast.anchor_id) + 1000::int)
319
+ LIMIT 50
320
+ ),
321
+ candidates_combined AS (
322
+ SELECT * FROM candidates_limited
323
+ UNION ALL
324
+ SELECT * FROM candidates_physical
325
+ ),
326
+ -- 2. Aggregate candidate scores
327
+ scored_candidates AS (
328
+ SELECT
329
+ c.atom_id,
330
+ c.timestamp,
331
+ c.simhash,
332
+ SUM(c.shared_tags) as total_shared_tags,
333
+ MAX(c.physical_bonus) as physical_bonus,
334
+ MIN(c.hop_distance) as hop_distance -- Use minimum hop distance
335
+ FROM candidates_combined c
336
+ GROUP BY c.atom_id, c.timestamp, c.simhash
337
+ ),
338
+ -- 3. Physics Weighting (Unified Field Equation with hop distance)
339
+ -- Implements: |T(q) ∩ T(a)| · γ^(d(q,a)) × e^(-λΔt) × (1 - H(h_q,h_a)/64)
340
+ -- Note: LEAST(GREATEST(..., 0), 3) clamps hop_distance to prevent POWER underflow
341
+ -- Note: LEAST(..., 700000) clamps time diff to ~7 days BEFORE EXP to prevent underflow
342
+ -- EXP(-0.00001 * 700000) = EXP(-7) ≈ 0.0009 which PGlite can handle
343
+ -- Note: timestamps are in milliseconds, λ is in hours⁻¹, so divide by 3600000 to convert ms→hours
344
+ weighted_ids AS (
345
+ SELECT
346
+ sc.atom_id,
347
+ MAX(
348
+ GREATEST(0.0, LEAST(1.0,
349
+ ( ((COALESCE(sc.total_shared_tags, 0::bigint)::float8 / 10.0) * POWER($5::float8, LEAST(GREATEST(COALESCE(sc.hop_distance, 1::int)::float8, 0.0), 3.0))) + (COALESCE(sc.physical_bonus, 0.0) * 0.1) ) *
350
+ EXP((-$6::float8) * LEAST(ABS(COALESCE(sc.timestamp::float8 - ast.anchor_ts::float8, 0.0)) / 3600000.0, 700000.0)) *
351
+ (1.0 - (bit_count(('x' || LPAD(COALESCE(sc.simhash, '0'), 16, '0'))::bit(64) # ('x' || LPAD(COALESCE(ast.anchor_sh, '0'), 16, '0'))::bit(64)) / 64.0))
352
+ ))
353
+ ) as gravity_score,
354
+ MAX(ast.anchor_id) as best_anchor_id,
355
+ MAX(sc.total_shared_tags) as shared_tags,
356
+ MIN(sc.hop_distance) as hop_distance
357
+ FROM scored_candidates sc
358
+ CROSS JOIN anchor_stats ast
359
+ GROUP BY sc.atom_id
360
+ HAVING MAX(
361
+ GREATEST(0.0, LEAST(1.0,
362
+ ( ((COALESCE(sc.total_shared_tags, 0::bigint)::float8 / 10.0) * POWER($5::float8, LEAST(GREATEST(COALESCE(sc.hop_distance, 1::int)::float8, 0.0), 3.0))) + (COALESCE(sc.physical_bonus, 0.0) * 0.1) ) *
363
+ EXP((-$6::float8) * LEAST(ABS(COALESCE(sc.timestamp::float8 - ast.anchor_ts::float8, 0.0)) / 3600000.0, 700000.0)) *
364
+ (1.0 - (bit_count(('x' || LPAD(COALESCE(sc.simhash, '0'), 16, '0'))::bit(64) # ('x' || LPAD(COALESCE(ast.anchor_sh, '0'), 16, '0'))::bit(64)) / 64.0))
365
+ ))
366
+ ) > $2::float8
367
+ ORDER BY gravity_score DESC
368
+ LIMIT $3
369
+ )
370
+ -- 4. Final projection with hop distance
371
+ SELECT
372
+ w.atom_id,
373
+ w.shared_tags,
374
+ w.hop_distance,
375
+ a.timestamp,
376
+ a.simhash,
377
+ a.content,
378
+ a.source_path,
379
+ a.tags,
380
+ a.provenance,
381
+ a.type,
382
+ a.compound_id,
383
+ a.start_byte,
384
+ a.end_byte,
385
+ w.gravity_score,
386
+ w.best_anchor_id
387
+ FROM weighted_ids w
388
+ JOIN atoms a ON w.atom_id = a.id
389
+ `;
390
+ const params = [
391
+ cappedIds, // $1
392
+ threshold, // $2
393
+ safeLimit, // $3
394
+ this.WALK_RADIUS, // $4
395
+ this.DAMPING_FACTOR, // $5
396
+ this.TIME_DECAY_LAMBDA // $6
397
+ ];
398
+ try {
399
+ // Debug logging for high-budget queries
400
+ if (anchorIds.length > 10 || safeLimit > 100) {
401
+ console.log(`[PhysicsWalker] SQL params: anchorIds=${cappedIds.length}, threshold=${threshold}, limit=${safeLimit}`);
402
+ console.log(`[PhysicsWalker] Anchor IDs: ${cappedIds.slice(0, 5).join(', ')}...`);
403
+ }
404
+ const result = await sqlWithTimeout(refinedQuery, params, QUERY_TIMEOUT_MS);
405
+ const elapsed = Date.now() - startTime;
406
+ if (elapsed > 5000) {
407
+ console.warn(`[PhysicsWalker] SQL Weighting took ${elapsed}ms for ${anchorIds.length} anchors`);
408
+ }
409
+ else {
410
+ console.log(`[PhysicsWalker] SQL Weighting: ${result.rows?.length || 0} results in ${elapsed} ms`);
411
+ }
412
+ // Debug: Log why we might have 0 results
413
+ if (!result.rows || result.rows.length === 0) {
414
+ console.warn(`[PhysicsWalker] Zero results - checking potential causes:`);
415
+ console.warn(`[PhysicsWalker] - Anchor count: ${anchorIds.length}`);
416
+ console.warn(`[PhysicsWalker] - Threshold: ${threshold}`);
417
+ console.warn(`[PhysicsWalker] - Limit: ${safeLimit}`);
418
+ console.warn(`[PhysicsWalker] - Damping: ${this.DAMPING_FACTOR}, Decay: ${this.TIME_DECAY_LAMBDA}`);
419
+ }
420
+ if (!result.rows)
421
+ return [];
422
+ return result.rows.map((row) => ({
423
+ atomId: row.atom_id,
424
+ sharedTags: parseInt(row.shared_tags),
425
+ timestamp: parseFloat(row.timestamp),
426
+ simhash: this.safeParseHex(row.simhash),
427
+ content: row.content || '',
428
+ source: row.source_path || '',
429
+ tags: row.tags || [],
430
+ provenance: row.provenance || 'internal',
431
+ type: row.type || 'thought',
432
+ compoundId: row.compound_id || undefined,
433
+ startByte: (row.start_byte !== null && row.start_byte !== undefined) ? row.start_byte : undefined,
434
+ endByte: (row.end_byte !== null && row.end_byte !== undefined) ? row.end_byte : undefined,
435
+ gravityScore: parseFloat(row.gravity_score),
436
+ bestAnchorId: row.best_anchor_id,
437
+ hopDistance: row.hop_distance !== undefined ? parseInt(row.hop_distance) : undefined
438
+ }));
439
+ }
440
+ catch (e) {
441
+ console.error(`[PhysicsWalker] SQL Weighting failed after ${Date.now() - startTime} ms: `, e);
442
+ return [];
443
+ }
444
+ }
445
+ // --- Tag-Based Variant (for Virtual/Mol Anchors) ---
446
+ /**
447
+ * Applies physics weighting seeded from tags directly.
448
+ */
449
+ async applyPhysicsWeightingFromTags(anchorResults, threshold = 0.1, config) {
450
+ // 1. Extract Tags
451
+ const anchorTags = Array.from(new Set(anchorResults.flatMap(r => (r.tags || []).filter(Boolean))));
452
+ if (anchorTags.length === 0)
453
+ return [];
454
+ const temperature = config?.temperature ?? 0.2;
455
+ const maxPerHop = config?.max_per_hop ?? 50;
456
+ // 2. Run simplified SQL query
457
+ // (Simulating an anchor at "Now" with null hash for distance? or just shared tag count?)
458
+ // For pure tag walk, we often lack a specific SimHash or Timestamp anchor.
459
+ // We'll use the "Mean Timestamp" of the anchor results if available.
460
+ // Simplification: Reuse the main walker but treat the resulting nodes
461
+ // as having a gravity score purely based on Shared Tags count for now,
462
+ // or reimplement a specific Tag-SQL query.
463
+ // Let's implement a specific customized query for Tag-Walking that
464
+ // incorporates the "Concept Gravity".
465
+ // For now, to keep this refactor focused and safe, we will use the OLD logic for Tag-Walking
466
+ // but optimized to not loop heavily.
467
+ // Actually, let's just fetch candidates by tags and score in JS for this edge case
468
+ // OR create a "Virtual Anchor" in the CTE.
469
+ // Fallback to simpler implementation for tags-only start:
470
+ const nodes = await this.getConnectedNodesFromTags(anchorTags, maxPerHop * 2);
471
+ // Map to PhysicsResult manually
472
+ return nodes.map(node => ({
473
+ result: {
474
+ id: node.atomId,
475
+ content: node.content || '',
476
+ source: node.source || '',
477
+ timestamp: node.timestamp,
478
+ buckets: [],
479
+ tags: node.tags || [],
480
+ epochs: '',
481
+ provenance: node.provenance || 'internal',
482
+ score: node.sharedTags * 0.1, // Crude score
483
+ molecular_signature: node.simhash.toString(16),
484
+ frequency: node.frequency || 1,
485
+ type: node.type || 'thought',
486
+ compound_id: node.compoundId,
487
+ start_byte: node.startByte,
488
+ end_byte: node.endByte,
489
+ temporal_state: {
490
+ first_seen: node.timestamp,
491
+ last_seen: node.timestamp,
492
+ occurrence_count: node.frequency || 1,
493
+ timestamps: [node.timestamp]
494
+ }
495
+ },
496
+ physics: {
497
+ gravity_score: node.sharedTags * 0.1,
498
+ time_drift: 'tag_walk',
499
+ is_recurring: false,
500
+ frequency: 1,
501
+ connection_type: 'tag_walk_neighbor',
502
+ source_anchor_id: 'virtual_tag_cloud',
503
+ link_reason: `via ${node.sharedTags} shared tag(s)`
504
+ }
505
+ })).sort((a, b) => b.physics.gravity_score - a.physics.gravity_score).slice(0, maxPerHop);
506
+ }
507
+ // Helper for tag-only retrieval (Legacy/Virtual)
508
+ async getConnectedNodesFromTags(anchorTags, limit = 50) {
509
+ // ... (Keep existing optimized CTE implementation for tags) ...
510
+ // Re-copying the implementation for completeness of the replacement
511
+ if (anchorTags.length === 0)
512
+ return [];
513
+ const startTime = Date.now();
514
+ const query = `
515
+ WITH anchor_tags AS(
516
+ SELECT DISTINCT unnest($1:: text[]) AS tag
517
+ )
518
+ SELECT
519
+ t.atom_id,
520
+ COUNT(DISTINCT t.tag) AS shared_tag_count,
521
+ a.timestamp,
522
+ a.simhash,
523
+ a.content,
524
+ a.source_path,
525
+ a.tags,
526
+ a.provenance,
527
+ a.type,
528
+ a.compound_id,
529
+ a.start_byte,
530
+ a.end_byte
531
+ FROM tags t
532
+ JOIN anchor_tags at ON t.tag = at.tag
533
+ JOIN atoms a ON t.atom_id = a.id
534
+ GROUP BY
535
+ t.atom_id, a.timestamp, a.simhash,
536
+ a.content, a.source_path, a.tags,
537
+ a.provenance, a.type,
538
+ a.compound_id, a.start_byte, a.end_byte
539
+ ORDER BY shared_tag_count DESC
540
+ LIMIT $2
541
+ `;
542
+ try {
543
+ const result = await sqlWithTimeout(query, [anchorTags, limit], QUERY_TIMEOUT_MS);
544
+ return result.rows.map((row) => ({
545
+ atomId: row.atom_id,
546
+ sharedTags: parseInt(row.shared_tag_count),
547
+ timestamp: parseFloat(row.timestamp),
548
+ simhash: this.safeParseHex(row.simhash),
549
+ content: row.content || '',
550
+ source: row.source_path || '',
551
+ tags: row.tags || [],
552
+ provenance: row.provenance || 'internal',
553
+ type: row.type || 'thought',
554
+ compoundId: row.compound_id || undefined,
555
+ startByte: row.start_byte,
556
+ endByte: row.end_byte,
557
+ gravityScore: 0 // Placeholder
558
+ }));
559
+ }
560
+ catch (e) {
561
+ console.error(`[PhysicsWalker] getConnectedNodesFromTags failed: `, e);
562
+ return [];
563
+ }
564
+ }
565
+ /**
566
+ * Format time drift helper
567
+ */
568
+ formatTimeDrift(deltaMs) {
569
+ const hours = deltaMs / (1000 * 60 * 60);
570
+ if (hours < 1)
571
+ return `${Math.round(deltaMs / (1000 * 60))} minutes ago`;
572
+ if (hours < 24)
573
+ return `${Math.round(hours)} hours ago`;
574
+ const days = hours / 24;
575
+ return `${Math.round(days)} days ago`;
576
+ }
577
+ /**
578
+ * Main Entry Point
579
+ * Applies physics weighting to search results.
580
+ *
581
+ * @param anchorResults - Search results to apply physics weighting to
582
+ * @param threshold - Gravity threshold (default 0.1, lower for high-budget)
583
+ * @param config - Search configuration
584
+ * @param maxChars - Optional budget hint for auto-tuning parameters
585
+ */
586
+ async applyPhysicsWeighting(anchorResults, threshold = 0.1, config, maxChars // NEW: Budget hint for auto-tuning
587
+ ) {
588
+ if (anchorResults.length === 0)
589
+ return [];
590
+ // Auto-tune parameters based on budget for high-recall queries
591
+ let tunedThreshold = threshold;
592
+ let tunedConfig = { ...config };
593
+ if (maxChars && maxChars > 50000) {
594
+ // High-budget query: lower threshold, more candidates
595
+ tunedThreshold = 0.05; // Lower threshold to catch more associations
596
+ tunedConfig.max_per_hop = Math.max(tunedConfig.max_per_hop || 50, 150);
597
+ tunedConfig.walk_radius = Math.max(tunedConfig.walk_radius || 1, 2);
598
+ console.log(`[PhysicsWalker] High-budget mode (${maxChars} chars): threshold=${tunedThreshold}, max_per_hop=${tunedConfig.max_per_hop}`);
599
+ }
600
+ // Pass everything to the SQL engine
601
+ return this.performRadialInflation(anchorResults.map(r => r.id), tunedConfig.walk_radius || 1, tunedConfig.max_per_hop || 50, tunedConfig.temperature || 0.2, tunedThreshold);
602
+ }
603
+ /**
604
+ * Legacy wrapper
605
+ */
606
+ async applyPhysicsWeightingLegacy(anchorResults, threshold = 0.1) {
607
+ const results = await this.applyPhysicsWeighting(anchorResults, threshold);
608
+ return results.map(r => r.result);
609
+ }
610
+ }
611
+ //# sourceMappingURL=physics-tag-walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physics-tag-walker.js","sourceRoot":"","sources":["../../../src/services/search/physics-tag-walker.ts"],"names":[],"mappings":"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"}