@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,400 @@
1
+ // engine/src/index.ts
2
+ import express from "express";
3
+ import cors from "cors";
4
+ import rateLimit from "express-rate-limit";
5
+ import path from "path";
6
+ import { fileURLToPath } from "url";
7
+ import { existsSync, rmSync } from "fs";
8
+ // Fix module load error by using explicit relative path
9
+ import { db } from "./core/db.js";
10
+ import { config } from "./config/index.js";
11
+ import { MODELS_DIR, PROJECT_ROOT } from "./config/paths.js";
12
+ import { apiKeyAuth } from "./middleware/auth.js";
13
+ import { pathManager } from "./utils/path-manager.js";
14
+ import { StructuredLogger } from "./utils/structured-logger.js";
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = path.dirname(__filename);
17
+ const app = express();
18
+ const PORT = config.PORT;
19
+ // Security Fix: Limit JSON body size to prevent DoS via large payloads
20
+ // Use configured file size limit + 50% buffer for JSON overhead (base64/escaping)
21
+ const jsonLimit = Math.ceil((config.LIMITS?.MAX_FILE_SIZE_BYTES || 10 * 1024 * 1024) * 1.5);
22
+ app.use(cors());
23
+ app.use(express.json({ limit: jsonLimit }));
24
+ app.use(express.urlencoded({ extended: true }));
25
+ // HTTP Request Logging Middleware
26
+ app.use((req, res, next) => {
27
+ const start = Date.now();
28
+ res.on('finish', () => {
29
+ const duration = Date.now() - start;
30
+ const status = res.statusCode;
31
+ // Skip logging for health checks and 304 (Not Modified) responses
32
+ // Health checks poll every minute and create log spam
33
+ if (status === 304 || req.path === '/health') {
34
+ return;
35
+ }
36
+ StructuredLogger.info('HTTP_REQUEST', {
37
+ method: req.method,
38
+ path: req.path,
39
+ status,
40
+ duration_ms: duration
41
+ });
42
+ // Mark activity for idle manager (skip static files)
43
+ if (!req.path.startsWith('/static') && !req.path.startsWith('/chat')) {
44
+ idleManager.markActive(`${req.method} ${req.path}`);
45
+ }
46
+ });
47
+ next();
48
+ });
49
+ // Error handler with proper type handling
50
+ // Global state tracker
51
+ let databaseReady = false;
52
+ // Global 503 Guard for API routes
53
+ app.use('/v1', (req, res, next) => {
54
+ if (!databaseReady) {
55
+ return res.status(503).json({
56
+ error: "Service temporarily unavailable",
57
+ message: "Database initializing, please wait..."
58
+ });
59
+ }
60
+ next();
61
+ });
62
+ // API Key Authentication for /v1 routes
63
+ app.use('/v1', apiKeyAuth);
64
+ if (config.API_KEY && config.API_KEY !== 'ece-secret-key') {
65
+ StructuredLogger.info('AUTH_CONFIG', { api_key_enabled: true });
66
+ }
67
+ else {
68
+ StructuredLogger.info('AUTH_CONFIG', { api_key_enabled: false });
69
+ }
70
+ // Rate limiting — applied after auth so authenticated clients share the same window
71
+ // General limit: 100 requests / minute per IP
72
+ const apiLimiter = rateLimit({
73
+ windowMs: 60_000,
74
+ max: 100,
75
+ standardHeaders: true,
76
+ legacyHeaders: false,
77
+ message: { error: 'Too many requests', message: 'Rate limit exceeded. Try again in a minute.' }
78
+ });
79
+ // Stricter limit for expensive write operations: 20 / minute per IP
80
+ const ingestLimiter = rateLimit({
81
+ windowMs: 60_000,
82
+ max: 20,
83
+ standardHeaders: true,
84
+ legacyHeaders: false,
85
+ message: { error: 'Rate limit exceeded', message: 'Ingest rate limit exceeded. Try again in a minute.' }
86
+ });
87
+ app.use('/v1', apiLimiter);
88
+ app.use('/v1/memory/ingest', ingestLimiter);
89
+ app.use('/v1/watchdog/ingest', ingestLimiter);
90
+ // Set up static file serving immediately so UI is accessible
91
+ StructuredLogger.info('UI_SETUP', { static_path: '/static' });
92
+ app.use("/static", express.static(path.join(__dirname, "../dist"), {
93
+ setHeaders: (res, path) => {
94
+ // Only log debug-level for static files to avoid spam
95
+ StructuredLogger.silly('STATIC_FILE', { path });
96
+ }
97
+ }));
98
+ // Serve UI from engine/public (simplified single-file UI)
99
+ // Fallback to external anchor-os UI if running in full system mode
100
+ const internalFrontendDist = path.join(__dirname, "../public");
101
+ const externalFrontendDist = path.join(__dirname, "../../../anchor-os/packages/anchor-ui/dist");
102
+ if (existsSync(externalFrontendDist)) {
103
+ StructuredLogger.info('UI_SOURCE', { source: 'external', path: externalFrontendDist });
104
+ app.use(express.static(externalFrontendDist, {
105
+ setHeaders: (res, path) => {
106
+ StructuredLogger.silly('UI_FILE_SERVED', { path, source: 'external' });
107
+ }
108
+ }));
109
+ app.get("*", (req, res, next) => {
110
+ if (req.path.startsWith("/v1") || req.path.startsWith("/health") || req.path.startsWith("/monitoring"))
111
+ return next();
112
+ res.sendFile(path.join(externalFrontendDist, "index.html"));
113
+ });
114
+ }
115
+ else {
116
+ StructuredLogger.info('UI_SOURCE', { source: 'internal', path: internalFrontendDist });
117
+ app.use(express.static(internalFrontendDist, {
118
+ setHeaders: (res, path) => {
119
+ StructuredLogger.silly('UI_FILE_SERVED', { path, source: 'internal' });
120
+ }
121
+ }));
122
+ app.get("*", (req, res, next) => {
123
+ if (req.path.startsWith("/v1") || req.path.startsWith("/health") || req.path.startsWith("/monitoring"))
124
+ return next();
125
+ res.sendFile(path.join(internalFrontendDist, "index.html"));
126
+ });
127
+ }
128
+ // Add explicit /chat route logging
129
+ app.get('/chat', (req, res, next) => {
130
+ StructuredLogger.info('CHAT_PAGE_REQUEST', { ip: req.ip });
131
+ next();
132
+ });
133
+ // Set up a health route that works in both initialized and uninitialized states
134
+ app.get('/health', async (_req, res) => {
135
+ if (!databaseReady) {
136
+ return res.status(200).json({
137
+ status: "starting",
138
+ timestamp: new Date().toISOString(),
139
+ message: "Engine is starting up, database not yet initialized"
140
+ });
141
+ }
142
+ // When DB is ready, perform full health check
143
+ try {
144
+ // Test database connectivity
145
+ const result = await db.run('SELECT 1 as test');
146
+ if (result && result.rows && result.rows.length > 0) {
147
+ res.status(200).json({
148
+ status: "healthy",
149
+ timestamp: new Date().toISOString(),
150
+ message: "Anchor Context Engine is running and database is responsive"
151
+ });
152
+ }
153
+ else {
154
+ res.status(503).json({
155
+ status: "degraded",
156
+ timestamp: new Date().toISOString(),
157
+ message: "Engine is running but database query returned unexpected results"
158
+ });
159
+ }
160
+ }
161
+ catch (dbError) {
162
+ res.status(503).json({
163
+ status: "unhealthy",
164
+ timestamp: new Date().toISOString(),
165
+ message: "Database is not responding properly",
166
+ error: dbError.message
167
+ });
168
+ }
169
+ });
170
+ // Set up API routes that can handle uninitialized state
171
+ // Use more specific patterns to avoid conflicts with health route
172
+ // Model Listing Endpoint (for UI)
173
+ app.get('/v1/models', (req, res) => {
174
+ try {
175
+ // Use the robust path from configuration (imported statically)
176
+ let modelPath = config.LLM_MODEL_DIR || MODELS_DIR;
177
+ // If config has a relative path, resolve it against project root
178
+ if (config.LLM_MODEL_DIR && !path.isAbsolute(config.LLM_MODEL_DIR)) {
179
+ // If it starts with ./models, it might be relative to project root
180
+ // MODELS_DIR is already absolute path to project_root/models
181
+ if (config.LLM_MODEL_DIR === './models' || config.LLM_MODEL_DIR === 'models') {
182
+ modelPath = MODELS_DIR;
183
+ }
184
+ else {
185
+ modelPath = path.resolve(PROJECT_ROOT, config.LLM_MODEL_DIR);
186
+ }
187
+ }
188
+ if (!existsSync(modelPath)) {
189
+ return res.json({ object: 'list', data: [] });
190
+ }
191
+ // Read directory
192
+ import('fs').then(fsModule => {
193
+ const files = fsModule.readdirSync(modelPath).filter(file => file.endsWith('.gguf'));
194
+ const models = files.map(file => ({
195
+ id: file,
196
+ object: 'model',
197
+ created: Math.floor(Date.now() / 1000),
198
+ owned_by: 'anchor-os'
199
+ }));
200
+ res.json({ object: 'list', data: models });
201
+ });
202
+ }
203
+ catch (error) {
204
+ console.error('[Engine] Error listing models:', error);
205
+ res.status(500).json({ error: error.message });
206
+ }
207
+ });
208
+ // Set up the catch-all route for UI (should be LAST)
209
+ // Catch-all moved to end of startServer to avoid intercepting dynamic routes
210
+ async function startServer() {
211
+ try {
212
+ console.time("⏱️ Startup Time");
213
+ console.log("Initializing Anchor Context Engine...");
214
+ // Start the server immediately so health checks pass
215
+ app.listen(PORT, config.HOST, () => {
216
+ console.log(`Anchor Context Engine running on ${config.HOST}:${PORT}`);
217
+ console.log(`Health check available at http://${config.HOST}:${PORT}/health`);
218
+ });
219
+ // Initialize database in the background after server starts
220
+ console.log("Initializing database in the background...");
221
+ await db.init();
222
+ databaseReady = true;
223
+ console.log("Database initialized successfully");
224
+ // Cleanup blacklisted tags from database
225
+ console.log('[Startup] Cleaning up blacklisted tags...');
226
+ const { cleanupBlacklistedTags } = await import('./utils/tag-cleanup.js');
227
+ await cleanupBlacklistedTags();
228
+ // Initialize Vector Service
229
+ const { vector } = await import("./core/vector.js");
230
+ await vector.init();
231
+ console.log("Setting up full routes after database initialization...");
232
+ // Now that DB is ready, import and set up full routes
233
+ const { setupRoutes } = await import("./routes/api.js");
234
+ const { setupHealthRoutes } = await import("./routes/health.js");
235
+ const { monitoringRouter } = await import("./routes/monitoring.js");
236
+ // Set up all API routes (delegates to v1 modules including system + settings)
237
+ setupRoutes(app);
238
+ // Set up full health routes (this will replace the basic one)
239
+ setupHealthRoutes(app);
240
+ // Set up monitoring routes
241
+ app.use('/monitoring', monitoringRouter);
242
+ console.log("Full routes set up, server is ready for all requests");
243
+ console.timeEnd("⏱️ Startup Time");
244
+ // Start other services after database is ready
245
+ console.log('[Services] Starting child services via ProcessManager...');
246
+ // Note: Nanobot is now started by the unified launcher (start.bat/start.sh)
247
+ // to prevent duplicate instances. ProcessManager is disabled for nanobot.
248
+ console.log('[Services] Nanobot skipped (started by launcher)');
249
+ // Watchdog is now controlled via UI settings - not auto-started
250
+ console.log('[Services] Watchdog disabled - start from /settings UI');
251
+ // Dreamer service disabled - optimized for STAR algorithm startup (v4.0)
252
+ console.log('[Services] All service start commands queued');
253
+ // ============================================
254
+ // Standard 110: Regenerate Derived Data
255
+ // ============================================
256
+ // On startup: regenerate all derived data from inbox/ (source of truth)
257
+ // 1. Create mirror from inbox/ files
258
+ console.log('[Startup] Regenerating mirrored_brain/ from inbox/ (Standard 110)...');
259
+ const { createMirror } = await import('./services/mirror/mirror.js');
260
+ await createMirror();
261
+ // 2. Generate synonym rings automatically (Standard 111)
262
+ console.log('[Startup] Auto-generating synonym rings from data (Standard 111)...');
263
+ try {
264
+ const { AutoSynonymGenerator } = await import('./services/synonyms/auto-synonym-generator.js');
265
+ const generator = new AutoSynonymGenerator();
266
+ // Run synonym generation in background with timeout (don't block startup)
267
+ console.log('[Startup] Starting synonym generation in background (may take several minutes)...');
268
+ // Set timeout for synonym generation (5 minutes max)
269
+ const SYNONYM_TIMEOUT = 5 * 60 * 1000; // 5 minutes
270
+ const synonymPromise = Promise.race([
271
+ generator.generateSynonymRings(),
272
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Synonym generation timeout after 5 minutes')), SYNONYM_TIMEOUT))
273
+ ]);
274
+ synonymPromise.then(async (synonyms) => {
275
+ // Save to auto-generated path (cleared on shutdown)
276
+ const synonymPath = path.join(pathManager.getNotebookDir(), 'synonym-ring-auto.json');
277
+ await generator.saveSynonymRings(synonyms, synonymPath);
278
+ console.log(`[Startup] ✅ Synonym rings generated and saved to ${synonymPath}`);
279
+ }).catch((error) => {
280
+ console.warn(`[Startup] ⚠️ Synonym generation failed or timed out: ${error.message}`);
281
+ console.warn('[Startup] Will retry on next startup or run manually with: pnpm run generate-synonyms');
282
+ });
283
+ // Don't wait for synonym generation to complete - system is ready
284
+ console.log('[Startup] System ready. Synonym generation running in background...');
285
+ }
286
+ catch (error) {
287
+ console.warn('[Startup] Synonym generation failed:', error.message);
288
+ console.warn('[Startup] Search will work without synonym expansion.');
289
+ }
290
+ console.log('[Startup] All derived data regenerated. System ready.');
291
+ }
292
+ catch (error) {
293
+ console.error("Failed to start Anchor Context Engine:", error);
294
+ process.exit(1);
295
+ }
296
+ }
297
+ // Windows graceful shutdown fix
298
+ process.on("SIGINT", async () => {
299
+ // Safety net: force exit if cleanup hangs (e.g., db.close deadlock)
300
+ const forceExitTimer = setTimeout(() => {
301
+ console.error('[Shutdown] ⚠ Cleanup timed out after 10s — forcing exit');
302
+ process.exit(1);
303
+ }, 10_000);
304
+ forceExitTimer.unref();
305
+ try {
306
+ console.log(`[Shutdown] Starting graceful shutdown...`);
307
+ const { ProcessManager } = await import("./utils/process-manager.js");
308
+ ProcessManager.getInstance().stopAll();
309
+ // Close database connection first (releases file locks)
310
+ console.log(`[Shutdown] Closing database connection...`);
311
+ await db.close();
312
+ // Standard 110: Ephemeral Index Architecture
313
+ // Clear ALL derived data on shutdown - only inbox/ is source of truth
314
+ // 1. Wipe PGlite Database (index/cache)
315
+ const dbPath = process.env.PGLITE_DB_PATH || pathManager.getDatabasePath();
316
+ if (existsSync(dbPath)) {
317
+ console.log(`[Shutdown] Wiping PGlite database (rebuildable index)...`);
318
+ try {
319
+ rmSync(dbPath, { recursive: true, force: true });
320
+ console.log(`[Shutdown] ✓ PGlite database wiped.`);
321
+ }
322
+ catch (e) {
323
+ console.warn(`[Shutdown] ⚠ Could not wipe PGlite database: ${e.message}`);
324
+ console.warn(`[Shutdown] Will be wiped on next startup`);
325
+ }
326
+ }
327
+ // 2. Wipe SQLite3 context.db (anchor-core FFI database)
328
+ const contextDbPath = path.join(pathManager.getDatabaseDir(), 'context.db');
329
+ if (existsSync(contextDbPath)) {
330
+ console.log(`[Shutdown] Wiping SQLite3 context.db (anchor-core FFI)...`);
331
+ try {
332
+ rmSync(contextDbPath, { force: true });
333
+ console.log(`[Shutdown] ✓ SQLite3 context.db wiped.`);
334
+ }
335
+ catch (e) {
336
+ console.warn(`[Shutdown] ⚠ Could not wipe SQLite3 context.db: ${e.message}`);
337
+ console.warn(`[Shutdown] Will be wiped on next startup`);
338
+ }
339
+ }
340
+ // 3. Clear mirrored_brain/ (extracted from inbox/, regenerated on start)
341
+ const { MIRRORED_BRAIN_PATH } = await import('./services/mirror/mirror.js');
342
+ if (existsSync(MIRRORED_BRAIN_PATH)) {
343
+ console.log(`[Shutdown] Clearing mirrored_brain/ (regenerated from inbox/ on start)...`);
344
+ try {
345
+ rmSync(MIRRORED_BRAIN_PATH, { recursive: true, force: true });
346
+ console.log(`[Shutdown] ✓ mirrored_brain/ cleared.`);
347
+ }
348
+ catch (e) {
349
+ console.warn(`[Shutdown] ⚠ Could not clear mirrored_brain/: ${e.message}`);
350
+ }
351
+ }
352
+ // 4. Clear Auto-Generated Synonym Rings (derived from data, regenerated on start)
353
+ const synonymPath = path.join(pathManager.getNotebookDir(), 'synonym-ring-auto.json');
354
+ if (existsSync(synonymPath)) {
355
+ console.log(`[Shutdown] Clearing auto-generated synonym rings...`);
356
+ try {
357
+ rmSync(synonymPath, { force: true });
358
+ console.log(`[Shutdown] ✓ Synonym rings cleared.`);
359
+ }
360
+ catch (e) {
361
+ console.warn(`[Shutdown] ⚠ Could not clear synonym rings: ${e.message}`);
362
+ }
363
+ }
364
+ // 5. Clear Tag Audit Cache (derived from tags, regenerated on demand)
365
+ const tagAuditPath = path.join(pathManager.getNotebookDir(), 'tag-audit-cache.json');
366
+ if (existsSync(tagAuditPath)) {
367
+ console.log(`[Shutdown] Clearing tag audit cache...`);
368
+ try {
369
+ rmSync(tagAuditPath, { force: true });
370
+ console.log(`[Shutdown] ✓ Tag audit cache cleared.`);
371
+ }
372
+ catch (e) {
373
+ console.warn(`[Shutdown] ⚠ Could not clear tag audit cache: ${e.message}`);
374
+ }
375
+ }
376
+ console.log(`[Shutdown] ✓ Cleanup complete.`);
377
+ console.log(`[Shutdown] Source of truth preserved: inbox/ + external-inbox/`);
378
+ console.log(`[Shutdown] On restart: mirror + index + synonyms regenerated from inbox/`);
379
+ process.exit(0);
380
+ }
381
+ catch (e) {
382
+ console.error('[Shutdown] Error during cleanup:', e);
383
+ process.exit(1);
384
+ }
385
+ });
386
+ // Memory warning event handler
387
+ import { resourceManager } from './utils/resource-manager.js';
388
+ process.on('warning', (warning) => {
389
+ console.warn('Process warning:', warning.name, warning.message);
390
+ if (warning.name.includes('Memory') || warning.message.includes('heap')) {
391
+ console.log('Performing memory optimization due to warning...');
392
+ resourceManager.optimizeMemory();
393
+ }
394
+ });
395
+ // Initialize Idle Manager for automatic memory cleanup during inactivity
396
+ import { idleManager } from './services/idle-manager.js';
397
+ console.log('[IdleManager] Service initialized');
398
+ startServer();
399
+ export { app };
400
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * API Key Authentication Middleware for Anchor Engine
3
+ *
4
+ * Validates Bearer token from Authorization header against the configured API key.
5
+ * When no API key is configured (empty string), authentication is disabled (open access).
6
+ */
7
+ import { Request, Response, NextFunction } from 'express';
8
+ /**
9
+ * Express middleware that validates API key from Authorization header.
10
+ * Reads the key from config.API_KEY (sourced from user_settings.json → server.api_key).
11
+ * If API_KEY is the default placeholder "ece-secret-key" or empty, auth is disabled.
12
+ */
13
+ export declare function apiKeyAuth(req: Request, res: Response, next: NextFunction): void;
14
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAqChF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * API Key Authentication Middleware for Anchor Engine
3
+ *
4
+ * Validates Bearer token from Authorization header against the configured API key.
5
+ * When no API key is configured (empty string), authentication is disabled (open access).
6
+ */
7
+ import { config } from '../config/index.js';
8
+ /**
9
+ * Express middleware that validates API key from Authorization header.
10
+ * Reads the key from config.API_KEY (sourced from user_settings.json → server.api_key).
11
+ * If API_KEY is the default placeholder "ece-secret-key" or empty, auth is disabled.
12
+ */
13
+ export function apiKeyAuth(req, res, next) {
14
+ const apiKey = config.API_KEY;
15
+ // If no meaningful API key configured, skip authentication (open access)
16
+ if (!apiKey || apiKey === 'ece-secret-key') {
17
+ return next();
18
+ }
19
+ // Allow health endpoints without auth
20
+ if (req.path === '/health' || req.path.startsWith('/health/')) {
21
+ return next();
22
+ }
23
+ const authHeader = req.headers['authorization'];
24
+ if (!authHeader) {
25
+ res.status(401).json({
26
+ error: 'Authentication required',
27
+ message: 'Provide an API key via Authorization: Bearer <key>'
28
+ });
29
+ return;
30
+ }
31
+ // Support "Bearer <key>" format
32
+ const token = authHeader.startsWith('Bearer ')
33
+ ? authHeader.slice(7).trim()
34
+ : authHeader.trim();
35
+ if (token !== apiKey) {
36
+ res.status(403).json({
37
+ error: 'Invalid API key',
38
+ message: 'The provided API key is not valid'
39
+ });
40
+ return;
41
+ }
42
+ next();
43
+ }
44
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,yEAAyE;IACzE,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAC3C,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,sCAAsC;IACtC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,oDAAoD;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;QAC5C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5B,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAEtB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,mCAAmC;SAC7C,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Request Tracing Middleware for Anchor Engine
3
+ *
4
+ * Implements comprehensive request tracing for debugging and monitoring
5
+ */
6
+ import { Request, Response, NextFunction } from 'express';
7
+ declare global {
8
+ namespace Express {
9
+ interface Request {
10
+ traceId?: string;
11
+ traceInfo?: TraceInfo;
12
+ }
13
+ }
14
+ }
15
+ export interface TraceInfo {
16
+ id: string;
17
+ timestamp: number;
18
+ method: string;
19
+ url: string;
20
+ ip: string;
21
+ userAgent?: string;
22
+ userId?: string;
23
+ duration?: number;
24
+ statusCode?: number;
25
+ error?: string;
26
+ metadata?: Record<string, any>;
27
+ }
28
+ export declare const requestTracingMiddleware: () => (req: Request, res: Response, next: NextFunction) => void;
29
+ //# sourceMappingURL=request-tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-tracing.d.ts","sourceRoot":"","sources":["../../src/middleware/request-tracing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM1D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE,SAAS,CAAC;SACvB;KACF;CACF;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,wBAAwB,SAC3B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SAwFxD,CAAA"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Request Tracing Middleware for Anchor Engine
3
+ *
4
+ * Implements comprehensive request tracing for debugging and monitoring
5
+ */
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { logWithContext } from '../utils/structured-logger.js';
8
+ import { performanceMonitor } from '../utils/performance-monitor.js';
9
+ export const requestTracingMiddleware = () => {
10
+ return (req, res, next) => {
11
+ // Generate a unique trace ID for this request
12
+ const traceId = uuidv4();
13
+ // Add trace ID to request for later use
14
+ req.traceId = traceId;
15
+ // Capture initial request information
16
+ const traceInfo = {
17
+ id: traceId,
18
+ timestamp: Date.now(),
19
+ method: req.method,
20
+ url: req.url,
21
+ ip: req.ip || req.connection.remoteAddress || '',
22
+ userAgent: req.get('User-Agent') || undefined,
23
+ userId: req.get('X-User-ID') || req.headers['x-user-id'] || undefined, // Using header instead of session
24
+ metadata: {
25
+ headers: getTraceableHeaders(req),
26
+ query: req.query,
27
+ params: req.params
28
+ }
29
+ };
30
+ // Store trace info in request
31
+ req.traceInfo = traceInfo;
32
+ // Log the start of the request
33
+ logWithContext.info('Request started', {
34
+ traceId,
35
+ method: req.method,
36
+ url: req.url,
37
+ ip: traceInfo.ip,
38
+ userAgent: traceInfo.userAgent
39
+ });
40
+ // Start performance tracking for this request
41
+ const endTiming = performanceMonitor.startOperation(`request-${req.method}-${req.route?.path || 'unknown'}`);
42
+ // Hook into the response to capture completion details
43
+ const originalEnd = res.end;
44
+ res.end = function (chunk, encoding, callback) {
45
+ // Calculate duration
46
+ const duration = Date.now() - traceInfo.timestamp;
47
+ traceInfo.duration = duration;
48
+ traceInfo.statusCode = res.statusCode;
49
+ // End performance tracking
50
+ endTiming();
51
+ // Log the completion of the request
52
+ logWithContext.info('Request completed', {
53
+ traceId,
54
+ method: req.method,
55
+ url: req.url,
56
+ statusCode: res.statusCode,
57
+ duration,
58
+ ip: traceInfo.ip
59
+ });
60
+ // If there was an error status, log it specifically
61
+ if (res.statusCode >= 400) {
62
+ logWithContext.warn('Request completed with error status', {
63
+ traceId,
64
+ method: req.method,
65
+ url: req.url,
66
+ statusCode: res.statusCode,
67
+ duration,
68
+ ip: traceInfo.ip
69
+ });
70
+ }
71
+ // Call the original end method
72
+ return originalEnd.call(this, chunk, encoding, callback);
73
+ };
74
+ // Handle errors in the request chain
75
+ req.on('error', (error) => {
76
+ traceInfo.error = error.message;
77
+ logWithContext.error('Request error', error, {
78
+ traceId,
79
+ method: req.method,
80
+ url: req.url,
81
+ ip: traceInfo.ip
82
+ });
83
+ });
84
+ next();
85
+ };
86
+ };
87
+ // Function to extract traceable headers (avoid logging sensitive data)
88
+ function getTraceableHeaders(req) {
89
+ const traceableHeaders = {};
90
+ const traceableHeaderNames = [
91
+ 'content-type',
92
+ 'content-length',
93
+ 'user-agent',
94
+ 'referer',
95
+ 'x-request-id',
96
+ 'x-correlation-id',
97
+ 'authorization', // Only the prefix will be logged
98
+ 'x-forwarded-for',
99
+ 'x-real-ip'
100
+ ];
101
+ for (const [key, value] of Object.entries(req.headers)) {
102
+ if (traceableHeaderNames.includes(key.toLowerCase())) {
103
+ if (key.toLowerCase() === 'authorization' && typeof value === 'string') {
104
+ // Only log the auth scheme, not the full token
105
+ const [scheme] = value.split(' ');
106
+ traceableHeaders[key] = `${scheme} [REDACTED]`;
107
+ }
108
+ else {
109
+ traceableHeaders[key] = Array.isArray(value) ? value.join(', ') : value;
110
+ }
111
+ }
112
+ }
113
+ return traceableHeaders;
114
+ }
115
+ //# sourceMappingURL=request-tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-tracing.js","sourceRoot":"","sources":["../../src/middleware/request-tracing.ts"],"names":[],"mappings":"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"}