@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
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
// src/core/db/index.ts
|
|
2
|
+
import Database from 'better-sqlite3';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import { createLogger } from '../logger.js';
|
|
7
|
+
const log = createLogger('db');
|
|
8
|
+
let _db = null;
|
|
9
|
+
function resolvePath(p) {
|
|
10
|
+
if (p.startsWith('~'))
|
|
11
|
+
return path.join(os.homedir(), p.slice(1));
|
|
12
|
+
return p;
|
|
13
|
+
}
|
|
14
|
+
export function getDb() {
|
|
15
|
+
if (!_db)
|
|
16
|
+
throw new Error('DB not initialized. Call initDb() first.');
|
|
17
|
+
return _db;
|
|
18
|
+
}
|
|
19
|
+
export function closeDb() {
|
|
20
|
+
if (_db) {
|
|
21
|
+
_db.close();
|
|
22
|
+
_db = null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function initDb(dataDir) {
|
|
26
|
+
const resolved = resolvePath(dataDir);
|
|
27
|
+
fs.mkdirSync(resolved, { recursive: true, mode: 0o700 });
|
|
28
|
+
try {
|
|
29
|
+
fs.chmodSync(resolved, 0o700);
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
const dbPath = path.join(resolved, 'engram.db');
|
|
33
|
+
log.info(`Opening database at ${dbPath}`);
|
|
34
|
+
_db = new Database(dbPath);
|
|
35
|
+
_db.pragma('journal_mode = WAL');
|
|
36
|
+
_db.pragma('foreign_keys = ON');
|
|
37
|
+
_db.pragma('synchronous = NORMAL');
|
|
38
|
+
try {
|
|
39
|
+
fs.chmodSync(dbPath, 0o600);
|
|
40
|
+
}
|
|
41
|
+
catch { }
|
|
42
|
+
runMigrations(_db);
|
|
43
|
+
log.info('Database ready');
|
|
44
|
+
return _db;
|
|
45
|
+
}
|
|
46
|
+
function runMigrations(db) {
|
|
47
|
+
db.exec(`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
49
|
+
version INTEGER PRIMARY KEY,
|
|
50
|
+
applied_at INTEGER NOT NULL
|
|
51
|
+
)
|
|
52
|
+
`);
|
|
53
|
+
const row = db.prepare('SELECT MAX(version) as v FROM schema_version').get();
|
|
54
|
+
const current = row.v ?? 0;
|
|
55
|
+
const migrations = [
|
|
56
|
+
{ version: 1, sql: MIGRATION_1 },
|
|
57
|
+
{ version: 2, sql: MIGRATION_2 },
|
|
58
|
+
{ version: 3, sql: MIGRATION_3 },
|
|
59
|
+
{ version: 4, sql: MIGRATION_4 },
|
|
60
|
+
{ version: 5, sql: MIGRATION_5 },
|
|
61
|
+
{ version: 6, sql: MIGRATION_6 },
|
|
62
|
+
{ version: 7, sql: MIGRATION_7 },
|
|
63
|
+
];
|
|
64
|
+
for (const m of migrations) {
|
|
65
|
+
if (m.version > current) {
|
|
66
|
+
log.info(`Applying migration v${m.version}`);
|
|
67
|
+
if (m.version === 7) {
|
|
68
|
+
// SQLite doesn't support ADD COLUMN IF NOT EXISTS.
|
|
69
|
+
// Check if poll_count already exists before altering (happens when
|
|
70
|
+
// migration 6 was applied after the column was added to it).
|
|
71
|
+
const cols = db.prepare(`PRAGMA table_info(ingest_jobs)`).all();
|
|
72
|
+
if (!cols.some((c) => c.name === 'poll_count')) {
|
|
73
|
+
db.exec(`ALTER TABLE ingest_jobs ADD COLUMN poll_count INTEGER NOT NULL DEFAULT 0`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
db.exec(m.sql);
|
|
78
|
+
}
|
|
79
|
+
db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(m.version, Date.now());
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function getLocalLamport(db) {
|
|
84
|
+
const row = db
|
|
85
|
+
.prepare(`SELECT MAX(lamport_ts) as max_ts FROM ops_log WHERE device_id = (
|
|
86
|
+
SELECT device_id FROM device_identity LIMIT 1
|
|
87
|
+
)`)
|
|
88
|
+
.get();
|
|
89
|
+
return row?.max_ts ?? 0;
|
|
90
|
+
}
|
|
91
|
+
export function incrementLamport(db, deviceId) {
|
|
92
|
+
const current = db
|
|
93
|
+
.prepare(`SELECT lamport_ts FROM device_identity WHERE device_id = ?`)
|
|
94
|
+
.get(deviceId);
|
|
95
|
+
const next = (current?.lamport_ts ?? 0) + 1;
|
|
96
|
+
db.prepare(`UPDATE device_identity SET lamport_ts = ? WHERE device_id = ?`).run(next, deviceId);
|
|
97
|
+
return next;
|
|
98
|
+
}
|
|
99
|
+
// Migration 7 is handled programmatically (SQLite lacks ADD COLUMN IF NOT EXISTS)
|
|
100
|
+
// The constant is kept for schema documentation purposes only.
|
|
101
|
+
const MIGRATION_7 = `-- poll_count column added to ingest_jobs (handled below)`;
|
|
102
|
+
const MIGRATION_6 = `
|
|
103
|
+
-- ingest_jobs: async job tracking for heavy ingest operations (audio, large video, etc.)
|
|
104
|
+
CREATE TABLE IF NOT EXISTS ingest_jobs (
|
|
105
|
+
id TEXT PRIMARY KEY,
|
|
106
|
+
uri TEXT NOT NULL,
|
|
107
|
+
type TEXT,
|
|
108
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
109
|
+
progress INTEGER NOT NULL DEFAULT 0,
|
|
110
|
+
memory_id TEXT,
|
|
111
|
+
error TEXT,
|
|
112
|
+
created_at INTEGER NOT NULL,
|
|
113
|
+
started_at INTEGER,
|
|
114
|
+
completed_at INTEGER,
|
|
115
|
+
poll_count INTEGER NOT NULL DEFAULT 0
|
|
116
|
+
);
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_ingest_jobs_status ON ingest_jobs(status, created_at);
|
|
118
|
+
`;
|
|
119
|
+
const MIGRATION_5 = `
|
|
120
|
+
-- recovery_shards: local mirror of shard setup metadata (no share codes stored locally)
|
|
121
|
+
CREATE TABLE IF NOT EXISTS recovery_shards (
|
|
122
|
+
id TEXT PRIMARY KEY,
|
|
123
|
+
share_index INTEGER NOT NULL,
|
|
124
|
+
trusted_email TEXT NOT NULL,
|
|
125
|
+
created_at INTEGER NOT NULL
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
-- snapshot_log: tracks local knowledge of uploaded cloud snapshots
|
|
129
|
+
CREATE TABLE IF NOT EXISTS snapshot_log (
|
|
130
|
+
id TEXT PRIMARY KEY,
|
|
131
|
+
r2_key TEXT NOT NULL,
|
|
132
|
+
lamport_ts INTEGER NOT NULL,
|
|
133
|
+
size_bytes INTEGER NOT NULL,
|
|
134
|
+
created_at INTEGER NOT NULL
|
|
135
|
+
);
|
|
136
|
+
`;
|
|
137
|
+
const MIGRATION_4 = `
|
|
138
|
+
-- ops_log: append-only operation log for bidirectional sync
|
|
139
|
+
CREATE TABLE IF NOT EXISTS ops_log (
|
|
140
|
+
op_id TEXT PRIMARY KEY,
|
|
141
|
+
device_id TEXT NOT NULL,
|
|
142
|
+
lamport_ts INTEGER NOT NULL,
|
|
143
|
+
op_type TEXT NOT NULL
|
|
144
|
+
CHECK (op_type IN ('add_memory','update_properties','delete_memory','add_relation')),
|
|
145
|
+
memory_id TEXT NOT NULL,
|
|
146
|
+
payload_enc BLOB NOT NULL,
|
|
147
|
+
nonce BLOB NOT NULL,
|
|
148
|
+
sig BLOB NOT NULL,
|
|
149
|
+
sent_at INTEGER,
|
|
150
|
+
applied INTEGER NOT NULL DEFAULT 0,
|
|
151
|
+
created_at INTEGER NOT NULL
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_ops_log_pending
|
|
155
|
+
ON ops_log (sent_at, created_at)
|
|
156
|
+
WHERE sent_at IS NULL;
|
|
157
|
+
|
|
158
|
+
CREATE INDEX IF NOT EXISTS idx_ops_log_memory
|
|
159
|
+
ON ops_log (memory_id, lamport_ts);
|
|
160
|
+
|
|
161
|
+
CREATE INDEX IF NOT EXISTS idx_ops_log_applied
|
|
162
|
+
ON ops_log (applied, created_at);
|
|
163
|
+
|
|
164
|
+
-- tombstones: soft-delete with grace period
|
|
165
|
+
CREATE TABLE IF NOT EXISTS tombstones (
|
|
166
|
+
memory_id TEXT PRIMARY KEY,
|
|
167
|
+
deleted_at INTEGER NOT NULL,
|
|
168
|
+
op_id TEXT NOT NULL,
|
|
169
|
+
grace_until INTEGER NOT NULL,
|
|
170
|
+
finalized INTEGER NOT NULL DEFAULT 0
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
CREATE INDEX IF NOT EXISTS idx_tombstones_grace
|
|
174
|
+
ON tombstones (finalized, grace_until);
|
|
175
|
+
|
|
176
|
+
-- device_identity: local ed25519 keypair (one row per device)
|
|
177
|
+
CREATE TABLE IF NOT EXISTS device_identity (
|
|
178
|
+
device_id TEXT PRIMARY KEY,
|
|
179
|
+
pubkey_hex TEXT NOT NULL,
|
|
180
|
+
privkey_hex TEXT NOT NULL,
|
|
181
|
+
lamport_ts INTEGER NOT NULL DEFAULT 0,
|
|
182
|
+
created_at INTEGER NOT NULL
|
|
183
|
+
);
|
|
184
|
+
`;
|
|
185
|
+
const MIGRATION_3 = `
|
|
186
|
+
CREATE TABLE saved_views (
|
|
187
|
+
id TEXT PRIMARY KEY,
|
|
188
|
+
name TEXT NOT NULL,
|
|
189
|
+
description TEXT,
|
|
190
|
+
definition_json TEXT NOT NULL,
|
|
191
|
+
pinned INTEGER NOT NULL DEFAULT 0,
|
|
192
|
+
created_at INTEGER NOT NULL,
|
|
193
|
+
updated_at INTEGER NOT NULL
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
CREATE INDEX idx_saved_views_pinned ON saved_views(pinned DESC, created_at);
|
|
197
|
+
|
|
198
|
+
CREATE TABLE settings (
|
|
199
|
+
key TEXT PRIMARY KEY,
|
|
200
|
+
value_json TEXT NOT NULL,
|
|
201
|
+
updated_at INTEGER NOT NULL
|
|
202
|
+
);
|
|
203
|
+
`;
|
|
204
|
+
const MIGRATION_2 = `
|
|
205
|
+
CREATE TABLE watched_sources (
|
|
206
|
+
id TEXT PRIMARY KEY, -- ULID
|
|
207
|
+
module_id TEXT NOT NULL, -- 'drive' | 'notion' | ...
|
|
208
|
+
external_id TEXT NOT NULL, -- doc id / page id / file id
|
|
209
|
+
display_name TEXT NOT NULL,
|
|
210
|
+
config_json TEXT NOT NULL DEFAULT '{}', -- per-module metadata
|
|
211
|
+
last_synced_at INTEGER,
|
|
212
|
+
last_modified_remote TEXT, -- remote ETag / modified_time
|
|
213
|
+
last_error TEXT,
|
|
214
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
215
|
+
created_at INTEGER NOT NULL,
|
|
216
|
+
UNIQUE(module_id, external_id)
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
CREATE INDEX idx_watched_sources_module ON watched_sources(module_id);
|
|
220
|
+
CREATE INDEX idx_watched_sources_enabled ON watched_sources(enabled, module_id);
|
|
221
|
+
`;
|
|
222
|
+
const MIGRATION_1 = `
|
|
223
|
+
CREATE TABLE memories (
|
|
224
|
+
id TEXT PRIMARY KEY,
|
|
225
|
+
type TEXT NOT NULL,
|
|
226
|
+
source_id TEXT NOT NULL,
|
|
227
|
+
content TEXT NOT NULL,
|
|
228
|
+
content_hash TEXT NOT NULL,
|
|
229
|
+
properties_json TEXT NOT NULL,
|
|
230
|
+
wikilinks_json TEXT NOT NULL DEFAULT '[]',
|
|
231
|
+
related_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
232
|
+
embedding_model TEXT NOT NULL,
|
|
233
|
+
created_at INTEGER NOT NULL,
|
|
234
|
+
UNIQUE(type, source_id, content_hash)
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
CREATE INDEX idx_memories_type ON memories(type);
|
|
238
|
+
CREATE INDEX idx_memories_source ON memories(type, source_id);
|
|
239
|
+
CREATE INDEX idx_memories_created ON memories(created_at DESC);
|
|
240
|
+
|
|
241
|
+
CREATE VIRTUAL TABLE memories_fts USING fts5(
|
|
242
|
+
id UNINDEXED,
|
|
243
|
+
content,
|
|
244
|
+
title,
|
|
245
|
+
tags,
|
|
246
|
+
tokenize = 'porter unicode61'
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
CREATE TABLE custom_types (
|
|
250
|
+
type_name TEXT PRIMARY KEY,
|
|
251
|
+
display_name TEXT NOT NULL,
|
|
252
|
+
schema_json TEXT,
|
|
253
|
+
created_at INTEGER NOT NULL
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
CREATE TABLE oauth_tokens (
|
|
257
|
+
provider TEXT PRIMARY KEY,
|
|
258
|
+
access_token TEXT NOT NULL,
|
|
259
|
+
refresh_token TEXT,
|
|
260
|
+
expires_at INTEGER,
|
|
261
|
+
extra_json TEXT,
|
|
262
|
+
updated_at INTEGER NOT NULL
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
CREATE TABLE module_state (
|
|
266
|
+
module_id TEXT NOT NULL,
|
|
267
|
+
key TEXT NOT NULL,
|
|
268
|
+
value_json TEXT NOT NULL,
|
|
269
|
+
updated_at INTEGER NOT NULL,
|
|
270
|
+
PRIMARY KEY (module_id, key)
|
|
271
|
+
);
|
|
272
|
+
`;
|
|
273
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export declare const LOG_FILE: string;
|
|
3
|
+
export declare function rotateLogsIfNeeded(nextWriteBytes: number): void;
|
|
4
|
+
export declare function cleanLogs(): {
|
|
5
|
+
removed: string[];
|
|
6
|
+
truncated: string;
|
|
7
|
+
};
|
|
8
|
+
declare let auditCallback: ((level: LogLevel, module: string, msg: string, data?: unknown) => void) | null;
|
|
9
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
10
|
+
export declare function setAuditCallback(cb: typeof auditCallback): void;
|
|
11
|
+
export declare function createLogger(module: string): {
|
|
12
|
+
debug: (msg: string, data?: unknown) => void;
|
|
13
|
+
info: (msg: string, data?: unknown) => void;
|
|
14
|
+
warn: (msg: string, data?: unknown) => void;
|
|
15
|
+
error: (msg: string, data?: unknown) => void;
|
|
16
|
+
};
|
|
17
|
+
export type Logger = ReturnType<typeof createLogger>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAMA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAIpD,eAAO,MAAM,QAAQ,QAAiD,CAAC;AASvE,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAsC/D;AAED,wBAAgB,SAAS,IAAI;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmBpE;AAoHD,QAAA,IAAI,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IACxF,CAAC;AAEP,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,QAE1C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,aAAa,QAExD;AAuBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;iBAE1B,MAAM,SAAS,OAAO;gBACvB,MAAM,SAAS,OAAO;gBACtB,MAAM,SAAS,OAAO;iBACrB,MAAM,SAAS,OAAO;EAEtC;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
// Structured logger — everything goes to console + audit DB in debug mode
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
// ── Log rotation ──────────────────────────────────────────────────────────────
|
|
6
|
+
// Max 10MB per file, keep argos.log + .1..5 (≈60MB total worst case).
|
|
7
|
+
export const LOG_FILE = path.join(os.homedir(), '.argos', 'argos.log');
|
|
8
|
+
const MAX_BYTES = 10 * 1024 * 1024;
|
|
9
|
+
const MAX_ROTATIONS = 5;
|
|
10
|
+
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
11
|
+
function stripAnsi(s) {
|
|
12
|
+
return s.replace(ANSI_RE, '');
|
|
13
|
+
}
|
|
14
|
+
export function rotateLogsIfNeeded(nextWriteBytes) {
|
|
15
|
+
try {
|
|
16
|
+
let size = 0;
|
|
17
|
+
try {
|
|
18
|
+
size = fs.statSync(LOG_FILE).size;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return; // file doesn't exist yet
|
|
22
|
+
}
|
|
23
|
+
if (size + nextWriteBytes <= MAX_BYTES)
|
|
24
|
+
return;
|
|
25
|
+
// copytruncate strategy: launchd/systemd hold an open FD to argos.log, so
|
|
26
|
+
// a plain rename would leave the FD writing to the renamed inode forever.
|
|
27
|
+
// Instead: shift .N → .N+1, copy current → .1, then truncate-in-place so
|
|
28
|
+
// the inherited FD keeps writing at offset 0.
|
|
29
|
+
const oldest = `${LOG_FILE}.${MAX_ROTATIONS}`;
|
|
30
|
+
try {
|
|
31
|
+
if (fs.existsSync(oldest))
|
|
32
|
+
fs.unlinkSync(oldest);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
/* ignore */
|
|
36
|
+
}
|
|
37
|
+
for (let i = MAX_ROTATIONS - 1; i >= 1; i--) {
|
|
38
|
+
const src = `${LOG_FILE}.${i}`;
|
|
39
|
+
const dst = `${LOG_FILE}.${i + 1}`;
|
|
40
|
+
try {
|
|
41
|
+
if (fs.existsSync(src))
|
|
42
|
+
fs.renameSync(src, dst);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
/* ignore */
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
fs.copyFileSync(LOG_FILE, `${LOG_FILE}.1`);
|
|
50
|
+
fs.truncateSync(LOG_FILE, 0);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
/* ignore */
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* never break logging on rotation failure */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function cleanLogs() {
|
|
61
|
+
const removed = [];
|
|
62
|
+
for (let i = 1; i <= MAX_ROTATIONS; i++) {
|
|
63
|
+
const f = `${LOG_FILE}.${i}`;
|
|
64
|
+
try {
|
|
65
|
+
if (fs.existsSync(f)) {
|
|
66
|
+
fs.unlinkSync(f);
|
|
67
|
+
removed.push(f);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
/* ignore */
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
if (fs.existsSync(LOG_FILE))
|
|
76
|
+
fs.truncateSync(LOG_FILE, 0);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* ignore */
|
|
80
|
+
}
|
|
81
|
+
return { removed, truncated: LOG_FILE };
|
|
82
|
+
}
|
|
83
|
+
// Dedicated append-mode FD to LOG_FILE. O_APPEND guarantees every write lands
|
|
84
|
+
// at the current end-of-file, which makes copytruncate rotation safe (after
|
|
85
|
+
// ftruncate the next write resumes at offset 0). This is independent of
|
|
86
|
+
// whatever stdout was wired to by launchd/systemd.
|
|
87
|
+
let logFd = null;
|
|
88
|
+
function openLogFd() {
|
|
89
|
+
if (logFd !== null)
|
|
90
|
+
return logFd;
|
|
91
|
+
try {
|
|
92
|
+
fs.mkdirSync(path.dirname(LOG_FILE), { recursive: true });
|
|
93
|
+
logFd = fs.openSync(LOG_FILE, 'a');
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
logFd = null;
|
|
97
|
+
}
|
|
98
|
+
return logFd;
|
|
99
|
+
}
|
|
100
|
+
function writeToLogFile(line) {
|
|
101
|
+
const fd = openLogFd();
|
|
102
|
+
if (fd === null)
|
|
103
|
+
return;
|
|
104
|
+
const clean = stripAnsi(line);
|
|
105
|
+
const buf = Buffer.from(clean.endsWith('\n') ? clean : clean + '\n');
|
|
106
|
+
try {
|
|
107
|
+
rotateLogsIfNeeded(buf.byteLength);
|
|
108
|
+
fs.writeSync(fd, buf);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
/* never break the pipeline on log failure */
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// If launchd/systemd has wired stdout/stderr directly to argos.log, take over:
|
|
115
|
+
// replace stdout.write/stderr.write so console.log goes through OUR rotating
|
|
116
|
+
// O_APPEND fd. Otherwise log() would write the line twice (once via console,
|
|
117
|
+
// once via writeToLogFile). When stdout is a TTY (foreground/dev mode), we
|
|
118
|
+
// keep console output and ALSO mirror to the file.
|
|
119
|
+
let stdoutOwnsLogFile = false;
|
|
120
|
+
try {
|
|
121
|
+
const stdoutStat = fs.fstatSync(1);
|
|
122
|
+
const fileStat = fs.statSync(LOG_FILE);
|
|
123
|
+
if (stdoutStat.ino === fileStat.ino && stdoutStat.dev === fileStat.dev) {
|
|
124
|
+
stdoutOwnsLogFile = true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
/* LOG_FILE may not exist yet, or stdout not a file — fine */
|
|
129
|
+
}
|
|
130
|
+
if (stdoutOwnsLogFile) {
|
|
131
|
+
const noop = (_chunk, cbOrEnc, cb) => {
|
|
132
|
+
// Resolve callback like the real write() so any awaited drains keep working.
|
|
133
|
+
const callback = typeof cbOrEnc === 'function' ? cbOrEnc : cb;
|
|
134
|
+
if (typeof callback === 'function')
|
|
135
|
+
callback();
|
|
136
|
+
return true;
|
|
137
|
+
};
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
+
process.stdout.write = noop;
|
|
140
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
141
|
+
process.stderr.write = noop;
|
|
142
|
+
}
|
|
143
|
+
const LEVELS = {
|
|
144
|
+
debug: 0,
|
|
145
|
+
info: 1,
|
|
146
|
+
warn: 2,
|
|
147
|
+
error: 3,
|
|
148
|
+
};
|
|
149
|
+
const COLORS = {
|
|
150
|
+
debug: '\x1b[90m', // gray
|
|
151
|
+
info: '\x1b[36m', // cyan
|
|
152
|
+
warn: '\x1b[33m', // yellow
|
|
153
|
+
error: '\x1b[31m', // red
|
|
154
|
+
};
|
|
155
|
+
const RESET = '\x1b[0m';
|
|
156
|
+
// Patterns that indicate secrets — redacted before logging
|
|
157
|
+
const SECRET_PATTERNS = [
|
|
158
|
+
/sk-[A-Za-z0-9\-_]{20,}/g, // Anthropic / Stripe API keys
|
|
159
|
+
/pk-[A-Za-z0-9\-_]{20,}/g, // Public keys
|
|
160
|
+
/Bearer\s+[A-Za-z0-9\-_.~+/]{20,}/g, // Bearer tokens
|
|
161
|
+
/ntn_[A-Za-z0-9]{20,}/g, // Notion tokens
|
|
162
|
+
/xoxb-[A-Za-z0-9\-]{20,}/g, // Slack bot tokens
|
|
163
|
+
/ghp_[A-Za-z0-9]{20,}/g, // GitHub PATs
|
|
164
|
+
/gho_[A-Za-z0-9]{20,}/g, // GitHub OAuth tokens
|
|
165
|
+
/eyJ[A-Za-z0-9\-_]{30,}\.[A-Za-z0-9\-_]{30,}/g, // JWTs
|
|
166
|
+
];
|
|
167
|
+
function sanitizeLogData(data) {
|
|
168
|
+
if (typeof data === 'string') {
|
|
169
|
+
let sanitized = data;
|
|
170
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
171
|
+
sanitized = sanitized.replace(pattern, (match) => match.slice(0, 6) + '…[REDACTED]');
|
|
172
|
+
}
|
|
173
|
+
return sanitized;
|
|
174
|
+
}
|
|
175
|
+
if (typeof data === 'object' && data !== null) {
|
|
176
|
+
return JSON.parse(JSON.stringify(data, (_key, value) => {
|
|
177
|
+
if (typeof value !== 'string')
|
|
178
|
+
return value;
|
|
179
|
+
let sanitized = value;
|
|
180
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
181
|
+
sanitized = sanitized.replace(pattern, (match) => match.slice(0, 6) + '…[REDACTED]');
|
|
182
|
+
}
|
|
183
|
+
return sanitized;
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
return data;
|
|
187
|
+
}
|
|
188
|
+
let currentLevel = 'debug';
|
|
189
|
+
let auditCallback = null;
|
|
190
|
+
export function setLogLevel(level) {
|
|
191
|
+
currentLevel = level;
|
|
192
|
+
}
|
|
193
|
+
export function setAuditCallback(cb) {
|
|
194
|
+
auditCallback = cb;
|
|
195
|
+
}
|
|
196
|
+
function log(level, module, msg, data) {
|
|
197
|
+
if (LEVELS[level] < LEVELS[currentLevel])
|
|
198
|
+
return;
|
|
199
|
+
const ts = new Date().toISOString();
|
|
200
|
+
const color = COLORS[level];
|
|
201
|
+
const prefix = `${color}[${level.toUpperCase().padEnd(5)}]${RESET} ${ts} [${module}]`;
|
|
202
|
+
let line;
|
|
203
|
+
if (data !== undefined) {
|
|
204
|
+
const safe = sanitizeLogData(data);
|
|
205
|
+
const tail = typeof safe === 'object' ? JSON.stringify(safe, null, 2) : String(safe);
|
|
206
|
+
line = `${prefix} ${msg} ${tail}`;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
line = `${prefix} ${msg}`;
|
|
210
|
+
}
|
|
211
|
+
console.log(line); // eslint-disable-line no-console
|
|
212
|
+
writeToLogFile(line);
|
|
213
|
+
auditCallback?.(level, module, msg, data);
|
|
214
|
+
}
|
|
215
|
+
export function createLogger(module) {
|
|
216
|
+
return {
|
|
217
|
+
debug: (msg, data) => log('debug', module, msg, data),
|
|
218
|
+
info: (msg, data) => log('info', module, msg, data),
|
|
219
|
+
warn: (msg, data) => log('warn', module, msg, data),
|
|
220
|
+
error: (msg, data) => log('error', module, msg, data),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Express } from 'express';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import type { MemoryStore } from '../../memory/core/store.js';
|
|
4
|
+
import type { ToolRouter } from './tool-router.js';
|
|
5
|
+
export interface WebappOptions {
|
|
6
|
+
port: number;
|
|
7
|
+
store: MemoryStore;
|
|
8
|
+
router: ToolRouter;
|
|
9
|
+
clientDistDir?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function startWebapp(options: WebappOptions): {
|
|
12
|
+
app: Express;
|
|
13
|
+
server: http.Server;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/server/http.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AAiBxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,CAkEzF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { createLogger } from '../logger.js';
|
|
6
|
+
import { mountMcpHttp } from './mcp-http.js';
|
|
7
|
+
import { mountWebSocket } from './websocket.js';
|
|
8
|
+
import { memoriesApi } from '../../server/api/memories.js';
|
|
9
|
+
import { sourcesApi } from '../../server/api/sources.js';
|
|
10
|
+
import { typesApi } from '../../server/api/types.js';
|
|
11
|
+
import { viewsApi } from '../../server/api/views.js';
|
|
12
|
+
import { dailyApi } from '../../server/api/daily.js';
|
|
13
|
+
import { settingsApi } from '../../server/api/settings.js';
|
|
14
|
+
import { reindexApi } from '../../server/api/reindex.js';
|
|
15
|
+
import { syncStatusRouter } from '../../server/api/sync-status.js';
|
|
16
|
+
import { graphApi } from '../../server/api/graph.js';
|
|
17
|
+
import { integrationsApi } from '../../server/api/integrations.js';
|
|
18
|
+
import { loadConfig } from '../../config/index.js';
|
|
19
|
+
const log = createLogger('webapp');
|
|
20
|
+
export function startWebapp(options) {
|
|
21
|
+
const app = express();
|
|
22
|
+
app.use(express.json({ limit: '4mb', strict: false }));
|
|
23
|
+
// Permissive CORS for localhost dev (any localhost port)
|
|
24
|
+
app.use((req, res, next) => {
|
|
25
|
+
const origin = req.headers.origin ?? '';
|
|
26
|
+
if (/^https?:\/\/localhost(:\d+)?$/.test(origin) || /^https?:\/\/127\.0\.0\.1(:\d+)?$/.test(origin)) {
|
|
27
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
28
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PATCH,DELETE,OPTIONS');
|
|
29
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization');
|
|
30
|
+
res.setHeader('Access-Control-Allow-Credentials', 'true');
|
|
31
|
+
if (req.method === 'OPTIONS') {
|
|
32
|
+
res.sendStatus(204);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
next();
|
|
37
|
+
});
|
|
38
|
+
// Localhost-only access
|
|
39
|
+
app.use((req, res, next) => {
|
|
40
|
+
const host = req.headers.host ?? '';
|
|
41
|
+
if (!host.startsWith('localhost:') &&
|
|
42
|
+
!host.startsWith('127.0.0.1:') &&
|
|
43
|
+
host !== 'localhost' &&
|
|
44
|
+
host !== '127.0.0.1') {
|
|
45
|
+
res.status(403).json({ error: 'engram-mcp dashboard only accepts localhost' });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
next();
|
|
49
|
+
});
|
|
50
|
+
// REST API
|
|
51
|
+
app.use('/api/memories', memoriesApi(options.store));
|
|
52
|
+
app.use('/api/sources', sourcesApi(options.store));
|
|
53
|
+
app.use('/api/types', typesApi());
|
|
54
|
+
app.use('/api/views', viewsApi());
|
|
55
|
+
app.use('/api/daily', dailyApi());
|
|
56
|
+
app.use('/api/settings', settingsApi());
|
|
57
|
+
app.use('/api/reindex', reindexApi());
|
|
58
|
+
app.use('/api/graph', graphApi(options.store));
|
|
59
|
+
app.use('/api/integrations', integrationsApi(() => loadConfig()));
|
|
60
|
+
app.use(syncStatusRouter());
|
|
61
|
+
// MCP HTTP transport
|
|
62
|
+
mountMcpHttp(app, options.router);
|
|
63
|
+
// Static client (production)
|
|
64
|
+
const clientDist = options.clientDistDir ?? path.join(path.dirname(fileURLToPath(import.meta.url)), '../../client/dist');
|
|
65
|
+
app.use(express.static(clientDist));
|
|
66
|
+
app.get(/^(?!\/api|\/mcp|\/ws).*/, (_req, res) => {
|
|
67
|
+
res.sendFile(path.join(clientDist, 'index.html'));
|
|
68
|
+
});
|
|
69
|
+
const server = http.createServer(app);
|
|
70
|
+
mountWebSocket(server, options.store);
|
|
71
|
+
server.listen(options.port, '127.0.0.1', () => {
|
|
72
|
+
log.info(`Dashboard listening on http://localhost:${options.port}`);
|
|
73
|
+
});
|
|
74
|
+
return { app, server };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/server/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../../src/core/server/instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QAkCxB,CAAC"}
|