@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,388 @@
1
+ /**
2
+ * Explore Service — Illuminate / BFS Graph Traversal
3
+ *
4
+ * Given seed concepts or atom IDs, performs a breadth-first traversal of the
5
+ * STAR co-occurrence graph and returns the reachable subgraph. This is
6
+ * "structural corpus compression": the returned molecule set is the distilled
7
+ * meaning of the seed topic, extracted from the full knowledge graph.
8
+ *
9
+ * Two traversal strategies:
10
+ * 1. Edge-based — follows the `edges` table (source_id / target_id / weight)
11
+ * 2. Tag-based — follows shared tags in the `tags` table (fallback if no edges)
12
+ */
13
+ import { db } from '../../core/db.js';
14
+ import { StructuredLogger } from '../../utils/structured-logger.js';
15
+ /** PGlite WASM has a practical call-stack limit on large parameter arrays
16
+ * AND on large result payloads (result data is marshaled through WASM stack).
17
+ *
18
+ * Three limits:
19
+ * - CHUNK_IDS: INPUT parameter count for ID/tag queries
20
+ * - CHUNK_CONTENT: rows returned when query includes content column (~1KB/row)
21
+ * - CHUNK_RESULT_IDS: rows returned for ID-only queries (large fan-out joins)
22
+ * e.g. 100 hub IN-params → potentially 10K molecule rows — must cap output.
23
+ * ~500 × 20 bytes ≈ 10KB per batch — well below WASM limit.
24
+ */
25
+ const PGLITE_CHUNK_IDS = 100; // IN-param count for lightweight queries
26
+ const PGLITE_CHUNK_CONTENT = 25; // Rows returned when content column included
27
+ const PGLITE_CHUNK_RESULT_IDS = 500; // Rows returned for ID-only fan-out queries
28
+ /** Resolve seed atom IDs from query text via FTS */
29
+ async function resolveSeedsByQuery(query, limit) {
30
+ const terms = query
31
+ .toLowerCase()
32
+ .replace(/[^a-z0-9\s]/g, ' ')
33
+ .trim()
34
+ .split(/\s+/)
35
+ .filter(Boolean)
36
+ .map(t => `${t}:*`)
37
+ .join(' & ');
38
+ if (!terms)
39
+ return [];
40
+ try {
41
+ const result = await db.run(`SELECT id FROM atoms
42
+ WHERE to_tsvector('simple', content) @@ to_tsquery('simple', $1)
43
+ LIMIT $2`, [terms, limit]);
44
+ return result.rows.map(r => r.id);
45
+ }
46
+ catch {
47
+ // Fallback: LIKE search
48
+ const like = `%${query.split(' ')[0]}%`;
49
+ const result = await db.run(`SELECT id FROM atoms WHERE content ILIKE $1 LIMIT $2`, [like, limit]);
50
+ return result.rows.map(r => r.id);
51
+ }
52
+ }
53
+ /** BFS via edges table */
54
+ async function bfsViaEdges(seeds, maxDepth, minWeight, maxNodes) {
55
+ const visited = new Set(seeds);
56
+ let frontier = [...seeds];
57
+ const allEdges = [];
58
+ for (let depth = 0; depth < maxDepth && frontier.length > 0; depth++) {
59
+ // Chunk frontier to stay under PGlite parameter limit
60
+ const chunks = [];
61
+ for (let i = 0; i < frontier.length; i += PGLITE_CHUNK_IDS) {
62
+ chunks.push(frontier.slice(i, i + PGLITE_CHUNK_IDS));
63
+ }
64
+ const nextFrontier = [];
65
+ for (const chunk of chunks) {
66
+ const placeholders = chunk.map((_, i) => `$${i + 2}`).join(', ');
67
+ const result = await db.run(`SELECT source_id, target_id, weight FROM edges
68
+ WHERE (source_id IN (${placeholders}) OR target_id IN (${placeholders}))
69
+ AND weight >= $1`, [minWeight, ...chunk]);
70
+ for (const row of result.rows) {
71
+ const neighbor = visited.has(row.source_id) ? row.target_id : row.source_id;
72
+ if (!visited.has(neighbor)) {
73
+ visited.add(neighbor);
74
+ nextFrontier.push(neighbor);
75
+ }
76
+ allEdges.push({ source: row.source_id, target: row.target_id, weight: row.weight });
77
+ }
78
+ }
79
+ frontier = nextFrontier;
80
+ if (visited.size >= maxNodes)
81
+ break;
82
+ }
83
+ // visited contains both mem_ (compound hubs) and atom_ IDs — only atoms have content
84
+ const atomIds = [...visited].filter(id => id.startsWith('atom_')).slice(0, maxNodes);
85
+ return {
86
+ nodeIds: atomIds,
87
+ edges: allEdges
88
+ };
89
+ }
90
+ /** BFS via shared tags (fallback when edges table is sparse/empty) */
91
+ async function bfsViaTags(seeds, maxDepth, maxNodes) {
92
+ const visited = new Set(seeds);
93
+ let frontier = [...seeds];
94
+ for (let depth = 0; depth < maxDepth && frontier.length > 0; depth++) {
95
+ const chunks = [];
96
+ for (let i = 0; i < frontier.length; i += PGLITE_CHUNK_IDS) {
97
+ chunks.push(frontier.slice(i, i + PGLITE_CHUNK_IDS));
98
+ }
99
+ const nextFrontier = [];
100
+ for (const chunk of chunks) {
101
+ const placeholders = chunk.map((_, i) => `$${i + 1}`).join(', ');
102
+ const result = await db.run(`SELECT DISTINCT t2.atom_id
103
+ FROM tags t1
104
+ JOIN tags t2 ON t1.tag = t2.tag AND t1.atom_id != t2.atom_id
105
+ WHERE t1.atom_id IN (${placeholders})`, chunk);
106
+ for (const row of result.rows) {
107
+ if (!visited.has(row.atom_id)) {
108
+ visited.add(row.atom_id);
109
+ nextFrontier.push(row.atom_id);
110
+ }
111
+ }
112
+ }
113
+ frontier = nextFrontier;
114
+ if (visited.size >= maxNodes)
115
+ break;
116
+ }
117
+ return { nodeIds: [...visited].slice(0, maxNodes) };
118
+ }
119
+ /** Fetch full atom details for a list of IDs — chunked to avoid PGlite param overflow */
120
+ async function fetchNodes(ids) {
121
+ if (ids.length === 0)
122
+ return [];
123
+ const atomRows = [];
124
+ const tagRows = [];
125
+ // Content queries: small chunks (25) — each row ~1KB, ~25KB per query
126
+ for (let i = 0; i < ids.length; i += PGLITE_CHUNK_CONTENT) {
127
+ const chunk = ids.slice(i, i + PGLITE_CHUNK_CONTENT);
128
+ const placeholders = chunk.map((_, j) => `$${j + 1}`).join(', ');
129
+ const aResult = await db.run(`SELECT id, content, source_path, timestamp FROM atoms WHERE id IN (${placeholders})`, chunk);
130
+ atomRows.push(...aResult.rows);
131
+ }
132
+ // Tag queries: larger chunks (100) — each row is just atom_id + tag string
133
+ for (let i = 0; i < ids.length; i += PGLITE_CHUNK_IDS) {
134
+ const chunk = ids.slice(i, i + PGLITE_CHUNK_IDS);
135
+ const placeholders = chunk.map((_, j) => `$${j + 1}`).join(', ');
136
+ const tResult = await db.run(`SELECT atom_id, tag FROM tags WHERE atom_id IN (${placeholders})`, chunk);
137
+ tagRows.push(...tResult.rows);
138
+ }
139
+ const tagMap = new Map();
140
+ for (const row of tagRows) {
141
+ if (!tagMap.has(row.atom_id))
142
+ tagMap.set(row.atom_id, []);
143
+ tagMap.get(row.atom_id).push(row.tag);
144
+ }
145
+ return atomRows.map(r => ({
146
+ id: r.id,
147
+ content: r.content,
148
+ source: r.source_path || '',
149
+ tags: tagMap.get(r.id) || [],
150
+ ...(r.timestamp != null && { timestamp: Number(r.timestamp) })
151
+ }));
152
+ }
153
+ /** Check if the edges table has any rows */
154
+ async function edgesTableHasData() {
155
+ try {
156
+ const result = await db.run(`SELECT 1 FROM edges LIMIT 1`, []);
157
+ return result.rows.length > 0;
158
+ }
159
+ catch {
160
+ return false;
161
+ }
162
+ }
163
+ /**
164
+ * Global mode: return the top N atom IDs by weighted degree centrality.
165
+ * These are the most interconnected nodes in the entire corpus — the spine.
166
+ */
167
+ async function globalTopNodes(seedCount, minWeight) {
168
+ const result = await db.run(`SELECT id, SUM(weight) AS total_weight
169
+ FROM (
170
+ SELECT source_id AS id, weight FROM edges WHERE weight >= $1
171
+ UNION ALL
172
+ SELECT target_id AS id, weight FROM edges WHERE weight >= $1
173
+ ) all_edges
174
+ GROUP BY id
175
+ ORDER BY total_weight DESC
176
+ LIMIT $2`, [minWeight, seedCount]);
177
+ return result.rows.map(r => r.id);
178
+ }
179
+ /** Estimate total corpus char size for auto_budget calculation */
180
+ async function estimateCorpusChars() {
181
+ const result = await db.run(`SELECT COUNT(*) AS atom_count, AVG(LENGTH(content)) AS avg_len FROM atoms`, []);
182
+ const row = result.rows[0];
183
+ return Math.round((row.atom_count ?? 0) * (row.avg_len ?? 0));
184
+ }
185
+ /**
186
+ * Rank nodes by their subgraph degree (sum of edge weights within result set).
187
+ * Returns node IDs ordered most-connected first.
188
+ */
189
+ function rankNodesBySubgraphDegree(nodeIds, edges) {
190
+ // Edges connect mem_ hubs → atom_ nodes; score each atom by how many edges touch it
191
+ const score = new Map();
192
+ for (const id of nodeIds)
193
+ score.set(id, 0);
194
+ for (const e of edges) {
195
+ // source may be mem_ or atom_; target is typically atom_
196
+ if (score.has(e.source))
197
+ score.set(e.source, score.get(e.source) + e.weight);
198
+ if (score.has(e.target))
199
+ score.set(e.target, score.get(e.target) + e.weight);
200
+ }
201
+ return [...score.entries()]
202
+ .sort((a, b) => b[1] - a[1])
203
+ .map(([id]) => id);
204
+ }
205
+ /** For global illuminate: fetch content atoms from the top-degree compound hubs.
206
+ *
207
+ * Content atoms have a compound_id pointing to their parent mem_ compound.
208
+ * The most-connected compounds (highest weighted degree) contain the most
209
+ * cross-referenced content in the corpus — their atoms are the corpus narrative.
210
+ *
211
+ * Atoms are returned in compound rank order (most-connected compound first),
212
+ * then by start_byte within each compound (document reading order).
213
+ *
214
+ * NOTE: the tags table only indexes tag stub atoms (source_path='atom_source').
215
+ * Content atom tags live in atoms.tags (JSON column). The compound_id link is
216
+ * the reliable path to content from a hub compound.
217
+ */
218
+ async function fetchContentAtomsByHubs(hubIds, // mem_ compound IDs ordered by importance (most connected first)
219
+ maxCount) {
220
+ if (hubIds.length === 0)
221
+ return [];
222
+ const allIds = [];
223
+ for (let i = 0; i < hubIds.length && allIds.length < maxCount; i += PGLITE_CHUNK_IDS) {
224
+ const chunk = hubIds.slice(i, i + PGLITE_CHUNK_IDS);
225
+ const placeholders = chunk.map((_, j) => `$${j + 1}`).join(', ');
226
+ const remaining = maxCount - allIds.length;
227
+ const result = await db.run(`SELECT id FROM atoms
228
+ WHERE compound_id IN (${placeholders})
229
+ AND source_path != 'atom_source'
230
+ AND id NOT LIKE 'mem_%'
231
+ ORDER BY start_byte
232
+ LIMIT ${Math.min(remaining, PGLITE_CHUNK_RESULT_IDS)}`, chunk);
233
+ allIds.push(...result.rows.map((r) => r.id));
234
+ }
235
+ return allIds;
236
+ }
237
+ export async function exploreMemory(req) {
238
+ const maxDepth = Math.min(req.max_depth ?? 2, 4);
239
+ const minWeight = req.min_weight ?? 0.1;
240
+ const limitSeeds = req.seed.limit_seeds ?? 5;
241
+ const seedCount = req.seed.seed_count ?? 10;
242
+ const format = req.format ?? 'flat';
243
+ // Budget-aware max_nodes: if a char budget is active, allow up to 10k nodes
244
+ // (trimming happens after fetch). Otherwise honour explicit max_nodes cap.
245
+ const hasBudget = req.max_chars !== undefined || req.auto_budget;
246
+ const maxNodes = hasBudget
247
+ ? Math.min(req.max_nodes ?? 10_000, 10_000)
248
+ : Math.min(req.max_nodes ?? 50, 200);
249
+ // 1. Resolve seeds
250
+ let seedIds = [];
251
+ if (req.seed.global) {
252
+ // Global mode: top-degree nodes, no query needed
253
+ seedIds = await globalTopNodes(seedCount, minWeight);
254
+ }
255
+ else {
256
+ if (req.seed.atom_ids?.length) {
257
+ seedIds = req.seed.atom_ids;
258
+ }
259
+ if (req.seed.query && seedIds.length < limitSeeds) {
260
+ const fromQuery = await resolveSeedsByQuery(req.seed.query, limitSeeds - seedIds.length);
261
+ seedIds = [...new Set([...seedIds, ...fromQuery])];
262
+ }
263
+ }
264
+ if (seedIds.length === 0) {
265
+ StructuredLogger.warn('EXPLORE_NO_SEEDS', { query: req.seed.query, global: req.seed.global });
266
+ return {
267
+ nodes: [],
268
+ stats: { nodes_count: 0, seed_nodes: 0, max_depth_achieved: 0, strategy: 'none' }
269
+ };
270
+ }
271
+ const actualSeedCount = seedIds.length;
272
+ StructuredLogger.info('EXPLORE_START', { seeds: actualSeedCount, max_depth: maxDepth, max_nodes: maxNodes });
273
+ // 2. BFS traversal — prefer edges table, fall back to tag-based
274
+ let nodeIds;
275
+ let edges = [];
276
+ let strategy;
277
+ if (req.seed.global) {
278
+ // Illuminate mode: skip edge-BFS entirely.
279
+ // Get a larger pool of top-degree compound hubs (seed_count × 20, max 500),
280
+ // then pull their content atoms directly via compound_id.
281
+ // Hub order = weighted degree rank → atoms from most-connected compounds come first.
282
+ const hubCount = Math.min((req.seed.seed_count ?? 10) * 20, 500);
283
+ const hubIds = await globalTopNodes(hubCount, minWeight);
284
+ const contentIds = await fetchContentAtomsByHubs(hubIds, maxNodes);
285
+ StructuredLogger.info('EXPLORE_ILLUMINATE_CONTENT', {
286
+ hubs_queried: hubIds.length,
287
+ content_atoms: contentIds.length
288
+ });
289
+ nodeIds = contentIds;
290
+ strategy = 'illuminate-global';
291
+ }
292
+ else {
293
+ const hasEdges = await edgesTableHasData();
294
+ if (hasEdges) {
295
+ const result = await bfsViaEdges(seedIds, maxDepth, minWeight, maxNodes);
296
+ nodeIds = result.nodeIds;
297
+ edges = result.edges;
298
+ strategy = 'edge-bfs';
299
+ }
300
+ else {
301
+ const result = await bfsViaTags(seedIds, maxDepth, maxNodes);
302
+ nodeIds = result.nodeIds;
303
+ strategy = 'tag-bfs';
304
+ }
305
+ }
306
+ // 4. Resolve char budget
307
+ let charBudget;
308
+ if (req.auto_budget) {
309
+ const corpusChars = await estimateCorpusChars();
310
+ const ratio = req.compression_ratio ?? 1000;
311
+ charBudget = Math.max(Math.round(corpusChars / ratio), 50_000); // floor 50k chars
312
+ StructuredLogger.info('EXPLORE_AUTO_BUDGET', { corpus_chars: corpusChars, ratio, budget: charBudget });
313
+ }
314
+ else if (req.max_chars !== undefined) {
315
+ charBudget = req.max_chars;
316
+ }
317
+ // 5. Fetch node details — then trim to budget by importance
318
+ let finalNodeIds = nodeIds;
319
+ if (charBudget !== undefined) {
320
+ // illuminate-global: nodeIds already ranked by tag centrality; just trim by char budget
321
+ // edge-bfs: rank by subgraph degree first
322
+ const ranked = edges.length > 0
323
+ ? rankNodesBySubgraphDegree(nodeIds, edges)
324
+ : nodeIds; // already ranked
325
+ const trimmed = [];
326
+ let usedChars = 0;
327
+ const allNodes = await fetchNodes(ranked);
328
+ for (const node of allNodes) {
329
+ if (usedChars + node.content.length > charBudget)
330
+ break;
331
+ trimmed.push(node.id);
332
+ usedChars += node.content.length;
333
+ }
334
+ finalNodeIds = trimmed;
335
+ StructuredLogger.info('EXPLORE_BUDGET_TRIM', {
336
+ before: nodeIds.length,
337
+ after: trimmed.length,
338
+ chars_used: usedChars,
339
+ budget: charBudget
340
+ });
341
+ }
342
+ const nodes = await fetchNodes(finalNodeIds);
343
+ // For illuminate-global: assign hub-rank score (1.0 = most central, ~0 = least).
344
+ // finalNodeIds is already ordered by centrality; map position → score.
345
+ let scoredNodes;
346
+ if (req.seed.global) {
347
+ const total = finalNodeIds.length;
348
+ const rankMap = new Map();
349
+ finalNodeIds.forEach((id, i) => rankMap.set(id, parseFloat(((total - i) / total).toFixed(4))));
350
+ scoredNodes = nodes.map(n => ({ ...n, score: rankMap.get(n.id) ?? 0 }));
351
+ // Re-sort by score descending so output order matches centrality rank
352
+ scoredNodes.sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
353
+ }
354
+ else {
355
+ scoredNodes = nodes;
356
+ }
357
+ StructuredLogger.info('EXPLORE_DONE', { nodes: scoredNodes.length, edges: edges.length, strategy });
358
+ const charsUsed = scoredNodes.reduce((sum, n) => sum + n.content.length, 0);
359
+ if (format === 'graph') {
360
+ const nodeSet = new Set(finalNodeIds);
361
+ const filteredEdges = edges.filter(e => nodeSet.has(e.source) && nodeSet.has(e.target));
362
+ return {
363
+ nodes: scoredNodes,
364
+ edges: filteredEdges,
365
+ stats: {
366
+ nodes_count: scoredNodes.length,
367
+ edges_count: filteredEdges.length,
368
+ seed_nodes: actualSeedCount,
369
+ max_depth_achieved: maxDepth,
370
+ strategy,
371
+ chars_used: charsUsed,
372
+ ...(charBudget !== undefined && { char_budget: charBudget })
373
+ }
374
+ };
375
+ }
376
+ return {
377
+ nodes: scoredNodes,
378
+ stats: {
379
+ nodes_count: scoredNodes.length,
380
+ seed_nodes: actualSeedCount,
381
+ max_depth_achieved: maxDepth,
382
+ strategy,
383
+ chars_used: charsUsed,
384
+ ...(charBudget !== undefined && { char_budget: charBudget })
385
+ }
386
+ };
387
+ }
388
+ //# sourceMappingURL=explore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore.js","sourceRoot":"","sources":["../../../src/services/search/explore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Graph-Context Serializer
3
+ *
4
+ * Transforms the Physics Engine output into a dense, token-efficient format
5
+ * that the Local LLM can read as structured context.
6
+ *
7
+ * Design Goal: HIGH SIGNAL-TO-TOKEN RATIO.
8
+ * The LLM doesn't need pretty UI — it needs dense, structured signal.
9
+ * Every byte must carry meaning.
10
+ *
11
+ * Two output modes:
12
+ * 1. serializeForLLM() — Produces the compact [CONTEXT_GRAPH] text block.
13
+ * This is what gets injected into the LLM's prompt.
14
+ * 2. serializeToJSON() — Produces the full ContextPackage JSON.
15
+ * Used for debugging, API responses, and UI rendering.
16
+ */
17
+ import type { ContextPackage, UserContext, QueryIntent } from '../../types/context-protocol.js';
18
+ import { SearchResult } from './search.js';
19
+ import { PhysicsResult } from './physics-tag-walker.js';
20
+ /**
21
+ * Detect the likely intent of a query without using the LLM.
22
+ */
23
+ export declare function detectIntent(query: string): QueryIntent;
24
+ /**
25
+ * Serialize a ContextPackage into the compact [CONTEXT_GRAPH] text block.
26
+ *
27
+ * v2 Format — Hierarchical Source Grouping with Taxonomy Hoisting:
28
+ *
29
+ * [CONTEXT_GRAPH_START]
30
+ * user: @name | state: current_state | intent: factual | terms: t1, t2
31
+ *
32
+ * // DIRECT HITS
33
+ * [SRC: path/to/file.ext | max: 1.00 | N nodes]
34
+ * taxonomy: #tag1, #tag2, #tag3, ... ← declared ONCE per source
35
+ * [N:id] (freq:N) [loc] "content"
36
+ * [N:id] (freq:N) [loc] "content" | +tags: #unique1
37
+ *
38
+ * // ASSOCIATED MEMORIES
39
+ * [SRC: path/to/other.ext | max: 0.82 | N nodes]
40
+ * taxonomy: #sharedA, #sharedB
41
+ * [N:id] [W:0.82|WALK] [loc] "content" -> [N:anchor] (reason)
42
+ *
43
+ * [CONTEXT_GRAPH_END]
44
+ *
45
+ * Token savings: ~600 tokens/node eliminated by hoisting shared tags once per source.
46
+ */
47
+ export declare function serializeForLLM(pkg: ContextPackage, charBudget?: number): string;
48
+ export interface AssembleOptions {
49
+ /** User context (who is asking) */
50
+ user: UserContext;
51
+ /** The raw query string */
52
+ query: string;
53
+ /** NLP-extracted key terms */
54
+ keyTerms: string[];
55
+ /** Explicit scope tags */
56
+ scopeTags?: string[];
57
+ /** Direct search results (Planets) */
58
+ anchors: SearchResult[];
59
+ /** Physics walker results (Moons) — optional, may be empty */
60
+ walkerResults?: PhysicsResult[];
61
+ /** Legacy walker results (SearchResult[]) for backward compat */
62
+ legacyWalkerResults?: SearchResult[];
63
+ /** Character budget for the serialized output */
64
+ charBudget?: number;
65
+ }
66
+ /**
67
+ * Assemble the full ContextPackage from search results.
68
+ * This is the main entry point for the serializer.
69
+ */
70
+ export declare function assembleContextPackage(opts: AssembleOptions): ContextPackage;
71
+ /**
72
+ * One-shot convenience: assemble + serialize for LLM consumption.
73
+ * Returns the compact text block ready to inject into a prompt.
74
+ */
75
+ export declare function assembleAndSerialize(opts: AssembleOptions): string;
76
+ //# sourceMappingURL=graph-context-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-context-serializer.d.ts","sourceRoot":"","sources":["../../../src/services/search/graph-context-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,cAAc,EAGd,WAAW,EAEX,WAAW,EAIZ,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAWxD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAsBvD;AA0LD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAmFhF;AAwDD,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sCAAsC;IACtC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAChC,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC;IACrC,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAgE5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAclE"}