@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.
- package/CLAUDE.md +232 -0
- package/LICENSE +21 -0
- package/README.md +222 -0
- package/SKILL.md +299 -0
- package/dist/cloud/auth.d.ts +29 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +132 -0
- package/dist/cloud/auth.js.map +1 -0
- package/dist/cloud/bridge-client.d.ts +10 -0
- package/dist/cloud/bridge-client.d.ts.map +1 -0
- package/dist/cloud/bridge-client.js +167 -0
- package/dist/cloud/bridge-client.js.map +1 -0
- package/dist/cloud/crypto.d.ts +42 -0
- package/dist/cloud/crypto.d.ts.map +1 -0
- package/dist/cloud/crypto.js +146 -0
- package/dist/cloud/crypto.js.map +1 -0
- package/dist/cloud/endpoints.d.ts +26 -0
- package/dist/cloud/endpoints.d.ts.map +1 -0
- package/dist/cloud/endpoints.js +26 -0
- package/dist/cloud/endpoints.js.map +1 -0
- package/dist/cloud/pairing.d.ts +30 -0
- package/dist/cloud/pairing.d.ts.map +1 -0
- package/dist/cloud/pairing.js +157 -0
- package/dist/cloud/pairing.js.map +1 -0
- package/dist/cloud/transit-poller.d.ts +35 -0
- package/dist/cloud/transit-poller.d.ts.map +1 -0
- package/dist/cloud/transit-poller.js +281 -0
- package/dist/cloud/transit-poller.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +24 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +466 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +171 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/db/index.d.ts +7 -0
- package/dist/core/db/index.d.ts.map +1 -0
- package/dist/core/db/index.js +273 -0
- package/dist/core/db/index.js.map +1 -0
- package/dist/core/logger.d.ts +19 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +223 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/server/http.d.ts +15 -0
- package/dist/core/server/http.d.ts.map +1 -0
- package/dist/core/server/http.js +76 -0
- package/dist/core/server/http.js.map +1 -0
- package/dist/core/server/instructions.d.ts +2 -0
- package/dist/core/server/instructions.d.ts.map +1 -0
- package/dist/core/server/instructions.js +36 -0
- package/dist/core/server/instructions.js.map +1 -0
- package/dist/core/server/mcp-handler.d.ts +39 -0
- package/dist/core/server/mcp-handler.d.ts.map +1 -0
- package/dist/core/server/mcp-handler.js +204 -0
- package/dist/core/server/mcp-handler.js.map +1 -0
- package/dist/core/server/mcp-http.d.ts +4 -0
- package/dist/core/server/mcp-http.d.ts.map +1 -0
- package/dist/core/server/mcp-http.js +56 -0
- package/dist/core/server/mcp-http.js.map +1 -0
- package/dist/core/server/tool-router.d.ts +9 -0
- package/dist/core/server/tool-router.d.ts.map +1 -0
- package/dist/core/server/tool-router.js +25 -0
- package/dist/core/server/tool-router.js.map +1 -0
- package/dist/core/server/websocket.d.ts +4 -0
- package/dist/core/server/websocket.d.ts.map +1 -0
- package/dist/core/server/websocket.js +25 -0
- package/dist/core/server/websocket.js.map +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +3 -0
- package/dist/db/index.js.map +1 -0
- package/dist/embeddings/index.d.ts +24 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +86 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/providers/engram.d.ts +7 -0
- package/dist/embeddings/providers/engram.d.ts.map +1 -0
- package/dist/embeddings/providers/engram.js +67 -0
- package/dist/embeddings/providers/engram.js.map +1 -0
- package/dist/embeddings/providers/ollama.d.ts +3 -0
- package/dist/embeddings/providers/ollama.d.ts.map +1 -0
- package/dist/embeddings/providers/ollama.js +9 -0
- package/dist/embeddings/providers/ollama.js.map +1 -0
- package/dist/embeddings/providers/openai-compat.d.ts +7 -0
- package/dist/embeddings/providers/openai-compat.d.ts.map +1 -0
- package/dist/embeddings/providers/openai-compat.js +27 -0
- package/dist/embeddings/providers/openai-compat.js.map +1 -0
- package/dist/embeddings/providers/openai.d.ts +3 -0
- package/dist/embeddings/providers/openai.d.ts.map +1 -0
- package/dist/embeddings/providers/openai.js +12 -0
- package/dist/embeddings/providers/openai.js.map +1 -0
- package/dist/embeddings/providers/voyage.d.ts +3 -0
- package/dist/embeddings/providers/voyage.d.ts.map +1 -0
- package/dist/embeddings/providers/voyage.js +12 -0
- package/dist/embeddings/providers/voyage.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/jobs.d.ts +29 -0
- package/dist/ingest/jobs.d.ts.map +1 -0
- package/dist/ingest/jobs.js +131 -0
- package/dist/ingest/jobs.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp-server/server.d.ts +2 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +3 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tests/mcp-e2e.test.d.ts +2 -0
- package/dist/mcp-server/tests/mcp-e2e.test.d.ts.map +1 -0
- package/dist/mcp-server/tests/mcp-e2e.test.js +157 -0
- package/dist/mcp-server/tests/mcp-e2e.test.js.map +1 -0
- package/dist/mcp-server/tool-router.d.ts +2 -0
- package/dist/mcp-server/tool-router.d.ts.map +1 -0
- package/dist/mcp-server/tool-router.js +3 -0
- package/dist/mcp-server/tool-router.js.map +1 -0
- package/dist/memory/admin/tools.d.ts +6 -0
- package/dist/memory/admin/tools.d.ts.map +1 -0
- package/dist/memory/admin/tools.js +134 -0
- package/dist/memory/admin/tools.js.map +1 -0
- package/dist/memory/core/chunker.d.ts +6 -0
- package/dist/memory/core/chunker.d.ts.map +1 -0
- package/dist/memory/core/chunker.js +49 -0
- package/dist/memory/core/chunker.js.map +1 -0
- package/dist/memory/core/module-interface.d.ts +23 -0
- package/dist/memory/core/module-interface.d.ts.map +1 -0
- package/dist/memory/core/module-interface.js +2 -0
- package/dist/memory/core/module-interface.js.map +1 -0
- package/dist/memory/core/module-registry.d.ts +14 -0
- package/dist/memory/core/module-registry.d.ts.map +1 -0
- package/dist/memory/core/module-registry.js +45 -0
- package/dist/memory/core/module-registry.js.map +1 -0
- package/dist/memory/core/property-extractor.d.ts +6 -0
- package/dist/memory/core/property-extractor.d.ts.map +1 -0
- package/dist/memory/core/property-extractor.js +90 -0
- package/dist/memory/core/property-extractor.js.map +1 -0
- package/dist/memory/core/reindex.d.ts +11 -0
- package/dist/memory/core/reindex.d.ts.map +1 -0
- package/dist/memory/core/reindex.js +55 -0
- package/dist/memory/core/reindex.js.map +1 -0
- package/dist/memory/core/source-registry.d.ts +42 -0
- package/dist/memory/core/source-registry.d.ts.map +1 -0
- package/dist/memory/core/source-registry.js +86 -0
- package/dist/memory/core/source-registry.js.map +1 -0
- package/dist/memory/core/store.d.ts +40 -0
- package/dist/memory/core/store.d.ts.map +1 -0
- package/dist/memory/core/store.js +257 -0
- package/dist/memory/core/store.js.map +1 -0
- package/dist/memory/core/wikilinks.d.ts +13 -0
- package/dist/memory/core/wikilinks.d.ts.map +1 -0
- package/dist/memory/core/wikilinks.js +25 -0
- package/dist/memory/core/wikilinks.js.map +1 -0
- package/dist/memory/modules/_custom/generic-module.d.ts +7 -0
- package/dist/memory/modules/_custom/generic-module.d.ts.map +1 -0
- package/dist/memory/modules/_custom/generic-module.js +108 -0
- package/dist/memory/modules/_custom/generic-module.js.map +1 -0
- package/dist/memory/modules/_custom/persistence.d.ts +15 -0
- package/dist/memory/modules/_custom/persistence.d.ts.map +1 -0
- package/dist/memory/modules/_custom/persistence.js +47 -0
- package/dist/memory/modules/_custom/persistence.js.map +1 -0
- package/dist/memory/modules/_custom/tests/custom-types.test.d.ts +2 -0
- package/dist/memory/modules/_custom/tests/custom-types.test.d.ts.map +1 -0
- package/dist/memory/modules/_custom/tests/custom-types.test.js +89 -0
- package/dist/memory/modules/_custom/tests/custom-types.test.js.map +1 -0
- package/dist/memory/modules/_custom/tools.d.ts +7 -0
- package/dist/memory/modules/_custom/tools.d.ts.map +1 -0
- package/dist/memory/modules/_custom/tools.js +72 -0
- package/dist/memory/modules/_custom/tools.js.map +1 -0
- package/dist/memory/modules/audio/ingest.d.ts +9 -0
- package/dist/memory/modules/audio/ingest.d.ts.map +1 -0
- package/dist/memory/modules/audio/ingest.js +32 -0
- package/dist/memory/modules/audio/ingest.js.map +1 -0
- package/dist/memory/modules/audio/module.d.ts +6 -0
- package/dist/memory/modules/audio/module.d.ts.map +1 -0
- package/dist/memory/modules/audio/module.js +18 -0
- package/dist/memory/modules/audio/module.js.map +1 -0
- package/dist/memory/modules/audio/tests/audio.test.d.ts +2 -0
- package/dist/memory/modules/audio/tests/audio.test.d.ts.map +1 -0
- package/dist/memory/modules/audio/tests/audio.test.js +57 -0
- package/dist/memory/modules/audio/tests/audio.test.js.map +1 -0
- package/dist/memory/modules/audio/tests/transcriber.test.d.ts +2 -0
- package/dist/memory/modules/audio/tests/transcriber.test.d.ts.map +1 -0
- package/dist/memory/modules/audio/tests/transcriber.test.js +27 -0
- package/dist/memory/modules/audio/tests/transcriber.test.js.map +1 -0
- package/dist/memory/modules/audio/tools.d.ts +5 -0
- package/dist/memory/modules/audio/tools.d.ts.map +1 -0
- package/dist/memory/modules/audio/tools.js +60 -0
- package/dist/memory/modules/audio/tools.js.map +1 -0
- package/dist/memory/modules/audio/transcriber.d.ts +15 -0
- package/dist/memory/modules/audio/transcriber.d.ts.map +1 -0
- package/dist/memory/modules/audio/transcriber.js +177 -0
- package/dist/memory/modules/audio/transcriber.js.map +1 -0
- package/dist/memory/modules/conversations/ingest.d.ts +10 -0
- package/dist/memory/modules/conversations/ingest.d.ts.map +1 -0
- package/dist/memory/modules/conversations/ingest.js +38 -0
- package/dist/memory/modules/conversations/ingest.js.map +1 -0
- package/dist/memory/modules/conversations/module.d.ts +6 -0
- package/dist/memory/modules/conversations/module.d.ts.map +1 -0
- package/dist/memory/modules/conversations/module.js +43 -0
- package/dist/memory/modules/conversations/module.js.map +1 -0
- package/dist/memory/modules/conversations/tests/conversations.test.d.ts +2 -0
- package/dist/memory/modules/conversations/tests/conversations.test.d.ts.map +1 -0
- package/dist/memory/modules/conversations/tests/conversations.test.js +70 -0
- package/dist/memory/modules/conversations/tests/conversations.test.js.map +1 -0
- package/dist/memory/modules/conversations/tools.d.ts +5 -0
- package/dist/memory/modules/conversations/tools.d.ts.map +1 -0
- package/dist/memory/modules/conversations/tools.js +75 -0
- package/dist/memory/modules/conversations/tools.js.map +1 -0
- package/dist/memory/modules/drive/connector.d.ts +19 -0
- package/dist/memory/modules/drive/connector.d.ts.map +1 -0
- package/dist/memory/modules/drive/connector.js +52 -0
- package/dist/memory/modules/drive/connector.js.map +1 -0
- package/dist/memory/modules/drive/ingest.d.ts +9 -0
- package/dist/memory/modules/drive/ingest.d.ts.map +1 -0
- package/dist/memory/modules/drive/ingest.js +27 -0
- package/dist/memory/modules/drive/ingest.js.map +1 -0
- package/dist/memory/modules/drive/module.d.ts +6 -0
- package/dist/memory/modules/drive/module.d.ts.map +1 -0
- package/dist/memory/modules/drive/module.js +31 -0
- package/dist/memory/modules/drive/module.js.map +1 -0
- package/dist/memory/modules/drive/oauth.d.ts +14 -0
- package/dist/memory/modules/drive/oauth.d.ts.map +1 -0
- package/dist/memory/modules/drive/oauth.js +130 -0
- package/dist/memory/modules/drive/oauth.js.map +1 -0
- package/dist/memory/modules/drive/tests/drive.test.d.ts +2 -0
- package/dist/memory/modules/drive/tests/drive.test.d.ts.map +1 -0
- package/dist/memory/modules/drive/tests/drive.test.js +66 -0
- package/dist/memory/modules/drive/tests/drive.test.js.map +1 -0
- package/dist/memory/modules/drive/tools.d.ts +5 -0
- package/dist/memory/modules/drive/tools.d.ts.map +1 -0
- package/dist/memory/modules/drive/tools.js +131 -0
- package/dist/memory/modules/drive/tools.js.map +1 -0
- package/dist/memory/modules/drive/watcher.d.ts +5 -0
- package/dist/memory/modules/drive/watcher.d.ts.map +1 -0
- package/dist/memory/modules/drive/watcher.js +46 -0
- package/dist/memory/modules/drive/watcher.js.map +1 -0
- package/dist/memory/modules/notes/ingest.d.ts +3 -0
- package/dist/memory/modules/notes/ingest.d.ts.map +1 -0
- package/dist/memory/modules/notes/ingest.js +30 -0
- package/dist/memory/modules/notes/ingest.js.map +1 -0
- package/dist/memory/modules/notes/module.d.ts +5 -0
- package/dist/memory/modules/notes/module.d.ts.map +1 -0
- package/dist/memory/modules/notes/module.js +28 -0
- package/dist/memory/modules/notes/module.js.map +1 -0
- package/dist/memory/modules/notes/tests/notes.test.d.ts +2 -0
- package/dist/memory/modules/notes/tests/notes.test.d.ts.map +1 -0
- package/dist/memory/modules/notes/tests/notes.test.js +59 -0
- package/dist/memory/modules/notes/tests/notes.test.js.map +1 -0
- package/dist/memory/modules/notes/tools.d.ts +5 -0
- package/dist/memory/modules/notes/tools.d.ts.map +1 -0
- package/dist/memory/modules/notes/tools.js +69 -0
- package/dist/memory/modules/notes/tools.js.map +1 -0
- package/dist/memory/modules/notion/connector.d.ts +10 -0
- package/dist/memory/modules/notion/connector.d.ts.map +1 -0
- package/dist/memory/modules/notion/connector.js +112 -0
- package/dist/memory/modules/notion/connector.js.map +1 -0
- package/dist/memory/modules/notion/ingest.d.ts +9 -0
- package/dist/memory/modules/notion/ingest.d.ts.map +1 -0
- package/dist/memory/modules/notion/ingest.js +24 -0
- package/dist/memory/modules/notion/ingest.js.map +1 -0
- package/dist/memory/modules/notion/module.d.ts +6 -0
- package/dist/memory/modules/notion/module.d.ts.map +1 -0
- package/dist/memory/modules/notion/module.js +31 -0
- package/dist/memory/modules/notion/module.js.map +1 -0
- package/dist/memory/modules/notion/oauth.d.ts +19 -0
- package/dist/memory/modules/notion/oauth.d.ts.map +1 -0
- package/dist/memory/modules/notion/oauth.js +117 -0
- package/dist/memory/modules/notion/oauth.js.map +1 -0
- package/dist/memory/modules/notion/tests/notion.test.d.ts +2 -0
- package/dist/memory/modules/notion/tests/notion.test.d.ts.map +1 -0
- package/dist/memory/modules/notion/tests/notion.test.js +53 -0
- package/dist/memory/modules/notion/tests/notion.test.js.map +1 -0
- package/dist/memory/modules/notion/tools.d.ts +5 -0
- package/dist/memory/modules/notion/tools.d.ts.map +1 -0
- package/dist/memory/modules/notion/tools.js +116 -0
- package/dist/memory/modules/notion/tools.js.map +1 -0
- package/dist/memory/modules/notion/watcher.d.ts +5 -0
- package/dist/memory/modules/notion/watcher.d.ts.map +1 -0
- package/dist/memory/modules/notion/watcher.js +41 -0
- package/dist/memory/modules/notion/watcher.js.map +1 -0
- package/dist/memory/modules/obsidian/ingest.d.ts +9 -0
- package/dist/memory/modules/obsidian/ingest.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/ingest.js +80 -0
- package/dist/memory/modules/obsidian/ingest.js.map +1 -0
- package/dist/memory/modules/obsidian/module.d.ts +6 -0
- package/dist/memory/modules/obsidian/module.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/module.js +31 -0
- package/dist/memory/modules/obsidian/module.js.map +1 -0
- package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts +2 -0
- package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/tests/obsidian.test.js +65 -0
- package/dist/memory/modules/obsidian/tests/obsidian.test.js.map +1 -0
- package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts +2 -0
- package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/tests/vault-reader.test.js +37 -0
- package/dist/memory/modules/obsidian/tests/vault-reader.test.js.map +1 -0
- package/dist/memory/modules/obsidian/tools.d.ts +5 -0
- package/dist/memory/modules/obsidian/tools.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/tools.js +101 -0
- package/dist/memory/modules/obsidian/tools.js.map +1 -0
- package/dist/memory/modules/obsidian/vault-reader.d.ts +8 -0
- package/dist/memory/modules/obsidian/vault-reader.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/vault-reader.js +82 -0
- package/dist/memory/modules/obsidian/vault-reader.js.map +1 -0
- package/dist/memory/modules/obsidian/watcher.d.ts +5 -0
- package/dist/memory/modules/obsidian/watcher.d.ts.map +1 -0
- package/dist/memory/modules/obsidian/watcher.js +83 -0
- package/dist/memory/modules/obsidian/watcher.js.map +1 -0
- package/dist/memory/modules/youtube/ingest.d.ts +20 -0
- package/dist/memory/modules/youtube/ingest.d.ts.map +1 -0
- package/dist/memory/modules/youtube/ingest.js +49 -0
- package/dist/memory/modules/youtube/ingest.js.map +1 -0
- package/dist/memory/modules/youtube/module.d.ts +11 -0
- package/dist/memory/modules/youtube/module.d.ts.map +1 -0
- package/dist/memory/modules/youtube/module.js +26 -0
- package/dist/memory/modules/youtube/module.js.map +1 -0
- package/dist/memory/modules/youtube/tests/channel.test.d.ts +2 -0
- package/dist/memory/modules/youtube/tests/channel.test.d.ts.map +1 -0
- package/dist/memory/modules/youtube/tests/channel.test.js +61 -0
- package/dist/memory/modules/youtube/tests/channel.test.js.map +1 -0
- package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts +2 -0
- package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts.map +1 -0
- package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js +23 -0
- package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js.map +1 -0
- package/dist/memory/modules/youtube/tests/youtube.test.d.ts +2 -0
- package/dist/memory/modules/youtube/tests/youtube.test.d.ts.map +1 -0
- package/dist/memory/modules/youtube/tests/youtube.test.js +52 -0
- package/dist/memory/modules/youtube/tests/youtube.test.js.map +1 -0
- package/dist/memory/modules/youtube/tools.d.ts +5 -0
- package/dist/memory/modules/youtube/tools.d.ts.map +1 -0
- package/dist/memory/modules/youtube/tools.js +182 -0
- package/dist/memory/modules/youtube/tools.js.map +1 -0
- package/dist/memory/modules/youtube/transcript-fetcher.d.ts +17 -0
- package/dist/memory/modules/youtube/transcript-fetcher.d.ts.map +1 -0
- package/dist/memory/modules/youtube/transcript-fetcher.js +178 -0
- package/dist/memory/modules/youtube/transcript-fetcher.js.map +1 -0
- package/dist/memory/modules/youtube/watcher.d.ts +30 -0
- package/dist/memory/modules/youtube/watcher.d.ts.map +1 -0
- package/dist/memory/modules/youtube/watcher.js +198 -0
- package/dist/memory/modules/youtube/watcher.js.map +1 -0
- package/dist/memory/public/tools.d.ts +5 -0
- package/dist/memory/public/tools.d.ts.map +1 -0
- package/dist/memory/public/tools.js +1761 -0
- package/dist/memory/public/tools.js.map +1 -0
- package/dist/private/algorithms/chunker-semantic.d.ts +3 -0
- package/dist/private/algorithms/chunker-semantic.d.ts.map +1 -0
- package/dist/private/algorithms/chunker-semantic.js +70 -0
- package/dist/private/algorithms/chunker-semantic.js.map +1 -0
- package/dist/private/algorithms/find-related-smart.d.ts +4 -0
- package/dist/private/algorithms/find-related-smart.d.ts.map +1 -0
- package/dist/private/algorithms/find-related-smart.js +52 -0
- package/dist/private/algorithms/find-related-smart.js.map +1 -0
- package/dist/private/algorithms/graph-semantic-edges.d.ts +4 -0
- package/dist/private/algorithms/graph-semantic-edges.d.ts.map +1 -0
- package/dist/private/algorithms/graph-semantic-edges.js +38 -0
- package/dist/private/algorithms/graph-semantic-edges.js.map +1 -0
- package/dist/private/algorithms/search-all-smart.d.ts +9 -0
- package/dist/private/algorithms/search-all-smart.d.ts.map +1 -0
- package/dist/private/algorithms/search-all-smart.js +62 -0
- package/dist/private/algorithms/search-all-smart.js.map +1 -0
- package/dist/private/index.d.ts +7 -0
- package/dist/private/index.d.ts.map +1 -0
- package/dist/private/index.js +39 -0
- package/dist/private/index.js.map +1 -0
- package/dist/private/prompts/extraction-system.d.ts +2 -0
- package/dist/private/prompts/extraction-system.d.ts.map +1 -0
- package/dist/private/prompts/extraction-system.js +15 -0
- package/dist/private/prompts/extraction-system.js.map +1 -0
- package/dist/private/prompts/suggest-properties.d.ts +2 -0
- package/dist/private/prompts/suggest-properties.d.ts.map +1 -0
- package/dist/private/prompts/suggest-properties.js +18 -0
- package/dist/private/prompts/suggest-properties.js.map +1 -0
- package/dist/private/tests/find-related-smart.test.d.ts +2 -0
- package/dist/private/tests/find-related-smart.test.d.ts.map +1 -0
- package/dist/private/tests/find-related-smart.test.js +86 -0
- package/dist/private/tests/find-related-smart.test.js.map +1 -0
- package/dist/private/tests/property-extractor-smart.test.d.ts +2 -0
- package/dist/private/tests/property-extractor-smart.test.d.ts.map +1 -0
- package/dist/private/tests/property-extractor-smart.test.js +26 -0
- package/dist/private/tests/property-extractor-smart.test.js.map +1 -0
- package/dist/scripts/install-ollama.d.ts +3 -0
- package/dist/scripts/install-ollama.d.ts.map +1 -0
- package/dist/scripts/install-ollama.js +78 -0
- package/dist/scripts/install-ollama.js.map +1 -0
- package/dist/scripts/install.d.ts +3 -0
- package/dist/scripts/install.d.ts.map +1 -0
- package/dist/scripts/install.js +191 -0
- package/dist/scripts/install.js.map +1 -0
- package/dist/scripts/pair.d.ts +3 -0
- package/dist/scripts/pair.d.ts.map +1 -0
- package/dist/scripts/pair.js +78 -0
- package/dist/scripts/pair.js.map +1 -0
- package/dist/scripts/rebuild.d.ts +20 -0
- package/dist/scripts/rebuild.d.ts.map +1 -0
- package/dist/scripts/rebuild.js +171 -0
- package/dist/scripts/rebuild.js.map +1 -0
- package/dist/scripts/reindex.d.ts +3 -0
- package/dist/scripts/reindex.d.ts.map +1 -0
- package/dist/scripts/reindex.js +23 -0
- package/dist/scripts/reindex.js.map +1 -0
- package/dist/scripts/serve.d.ts +3 -0
- package/dist/scripts/serve.d.ts.map +1 -0
- package/dist/scripts/serve.js +57 -0
- package/dist/scripts/serve.js.map +1 -0
- package/dist/scripts/service.d.ts +19 -0
- package/dist/scripts/service.d.ts.map +1 -0
- package/dist/scripts/service.js +257 -0
- package/dist/scripts/service.js.map +1 -0
- package/dist/server/api/daily.d.ts +3 -0
- package/dist/server/api/daily.d.ts.map +1 -0
- package/dist/server/api/daily.js +44 -0
- package/dist/server/api/daily.js.map +1 -0
- package/dist/server/api/graph.d.ts +26 -0
- package/dist/server/api/graph.d.ts.map +1 -0
- package/dist/server/api/graph.js +80 -0
- package/dist/server/api/graph.js.map +1 -0
- package/dist/server/api/integrations.d.ts +4 -0
- package/dist/server/api/integrations.d.ts.map +1 -0
- package/dist/server/api/integrations.js +228 -0
- package/dist/server/api/integrations.js.map +1 -0
- package/dist/server/api/memories.d.ts +4 -0
- package/dist/server/api/memories.d.ts.map +1 -0
- package/dist/server/api/memories.js +267 -0
- package/dist/server/api/memories.js.map +1 -0
- package/dist/server/api/reindex.d.ts +3 -0
- package/dist/server/api/reindex.d.ts.map +1 -0
- package/dist/server/api/reindex.js +18 -0
- package/dist/server/api/reindex.js.map +1 -0
- package/dist/server/api/settings.d.ts +3 -0
- package/dist/server/api/settings.d.ts.map +1 -0
- package/dist/server/api/settings.js +24 -0
- package/dist/server/api/settings.js.map +1 -0
- package/dist/server/api/sources.d.ts +4 -0
- package/dist/server/api/sources.d.ts.map +1 -0
- package/dist/server/api/sources.js +45 -0
- package/dist/server/api/sources.js.map +1 -0
- package/dist/server/api/sync-status.d.ts +3 -0
- package/dist/server/api/sync-status.d.ts.map +1 -0
- package/dist/server/api/sync-status.js +43 -0
- package/dist/server/api/sync-status.js.map +1 -0
- package/dist/server/api/types.d.ts +3 -0
- package/dist/server/api/types.d.ts.map +1 -0
- package/dist/server/api/types.js +20 -0
- package/dist/server/api/types.js.map +1 -0
- package/dist/server/api/views.d.ts +25 -0
- package/dist/server/api/views.d.ts.map +1 -0
- package/dist/server/api/views.js +54 -0
- package/dist/server/api/views.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/sync/apply.d.ts +55 -0
- package/dist/sync/apply.d.ts.map +1 -0
- package/dist/sync/apply.js +277 -0
- package/dist/sync/apply.js.map +1 -0
- package/dist/sync/channel-client.d.ts +27 -0
- package/dist/sync/channel-client.d.ts.map +1 -0
- package/dist/sync/channel-client.js +154 -0
- package/dist/sync/channel-client.js.map +1 -0
- package/dist/sync/cloud-saves.d.ts +49 -0
- package/dist/sync/cloud-saves.d.ts.map +1 -0
- package/dist/sync/cloud-saves.js +182 -0
- package/dist/sync/cloud-saves.js.map +1 -0
- package/dist/sync/ed25519.d.ts +54 -0
- package/dist/sync/ed25519.d.ts.map +1 -0
- package/dist/sync/ed25519.js +136 -0
- package/dist/sync/ed25519.js.map +1 -0
- package/dist/sync/ops-log.d.ts +43 -0
- package/dist/sync/ops-log.d.ts.map +1 -0
- package/dist/sync/ops-log.js +153 -0
- package/dist/sync/ops-log.js.map +1 -0
- package/dist/sync/recovery-setup.d.ts +26 -0
- package/dist/sync/recovery-setup.d.ts.map +1 -0
- package/dist/sync/recovery-setup.js +113 -0
- package/dist/sync/recovery-setup.js.map +1 -0
- package/dist/sync/replay.d.ts +19 -0
- package/dist/sync/replay.d.ts.map +1 -0
- package/dist/sync/replay.js +59 -0
- package/dist/sync/replay.js.map +1 -0
- package/dist/sync/shamir.d.ts +22 -0
- package/dist/sync/shamir.d.ts.map +1 -0
- package/dist/sync/shamir.js +109 -0
- package/dist/sync/shamir.js.map +1 -0
- package/dist/sync/tests/apply.test.d.ts +4 -0
- package/dist/sync/tests/apply.test.d.ts.map +1 -0
- package/dist/sync/tests/apply.test.js +119 -0
- package/dist/sync/tests/apply.test.js.map +1 -0
- package/dist/sync/tests/ops-log.test.d.ts +2 -0
- package/dist/sync/tests/ops-log.test.d.ts.map +1 -0
- package/dist/sync/tests/ops-log.test.js +105 -0
- package/dist/sync/tests/ops-log.test.js.map +1 -0
- package/dist/sync/tests/two-device-sync.test.d.ts +2 -0
- package/dist/sync/tests/two-device-sync.test.d.ts.map +1 -0
- package/dist/sync/tests/two-device-sync.test.js +250 -0
- package/dist/sync/tests/two-device-sync.test.js.map +1 -0
- package/dist/sync/types.d.ts +87 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +37 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/tests/chunker.test.d.ts +2 -0
- package/dist/tests/chunker.test.d.ts.map +1 -0
- package/dist/tests/chunker.test.js +24 -0
- package/dist/tests/chunker.test.js.map +1 -0
- package/dist/tests/cloud-auth.test.d.ts +2 -0
- package/dist/tests/cloud-auth.test.d.ts.map +1 -0
- package/dist/tests/cloud-auth.test.js +75 -0
- package/dist/tests/cloud-auth.test.js.map +1 -0
- package/dist/tests/cloud-crypto.test.d.ts +2 -0
- package/dist/tests/cloud-crypto.test.d.ts.map +1 -0
- package/dist/tests/cloud-crypto.test.js +58 -0
- package/dist/tests/cloud-crypto.test.js.map +1 -0
- package/dist/tests/cloud-integration.test.d.ts +2 -0
- package/dist/tests/cloud-integration.test.d.ts.map +1 -0
- package/dist/tests/cloud-integration.test.js +193 -0
- package/dist/tests/cloud-integration.test.js.map +1 -0
- package/dist/tests/cloud-pairing.test.d.ts +2 -0
- package/dist/tests/cloud-pairing.test.d.ts.map +1 -0
- package/dist/tests/cloud-pairing.test.js +86 -0
- package/dist/tests/cloud-pairing.test.js.map +1 -0
- package/dist/tests/cloud-saves-integration.test.d.ts +2 -0
- package/dist/tests/cloud-saves-integration.test.d.ts.map +1 -0
- package/dist/tests/cloud-saves-integration.test.js +92 -0
- package/dist/tests/cloud-saves-integration.test.js.map +1 -0
- package/dist/tests/cloud-transit.test.d.ts +2 -0
- package/dist/tests/cloud-transit.test.d.ts.map +1 -0
- package/dist/tests/cloud-transit.test.js +263 -0
- package/dist/tests/cloud-transit.test.js.map +1 -0
- package/dist/tests/config.test.d.ts +2 -0
- package/dist/tests/config.test.d.ts.map +1 -0
- package/dist/tests/config.test.js +25 -0
- package/dist/tests/config.test.js.map +1 -0
- package/dist/tests/db.test.d.ts +2 -0
- package/dist/tests/db.test.d.ts.map +1 -0
- package/dist/tests/db.test.js +75 -0
- package/dist/tests/db.test.js.map +1 -0
- package/dist/tests/embeddings-providers.test.d.ts +2 -0
- package/dist/tests/embeddings-providers.test.d.ts.map +1 -0
- package/dist/tests/embeddings-providers.test.js +62 -0
- package/dist/tests/embeddings-providers.test.js.map +1 -0
- package/dist/tests/embeddings.test.d.ts +2 -0
- package/dist/tests/embeddings.test.d.ts.map +1 -0
- package/dist/tests/embeddings.test.js +22 -0
- package/dist/tests/embeddings.test.js.map +1 -0
- package/dist/tests/integrations-api.test.d.ts +2 -0
- package/dist/tests/integrations-api.test.d.ts.map +1 -0
- package/dist/tests/integrations-api.test.js +129 -0
- package/dist/tests/integrations-api.test.js.map +1 -0
- package/dist/tests/memory-store.test.d.ts +2 -0
- package/dist/tests/memory-store.test.d.ts.map +1 -0
- package/dist/tests/memory-store.test.js +129 -0
- package/dist/tests/memory-store.test.js.map +1 -0
- package/dist/tests/module-registry.test.d.ts +2 -0
- package/dist/tests/module-registry.test.d.ts.map +1 -0
- package/dist/tests/module-registry.test.js +44 -0
- package/dist/tests/module-registry.test.js.map +1 -0
- package/dist/tests/property-extractor.test.d.ts +2 -0
- package/dist/tests/property-extractor.test.d.ts.map +1 -0
- package/dist/tests/property-extractor.test.js +24 -0
- package/dist/tests/property-extractor.test.js.map +1 -0
- package/dist/tests/public-tools.test.d.ts +2 -0
- package/dist/tests/public-tools.test.d.ts.map +1 -0
- package/dist/tests/public-tools.test.js +270 -0
- package/dist/tests/public-tools.test.js.map +1 -0
- package/dist/tests/reindex.test.d.ts +2 -0
- package/dist/tests/reindex.test.d.ts.map +1 -0
- package/dist/tests/reindex.test.js +58 -0
- package/dist/tests/reindex.test.js.map +1 -0
- package/dist/tests/shamir.test.d.ts +2 -0
- package/dist/tests/shamir.test.d.ts.map +1 -0
- package/dist/tests/shamir.test.js +57 -0
- package/dist/tests/shamir.test.js.map +1 -0
- package/dist/tests/source-registry.test.d.ts +2 -0
- package/dist/tests/source-registry.test.d.ts.map +1 -0
- package/dist/tests/source-registry.test.js +58 -0
- package/dist/tests/source-registry.test.js.map +1 -0
- package/dist/tests/types.test.d.ts +2 -0
- package/dist/tests/types.test.d.ts.map +1 -0
- package/dist/tests/types.test.js +26 -0
- package/dist/tests/types.test.js.map +1 -0
- package/dist/tests/vector.test.d.ts +2 -0
- package/dist/tests/vector.test.d.ts.map +1 -0
- package/dist/tests/vector.test.js +61 -0
- package/dist/tests/vector.test.js.map +1 -0
- package/dist/tests/wikilinks.test.d.ts +2 -0
- package/dist/tests/wikilinks.test.d.ts.map +1 -0
- package/dist/tests/wikilinks.test.js +20 -0
- package/dist/tests/wikilinks.test.js.map +1 -0
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +38 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +134 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/vector/store.d.ts +28 -0
- package/dist/vector/store.d.ts.map +1 -0
- package/dist/vector/store.js +132 -0
- package/dist/vector/store.js.map +1 -0
- package/dist/webapp/api/daily.d.ts +3 -0
- package/dist/webapp/api/daily.d.ts.map +1 -0
- package/dist/webapp/api/daily.js +44 -0
- package/dist/webapp/api/daily.js.map +1 -0
- package/dist/webapp/api/graph.d.ts +26 -0
- package/dist/webapp/api/graph.d.ts.map +1 -0
- package/dist/webapp/api/graph.js +80 -0
- package/dist/webapp/api/graph.js.map +1 -0
- package/dist/webapp/api/memories.d.ts +4 -0
- package/dist/webapp/api/memories.d.ts.map +1 -0
- package/dist/webapp/api/memories.js +70 -0
- package/dist/webapp/api/memories.js.map +1 -0
- package/dist/webapp/api/reindex.d.ts +3 -0
- package/dist/webapp/api/reindex.d.ts.map +1 -0
- package/dist/webapp/api/reindex.js +18 -0
- package/dist/webapp/api/reindex.js.map +1 -0
- package/dist/webapp/api/settings.d.ts +3 -0
- package/dist/webapp/api/settings.d.ts.map +1 -0
- package/dist/webapp/api/settings.js +24 -0
- package/dist/webapp/api/settings.js.map +1 -0
- package/dist/webapp/api/sources.d.ts +4 -0
- package/dist/webapp/api/sources.d.ts.map +1 -0
- package/dist/webapp/api/sources.js +45 -0
- package/dist/webapp/api/sources.js.map +1 -0
- package/dist/webapp/api/sync-status.d.ts +3 -0
- package/dist/webapp/api/sync-status.d.ts.map +1 -0
- package/dist/webapp/api/sync-status.js +43 -0
- package/dist/webapp/api/sync-status.js.map +1 -0
- package/dist/webapp/api/types.d.ts +3 -0
- package/dist/webapp/api/types.d.ts.map +1 -0
- package/dist/webapp/api/types.js +20 -0
- package/dist/webapp/api/types.js.map +1 -0
- package/dist/webapp/api/views.d.ts +25 -0
- package/dist/webapp/api/views.d.ts.map +1 -0
- package/dist/webapp/api/views.js +54 -0
- package/dist/webapp/api/views.js.map +1 -0
- package/dist/webapp/mcp-http.d.ts +2 -0
- package/dist/webapp/mcp-http.d.ts.map +1 -0
- package/dist/webapp/mcp-http.js +3 -0
- package/dist/webapp/mcp-http.js.map +1 -0
- package/dist/webapp/server.d.ts +2 -0
- package/dist/webapp/server.d.ts.map +1 -0
- package/dist/webapp/server.js +3 -0
- package/dist/webapp/server.js.map +1 -0
- package/dist/webapp/tests/api.test.d.ts +2 -0
- package/dist/webapp/tests/api.test.d.ts.map +1 -0
- package/dist/webapp/tests/api.test.js +125 -0
- package/dist/webapp/tests/api.test.js.map +1 -0
- package/dist/webapp/tests/mcp-http.test.d.ts +2 -0
- package/dist/webapp/tests/mcp-http.test.d.ts.map +1 -0
- package/dist/webapp/tests/mcp-http.test.js +47 -0
- package/dist/webapp/tests/mcp-http.test.js.map +1 -0
- package/dist/webapp/websocket.d.ts +2 -0
- package/dist/webapp/websocket.d.ts.map +1 -0
- package/dist/webapp/websocket.js +3 -0
- package/dist/webapp/websocket.js.map +1 -0
- package/package.json +128 -0
- package/src/private/README.md +49 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# EngramMCP
|
|
2
|
+
|
|
3
|
+
> Local-first semantic memory layer for AI agents.
|
|
4
|
+
|
|
5
|
+
EngramMCP exposes a Model Context Protocol (MCP) server that lets any AI agent (Claude Code, Cursor, custom Claude/GPT runtimes) capture, search, and enrich memory across multiple typed sources (notes, conversations, Drive, Notion, YouTube, Obsidian, audio, plus user-defined custom types).
|
|
6
|
+
|
|
7
|
+
Forked from Argos. Local-first: vectors + content live on the user's machine; embeddings via local Ollama by default; no cloud required for Phase 1.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Instructions for Claude Code
|
|
12
|
+
|
|
13
|
+
Tu es le stagiaire technique d'EngramMCP. Sois **proactif**, **force de proposition**, et **autonome**.
|
|
14
|
+
|
|
15
|
+
### Comportement attendu
|
|
16
|
+
|
|
17
|
+
- **Lis le code existant** avant de modifier — comprends le pattern en place
|
|
18
|
+
- **Respecte les conventions** (voir ci-dessous)
|
|
19
|
+
- **Pense modularité** — chaque memory type est un MemoryModule indépendant
|
|
20
|
+
- **Sois concis** — pas de blabla, va droit au but, montre le code
|
|
21
|
+
- **Challenge les décisions** sous-optimales avec arguments
|
|
22
|
+
- **No mocks** pour les intégrations externes — tests E2E avec Ollama/LanceDB/SQLite/API réels
|
|
23
|
+
|
|
24
|
+
### Quand tu travailles sur EngramMCP
|
|
25
|
+
|
|
26
|
+
1. Lis toujours le code existant avant de modifier
|
|
27
|
+
2. Respecte la convention ES modules avec extensions `.js` dans les imports
|
|
28
|
+
3. Property extraction est **off par défaut** — l'agent appelant (toi) fournit `title`/`tags` directement
|
|
29
|
+
4. Vector store dimension est hardcoded à 768 (nomic-embed-text). Voyage (1024)/OpenAI (1536) requiert un fix dans `src/vector/store.ts`
|
|
30
|
+
5. Tool descriptions doivent être agent-friendly (mention WHEN to call, WHAT inputs help retrieval)
|
|
31
|
+
6. **v0.2 surface**: 10 public tools only. Admin tools behind `--admin` flag. See SKILL.md for agent usage guide.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Quick Reference
|
|
36
|
+
|
|
37
|
+
### Commands
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm run dev # tsx watch src/scripts/serve.ts
|
|
41
|
+
npm run build # tsc → dist/
|
|
42
|
+
npm run build:client # Vite → src/client/dist/
|
|
43
|
+
npm run build:all # client + server
|
|
44
|
+
npm start # node dist/scripts/serve.js
|
|
45
|
+
npm run reindex # re-embed all memories after provider change
|
|
46
|
+
npm run install:wizard # interactive first-time setup (tsx)
|
|
47
|
+
npm run pair # interactive pairing wizard (engram-mcp-pair)
|
|
48
|
+
npm run rebuild # rebuild SQLite+LanceDB from ops_log (engram-mcp rebuild)
|
|
49
|
+
npm test # vitest run
|
|
50
|
+
npm run lint # eslint src/
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Tech Stack
|
|
54
|
+
|
|
55
|
+
| Layer | Tech |
|
|
56
|
+
|---|---|
|
|
57
|
+
| Runtime | Node.js >= 22, TypeScript 5.7 strict, ESM |
|
|
58
|
+
| MCP | `@modelcontextprotocol/sdk@1.28` (stdio + StreamableHTTP) |
|
|
59
|
+
| Vector | LanceDB (`@lancedb/lancedb@0.27`) per-type tables |
|
|
60
|
+
| SQL | better-sqlite3 + FTS5 |
|
|
61
|
+
| Embeddings | OpenAI-compat dispatch → ollama / engram / voyage / openai / openai-compatible |
|
|
62
|
+
| Audio | nodejs-whisper (whisper.cpp) |
|
|
63
|
+
| YouTube | watch-page scrape + yt-dlp fallback |
|
|
64
|
+
| Web | Express 5, ws, React 19, Vite 5, Tailwind v4, react-query |
|
|
65
|
+
| Validation | Zod everywhere |
|
|
66
|
+
| IDs | ULID |
|
|
67
|
+
|
|
68
|
+
### Key conventions
|
|
69
|
+
|
|
70
|
+
- **Module pattern**: `"type": "module"`, imports with `.js` extension
|
|
71
|
+
- **Config**: Zod schema in `src/config/schema.ts`, loaded from `~/.engram/config.json` or env (`ENGRAM_CONFIG_DIR`, `DATA_DIR`)
|
|
72
|
+
- **DB**: `getDb()` singleton, prepared statements only
|
|
73
|
+
- **Logging**: `createLogger(scope)` from `src/logger.ts`
|
|
74
|
+
- **Tool descriptions**: agent-facing — explain WHEN to use the tool and what title/tags improve retrieval
|
|
75
|
+
- **Tests**: real services (Ollama, LanceDB, Notion sandbox, etc.). No mocks. Real-API tests use ephemeral tmpdirs.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Architecture (Phase 1)
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
┌─ stdio ─┐
|
|
83
|
+
agent runtime ──┤ ├──▶ MCP server (engram-mcp)
|
|
84
|
+
└─ HTTP ─┘ │
|
|
85
|
+
▼
|
|
86
|
+
┌─ ToolRouter ─┐
|
|
87
|
+
│ 10 tools │ (+18 admin with --admin flag)
|
|
88
|
+
└──────┬───────┘
|
|
89
|
+
▼
|
|
90
|
+
┌─ ModuleRegistry ─┐
|
|
91
|
+
│ notes │
|
|
92
|
+
│ conversations │
|
|
93
|
+
│ drive (OAuth) │
|
|
94
|
+
│ notion (OAuth) │
|
|
95
|
+
│ youtube │
|
|
96
|
+
│ audio (Whisper) │
|
|
97
|
+
│ obsidian │
|
|
98
|
+
│ <custom types> │
|
|
99
|
+
└────────┬─────────┘
|
|
100
|
+
▼
|
|
101
|
+
┌─ MemoryStore ─┐
|
|
102
|
+
│ insert │ ──▶ chunk + embed (Ollama)
|
|
103
|
+
│ search │ ──▶ LanceDB per-type tables
|
|
104
|
+
│ getById │ ──▶ SQLite + FTS5
|
|
105
|
+
│ delete │
|
|
106
|
+
│ findRelated │
|
|
107
|
+
│ setProperties│
|
|
108
|
+
└────────┬──────┘
|
|
109
|
+
│ events: memory.added/deleted/updated
|
|
110
|
+
▼
|
|
111
|
+
WebSocket /ws ──▶ dashboard React UI
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Cloud bits (Phase 2 — Plan K): `engram-mcp pair` CLI activates cloud transit poller (node-cron,
|
|
115
|
+
5 min), Bridge Relay WSS client, and E2E encrypted blob dispatch from the Engram cloud inbox.
|
|
116
|
+
Set ENGRAM_PASSPHRASE env var for the transit poller to start automatically at server boot.
|
|
117
|
+
Mobile app, billing, and Engram-hosted embeddings server are in separate Plans (I, J, M).
|
|
118
|
+
|
|
119
|
+
Phase 3 — Plan N (ops-log sync): Every local write (insert/delete/setProperties) is logged as a
|
|
120
|
+
signed, AES-256-GCM-encrypted op in `ops_log` (SQLite). A `ChannelClient` pushes pending ops to
|
|
121
|
+
the cloud `UserSyncChannel` Durable Object (engram-cloud) and receives ops from other devices.
|
|
122
|
+
The `ReplayApplier` decrypts, verifies ed25519 signatures, and applies ops with LWW + union
|
|
123
|
+
conflict resolution. `engram-mcp rebuild` drops SQLite+LanceDB and replays all ops from scratch.
|
|
124
|
+
Enable via `config.json: {"sync": {"enabled": true, "cloudBaseUrl": "..."}}` + ENGRAM_PASSPHRASE.
|
|
125
|
+
Full multi-PC sync requires Plan O cloud worker deployed (see RUNBOOK.md).
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Project Structure
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
src/
|
|
133
|
+
├── types.ts # MemoryItem schema (Zod) + interfaces
|
|
134
|
+
├── logger.ts # createLogger
|
|
135
|
+
├── index.ts # (stub — entry is src/scripts/serve.ts)
|
|
136
|
+
├── config/{schema,index}.ts # Zod config + loader
|
|
137
|
+
├── db/index.ts # SQLite init + 3 migrations
|
|
138
|
+
├── embeddings/
|
|
139
|
+
│ ├── index.ts # dispatcher
|
|
140
|
+
│ └── providers/{ollama,engram,voyage,openai,openai-compat}.ts
|
|
141
|
+
├── vector/store.ts # LanceDB per-type tables
|
|
142
|
+
├── memory/
|
|
143
|
+
│ ├── core/{chunker,wikilinks,module-interface,module-registry,
|
|
144
|
+
│ │ store,source-registry,property-extractor,reindex}.ts
|
|
145
|
+
│ ├── modules/
|
|
146
|
+
│ │ ├── notes/ # add_note, search_notes
|
|
147
|
+
│ │ ├── conversations/ # remember_exchange, search_conversations
|
|
148
|
+
│ │ ├── drive/ # OAuth + watcher + ingest/list/watch tools
|
|
149
|
+
│ │ ├── notion/ # OAuth + watcher + ingest/list/watch tools
|
|
150
|
+
│ │ ├── audio/ # Whisper.cpp + add_audio_file/search_audio
|
|
151
|
+
│ │ ├── youtube/ # transcript fetcher + add_youtube_url/search
|
|
152
|
+
│ │ ├── obsidian/ # vault reader + fs.watch + tools
|
|
153
|
+
│ │ └── _custom/ # generic-module factory + create/list/delete
|
|
154
|
+
│ ├── public/tools.ts # 10 public tools: remember, recall, get, update,
|
|
155
|
+
│ │ # forget, relate, list_types, recent, ingest,
|
|
156
|
+
│ │ # suggest_properties
|
|
157
|
+
│ └── admin/tools.ts # ~18 admin tools behind --admin flag:
|
|
158
|
+
├── core/ # LOW-LEVEL UTILITIES (canonical)
|
|
159
|
+
│ ├── logger.ts # createLogger (was src/logger.ts)
|
|
160
|
+
│ ├── db/index.ts # SQLite init + migrations (was src/db/index.ts)
|
|
161
|
+
│ └── server/
|
|
162
|
+
│ ├── mcp-handler.ts # buildEngramRuntime + startStdioMcpServer
|
|
163
|
+
│ ├── tool-router.ts # ToolRouter
|
|
164
|
+
│ ├── http.ts # Express bootstrap (was src/webapp/server.ts)
|
|
165
|
+
│ ├── mcp-http.ts # StreamableHTTP MCP transport
|
|
166
|
+
│ └── websocket.ts # WS broadcaster for memory.* events
|
|
167
|
+
├── tools/ # Top-level tool registry (mirrors predmcp pattern)
|
|
168
|
+
│ └── index.ts # registerAllTools + dynamic private import
|
|
169
|
+
├── private/ # GITIGNORED — premium extensions (hosted Engram only)
|
|
170
|
+
│ ├── index.ts # registerPrivateExtensions (no-op placeholder)
|
|
171
|
+
│ ├── README.md # Explains what goes here
|
|
172
|
+
│ ├── tools/ # Premium MCP tools
|
|
173
|
+
│ ├── algorithms/ # Advanced algorithm overrides
|
|
174
|
+
│ └── prompts/ # Tuned LLM prompts (IP)
|
|
175
|
+
├── server/ # Engram-specific HTTP routes
|
|
176
|
+
│ ├── index.ts # Re-exports from core/server/http.ts
|
|
177
|
+
│ └── api/{memories,sources,types,views,daily,settings,reindex,sync-status,graph}.ts
|
|
178
|
+
├── mcp-server/ # Re-export shims (→ core/server/)
|
|
179
|
+
│ ├── server.ts # shim → core/server/mcp-handler.ts
|
|
180
|
+
│ └── tool-router.ts # shim → core/server/tool-router.ts
|
|
181
|
+
├── webapp/ # Re-export shims (→ core/server/)
|
|
182
|
+
│ ├── server.ts # shim → core/server/http.ts
|
|
183
|
+
│ ├── mcp-http.ts # shim → core/server/mcp-http.ts
|
|
184
|
+
│ ├── websocket.ts # shim → core/server/websocket.ts
|
|
185
|
+
│ └── api/ # original api handlers (not shimmed — used by tests)
|
|
186
|
+
├── client/ # React/Vite/Tailwind dashboard
|
|
187
|
+
│ ├── vite.config.ts
|
|
188
|
+
│ ├── tsconfig.json (separate)
|
|
189
|
+
│ └── src/{App,main,api,ws,index.css}.{ts,tsx,css}
|
|
190
|
+
└── scripts/{serve,install,install-ollama,reindex}.ts
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Database Schema
|
|
196
|
+
|
|
197
|
+
SQLite at `<dataDir>/engram.db` (WAL mode, FOREIGN KEYS ON):
|
|
198
|
+
|
|
199
|
+
| Table | Purpose |
|
|
200
|
+
|---|---|
|
|
201
|
+
| `memories` | id, type, source_id, content, content_hash, properties_json, wikilinks_json, related_ids_json, embedding_model, created_at |
|
|
202
|
+
| `memories_fts` | FTS5 virtual table on content/title/tags |
|
|
203
|
+
| `custom_types` | type_name, display_name, schema_json, created_at |
|
|
204
|
+
| `oauth_tokens` | provider, access_token, refresh_token, expires_at, extra_json |
|
|
205
|
+
| `module_state` | (module_id, key) → value_json |
|
|
206
|
+
| `watched_sources` | id, module_id, external_id, display_name, config_json, last_synced_at, last_modified_remote, last_error, enabled |
|
|
207
|
+
| `saved_views` | id, name, description, definition_json, pinned, created_at, updated_at |
|
|
208
|
+
| `settings` | key → value_json |
|
|
209
|
+
|
|
210
|
+
Vector tables: `memories_<type>` per memory type in LanceDB (id, source_id, chunk_index, content, created_at, field1-4, vector 768-d).
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Pricing (planned)
|
|
215
|
+
|
|
216
|
+
- **Free**: full local — Ollama embeddings, all modules, ~36 MCP tools
|
|
217
|
+
- **Pro $9/mo** (Phase 2): mobile app, cloud transit, share-by-email, Engram hosted embeddings, multi-PC encrypted sync, online dashboard
|
|
218
|
+
- **BYO premium embeddings** at any tier: Voyage / OpenAI / OAI-compatible
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Phase status
|
|
223
|
+
|
|
224
|
+
- [x] **Phase 1** — local MCP server with all memory types (DONE — see docs/superpowers/plans/)
|
|
225
|
+
- [ ] **Phase 2** — Mobile + cloud transit + billing + hosted Engram embeddings server
|
|
226
|
+
- [ ] **Phase 3** — Bidirectional multi-PC sync (ops-log + cloud saves) + recovery shards
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## License
|
|
231
|
+
|
|
232
|
+
MIT
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Argos Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# EngramMCP
|
|
2
|
+
|
|
3
|
+
> Local-first semantic memory layer for AI agents.
|
|
4
|
+
|
|
5
|
+
EngramMCP is the memory your agents need — it ingests from your real sources (Notes, Conversations, Drive, Notion, YouTube, Obsidian, custom types) and exposes a standard MCP server for any agent runtime (Claude Code, Cursor, custom).
|
|
6
|
+
|
|
7
|
+
**Local-first**: vectors + content live on your machine. Embeddings via Ollama by default. No cloud required.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
### macOS / Linux (recommended)
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -fsSL https://engram-mcp.com/install.sh | sh
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This one command: downloads the binary, verifies the checksum, installs Ollama if missing, runs the setup wizard, installs a background service (LaunchAgent on macOS, systemd on Linux), and updates `~/.claude/mcp.json` + `~/.cursor/mcp.json`.
|
|
18
|
+
|
|
19
|
+
### macOS — Homebrew
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
brew tap RavioleLabs/engram
|
|
23
|
+
brew install engram
|
|
24
|
+
brew services start engram # auto-start on login
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Windows (PowerShell)
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
iex (Invoke-WebRequest -Uri https://engram-mcp.com/install.ps1).Content
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Installs the binary, registers an NSSM Windows service, and updates `%USERPROFILE%\.claude\mcp.json`.
|
|
34
|
+
|
|
35
|
+
### Windows — winget
|
|
36
|
+
|
|
37
|
+
```powershell
|
|
38
|
+
winget install RavioleLabs.EngramMCP
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Linux — .deb (Debian / Ubuntu)
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
curl -fsSL https://github.com/RavioleLabs/engram-mcp/releases/latest/download/engram-mcp_linux_amd64.deb \
|
|
45
|
+
-o /tmp/engram.deb && sudo dpkg -i /tmp/engram.deb
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Via AI agent (installer MCP server)
|
|
49
|
+
|
|
50
|
+
Add `installer.engram-mcp.com/mcp` as an HTTP MCP server to your agent runtime, then tell it:
|
|
51
|
+
*"Install EngramMCP on this machine."*
|
|
52
|
+
It calls `install_engram_mcp` and `verify_engram_installed` tools autonomously.
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcpServers": {
|
|
57
|
+
"engram-installer": {
|
|
58
|
+
"url": "https://installer.engram-mcp.com/mcp",
|
|
59
|
+
"transport": "http"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
After install, run the setup wizard to configure Ollama and write `~/.engram/config.json`:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
engram-mcp install:wizard
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Run
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
engram-mcp --no-http
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Starts the MCP stdio server (consumed by your agent runtime).
|
|
78
|
+
`--no-http` is the **recommended default** — no local web UI, minimal footprint.
|
|
79
|
+
|
|
80
|
+
### Official dashboard
|
|
81
|
+
|
|
82
|
+
Visit **[engram-mcp.com](https://engram-mcp.com)** to browse your memories from any browser.
|
|
83
|
+
Sign up for a free account, pair your PC with `engram-mcp-pair`, and the online dashboard reads your local store via the Bridge Relay (E2E encrypted — the relay never sees your data).
|
|
84
|
+
|
|
85
|
+
### Local dev UI (opt-in)
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
engram-mcp
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Without `--no-http`, also starts:
|
|
92
|
+
- Local web UI: http://localhost:7777 (dev / admin tool)
|
|
93
|
+
- HTTP MCP transport: http://localhost:7777/mcp
|
|
94
|
+
|
|
95
|
+
## Quick start for agents
|
|
96
|
+
|
|
97
|
+
EngramMCP v0.2 exposes **10 clean tools** — no noise, no duplicate search verbs.
|
|
98
|
+
|
|
99
|
+
| Tool | Purpose |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `remember(content, title, tags, type?)` | Store anything worth keeping |
|
|
102
|
+
| `recall(query, types?, limit?)` | Semantic search across all memory |
|
|
103
|
+
| `get(id)` | Fetch full memory by id |
|
|
104
|
+
| `update(id, ...)` | Edit title/tags/sentiment |
|
|
105
|
+
| `forget(id)` | Delete a memory |
|
|
106
|
+
| `relate(id, limit?)` | Find connected memories |
|
|
107
|
+
| `list_types()` | Discover what types are stored |
|
|
108
|
+
| `recent(limit?, types?)` | Latest memories (use at conversation start) |
|
|
109
|
+
| `ingest(uri, type?)` | Auto-route file/URL to the right module |
|
|
110
|
+
| `suggest_properties(id)` | Instruction for the calling LLM to extract metadata |
|
|
111
|
+
|
|
112
|
+
See [SKILL.md](./SKILL.md) for the complete calling-agent guide (tagging strategy, conversation patterns, wikilinks, error handling).
|
|
113
|
+
|
|
114
|
+
Admin tools (OAuth, watchers, custom types) are available behind `engram-mcp --admin` or via the integrations page at [engram-mcp.com/dashboard/integrations](https://engram-mcp.com/dashboard/integrations).
|
|
115
|
+
|
|
116
|
+
## What it does
|
|
117
|
+
|
|
118
|
+
- **Capture from agents** — `remember()` stores notes, conversations, or any content
|
|
119
|
+
- **Capture from sources** — `ingest()` auto-routes Drive, Notion, YouTube, Obsidian, audio files
|
|
120
|
+
- **Search** — `recall()` does parallel semantic fan-out across all types with recency boost
|
|
121
|
+
- **Bring your own types** — create custom memory types via admin `create_custom_type`
|
|
122
|
+
- **Delegated property extraction** — the calling LLM provides title/tags directly; `suggest_properties` returns content + extraction prompt for backfill
|
|
123
|
+
|
|
124
|
+
## Embeddings providers
|
|
125
|
+
|
|
126
|
+
| Provider | Tier | Setup |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| `ollama` (default) | Free | Auto-installed by wizard |
|
|
129
|
+
| `engram` (hosted) | Pro | Paste API key |
|
|
130
|
+
| `voyage` | BYO | Sign up at voyageai.com |
|
|
131
|
+
| `openai` | BYO | Sign up at openai.com |
|
|
132
|
+
| `openai-compatible` | BYO | Any OAI-compatible endpoint |
|
|
133
|
+
|
|
134
|
+
Edit `~/.engram/config.json`:
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"embeddings": {
|
|
138
|
+
"provider": "voyage",
|
|
139
|
+
"model": "voyage-3-large",
|
|
140
|
+
"apiKey": "pa-…",
|
|
141
|
+
"dimensions": 1024
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Then run `npm run reindex` (or click "Reindex" in the dashboard Settings) to re-embed existing memories against the new provider.
|
|
147
|
+
|
|
148
|
+
## Setting up Google Drive / Notion
|
|
149
|
+
|
|
150
|
+
Connect Drive and Notion to ingest documents into your local memory store.
|
|
151
|
+
Your OAuth credentials are stored in `~/.engram/config.json` and **never sent to engram-mcp.com**.
|
|
152
|
+
|
|
153
|
+
### 1 — Get OAuth credentials
|
|
154
|
+
|
|
155
|
+
**Google Drive**
|
|
156
|
+
|
|
157
|
+
1. Open [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials)
|
|
158
|
+
2. Create an **OAuth 2.0 Client ID**, type **Web application**
|
|
159
|
+
3. Add authorized redirect URI: `http://localhost:7777/oauth/callback/drive`
|
|
160
|
+
4. Copy Client ID and Client Secret
|
|
161
|
+
|
|
162
|
+
**Notion**
|
|
163
|
+
|
|
164
|
+
1. Open [Notion → My Integrations](https://www.notion.so/my-integrations)
|
|
165
|
+
2. Create a new integration, set redirect URI: `http://localhost:7777/oauth/callback/notion`
|
|
166
|
+
3. Copy Client ID and Client Secret
|
|
167
|
+
|
|
168
|
+
### 2 — Save credentials via the dashboard
|
|
169
|
+
|
|
170
|
+
Open [engram-mcp.com/dashboard/integrations](https://engram-mcp.com/dashboard/integrations) **on the device where `engram-mcp` is running**, paste your credentials, and click **Save credentials**.
|
|
171
|
+
|
|
172
|
+
### 3 — Authorize access
|
|
173
|
+
|
|
174
|
+
Click **Authorize access** — a browser tab opens for the OAuth consent screen.
|
|
175
|
+
After you approve, tokens are saved locally in SQLite (`~/.engram/engram.db`).
|
|
176
|
+
|
|
177
|
+
### Manual setup (config.json)
|
|
178
|
+
|
|
179
|
+
If you prefer, edit `~/.engram/config.json` directly:
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"drive": {
|
|
184
|
+
"clientId": "YOUR_GOOGLE_CLIENT_ID",
|
|
185
|
+
"clientSecret": "YOUR_GOOGLE_CLIENT_SECRET",
|
|
186
|
+
"redirectPort": 7777
|
|
187
|
+
},
|
|
188
|
+
"notion": {
|
|
189
|
+
"clientId": "YOUR_NOTION_CLIENT_ID",
|
|
190
|
+
"clientSecret": "YOUR_NOTION_CLIENT_SECRET",
|
|
191
|
+
"redirectPort": 7777
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Then run `engram-mcp connect_drive` / `engram-mcp connect_notion` (or use the MCP `connect_drive` / `connect_notion` tools).
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Cloud account (Pro — Phase 2)
|
|
201
|
+
|
|
202
|
+
Connect your PC to your Engram cloud account:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
engram-mcp-pair
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
The wizard opens a browser to engram-mcp.com, authenticates your account, and stores your JWT + API key locally. After pairing:
|
|
209
|
+
|
|
210
|
+
- **Cloud transit poller** runs every 5 minutes — voice notes, documents, and text sent from your mobile app are automatically ingested into your local memory store.
|
|
211
|
+
- **Bridge Relay** lets the engram-mcp.com online dashboard show a live view of your local memory store (proxied via WSS tunnel, no public IP needed).
|
|
212
|
+
|
|
213
|
+
Set `ENGRAM_PASSPHRASE` in your environment to activate the transit poller at server startup (the passphrase derives the master key used for E2E decryption — never stored):
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
export ENGRAM_PASSPHRASE='your strong passphrase'
|
|
217
|
+
engram-mcp
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## License
|
|
221
|
+
|
|
222
|
+
MIT
|