@raviolelabs/engram-mcp 0.2.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 (662) hide show
  1. package/CLAUDE.md +232 -0
  2. package/LICENSE +21 -0
  3. package/README.md +222 -0
  4. package/SKILL.md +299 -0
  5. package/dist/cloud/auth.d.ts +29 -0
  6. package/dist/cloud/auth.d.ts.map +1 -0
  7. package/dist/cloud/auth.js +132 -0
  8. package/dist/cloud/auth.js.map +1 -0
  9. package/dist/cloud/bridge-client.d.ts +10 -0
  10. package/dist/cloud/bridge-client.d.ts.map +1 -0
  11. package/dist/cloud/bridge-client.js +167 -0
  12. package/dist/cloud/bridge-client.js.map +1 -0
  13. package/dist/cloud/crypto.d.ts +42 -0
  14. package/dist/cloud/crypto.d.ts.map +1 -0
  15. package/dist/cloud/crypto.js +146 -0
  16. package/dist/cloud/crypto.js.map +1 -0
  17. package/dist/cloud/endpoints.d.ts +26 -0
  18. package/dist/cloud/endpoints.d.ts.map +1 -0
  19. package/dist/cloud/endpoints.js +26 -0
  20. package/dist/cloud/endpoints.js.map +1 -0
  21. package/dist/cloud/pairing.d.ts +30 -0
  22. package/dist/cloud/pairing.d.ts.map +1 -0
  23. package/dist/cloud/pairing.js +157 -0
  24. package/dist/cloud/pairing.js.map +1 -0
  25. package/dist/cloud/transit-poller.d.ts +35 -0
  26. package/dist/cloud/transit-poller.d.ts.map +1 -0
  27. package/dist/cloud/transit-poller.js +281 -0
  28. package/dist/cloud/transit-poller.js.map +1 -0
  29. package/dist/config/index.d.ts +3 -0
  30. package/dist/config/index.d.ts.map +1 -0
  31. package/dist/config/index.js +24 -0
  32. package/dist/config/index.js.map +1 -0
  33. package/dist/config/schema.d.ts +466 -0
  34. package/dist/config/schema.d.ts.map +1 -0
  35. package/dist/config/schema.js +171 -0
  36. package/dist/config/schema.js.map +1 -0
  37. package/dist/core/db/index.d.ts +7 -0
  38. package/dist/core/db/index.d.ts.map +1 -0
  39. package/dist/core/db/index.js +273 -0
  40. package/dist/core/db/index.js.map +1 -0
  41. package/dist/core/logger.d.ts +19 -0
  42. package/dist/core/logger.d.ts.map +1 -0
  43. package/dist/core/logger.js +223 -0
  44. package/dist/core/logger.js.map +1 -0
  45. package/dist/core/server/http.d.ts +15 -0
  46. package/dist/core/server/http.d.ts.map +1 -0
  47. package/dist/core/server/http.js +76 -0
  48. package/dist/core/server/http.js.map +1 -0
  49. package/dist/core/server/instructions.d.ts +2 -0
  50. package/dist/core/server/instructions.d.ts.map +1 -0
  51. package/dist/core/server/instructions.js +36 -0
  52. package/dist/core/server/instructions.js.map +1 -0
  53. package/dist/core/server/mcp-handler.d.ts +39 -0
  54. package/dist/core/server/mcp-handler.d.ts.map +1 -0
  55. package/dist/core/server/mcp-handler.js +204 -0
  56. package/dist/core/server/mcp-handler.js.map +1 -0
  57. package/dist/core/server/mcp-http.d.ts +4 -0
  58. package/dist/core/server/mcp-http.d.ts.map +1 -0
  59. package/dist/core/server/mcp-http.js +56 -0
  60. package/dist/core/server/mcp-http.js.map +1 -0
  61. package/dist/core/server/tool-router.d.ts +9 -0
  62. package/dist/core/server/tool-router.d.ts.map +1 -0
  63. package/dist/core/server/tool-router.js +25 -0
  64. package/dist/core/server/tool-router.js.map +1 -0
  65. package/dist/core/server/websocket.d.ts +4 -0
  66. package/dist/core/server/websocket.d.ts.map +1 -0
  67. package/dist/core/server/websocket.js +25 -0
  68. package/dist/core/server/websocket.js.map +1 -0
  69. package/dist/db/index.d.ts +2 -0
  70. package/dist/db/index.d.ts.map +1 -0
  71. package/dist/db/index.js +3 -0
  72. package/dist/db/index.js.map +1 -0
  73. package/dist/embeddings/index.d.ts +24 -0
  74. package/dist/embeddings/index.d.ts.map +1 -0
  75. package/dist/embeddings/index.js +86 -0
  76. package/dist/embeddings/index.js.map +1 -0
  77. package/dist/embeddings/providers/engram.d.ts +7 -0
  78. package/dist/embeddings/providers/engram.d.ts.map +1 -0
  79. package/dist/embeddings/providers/engram.js +67 -0
  80. package/dist/embeddings/providers/engram.js.map +1 -0
  81. package/dist/embeddings/providers/ollama.d.ts +3 -0
  82. package/dist/embeddings/providers/ollama.d.ts.map +1 -0
  83. package/dist/embeddings/providers/ollama.js +9 -0
  84. package/dist/embeddings/providers/ollama.js.map +1 -0
  85. package/dist/embeddings/providers/openai-compat.d.ts +7 -0
  86. package/dist/embeddings/providers/openai-compat.d.ts.map +1 -0
  87. package/dist/embeddings/providers/openai-compat.js +27 -0
  88. package/dist/embeddings/providers/openai-compat.js.map +1 -0
  89. package/dist/embeddings/providers/openai.d.ts +3 -0
  90. package/dist/embeddings/providers/openai.d.ts.map +1 -0
  91. package/dist/embeddings/providers/openai.js +12 -0
  92. package/dist/embeddings/providers/openai.js.map +1 -0
  93. package/dist/embeddings/providers/voyage.d.ts +3 -0
  94. package/dist/embeddings/providers/voyage.d.ts.map +1 -0
  95. package/dist/embeddings/providers/voyage.js +12 -0
  96. package/dist/embeddings/providers/voyage.js.map +1 -0
  97. package/dist/index.d.ts +1 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +3 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/ingest/jobs.d.ts +29 -0
  102. package/dist/ingest/jobs.d.ts.map +1 -0
  103. package/dist/ingest/jobs.js +131 -0
  104. package/dist/ingest/jobs.js.map +1 -0
  105. package/dist/logger.d.ts +2 -0
  106. package/dist/logger.d.ts.map +1 -0
  107. package/dist/logger.js +3 -0
  108. package/dist/logger.js.map +1 -0
  109. package/dist/mcp-server/server.d.ts +2 -0
  110. package/dist/mcp-server/server.d.ts.map +1 -0
  111. package/dist/mcp-server/server.js +3 -0
  112. package/dist/mcp-server/server.js.map +1 -0
  113. package/dist/mcp-server/tests/mcp-e2e.test.d.ts +2 -0
  114. package/dist/mcp-server/tests/mcp-e2e.test.d.ts.map +1 -0
  115. package/dist/mcp-server/tests/mcp-e2e.test.js +157 -0
  116. package/dist/mcp-server/tests/mcp-e2e.test.js.map +1 -0
  117. package/dist/mcp-server/tool-router.d.ts +2 -0
  118. package/dist/mcp-server/tool-router.d.ts.map +1 -0
  119. package/dist/mcp-server/tool-router.js +3 -0
  120. package/dist/mcp-server/tool-router.js.map +1 -0
  121. package/dist/memory/admin/tools.d.ts +6 -0
  122. package/dist/memory/admin/tools.d.ts.map +1 -0
  123. package/dist/memory/admin/tools.js +134 -0
  124. package/dist/memory/admin/tools.js.map +1 -0
  125. package/dist/memory/core/chunker.d.ts +6 -0
  126. package/dist/memory/core/chunker.d.ts.map +1 -0
  127. package/dist/memory/core/chunker.js +49 -0
  128. package/dist/memory/core/chunker.js.map +1 -0
  129. package/dist/memory/core/module-interface.d.ts +23 -0
  130. package/dist/memory/core/module-interface.d.ts.map +1 -0
  131. package/dist/memory/core/module-interface.js +2 -0
  132. package/dist/memory/core/module-interface.js.map +1 -0
  133. package/dist/memory/core/module-registry.d.ts +14 -0
  134. package/dist/memory/core/module-registry.d.ts.map +1 -0
  135. package/dist/memory/core/module-registry.js +45 -0
  136. package/dist/memory/core/module-registry.js.map +1 -0
  137. package/dist/memory/core/property-extractor.d.ts +6 -0
  138. package/dist/memory/core/property-extractor.d.ts.map +1 -0
  139. package/dist/memory/core/property-extractor.js +90 -0
  140. package/dist/memory/core/property-extractor.js.map +1 -0
  141. package/dist/memory/core/reindex.d.ts +11 -0
  142. package/dist/memory/core/reindex.d.ts.map +1 -0
  143. package/dist/memory/core/reindex.js +55 -0
  144. package/dist/memory/core/reindex.js.map +1 -0
  145. package/dist/memory/core/source-registry.d.ts +42 -0
  146. package/dist/memory/core/source-registry.d.ts.map +1 -0
  147. package/dist/memory/core/source-registry.js +86 -0
  148. package/dist/memory/core/source-registry.js.map +1 -0
  149. package/dist/memory/core/store.d.ts +40 -0
  150. package/dist/memory/core/store.d.ts.map +1 -0
  151. package/dist/memory/core/store.js +257 -0
  152. package/dist/memory/core/store.js.map +1 -0
  153. package/dist/memory/core/wikilinks.d.ts +13 -0
  154. package/dist/memory/core/wikilinks.d.ts.map +1 -0
  155. package/dist/memory/core/wikilinks.js +25 -0
  156. package/dist/memory/core/wikilinks.js.map +1 -0
  157. package/dist/memory/modules/_custom/generic-module.d.ts +7 -0
  158. package/dist/memory/modules/_custom/generic-module.d.ts.map +1 -0
  159. package/dist/memory/modules/_custom/generic-module.js +108 -0
  160. package/dist/memory/modules/_custom/generic-module.js.map +1 -0
  161. package/dist/memory/modules/_custom/persistence.d.ts +15 -0
  162. package/dist/memory/modules/_custom/persistence.d.ts.map +1 -0
  163. package/dist/memory/modules/_custom/persistence.js +47 -0
  164. package/dist/memory/modules/_custom/persistence.js.map +1 -0
  165. package/dist/memory/modules/_custom/tests/custom-types.test.d.ts +2 -0
  166. package/dist/memory/modules/_custom/tests/custom-types.test.d.ts.map +1 -0
  167. package/dist/memory/modules/_custom/tests/custom-types.test.js +89 -0
  168. package/dist/memory/modules/_custom/tests/custom-types.test.js.map +1 -0
  169. package/dist/memory/modules/_custom/tools.d.ts +7 -0
  170. package/dist/memory/modules/_custom/tools.d.ts.map +1 -0
  171. package/dist/memory/modules/_custom/tools.js +72 -0
  172. package/dist/memory/modules/_custom/tools.js.map +1 -0
  173. package/dist/memory/modules/audio/ingest.d.ts +9 -0
  174. package/dist/memory/modules/audio/ingest.d.ts.map +1 -0
  175. package/dist/memory/modules/audio/ingest.js +32 -0
  176. package/dist/memory/modules/audio/ingest.js.map +1 -0
  177. package/dist/memory/modules/audio/module.d.ts +6 -0
  178. package/dist/memory/modules/audio/module.d.ts.map +1 -0
  179. package/dist/memory/modules/audio/module.js +18 -0
  180. package/dist/memory/modules/audio/module.js.map +1 -0
  181. package/dist/memory/modules/audio/tests/audio.test.d.ts +2 -0
  182. package/dist/memory/modules/audio/tests/audio.test.d.ts.map +1 -0
  183. package/dist/memory/modules/audio/tests/audio.test.js +57 -0
  184. package/dist/memory/modules/audio/tests/audio.test.js.map +1 -0
  185. package/dist/memory/modules/audio/tests/transcriber.test.d.ts +2 -0
  186. package/dist/memory/modules/audio/tests/transcriber.test.d.ts.map +1 -0
  187. package/dist/memory/modules/audio/tests/transcriber.test.js +27 -0
  188. package/dist/memory/modules/audio/tests/transcriber.test.js.map +1 -0
  189. package/dist/memory/modules/audio/tools.d.ts +5 -0
  190. package/dist/memory/modules/audio/tools.d.ts.map +1 -0
  191. package/dist/memory/modules/audio/tools.js +60 -0
  192. package/dist/memory/modules/audio/tools.js.map +1 -0
  193. package/dist/memory/modules/audio/transcriber.d.ts +15 -0
  194. package/dist/memory/modules/audio/transcriber.d.ts.map +1 -0
  195. package/dist/memory/modules/audio/transcriber.js +177 -0
  196. package/dist/memory/modules/audio/transcriber.js.map +1 -0
  197. package/dist/memory/modules/conversations/ingest.d.ts +10 -0
  198. package/dist/memory/modules/conversations/ingest.d.ts.map +1 -0
  199. package/dist/memory/modules/conversations/ingest.js +38 -0
  200. package/dist/memory/modules/conversations/ingest.js.map +1 -0
  201. package/dist/memory/modules/conversations/module.d.ts +6 -0
  202. package/dist/memory/modules/conversations/module.d.ts.map +1 -0
  203. package/dist/memory/modules/conversations/module.js +43 -0
  204. package/dist/memory/modules/conversations/module.js.map +1 -0
  205. package/dist/memory/modules/conversations/tests/conversations.test.d.ts +2 -0
  206. package/dist/memory/modules/conversations/tests/conversations.test.d.ts.map +1 -0
  207. package/dist/memory/modules/conversations/tests/conversations.test.js +70 -0
  208. package/dist/memory/modules/conversations/tests/conversations.test.js.map +1 -0
  209. package/dist/memory/modules/conversations/tools.d.ts +5 -0
  210. package/dist/memory/modules/conversations/tools.d.ts.map +1 -0
  211. package/dist/memory/modules/conversations/tools.js +75 -0
  212. package/dist/memory/modules/conversations/tools.js.map +1 -0
  213. package/dist/memory/modules/drive/connector.d.ts +19 -0
  214. package/dist/memory/modules/drive/connector.d.ts.map +1 -0
  215. package/dist/memory/modules/drive/connector.js +52 -0
  216. package/dist/memory/modules/drive/connector.js.map +1 -0
  217. package/dist/memory/modules/drive/ingest.d.ts +9 -0
  218. package/dist/memory/modules/drive/ingest.d.ts.map +1 -0
  219. package/dist/memory/modules/drive/ingest.js +27 -0
  220. package/dist/memory/modules/drive/ingest.js.map +1 -0
  221. package/dist/memory/modules/drive/module.d.ts +6 -0
  222. package/dist/memory/modules/drive/module.d.ts.map +1 -0
  223. package/dist/memory/modules/drive/module.js +31 -0
  224. package/dist/memory/modules/drive/module.js.map +1 -0
  225. package/dist/memory/modules/drive/oauth.d.ts +14 -0
  226. package/dist/memory/modules/drive/oauth.d.ts.map +1 -0
  227. package/dist/memory/modules/drive/oauth.js +130 -0
  228. package/dist/memory/modules/drive/oauth.js.map +1 -0
  229. package/dist/memory/modules/drive/tests/drive.test.d.ts +2 -0
  230. package/dist/memory/modules/drive/tests/drive.test.d.ts.map +1 -0
  231. package/dist/memory/modules/drive/tests/drive.test.js +66 -0
  232. package/dist/memory/modules/drive/tests/drive.test.js.map +1 -0
  233. package/dist/memory/modules/drive/tools.d.ts +5 -0
  234. package/dist/memory/modules/drive/tools.d.ts.map +1 -0
  235. package/dist/memory/modules/drive/tools.js +131 -0
  236. package/dist/memory/modules/drive/tools.js.map +1 -0
  237. package/dist/memory/modules/drive/watcher.d.ts +5 -0
  238. package/dist/memory/modules/drive/watcher.d.ts.map +1 -0
  239. package/dist/memory/modules/drive/watcher.js +46 -0
  240. package/dist/memory/modules/drive/watcher.js.map +1 -0
  241. package/dist/memory/modules/notes/ingest.d.ts +3 -0
  242. package/dist/memory/modules/notes/ingest.d.ts.map +1 -0
  243. package/dist/memory/modules/notes/ingest.js +30 -0
  244. package/dist/memory/modules/notes/ingest.js.map +1 -0
  245. package/dist/memory/modules/notes/module.d.ts +5 -0
  246. package/dist/memory/modules/notes/module.d.ts.map +1 -0
  247. package/dist/memory/modules/notes/module.js +28 -0
  248. package/dist/memory/modules/notes/module.js.map +1 -0
  249. package/dist/memory/modules/notes/tests/notes.test.d.ts +2 -0
  250. package/dist/memory/modules/notes/tests/notes.test.d.ts.map +1 -0
  251. package/dist/memory/modules/notes/tests/notes.test.js +59 -0
  252. package/dist/memory/modules/notes/tests/notes.test.js.map +1 -0
  253. package/dist/memory/modules/notes/tools.d.ts +5 -0
  254. package/dist/memory/modules/notes/tools.d.ts.map +1 -0
  255. package/dist/memory/modules/notes/tools.js +69 -0
  256. package/dist/memory/modules/notes/tools.js.map +1 -0
  257. package/dist/memory/modules/notion/connector.d.ts +10 -0
  258. package/dist/memory/modules/notion/connector.d.ts.map +1 -0
  259. package/dist/memory/modules/notion/connector.js +112 -0
  260. package/dist/memory/modules/notion/connector.js.map +1 -0
  261. package/dist/memory/modules/notion/ingest.d.ts +9 -0
  262. package/dist/memory/modules/notion/ingest.d.ts.map +1 -0
  263. package/dist/memory/modules/notion/ingest.js +24 -0
  264. package/dist/memory/modules/notion/ingest.js.map +1 -0
  265. package/dist/memory/modules/notion/module.d.ts +6 -0
  266. package/dist/memory/modules/notion/module.d.ts.map +1 -0
  267. package/dist/memory/modules/notion/module.js +31 -0
  268. package/dist/memory/modules/notion/module.js.map +1 -0
  269. package/dist/memory/modules/notion/oauth.d.ts +19 -0
  270. package/dist/memory/modules/notion/oauth.d.ts.map +1 -0
  271. package/dist/memory/modules/notion/oauth.js +117 -0
  272. package/dist/memory/modules/notion/oauth.js.map +1 -0
  273. package/dist/memory/modules/notion/tests/notion.test.d.ts +2 -0
  274. package/dist/memory/modules/notion/tests/notion.test.d.ts.map +1 -0
  275. package/dist/memory/modules/notion/tests/notion.test.js +53 -0
  276. package/dist/memory/modules/notion/tests/notion.test.js.map +1 -0
  277. package/dist/memory/modules/notion/tools.d.ts +5 -0
  278. package/dist/memory/modules/notion/tools.d.ts.map +1 -0
  279. package/dist/memory/modules/notion/tools.js +116 -0
  280. package/dist/memory/modules/notion/tools.js.map +1 -0
  281. package/dist/memory/modules/notion/watcher.d.ts +5 -0
  282. package/dist/memory/modules/notion/watcher.d.ts.map +1 -0
  283. package/dist/memory/modules/notion/watcher.js +41 -0
  284. package/dist/memory/modules/notion/watcher.js.map +1 -0
  285. package/dist/memory/modules/obsidian/ingest.d.ts +9 -0
  286. package/dist/memory/modules/obsidian/ingest.d.ts.map +1 -0
  287. package/dist/memory/modules/obsidian/ingest.js +80 -0
  288. package/dist/memory/modules/obsidian/ingest.js.map +1 -0
  289. package/dist/memory/modules/obsidian/module.d.ts +6 -0
  290. package/dist/memory/modules/obsidian/module.d.ts.map +1 -0
  291. package/dist/memory/modules/obsidian/module.js +31 -0
  292. package/dist/memory/modules/obsidian/module.js.map +1 -0
  293. package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts +2 -0
  294. package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts.map +1 -0
  295. package/dist/memory/modules/obsidian/tests/obsidian.test.js +65 -0
  296. package/dist/memory/modules/obsidian/tests/obsidian.test.js.map +1 -0
  297. package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts +2 -0
  298. package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts.map +1 -0
  299. package/dist/memory/modules/obsidian/tests/vault-reader.test.js +37 -0
  300. package/dist/memory/modules/obsidian/tests/vault-reader.test.js.map +1 -0
  301. package/dist/memory/modules/obsidian/tools.d.ts +5 -0
  302. package/dist/memory/modules/obsidian/tools.d.ts.map +1 -0
  303. package/dist/memory/modules/obsidian/tools.js +101 -0
  304. package/dist/memory/modules/obsidian/tools.js.map +1 -0
  305. package/dist/memory/modules/obsidian/vault-reader.d.ts +8 -0
  306. package/dist/memory/modules/obsidian/vault-reader.d.ts.map +1 -0
  307. package/dist/memory/modules/obsidian/vault-reader.js +82 -0
  308. package/dist/memory/modules/obsidian/vault-reader.js.map +1 -0
  309. package/dist/memory/modules/obsidian/watcher.d.ts +5 -0
  310. package/dist/memory/modules/obsidian/watcher.d.ts.map +1 -0
  311. package/dist/memory/modules/obsidian/watcher.js +83 -0
  312. package/dist/memory/modules/obsidian/watcher.js.map +1 -0
  313. package/dist/memory/modules/youtube/ingest.d.ts +20 -0
  314. package/dist/memory/modules/youtube/ingest.d.ts.map +1 -0
  315. package/dist/memory/modules/youtube/ingest.js +49 -0
  316. package/dist/memory/modules/youtube/ingest.js.map +1 -0
  317. package/dist/memory/modules/youtube/module.d.ts +11 -0
  318. package/dist/memory/modules/youtube/module.d.ts.map +1 -0
  319. package/dist/memory/modules/youtube/module.js +26 -0
  320. package/dist/memory/modules/youtube/module.js.map +1 -0
  321. package/dist/memory/modules/youtube/tests/channel.test.d.ts +2 -0
  322. package/dist/memory/modules/youtube/tests/channel.test.d.ts.map +1 -0
  323. package/dist/memory/modules/youtube/tests/channel.test.js +61 -0
  324. package/dist/memory/modules/youtube/tests/channel.test.js.map +1 -0
  325. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts +2 -0
  326. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts.map +1 -0
  327. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js +23 -0
  328. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js.map +1 -0
  329. package/dist/memory/modules/youtube/tests/youtube.test.d.ts +2 -0
  330. package/dist/memory/modules/youtube/tests/youtube.test.d.ts.map +1 -0
  331. package/dist/memory/modules/youtube/tests/youtube.test.js +52 -0
  332. package/dist/memory/modules/youtube/tests/youtube.test.js.map +1 -0
  333. package/dist/memory/modules/youtube/tools.d.ts +5 -0
  334. package/dist/memory/modules/youtube/tools.d.ts.map +1 -0
  335. package/dist/memory/modules/youtube/tools.js +182 -0
  336. package/dist/memory/modules/youtube/tools.js.map +1 -0
  337. package/dist/memory/modules/youtube/transcript-fetcher.d.ts +17 -0
  338. package/dist/memory/modules/youtube/transcript-fetcher.d.ts.map +1 -0
  339. package/dist/memory/modules/youtube/transcript-fetcher.js +178 -0
  340. package/dist/memory/modules/youtube/transcript-fetcher.js.map +1 -0
  341. package/dist/memory/modules/youtube/watcher.d.ts +30 -0
  342. package/dist/memory/modules/youtube/watcher.d.ts.map +1 -0
  343. package/dist/memory/modules/youtube/watcher.js +198 -0
  344. package/dist/memory/modules/youtube/watcher.js.map +1 -0
  345. package/dist/memory/public/tools.d.ts +5 -0
  346. package/dist/memory/public/tools.d.ts.map +1 -0
  347. package/dist/memory/public/tools.js +1761 -0
  348. package/dist/memory/public/tools.js.map +1 -0
  349. package/dist/private/algorithms/chunker-semantic.d.ts +3 -0
  350. package/dist/private/algorithms/chunker-semantic.d.ts.map +1 -0
  351. package/dist/private/algorithms/chunker-semantic.js +70 -0
  352. package/dist/private/algorithms/chunker-semantic.js.map +1 -0
  353. package/dist/private/algorithms/find-related-smart.d.ts +4 -0
  354. package/dist/private/algorithms/find-related-smart.d.ts.map +1 -0
  355. package/dist/private/algorithms/find-related-smart.js +52 -0
  356. package/dist/private/algorithms/find-related-smart.js.map +1 -0
  357. package/dist/private/algorithms/graph-semantic-edges.d.ts +4 -0
  358. package/dist/private/algorithms/graph-semantic-edges.d.ts.map +1 -0
  359. package/dist/private/algorithms/graph-semantic-edges.js +38 -0
  360. package/dist/private/algorithms/graph-semantic-edges.js.map +1 -0
  361. package/dist/private/algorithms/search-all-smart.d.ts +9 -0
  362. package/dist/private/algorithms/search-all-smart.d.ts.map +1 -0
  363. package/dist/private/algorithms/search-all-smart.js +62 -0
  364. package/dist/private/algorithms/search-all-smart.js.map +1 -0
  365. package/dist/private/index.d.ts +7 -0
  366. package/dist/private/index.d.ts.map +1 -0
  367. package/dist/private/index.js +39 -0
  368. package/dist/private/index.js.map +1 -0
  369. package/dist/private/prompts/extraction-system.d.ts +2 -0
  370. package/dist/private/prompts/extraction-system.d.ts.map +1 -0
  371. package/dist/private/prompts/extraction-system.js +15 -0
  372. package/dist/private/prompts/extraction-system.js.map +1 -0
  373. package/dist/private/prompts/suggest-properties.d.ts +2 -0
  374. package/dist/private/prompts/suggest-properties.d.ts.map +1 -0
  375. package/dist/private/prompts/suggest-properties.js +18 -0
  376. package/dist/private/prompts/suggest-properties.js.map +1 -0
  377. package/dist/private/tests/find-related-smart.test.d.ts +2 -0
  378. package/dist/private/tests/find-related-smart.test.d.ts.map +1 -0
  379. package/dist/private/tests/find-related-smart.test.js +86 -0
  380. package/dist/private/tests/find-related-smart.test.js.map +1 -0
  381. package/dist/private/tests/property-extractor-smart.test.d.ts +2 -0
  382. package/dist/private/tests/property-extractor-smart.test.d.ts.map +1 -0
  383. package/dist/private/tests/property-extractor-smart.test.js +26 -0
  384. package/dist/private/tests/property-extractor-smart.test.js.map +1 -0
  385. package/dist/scripts/install-ollama.d.ts +3 -0
  386. package/dist/scripts/install-ollama.d.ts.map +1 -0
  387. package/dist/scripts/install-ollama.js +78 -0
  388. package/dist/scripts/install-ollama.js.map +1 -0
  389. package/dist/scripts/install.d.ts +3 -0
  390. package/dist/scripts/install.d.ts.map +1 -0
  391. package/dist/scripts/install.js +191 -0
  392. package/dist/scripts/install.js.map +1 -0
  393. package/dist/scripts/pair.d.ts +3 -0
  394. package/dist/scripts/pair.d.ts.map +1 -0
  395. package/dist/scripts/pair.js +78 -0
  396. package/dist/scripts/pair.js.map +1 -0
  397. package/dist/scripts/rebuild.d.ts +20 -0
  398. package/dist/scripts/rebuild.d.ts.map +1 -0
  399. package/dist/scripts/rebuild.js +171 -0
  400. package/dist/scripts/rebuild.js.map +1 -0
  401. package/dist/scripts/reindex.d.ts +3 -0
  402. package/dist/scripts/reindex.d.ts.map +1 -0
  403. package/dist/scripts/reindex.js +23 -0
  404. package/dist/scripts/reindex.js.map +1 -0
  405. package/dist/scripts/serve.d.ts +3 -0
  406. package/dist/scripts/serve.d.ts.map +1 -0
  407. package/dist/scripts/serve.js +57 -0
  408. package/dist/scripts/serve.js.map +1 -0
  409. package/dist/scripts/service.d.ts +19 -0
  410. package/dist/scripts/service.d.ts.map +1 -0
  411. package/dist/scripts/service.js +257 -0
  412. package/dist/scripts/service.js.map +1 -0
  413. package/dist/server/api/daily.d.ts +3 -0
  414. package/dist/server/api/daily.d.ts.map +1 -0
  415. package/dist/server/api/daily.js +44 -0
  416. package/dist/server/api/daily.js.map +1 -0
  417. package/dist/server/api/graph.d.ts +26 -0
  418. package/dist/server/api/graph.d.ts.map +1 -0
  419. package/dist/server/api/graph.js +80 -0
  420. package/dist/server/api/graph.js.map +1 -0
  421. package/dist/server/api/integrations.d.ts +4 -0
  422. package/dist/server/api/integrations.d.ts.map +1 -0
  423. package/dist/server/api/integrations.js +228 -0
  424. package/dist/server/api/integrations.js.map +1 -0
  425. package/dist/server/api/memories.d.ts +4 -0
  426. package/dist/server/api/memories.d.ts.map +1 -0
  427. package/dist/server/api/memories.js +267 -0
  428. package/dist/server/api/memories.js.map +1 -0
  429. package/dist/server/api/reindex.d.ts +3 -0
  430. package/dist/server/api/reindex.d.ts.map +1 -0
  431. package/dist/server/api/reindex.js +18 -0
  432. package/dist/server/api/reindex.js.map +1 -0
  433. package/dist/server/api/settings.d.ts +3 -0
  434. package/dist/server/api/settings.d.ts.map +1 -0
  435. package/dist/server/api/settings.js +24 -0
  436. package/dist/server/api/settings.js.map +1 -0
  437. package/dist/server/api/sources.d.ts +4 -0
  438. package/dist/server/api/sources.d.ts.map +1 -0
  439. package/dist/server/api/sources.js +45 -0
  440. package/dist/server/api/sources.js.map +1 -0
  441. package/dist/server/api/sync-status.d.ts +3 -0
  442. package/dist/server/api/sync-status.d.ts.map +1 -0
  443. package/dist/server/api/sync-status.js +43 -0
  444. package/dist/server/api/sync-status.js.map +1 -0
  445. package/dist/server/api/types.d.ts +3 -0
  446. package/dist/server/api/types.d.ts.map +1 -0
  447. package/dist/server/api/types.js +20 -0
  448. package/dist/server/api/types.js.map +1 -0
  449. package/dist/server/api/views.d.ts +25 -0
  450. package/dist/server/api/views.d.ts.map +1 -0
  451. package/dist/server/api/views.js +54 -0
  452. package/dist/server/api/views.js.map +1 -0
  453. package/dist/server/index.d.ts +2 -0
  454. package/dist/server/index.d.ts.map +1 -0
  455. package/dist/server/index.js +3 -0
  456. package/dist/server/index.js.map +1 -0
  457. package/dist/sync/apply.d.ts +55 -0
  458. package/dist/sync/apply.d.ts.map +1 -0
  459. package/dist/sync/apply.js +277 -0
  460. package/dist/sync/apply.js.map +1 -0
  461. package/dist/sync/channel-client.d.ts +27 -0
  462. package/dist/sync/channel-client.d.ts.map +1 -0
  463. package/dist/sync/channel-client.js +154 -0
  464. package/dist/sync/channel-client.js.map +1 -0
  465. package/dist/sync/cloud-saves.d.ts +49 -0
  466. package/dist/sync/cloud-saves.d.ts.map +1 -0
  467. package/dist/sync/cloud-saves.js +182 -0
  468. package/dist/sync/cloud-saves.js.map +1 -0
  469. package/dist/sync/ed25519.d.ts +54 -0
  470. package/dist/sync/ed25519.d.ts.map +1 -0
  471. package/dist/sync/ed25519.js +136 -0
  472. package/dist/sync/ed25519.js.map +1 -0
  473. package/dist/sync/ops-log.d.ts +43 -0
  474. package/dist/sync/ops-log.d.ts.map +1 -0
  475. package/dist/sync/ops-log.js +153 -0
  476. package/dist/sync/ops-log.js.map +1 -0
  477. package/dist/sync/recovery-setup.d.ts +26 -0
  478. package/dist/sync/recovery-setup.d.ts.map +1 -0
  479. package/dist/sync/recovery-setup.js +113 -0
  480. package/dist/sync/recovery-setup.js.map +1 -0
  481. package/dist/sync/replay.d.ts +19 -0
  482. package/dist/sync/replay.d.ts.map +1 -0
  483. package/dist/sync/replay.js +59 -0
  484. package/dist/sync/replay.js.map +1 -0
  485. package/dist/sync/shamir.d.ts +22 -0
  486. package/dist/sync/shamir.d.ts.map +1 -0
  487. package/dist/sync/shamir.js +109 -0
  488. package/dist/sync/shamir.js.map +1 -0
  489. package/dist/sync/tests/apply.test.d.ts +4 -0
  490. package/dist/sync/tests/apply.test.d.ts.map +1 -0
  491. package/dist/sync/tests/apply.test.js +119 -0
  492. package/dist/sync/tests/apply.test.js.map +1 -0
  493. package/dist/sync/tests/ops-log.test.d.ts +2 -0
  494. package/dist/sync/tests/ops-log.test.d.ts.map +1 -0
  495. package/dist/sync/tests/ops-log.test.js +105 -0
  496. package/dist/sync/tests/ops-log.test.js.map +1 -0
  497. package/dist/sync/tests/two-device-sync.test.d.ts +2 -0
  498. package/dist/sync/tests/two-device-sync.test.d.ts.map +1 -0
  499. package/dist/sync/tests/two-device-sync.test.js +250 -0
  500. package/dist/sync/tests/two-device-sync.test.js.map +1 -0
  501. package/dist/sync/types.d.ts +87 -0
  502. package/dist/sync/types.d.ts.map +1 -0
  503. package/dist/sync/types.js +37 -0
  504. package/dist/sync/types.js.map +1 -0
  505. package/dist/tests/chunker.test.d.ts +2 -0
  506. package/dist/tests/chunker.test.d.ts.map +1 -0
  507. package/dist/tests/chunker.test.js +24 -0
  508. package/dist/tests/chunker.test.js.map +1 -0
  509. package/dist/tests/cloud-auth.test.d.ts +2 -0
  510. package/dist/tests/cloud-auth.test.d.ts.map +1 -0
  511. package/dist/tests/cloud-auth.test.js +75 -0
  512. package/dist/tests/cloud-auth.test.js.map +1 -0
  513. package/dist/tests/cloud-crypto.test.d.ts +2 -0
  514. package/dist/tests/cloud-crypto.test.d.ts.map +1 -0
  515. package/dist/tests/cloud-crypto.test.js +58 -0
  516. package/dist/tests/cloud-crypto.test.js.map +1 -0
  517. package/dist/tests/cloud-integration.test.d.ts +2 -0
  518. package/dist/tests/cloud-integration.test.d.ts.map +1 -0
  519. package/dist/tests/cloud-integration.test.js +193 -0
  520. package/dist/tests/cloud-integration.test.js.map +1 -0
  521. package/dist/tests/cloud-pairing.test.d.ts +2 -0
  522. package/dist/tests/cloud-pairing.test.d.ts.map +1 -0
  523. package/dist/tests/cloud-pairing.test.js +86 -0
  524. package/dist/tests/cloud-pairing.test.js.map +1 -0
  525. package/dist/tests/cloud-saves-integration.test.d.ts +2 -0
  526. package/dist/tests/cloud-saves-integration.test.d.ts.map +1 -0
  527. package/dist/tests/cloud-saves-integration.test.js +92 -0
  528. package/dist/tests/cloud-saves-integration.test.js.map +1 -0
  529. package/dist/tests/cloud-transit.test.d.ts +2 -0
  530. package/dist/tests/cloud-transit.test.d.ts.map +1 -0
  531. package/dist/tests/cloud-transit.test.js +263 -0
  532. package/dist/tests/cloud-transit.test.js.map +1 -0
  533. package/dist/tests/config.test.d.ts +2 -0
  534. package/dist/tests/config.test.d.ts.map +1 -0
  535. package/dist/tests/config.test.js +25 -0
  536. package/dist/tests/config.test.js.map +1 -0
  537. package/dist/tests/db.test.d.ts +2 -0
  538. package/dist/tests/db.test.d.ts.map +1 -0
  539. package/dist/tests/db.test.js +75 -0
  540. package/dist/tests/db.test.js.map +1 -0
  541. package/dist/tests/embeddings-providers.test.d.ts +2 -0
  542. package/dist/tests/embeddings-providers.test.d.ts.map +1 -0
  543. package/dist/tests/embeddings-providers.test.js +62 -0
  544. package/dist/tests/embeddings-providers.test.js.map +1 -0
  545. package/dist/tests/embeddings.test.d.ts +2 -0
  546. package/dist/tests/embeddings.test.d.ts.map +1 -0
  547. package/dist/tests/embeddings.test.js +22 -0
  548. package/dist/tests/embeddings.test.js.map +1 -0
  549. package/dist/tests/integrations-api.test.d.ts +2 -0
  550. package/dist/tests/integrations-api.test.d.ts.map +1 -0
  551. package/dist/tests/integrations-api.test.js +129 -0
  552. package/dist/tests/integrations-api.test.js.map +1 -0
  553. package/dist/tests/memory-store.test.d.ts +2 -0
  554. package/dist/tests/memory-store.test.d.ts.map +1 -0
  555. package/dist/tests/memory-store.test.js +129 -0
  556. package/dist/tests/memory-store.test.js.map +1 -0
  557. package/dist/tests/module-registry.test.d.ts +2 -0
  558. package/dist/tests/module-registry.test.d.ts.map +1 -0
  559. package/dist/tests/module-registry.test.js +44 -0
  560. package/dist/tests/module-registry.test.js.map +1 -0
  561. package/dist/tests/property-extractor.test.d.ts +2 -0
  562. package/dist/tests/property-extractor.test.d.ts.map +1 -0
  563. package/dist/tests/property-extractor.test.js +24 -0
  564. package/dist/tests/property-extractor.test.js.map +1 -0
  565. package/dist/tests/public-tools.test.d.ts +2 -0
  566. package/dist/tests/public-tools.test.d.ts.map +1 -0
  567. package/dist/tests/public-tools.test.js +270 -0
  568. package/dist/tests/public-tools.test.js.map +1 -0
  569. package/dist/tests/reindex.test.d.ts +2 -0
  570. package/dist/tests/reindex.test.d.ts.map +1 -0
  571. package/dist/tests/reindex.test.js +58 -0
  572. package/dist/tests/reindex.test.js.map +1 -0
  573. package/dist/tests/shamir.test.d.ts +2 -0
  574. package/dist/tests/shamir.test.d.ts.map +1 -0
  575. package/dist/tests/shamir.test.js +57 -0
  576. package/dist/tests/shamir.test.js.map +1 -0
  577. package/dist/tests/source-registry.test.d.ts +2 -0
  578. package/dist/tests/source-registry.test.d.ts.map +1 -0
  579. package/dist/tests/source-registry.test.js +58 -0
  580. package/dist/tests/source-registry.test.js.map +1 -0
  581. package/dist/tests/types.test.d.ts +2 -0
  582. package/dist/tests/types.test.d.ts.map +1 -0
  583. package/dist/tests/types.test.js +26 -0
  584. package/dist/tests/types.test.js.map +1 -0
  585. package/dist/tests/vector.test.d.ts +2 -0
  586. package/dist/tests/vector.test.d.ts.map +1 -0
  587. package/dist/tests/vector.test.js +61 -0
  588. package/dist/tests/vector.test.js.map +1 -0
  589. package/dist/tests/wikilinks.test.d.ts +2 -0
  590. package/dist/tests/wikilinks.test.d.ts.map +1 -0
  591. package/dist/tests/wikilinks.test.js +20 -0
  592. package/dist/tests/wikilinks.test.js.map +1 -0
  593. package/dist/tools/index.d.ts +22 -0
  594. package/dist/tools/index.d.ts.map +1 -0
  595. package/dist/tools/index.js +38 -0
  596. package/dist/tools/index.js.map +1 -0
  597. package/dist/types.d.ts +134 -0
  598. package/dist/types.d.ts.map +1 -0
  599. package/dist/types.js +25 -0
  600. package/dist/types.js.map +1 -0
  601. package/dist/vector/store.d.ts +28 -0
  602. package/dist/vector/store.d.ts.map +1 -0
  603. package/dist/vector/store.js +132 -0
  604. package/dist/vector/store.js.map +1 -0
  605. package/dist/webapp/api/daily.d.ts +3 -0
  606. package/dist/webapp/api/daily.d.ts.map +1 -0
  607. package/dist/webapp/api/daily.js +44 -0
  608. package/dist/webapp/api/daily.js.map +1 -0
  609. package/dist/webapp/api/graph.d.ts +26 -0
  610. package/dist/webapp/api/graph.d.ts.map +1 -0
  611. package/dist/webapp/api/graph.js +80 -0
  612. package/dist/webapp/api/graph.js.map +1 -0
  613. package/dist/webapp/api/memories.d.ts +4 -0
  614. package/dist/webapp/api/memories.d.ts.map +1 -0
  615. package/dist/webapp/api/memories.js +70 -0
  616. package/dist/webapp/api/memories.js.map +1 -0
  617. package/dist/webapp/api/reindex.d.ts +3 -0
  618. package/dist/webapp/api/reindex.d.ts.map +1 -0
  619. package/dist/webapp/api/reindex.js +18 -0
  620. package/dist/webapp/api/reindex.js.map +1 -0
  621. package/dist/webapp/api/settings.d.ts +3 -0
  622. package/dist/webapp/api/settings.d.ts.map +1 -0
  623. package/dist/webapp/api/settings.js +24 -0
  624. package/dist/webapp/api/settings.js.map +1 -0
  625. package/dist/webapp/api/sources.d.ts +4 -0
  626. package/dist/webapp/api/sources.d.ts.map +1 -0
  627. package/dist/webapp/api/sources.js +45 -0
  628. package/dist/webapp/api/sources.js.map +1 -0
  629. package/dist/webapp/api/sync-status.d.ts +3 -0
  630. package/dist/webapp/api/sync-status.d.ts.map +1 -0
  631. package/dist/webapp/api/sync-status.js +43 -0
  632. package/dist/webapp/api/sync-status.js.map +1 -0
  633. package/dist/webapp/api/types.d.ts +3 -0
  634. package/dist/webapp/api/types.d.ts.map +1 -0
  635. package/dist/webapp/api/types.js +20 -0
  636. package/dist/webapp/api/types.js.map +1 -0
  637. package/dist/webapp/api/views.d.ts +25 -0
  638. package/dist/webapp/api/views.d.ts.map +1 -0
  639. package/dist/webapp/api/views.js +54 -0
  640. package/dist/webapp/api/views.js.map +1 -0
  641. package/dist/webapp/mcp-http.d.ts +2 -0
  642. package/dist/webapp/mcp-http.d.ts.map +1 -0
  643. package/dist/webapp/mcp-http.js +3 -0
  644. package/dist/webapp/mcp-http.js.map +1 -0
  645. package/dist/webapp/server.d.ts +2 -0
  646. package/dist/webapp/server.d.ts.map +1 -0
  647. package/dist/webapp/server.js +3 -0
  648. package/dist/webapp/server.js.map +1 -0
  649. package/dist/webapp/tests/api.test.d.ts +2 -0
  650. package/dist/webapp/tests/api.test.d.ts.map +1 -0
  651. package/dist/webapp/tests/api.test.js +125 -0
  652. package/dist/webapp/tests/api.test.js.map +1 -0
  653. package/dist/webapp/tests/mcp-http.test.d.ts +2 -0
  654. package/dist/webapp/tests/mcp-http.test.d.ts.map +1 -0
  655. package/dist/webapp/tests/mcp-http.test.js +47 -0
  656. package/dist/webapp/tests/mcp-http.test.js.map +1 -0
  657. package/dist/webapp/websocket.d.ts +2 -0
  658. package/dist/webapp/websocket.d.ts.map +1 -0
  659. package/dist/webapp/websocket.js +3 -0
  660. package/dist/webapp/websocket.js.map +1 -0
  661. package/package.json +128 -0
  662. package/src/private/README.md +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-status.js","sourceRoot":"","sources":["../../../src/webapp/api/sync-status.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC9D,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,EAAE,GAAG,KAAK,EAAE,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;YACvD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,uDAAuD;QACvD,MAAM,SAAS,GAAG,EAAE;aACjB,OAAO,CAAC,sEAAsE,CAAC;aAC/E,GAAG,EAAE,CAAC;QAET,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAChB,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,EAC1E,CAAC,CAAC,CAAC;QAEJ,MAAM,YAAY,GAChB,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,EACtE,CAAC,CAAC,CAAC;QAEJ,MAAM,UAAU,GACd,EAAE;aACC,OAAO,CAAC,0DAA0D,CAAC;aACnE,GAAG,EACP,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAG,EAAE;aACjB,OAAO,CAAC,uEAAuE,CAAC;aAChF,GAAG,EAA+E,CAAC;QAEtF,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,SAAS;YACpB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;YACnE,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,CAAC;YACtC,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE,YAAY;YACzB,eAAe,EAAE,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Router } from 'express';
2
+ export declare function typesApi(): Router;
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webapp/api/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,wBAAgB,QAAQ,IAAI,MAAM,CAcjC"}
@@ -0,0 +1,20 @@
1
+ // src/webapp/api/types.ts
2
+ import { Router } from 'express';
3
+ import { moduleRegistry } from '../../memory/core/module-registry.js';
4
+ import { listCustomTypes } from '../../memory/modules/_custom/persistence.js';
5
+ export function typesApi() {
6
+ const r = Router();
7
+ r.get('/', (_req, res) => {
8
+ const builtins = moduleRegistry.list()
9
+ .filter((m) => !m.isCustom)
10
+ .map((m) => ({ id: m.id, display_name: m.displayName, is_custom: false }));
11
+ const customs = listCustomTypes().map((d) => ({
12
+ id: d.type_name,
13
+ display_name: d.display_name,
14
+ is_custom: true,
15
+ }));
16
+ res.json([...builtins, ...customs]);
17
+ });
18
+ return r;
19
+ }
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/webapp/api/types.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAE9E,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IACnB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,EAAE,EAAE,CAAC,CAAC,SAAS;YACf,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC,CAAC;QACJ,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Router } from 'express';
2
+ export interface SavedView {
3
+ id: string;
4
+ name: string;
5
+ description: string | null;
6
+ definition: {
7
+ filters?: Array<{
8
+ field: string;
9
+ op: string;
10
+ value: unknown;
11
+ }>;
12
+ sort?: {
13
+ field: string;
14
+ direction: 'asc' | 'desc';
15
+ };
16
+ group_by?: string;
17
+ layout?: 'table' | 'gallery' | 'list';
18
+ types?: string[];
19
+ };
20
+ pinned: boolean;
21
+ created_at: number;
22
+ updated_at: number;
23
+ }
24
+ export declare function viewsApi(): Router;
25
+ //# sourceMappingURL=views.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../../src/webapp/api/views.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE;QACV,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;SAAE,CAAC;QACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,IAAI,MAAM,CA0EjC"}
@@ -0,0 +1,54 @@
1
+ // src/webapp/api/views.ts
2
+ import { Router } from 'express';
3
+ import { ulid } from 'ulid';
4
+ import { getDb } from '../../db/index.js';
5
+ export function viewsApi() {
6
+ const r = Router();
7
+ r.get('/', (_req, res) => {
8
+ const rows = getDb()
9
+ .prepare(`SELECT * FROM saved_views ORDER BY pinned DESC, updated_at DESC`)
10
+ .all();
11
+ res.json(rows.map((row) => ({
12
+ id: row.id,
13
+ name: row.name,
14
+ description: row.description ?? null,
15
+ definition: JSON.parse(row.definition_json),
16
+ pinned: !!row.pinned,
17
+ created_at: row.created_at,
18
+ updated_at: row.updated_at,
19
+ })));
20
+ });
21
+ r.post('/', (req, res) => {
22
+ const body = req.body;
23
+ if (!body.name || !body.definition) {
24
+ res.status(400).json({ error: 'name and definition required' });
25
+ return;
26
+ }
27
+ const id = ulid();
28
+ const now = Date.now();
29
+ getDb()
30
+ .prepare(`INSERT INTO saved_views
31
+ (id, name, description, definition_json, pinned, created_at, updated_at)
32
+ VALUES (?, ?, ?, ?, ?, ?, ?)`)
33
+ .run(id, body.name, body.description ?? null, JSON.stringify(body.definition), body.pinned ? 1 : 0, now, now);
34
+ res.json({ id });
35
+ });
36
+ r.put('/:id', (req, res) => {
37
+ const body = req.body;
38
+ getDb()
39
+ .prepare(`UPDATE saved_views SET name = COALESCE(?, name),
40
+ description = COALESCE(?, description),
41
+ definition_json = COALESCE(?, definition_json),
42
+ pinned = COALESCE(?, pinned),
43
+ updated_at = ?
44
+ WHERE id = ?`)
45
+ .run(body.name ?? null, body.description ?? null, body.definition ? JSON.stringify(body.definition) : null, body.pinned !== undefined ? (body.pinned ? 1 : 0) : null, Date.now(), req.params.id);
46
+ res.json({ updated: req.params.id });
47
+ });
48
+ r.delete('/:id', (req, res) => {
49
+ getDb().prepare('DELETE FROM saved_views WHERE id = ?').run(req.params.id);
50
+ res.json({ deleted: req.params.id });
51
+ });
52
+ return r;
53
+ }
54
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/webapp/api/views.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from '../core/server/mcp-http.js';
2
+ //# sourceMappingURL=mcp-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http.d.ts","sourceRoot":"","sources":["../../src/webapp/mcp-http.ts"],"names":[],"mappings":"AACA,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export shim — canonical location is src/core/server/mcp-http.ts
2
+ export * from '../core/server/mcp-http.js';
3
+ //# sourceMappingURL=mcp-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http.js","sourceRoot":"","sources":["../../src/webapp/mcp-http.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from '../core/server/http.js';
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/webapp/server.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export shim — canonical location is src/core/server/http.ts
2
+ export * from '../core/server/http.js';
3
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/webapp/server.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../../../src/webapp/tests/api.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ // src/webapp/tests/api.test.ts
2
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
3
+ import fs from 'fs';
4
+ import os from 'os';
5
+ import path from 'path';
6
+ import express from 'express';
7
+ import { initDb, closeDb } from '../../db/index.js';
8
+ import { initVectorStore } from '../../vector/store.js';
9
+ import { MemoryStore } from '../../memory/core/store.js';
10
+ import { memoriesApi } from '../api/memories.js';
11
+ import { viewsApi } from '../api/views.js';
12
+ import { dailyApi } from '../api/daily.js';
13
+ import { settingsApi } from '../api/settings.js';
14
+ import { ulid } from 'ulid';
15
+ const embeddingsConfig = {
16
+ provider: 'ollama',
17
+ baseUrl: 'http://localhost:11434',
18
+ model: 'nomic-embed-text',
19
+ dimensions: 768,
20
+ };
21
+ describe('webapp REST API', () => {
22
+ let tmpDir;
23
+ let store;
24
+ let app;
25
+ beforeEach(async () => {
26
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-api-'));
27
+ initDb(tmpDir);
28
+ initVectorStore(tmpDir);
29
+ store = new MemoryStore({ embeddings: embeddingsConfig });
30
+ app = express();
31
+ // strict: false is required so settings can store any JSON value (string, number, bool, etc.)
32
+ app.use(express.json({ strict: false }));
33
+ app.use('/api/memories', memoriesApi(store));
34
+ app.use('/api/views', viewsApi());
35
+ app.use('/api/daily', dailyApi());
36
+ app.use('/api/settings', settingsApi());
37
+ });
38
+ afterEach(() => {
39
+ closeDb();
40
+ fs.rmSync(tmpDir, { recursive: true, force: true });
41
+ });
42
+ it('memories: list + get + delete', async () => {
43
+ const now = new Date().toISOString();
44
+ const id = ulid();
45
+ await store.insert({
46
+ id,
47
+ type: 'notes',
48
+ source_id: 'x',
49
+ content: 'hello',
50
+ content_hash: 'h',
51
+ properties: { created_at: now, ingested_at: now },
52
+ wikilinks: [],
53
+ related_ids: [],
54
+ embedding_model: 'm',
55
+ });
56
+ const server = app.listen(0);
57
+ const port = server.address().port;
58
+ try {
59
+ const list = await fetch(`http://localhost:${port}/api/memories`);
60
+ const body = (await list.json());
61
+ expect(body.some((m) => m.id === id)).toBe(true);
62
+ const single = await fetch(`http://localhost:${port}/api/memories/${id}`);
63
+ const itemBody = (await single.json());
64
+ expect(itemBody.content).toBe('hello');
65
+ const del = await fetch(`http://localhost:${port}/api/memories/${id}`, {
66
+ method: 'DELETE',
67
+ });
68
+ expect(del.ok).toBe(true);
69
+ expect(store.getById(id)).toBeUndefined();
70
+ }
71
+ finally {
72
+ await new Promise((resolve) => server.close(() => resolve()));
73
+ }
74
+ });
75
+ it('views: create + list + update + delete', async () => {
76
+ const server = app.listen(0);
77
+ const port = server.address().port;
78
+ try {
79
+ const create = await fetch(`http://localhost:${port}/api/views`, {
80
+ method: 'POST',
81
+ headers: { 'Content-Type': 'application/json' },
82
+ body: JSON.stringify({
83
+ name: 'Recent notes',
84
+ definition: { filters: [{ field: 'type', op: 'eq', value: 'notes' }] },
85
+ }),
86
+ });
87
+ const { id } = (await create.json());
88
+ const list = await fetch(`http://localhost:${port}/api/views`);
89
+ const views = (await list.json());
90
+ expect(views.find((v) => v.id === id)?.name).toBe('Recent notes');
91
+ const upd = await fetch(`http://localhost:${port}/api/views/${id}`, {
92
+ method: 'PUT',
93
+ headers: { 'Content-Type': 'application/json' },
94
+ body: JSON.stringify({ name: 'Renamed' }),
95
+ });
96
+ expect(upd.ok).toBe(true);
97
+ const del = await fetch(`http://localhost:${port}/api/views/${id}`, {
98
+ method: 'DELETE',
99
+ });
100
+ expect(del.ok).toBe(true);
101
+ }
102
+ finally {
103
+ await new Promise((resolve) => server.close(() => resolve()));
104
+ }
105
+ });
106
+ it('settings: read/write', async () => {
107
+ const server = app.listen(0);
108
+ const port = server.address().port;
109
+ try {
110
+ const put = await fetch(`http://localhost:${port}/api/settings/theme`, {
111
+ method: 'PUT',
112
+ headers: { 'Content-Type': 'application/json' },
113
+ body: JSON.stringify('dark'),
114
+ });
115
+ expect(put.ok).toBe(true);
116
+ const get = await fetch(`http://localhost:${port}/api/settings`);
117
+ const body = (await get.json());
118
+ expect(body.theme).toBe('dark');
119
+ }
120
+ finally {
121
+ await new Promise((resolve) => server.close(() => resolve()));
122
+ }
123
+ });
124
+ });
125
+ //# sourceMappingURL=api.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.test.js","sourceRoot":"","sources":["../../../src/webapp/tests/api.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-http.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http.test.d.ts","sourceRoot":"","sources":["../../../src/webapp/tests/mcp-http.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
2
+ import express from 'express';
3
+ import { ToolRouter } from '../../mcp-server/tool-router.js';
4
+ import { mountMcpHttp } from '../mcp-http.js';
5
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
6
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
7
+ describe('HTTP MCP transport', () => {
8
+ let server;
9
+ let baseUrl;
10
+ let client;
11
+ beforeAll(async () => {
12
+ const router = new ToolRouter();
13
+ router.register({
14
+ name: 'echo',
15
+ description: 'echo back',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: { text: { type: 'string' } },
19
+ required: ['text'],
20
+ },
21
+ handler: async (args) => ({ echoed: args.text }),
22
+ });
23
+ const app = express();
24
+ mountMcpHttp(app, router);
25
+ server = app.listen(0);
26
+ const address = server.address();
27
+ const port = typeof address === 'object' && address ? address.port : 0;
28
+ baseUrl = `http://localhost:${port}`;
29
+ const transport = new StreamableHTTPClientTransport(new URL(`${baseUrl}/mcp`));
30
+ client = new Client({ name: 'mcp-http-test', version: '0.0.0' }, { capabilities: {} });
31
+ await client.connect(transport);
32
+ }, 15_000);
33
+ afterAll(async () => {
34
+ await client.close();
35
+ await new Promise((resolve) => server.close(() => resolve()));
36
+ });
37
+ it('lists tools', async () => {
38
+ const res = await client.listTools();
39
+ expect(res.tools.map((t) => t.name)).toContain('echo');
40
+ });
41
+ it('calls a tool', async () => {
42
+ const res = await client.callTool({ name: 'echo', arguments: { text: 'hi' } });
43
+ const payload = JSON.parse(res.content[0].text);
44
+ expect(payload.echoed).toBe('hi');
45
+ });
46
+ });
47
+ //# sourceMappingURL=mcp-http.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http.test.js","sourceRoot":"","sources":["../../../src/webapp/tests/mcp-http.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from '../core/server/websocket.js';
2
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/webapp/websocket.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export shim — canonical location is src/core/server/websocket.ts
2
+ export * from '../core/server/websocket.js';
3
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/webapp/websocket.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,cAAc,6BAA6B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,128 @@
1
+ {
2
+ "name": "@raviolelabs/engram-mcp",
3
+ "version": "0.2.0",
4
+ "description": "EngramMCP \u2014 local-first semantic memory layer for AI agents",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "engram-mcp": "dist/scripts/serve.js",
9
+ "engram-mcp-install": "dist/scripts/install.js",
10
+ "engram-mcp-pair": "dist/scripts/pair.js",
11
+ "engram-mcp-rebuild": "dist/scripts/rebuild.js",
12
+ "engram-mcp-service": "dist/scripts/service.js"
13
+ },
14
+ "scripts": {
15
+ "dev": "tsx watch src/scripts/serve.ts",
16
+ "reindex": "tsx src/scripts/reindex.ts",
17
+ "install:wizard": "tsx src/scripts/install.ts",
18
+ "pair": "tsx src/scripts/pair.ts",
19
+ "rebuild": "tsx src/scripts/rebuild.ts",
20
+ "build": "tsc && chmod +x dist/scripts/serve.js dist/scripts/install.js dist/scripts/pair.js dist/scripts/rebuild.js dist/scripts/service.js",
21
+ "pack-binary": "tsx scripts/pack-binary.ts",
22
+ "start": "node dist/scripts/serve.js",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "lint": "eslint src/",
26
+ "lint:fix": "eslint src/ --fix",
27
+ "format": "prettier --write src/",
28
+ "format:check": "prettier --check src/",
29
+ "dev:client": "vite --config src/client/vite.config.ts",
30
+ "build:client": "vite build --config src/client/vite.config.ts",
31
+ "build:all": "npm run build:client && npm run build"
32
+ },
33
+ "dependencies": {
34
+ "@lancedb/lancedb": "0.27.1",
35
+ "@modelcontextprotocol/sdk": "1.28.0",
36
+ "@notionhq/client": "2.3.0",
37
+ "@tanstack/react-query": "^5.50.0",
38
+ "@types/multer": "^2.1.0",
39
+ "better-sqlite3": "^12.8.0",
40
+ "cytoscape": "^3.33.3",
41
+ "cytoscape-fcose": "^2.2.0",
42
+ "express": "^5.0.0",
43
+ "fast-xml-parser": "^5.8.0",
44
+ "googleapis": "144.0.0",
45
+ "libsodium-wrappers": "^0.8.4",
46
+ "multer": "^2.1.1",
47
+ "node-cron": "3.0.3",
48
+ "nodejs-whisper": "^0.2.4",
49
+ "pdf-parse": "^2.4.5",
50
+ "react": "^19.0.0",
51
+ "react-dom": "^19.0.0",
52
+ "react-router-dom": "^7.0.0",
53
+ "secrets.js-grempe": "^2.0.0",
54
+ "ulid": "2.4.0",
55
+ "ws": "^8.18.0",
56
+ "zod": "3.25.76"
57
+ },
58
+ "devDependencies": {
59
+ "@tailwindcss/postcss": "^4.3.0",
60
+ "@types/better-sqlite3": "^7.6.13",
61
+ "@types/cytoscape": "^3.21.9",
62
+ "@types/express": "^5.0.0",
63
+ "@types/libsodium-wrappers": "^0.7.14",
64
+ "@types/node": "^22.0.0",
65
+ "@types/node-cron": "3.0.11",
66
+ "@types/pdf-parse": "^1.1.5",
67
+ "@types/react": "^19.0.0",
68
+ "@types/react-dom": "^19.0.0",
69
+ "@types/ws": "^8.5.0",
70
+ "@typescript-eslint/eslint-plugin": "^8.59.3",
71
+ "@typescript-eslint/parser": "^8.59.3",
72
+ "@vitejs/plugin-react": "^4.3.0",
73
+ "@yao-pkg/pkg": "^5.12.0",
74
+ "autoprefixer": "^10.4.0",
75
+ "eslint": "^9.0.0",
76
+ "postcss": "^8.4.0",
77
+ "prettier": "^3.0.0",
78
+ "tailwindcss": "^4.0.0",
79
+ "tsx": "^4.0.0",
80
+ "typescript": "^5.7.0",
81
+ "vite": "^5.4.0",
82
+ "vitest": "^2.0.0"
83
+ },
84
+ "engines": {
85
+ "node": ">=22"
86
+ },
87
+ "files": [
88
+ "dist/",
89
+ "src/private/README.md",
90
+ "README.md",
91
+ "SKILL.md",
92
+ "CLAUDE.md",
93
+ "LICENSE"
94
+ ],
95
+ "publishConfig": {
96
+ "access": "public",
97
+ "registry": "https://registry.npmjs.org/"
98
+ },
99
+ "pkg": {
100
+ "assets": [
101
+ "dist/**/*.json",
102
+ "dist/**/*.node"
103
+ ],
104
+ "scripts": [
105
+ "dist/**/*.js"
106
+ ]
107
+ },
108
+ "homepage": "https://engram-mcp.com",
109
+ "repository": {
110
+ "type": "git",
111
+ "url": "git+https://github.com/RavioleLabs/engram-mcp.git"
112
+ },
113
+ "bugs": {
114
+ "url": "https://github.com/RavioleLabs/engram-mcp/issues"
115
+ },
116
+ "keywords": [
117
+ "mcp",
118
+ "memory",
119
+ "semantic-search",
120
+ "embeddings",
121
+ "local-first",
122
+ "rag",
123
+ "ai-agents",
124
+ "claude",
125
+ "cursor"
126
+ ],
127
+ "author": "RavioleLabs <hello@raviolelabs.com> (https://raviolelabs.com)"
128
+ }
@@ -0,0 +1,49 @@
1
+ # src/private/ — Engram Premium Extensions
2
+
3
+ This directory is **GITIGNORED** and only ships on hosted Engram deployments.
4
+
5
+ The public OSS repository (`github.com/RavioleLabs/engram-mcp`) does not include this directory.
6
+ When building from source (OSS), the dynamic import in `src/tools/index.ts` gracefully skips this
7
+ directory if it is absent.
8
+
9
+ ## Structure
10
+
11
+ ```
12
+ src/private/
13
+ ├── index.ts # Entry: exports registerPrivateExtensions(ctx)
14
+ ├── README.md # This file
15
+ ├── tools/ # Premium MCP tools
16
+ │ ├── smart-search.ts # Advanced cross-cut semantic ranking (cross-encoder)
17
+ │ ├── auto-categorize.ts # ML-based custom type suggestion
18
+ │ └── index.ts
19
+ ├── algorithms/ # Smarter OSS algorithm overrides
20
+ │ ├── advanced-find-related.ts # Multi-signal weighted relation discovery
21
+ │ └── memory-clustering.ts # Graph clustering for memory organization
22
+ └── prompts/ # Carefully-tuned LLM prompts (IP)
23
+ └── extraction-system.ts # Property extraction system prompt (v2)
24
+ ```
25
+
26
+ ## Candidates for migration here (from OSS)
27
+
28
+ | OSS location | What to move | Status |
29
+ |---|---|---|
30
+ | `src/memory/core/property-extractor.ts` | `SYSTEM_PROMPT` constant | Planned |
31
+ | `src/memory/core/store.ts` `findRelated()` | Advanced multi-signal version | Planned |
32
+ | `src/memory/public/tools.ts` `search_all` | Cross-encoder re-ranking | Planned |
33
+ | `src/memory/public/tools.ts` `suggest_properties` | Optimized prompt template | Planned |
34
+
35
+ ## How to add a new private tool
36
+
37
+ 1. Create `src/private/tools/my-tool.ts` implementing `MCPToolDefinition`
38
+ 2. Add a `registerMyTool(ctx)` export
39
+ 3. Import and call it from `src/private/index.ts` `registerPrivateExtensions`
40
+ 4. The tool will appear in the MCP server alongside public tools
41
+
42
+ ## How to override a public algorithm
43
+
44
+ 1. Create `src/private/algorithms/my-override.ts`
45
+ 2. Export a function with the same signature as the OSS version
46
+ 3. In `src/private/index.ts`, patch the relevant module/store method:
47
+ ```ts
48
+ ctx.store.findRelated = myAdvancedFindRelated.bind(null, ctx.store);
49
+ ```