{"_id":"@cartisien/engram","_rev":"17-d38fa8b7b8be9eaa0aed2df978aae2a1","name":"@cartisien/engram","dist-tags":{"latest":"2.1.2"},"versions":{"0.1.0":{"name":"@cartisien/engram","version":"0.1.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.1.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"4eba273132174a8be57b24aa11ebb81e5c0411a9","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.1.0.tgz","fileCount":7,"integrity":"sha512-kRxW7uh9zKY9HGhTRdftr0n4H+fxUyRfPT20dbg5DD8vKleb/dfYlBMYzTFAseAlx+9sKd6Y4zZ7UKayxyRPPQ==","signatures":[{"sig":"MEUCIAomYdCIoGuqEfrjWl3W/i+qFqPUf3Y1+Hfd++4C0X9BAiEAi0YarCItFK2MfvooK81bGhtZBqzBG2yXb3Yp4GXm5os=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22088},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"10.8.2","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.1.0_1771680866997_0.09532332462372528","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.2.0":{"name":"@cartisien/engram","version":"0.2.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.2.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"0c330f8320c895e510538baa6921d2208ec98e8d","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.2.0.tgz","fileCount":8,"integrity":"sha512-CzirpwmaTUF3InPDGnl1t+qccJ4I/nBEY330O26TrXZ1NZ0OLTKkVQHC3Zn69CQ93aSFIfs2sWbSUL+kUr/ySA==","signatures":[{"sig":"MEUCIQDd/6iDh5X9kX6y+R1sUF8PN75GhoQh+tz/u33EfBhFqgIgFXb4NwplbymEJR3d3WJyykSfUeatM1vUU90fKCKdvZM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66739},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"36126702c52c79abd274b029ad942edd3ca84233","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.2.0_1771772859587_0.25195261749796405","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.3.0":{"name":"@cartisien/engram","version":"0.3.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.3.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"aa10a63e7b3521a9d40a7767f380fff057f8e2e1","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.3.0.tgz","fileCount":7,"integrity":"sha512-Vtvp7xdkVcvPJ6rEHtwA7nTZTuNimMhguJEQRjEhTn6g2gDa5j3HdbXIKohwF0wV10Vaz3eLah6uPvrTQPgLEg==","signatures":[{"sig":"MEUCIQDBjc58T7XoosvaZQGTsdy4anwmo9StKE++vFitrsbXEQIgWlgFCtniHRWBwqES1bbMStkb1fzsfWAzxHZxl4IyCfo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46652},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f3541f48b970e28b64f0e3d38656b15d801be3a6","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.3.0_1773259937606_0.3531951316073614","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.4.0":{"name":"@cartisien/engram","version":"0.4.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.4.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"0c49b539e39d608e2efc585c4f6b1e2dd52c9069","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.4.0.tgz","fileCount":38,"integrity":"sha512-qiJv7+mzYVdVIWdb3zZ+TNKAOeQGbYd1apJxyMKgmyWPT90EA8QYZgFYegwS/r8nwEbArsQFFu8xzbq7Fm8HWA==","signatures":[{"sig":"MEQCIB6BmlQ5CQTyv2a55nEWcVrcx+IkKDNseGA8HJ11u826AiAyVjvZo+lpAgRBGUWboaOgCNqV38MD0vfEBEt7yOWHFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94527},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b4d89b9945434f442e4c4f048c1684cbff676518","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.4.0_1773260991115_0.12134130248537311","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.5.0":{"name":"@cartisien/engram","version":"0.5.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.5.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"726b5bb1719a024023fffabcee3978afb36f1c10","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.5.0.tgz","fileCount":38,"integrity":"sha512-yNm2JqxlaveIDRiYquwaulyPs+8So75LXgZd+Z1R9nqqbmjtMN5TCbLaZqPA0Vhy2f06xsMPoaNNHsMx+7/afw==","signatures":[{"sig":"MEYCIQD4iH3s+isQjj9KspY8pDtLRBNg7tKS3aWrEZU+hnFKVAIhALfFu5qadJiRfgrJX9u1GYH2xGzXzHLDxNMdh7MFLxUl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121775},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"601776ec40808e6a0e5d834ddd3777d3fae81e99","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.5.0_1773261790332_0.3110966868371956","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.6.0":{"name":"@cartisien/engram","version":"0.6.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.6.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"1864dc34a1ea896cca25c8777155650c38a07361","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.6.0.tgz","fileCount":42,"integrity":"sha512-ZoN5fgmFaHr6qdoEVbQO55+PtJ1J2M0zK4gxCYn+7sQARJ+BoYFJFs6qb7nEFxkyGKyCOQIK4E7yTgYCFCwtEw==","signatures":[{"sig":"MEYCIQCf57A/Mce67ew0/isAt+mNsb8Gp6gKPHNjBaoehxA+wQIhAMUqvn08c0h2mvZa+cjsg05MbLtBFT3cycF00KKzrM2j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125925},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"601776ec40808e6a0e5d834ddd3777d3fae81e99","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.6.0_1773262127236_0.43653841635973456","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.6.1":{"name":"@cartisien/engram","version":"0.6.1","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.6.1","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"67c825875ee25c9e34f56766b7564119fa652631","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.6.1.tgz","fileCount":42,"integrity":"sha512-ogn+jULM4XMToEF4fJycrDLH8fH4yMPz9oQ6EpPTYgRhi06HtQQ7kxvv+TSMw2e7wgUnmTsuUOa5twdtWIhdiA==","signatures":[{"sig":"MEYCIQCAZAsV9uo6ZlAKKOmkC5m2AQET+fMY8VscoSLS4bBgQQIhAJZKCuiNBqJu5Dsurr1L2KKMNCcp29tp2AcvfVd26HKX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127382},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"dc0177b4b8b3fa7771daeba61f7eb8cf45bafb40","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.6.1_1773262340227_0.011007332761575617","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.7.0":{"name":"@cartisien/engram","version":"0.7.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.7.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"0ba1dbf67470e4848659d689e28ecddf2d893880","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.7.0.tgz","fileCount":46,"integrity":"sha512-f6cgxSdP+pLYr7/oIdhGXI9fE15Qe7K/bLRChFyA3gZkavb/9yoERhKHu6x8dzEBbEsGJ6+Em+AIb8xkw5lpCw==","signatures":[{"sig":"MEUCIQDOo4Yivud9GpNTiUufN+ZO8kFZxqZhlZP2ttXj+Y3L2gIgElud1VD25UMMCr+lBxKut6Ev0g8YU4cVZa9FEzpa3vo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142848},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"dc0177b4b8b3fa7771daeba61f7eb8cf45bafb40","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.7.0_1773263409622_0.3850409769144485","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.8.0":{"name":"@cartisien/engram","version":"0.8.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.8.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"2b0f9a964441274614af44aa30a370f6c223ef47","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.8.0.tgz","fileCount":46,"integrity":"sha512-nvXhHcVFAxUN7HCMSa/tg6jbLUIJIUyYHbPteEPxkjRuTGgprmhy2fWv1idrr5XvG5o8vEsyY5eZYpevdBMd0w==","signatures":[{"sig":"MEUCIQC4IMUt7tbgEE4SSYgfBbCRyk2FQL+JKHrAXOdyIAMOGwIgMKpaeVdRV13ZmPpaaxTHpKexNf7mrOKusTMmXByfeKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154571},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7897eee5f907ecffc69c855f609ee8a7febfe7a4","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.8.0_1773274144620_0.6837681836248821","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"0.9.0":{"name":"@cartisien/engram","version":"0.9.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@0.9.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"24d0c33f6fb3c2bb9b2a0dc2f532c17b4ef525e3","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-0.9.0.tgz","fileCount":46,"integrity":"sha512-HMbtQ+je+dCRg16r7nrH8EnmMnmIN+qgrueiValrjttbG0fs8i/fyBeT+oFhuEiRDKE1W4JNtRVzs7/jfhYP/g==","signatures":[{"sig":"MEQCIHplyzj9DbLSfIPqmbNr7ruTQqBKVO+bFaXY39hFlS8VAiA+LuhfAIKA2pYIsouXVeIznmu6Vu4lecvLynzHHtPjTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178029},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"eb38430e27e529fe08c7a22861965a6d03f65caf","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_0.9.0_1773275993781_0.5923999747931206","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"1.0.0":{"name":"@cartisien/engram","version":"1.0.0","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@1.0.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"d23fe8bc52f19df0fcc05e7544e63e5da7e15ae1","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-1.0.0.tgz","fileCount":46,"integrity":"sha512-DO0mtnCUVpiAEE9N9YqgSVGoGGB9UvM4fEg0TATm4sDI58ULTsT5sjQh0Ldvxi7I3TNQDHoRGg0WEAkyi+nV1Q==","signatures":[{"sig":"MEYCIQC5V/hH+IGyeaYS9Q23L33l3qzYYOWEQK3vAZllF2gNJQIhAPwJwNjI6vLxh4CKvy35g+BYw5xQ78ttXYb6ln2IN9B0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190261},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"c82f36bf860f3c390194f37c28f0f6e6284c3361","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_1.0.0_1773277671504_0.2005854188693581","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"1.0.1":{"name":"@cartisien/engram","version":"1.0.1","keywords":["ai","memory","openai","assistant","sqlite","embeddings","conversational-memory"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@1.0.1","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"homepage":"https://github.com/cartisien/engram#readme","bugs":{"url":"https://github.com/cartisien/engram/issues"},"dist":{"shasum":"adc409f2e47b1c903cfdf4d8a93e7b1b5671a274","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-1.0.1.tgz","fileCount":102,"integrity":"sha512-3mrZ5Gc65BrMy1yw1BvAsMRLVn9SrcLPpqTAXvctk3zn2j7Jslp3nvHdZwOJTn/fBswY35LD+r+bS2XSsuCEwQ==","signatures":[{"sig":"MEQCIHwA6WEWs89M/0U4G92cThDzVubR3xThmiTb1y+ZtLv9AiBbywTTtkuzJdnYUPUy1XpNGUL+4giWJhWBiGOQEVRohA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272265},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5c81e44c1ad9bab9e1f51d9783c6f4a4ccefc2a9","scripts":{"dev":"tsc --watch","test":"node --test dist/**/*.test.js","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"repository":{"url":"git+https://github.com/cartisien/engram.git","type":"git"},"_npmVersion":"11.8.0","description":"Persistent memory for AI assistants. SQLite-backed conversational memory with semantic search.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"_npmOperationalInternal":{"tmp":"tmp/engram_1.0.1_1773627579786_0.7415531758584546","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"2.0.0":{"name":"@cartisien/engram","version":"2.0.0","keywords":["ai","memory","embeddings","sqlite","semantic-search","fts5"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@2.0.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"dist":{"shasum":"7afd76175ca7b318dcc91cb9d9eb4dd0cd61c268","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-2.0.0.tgz","fileCount":111,"integrity":"sha512-3IHqDw8K5bMxRNCpjAGuiug5y6P2dJ8KeMmVxN+tDQHPtJ8NlnjupeFk5TRr3+1appIM0b8kuatcH6LW741hvw==","signatures":[{"sig":"MEYCIQC7fIQMTKQhtN6KX52N1U8sD+wIH54eD9xqJqlXX+MPuAIhAP33Z8HhQWGRxwvyqeoqW4DTAf7ordiTAIGJhAnTms4H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324413},"main":"dist/index.js","_from":"file:cartisien-engram-2.0.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"_resolved":"/tmp/94e77164ac267e8e6f94f1c60089541c/cartisien-engram-2.0.0.tgz","_integrity":"sha512-3IHqDw8K5bMxRNCpjAGuiug5y6P2dJ8KeMmVxN+tDQHPtJ8NlnjupeFk5TRr3+1appIM0b8kuatcH6LW741hvw==","_npmVersion":"10.8.2","description":"Persistent semantic memory for AI agents — SQLite-backed, FTS5 + vector hybrid search, optional Qdrant.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7","lru-cache":"^10.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"optionalDependencies":{"@cartisien/extensa":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/engram_2.0.0_1776643105617_0.8635941868221364","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"2.1.0":{"name":"@cartisien/engram","version":"2.1.0","keywords":["ai","memory","embeddings","sqlite","semantic-search","fts5"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@2.1.0","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"dist":{"shasum":"93dbd45940689d9d4307cd3b800c45072a36cf92","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-2.1.0.tgz","fileCount":131,"integrity":"sha512-YEzM1bZspvlqNo73z8oVZcC7L6vM17pbfyNjpUN6VK3TAcz6EkOsqvyzR7gZ/DgssqRb5VBIBstWLE1fJS+a2A==","signatures":[{"sig":"MEUCIQCBgyrLifD3HfFq6SmXtZVLVyX5Hk2EJ4MnXHvr23zGNAIgFuhgTN04ncV0l+hOXIfISjb4iNBd/c2dGAvfM4YOAW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374795},"main":"dist/index.js","_from":"file:cartisien-engram-2.1.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"_resolved":"/tmp/7619d538206deda88d455a0513f67f8a/cartisien-engram-2.1.0.tgz","_integrity":"sha512-YEzM1bZspvlqNo73z8oVZcC7L6vM17pbfyNjpUN6VK3TAcz6EkOsqvyzR7gZ/DgssqRb5VBIBstWLE1fJS+a2A==","_npmVersion":"10.8.2","description":"Persistent semantic memory for AI agents — SQLite-backed, FTS5 + vector hybrid search, optional Qdrant.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7","lru-cache":"^10.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"optionalDependencies":{"@cartisien/extensa":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/engram_2.1.0_1778114948554_0.6791410002575986","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"2.1.1":{"name":"@cartisien/engram","version":"2.1.1","keywords":["ai","memory","embeddings","sqlite","semantic-search","fts5"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@2.1.1","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"dist":{"shasum":"9ab3814093a7e7dd508d473c0649cacbe62e0615","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-2.1.1.tgz","fileCount":131,"integrity":"sha512-9tzyhbuJj6bRpRUBXwBxuCTZYyWPOCvVcaosrhWf8Qhu50EF3H+hiyNfg6vxow5LGAt97kEkEbAEAYb4YU9cuA==","signatures":[{"sig":"MEYCIQDowdvNBy3vlxPgEX+REaf/nvGxaYC5YFEU6wxrwND0RgIhAMv+UkoO1i9U2MdQvFOmtLZILvfYLE9KbCrVAlvbDu92","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374585},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"66f09c86a44dc1ca30d9bc071553acdc693542ae","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"_npmVersion":"10.8.2","description":"Persistent semantic memory for AI agents — SQLite-backed, FTS5 + vector hybrid search, optional Qdrant.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7","lru-cache":"^10.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"optionalDependencies":{"@cartisien/extensa":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/engram_2.1.1_1783639792935_0.6349574360665122","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"},"2.1.2":{"name":"@cartisien/engram","version":"2.1.2","keywords":["ai","memory","embeddings","sqlite","semantic-search","fts5"],"author":{"name":"Cartisien Interactive"},"license":"MIT","_id":"@cartisien/engram@2.1.2","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"dist":{"shasum":"fd4af3b09308e8251c5457bfbac1685e8de9a6ac","tarball":"https://registry.npmjs.org/@cartisien/engram/-/engram-2.1.2.tgz","fileCount":131,"integrity":"sha512-xnjH4qL70ELCeH3TvUo+uxF87CctybwNA6PkQ1kow6o+6TAL5G9f29zBfzoUIl1v0HA7aSdTOICVBSRD5XsfXg==","signatures":[{"sig":"MEQCICYJL18mU1KhEdfuER2EYhbg1mph1Q3QlSEZxH7IkLToAiA7yLlMbMqGRhtd4CvOFqWYapsokOSabm16VHdPVPBpMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378064},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"79795e0d93e8cc878690244e48bfd53d9b250726","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"mrwitters","email":"cartisien@cartisien.com"},"_npmVersion":"10.8.2","description":"Persistent semantic memory for AI agents — SQLite-backed, FTS5 + vector hybrid search, optional Qdrant.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"sqlite":"^5.1.1","sqlite3":"^5.1.7","lru-cache":"^10.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.3.3","@types/node":"^20.11.0","@types/sqlite3":"^3.1.11"},"optionalDependencies":{"@cartisien/extensa":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/engram_2.1.2_1783641511070_0.3334268177387745","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nylogram is now a closed, hosted product — no longer maintained. Request access at https://app.cartisien.com"}},"time":{"created":"2026-02-21T13:34:26.932Z","modified":"2026-08-19T15:25:46.087Z","0.1.0":"2026-02-21T13:34:27.167Z","0.2.0":"2026-02-22T15:07:39.748Z","0.3.0":"2026-03-11T20:12:17.869Z","0.4.0":"2026-03-11T20:29:51.281Z","0.5.0":"2026-03-11T20:43:10.474Z","0.6.0":"2026-03-11T20:48:47.426Z","0.6.1":"2026-03-11T20:52:20.379Z","0.7.0":"2026-03-11T21:10:09.770Z","0.8.0":"2026-03-12T00:09:04.764Z","0.9.0":"2026-03-12T00:39:53.917Z","1.0.0":"2026-03-12T01:07:51.705Z","1.0.1":"2026-03-16T02:19:39.959Z","2.0.0":"2026-04-19T23:58:25.782Z","2.1.0":"2026-05-07T00:49:08.695Z","2.1.1":"2026-07-09T23:29:53.071Z","2.1.2":"2026-07-09T23:58:31.226Z"},"author":{"name":"Cartisien Interactive"},"license":"MIT","keywords":["ai","memory","embeddings","sqlite","semantic-search","fts5"],"description":"Persistent semantic memory for AI agents — SQLite-backed, FTS5 + vector hybrid search, optional Qdrant.","maintainers":[{"name":"mrwitters","email":"cartisien@cartisien.com"}],"readme":"# @cartisien/engram\n\nPersistent semantic memory for AI agents. Store, search, and retrieve conversational memory with embeddings, graph relationships, and hybrid search.\n\n## Features\n\n- **Persistent Storage**: SQLite-backed with WAL mode for reliability\n- **Semantic Search**: Vector similarity using embeddings (OpenAI or Ollama)\n- **FTS5 Keyword Search**: Full-text search with BM25 ranking\n- **Hybrid Scoring**: Combines semantic, keyword, importance, and recency\n- **Graph Memory**: Extract and query entity relationships\n- **Multi-hop Traversal**: Find paths between entities\n- **User-Scoped Memory**: Cross-session memory persistence\n- **Embedding Cache**: LRU cache to reduce API calls\n- **Batch Operations**: Efficient batch embedding\n- **Deduplication**: Automatic duplicate detection and merging\n- **Memory Tiers**: Working, long-term, and archived tiers\n- **Consolidation**: Automatic summarization of old memories\n\n## Installation\n\n```bash\nnpm install @cartisien/engram\n```\n\n## Quick Start\n\nPick an embedding backend. OpenAI needs no local infra:\n\n```typescript\nimport { Engram } from '@cartisien/engram';\n\nconst engram = Engram.openai({\n  apiKey: process.env.OPENAI_API_KEY,\n  dbPath: './memory.db',\n});\n\nawait engram.init();\n\n// Store a memory\nawait engram.remember('session-123', 'The user prefers TypeScript', 'user');\n\n// Recall memories\nconst memories = await engram.recall('session-123', 'programming preferences');\n```\n\nSelf-hosted alternative with Ollama:\n\n```typescript\nconst engram = Engram.local({ dbPath: './memory.db' });\n// or: Engram.local({ url: 'http://localhost:11434', model: 'nomic-embed-text' });\n```\n\nBoth presets are thin wrappers over `new Engram({...})`. Use the constructor directly when you need to tune cache size, graph memory, reranking, or Qdrant backend.\n\nProvider is auto-detected from the model name — anything starting with `text-embedding-` is routed to OpenAI, everything else to Ollama. Set `embeddingProvider: 'openai' | 'ollama'` to override.\n\n## Configuration\n\n```typescript\nconst engram = new Engram({\n  // Database\n  dbPath: './memory.db',           // SQLite file path\n  enableWAL: true,                 // Write-Ahead Logging\n  \n  // Embeddings\n  embeddingUrl: 'http://localhost:11434',\n  embeddingModel: 'nomic-embed-text',\n  semanticSearch: true,\n  embeddingCacheSize: 1000,        // LRU cache size\n  embeddingBatchSize: 10,          // Batch size for embeddings\n  \n  // Search\n  enableFTS5: true,                // Full-text search\n  dedupThreshold: 0.95,            // Duplicate detection threshold\n  \n  // Scoring\n  enableImportanceScoring: false,  // Auto-calculate importance\n  recencyHalfLifeDays: 30,         // Recency decay half-life\n  \n  // Graph\n  graphMemory: false,              // Extract graph relationships\n  graphMaxDepth: 3,                // Max traversal depth\n  \n  // Consolidation\n  autoConsolidate: false,\n  consolidateThreshold: 100,\n  consolidateKeep: 20,\n});\n```\n\n## Core Operations\n\n### Store Memories\n\n```typescript\n// Session-scoped memory\nawait engram.remember(\n  'session-123',           // session ID\n  'User mentioned they like hiking',\n  'user',                  // role: 'user' | 'assistant' | 'system'\n  { source: 'chat' }       // optional metadata\n);\n\n// User-scoped memory (cross-session)\nawait engram.rememberUser(\n  'user-456',\n  'Preferences: dark mode, notifications off',\n  'system'\n);\n```\n\n### Recall Memories\n\n```typescript\n// Basic recall (recent memories)\nconst recent = await engram.recall('session-123');\n\n// Semantic search\nconst relevant = await engram.recall('session-123', 'outdoor activities', {\n  limit: 5,\n  threshold: 0.7,\n});\n\n// With filters\nconst filtered = await engram.recall('session-123', 'hiking', {\n  role: 'user',\n  tiers: ['working', 'long_term'],\n  before: new Date('2024-01-01'),\n});\n\n// Iterator for large result sets\nfor await (const memory of engram.recallIter('session-123', 'query')) {\n  console.log(memory.content);\n}\n```\n\n### Graph Operations\n\n```typescript\n// Store relationship\nawait engram.storeEdge(\n  'session-123',\n  'Alice',           // from entity\n  'knows',           // relation\n  'Bob',             // to entity\n  1.0,               // confidence\n  memory.id          // optional source memory\n);\n\n// Query entity\nconst graph = await engram.graph('session-123', 'Alice');\nconsole.log(graph.relationships);\n\n// Find path between entities\nconst path = await engram.graphPath(\n  'session-123',\n  'Alice',\n  'Charlie',\n  3                  // max depth\n);\nif (path.found) {\n  console.log(`Path found with ${path.hops} hops`);\n}\n```\n\n### Memory Management\n\n```typescript\n// Get session stats\nconst stats = await engram.stats('session-123');\nconsole.log(`${stats.total} memories, ${stats.graphNodes} entities`);\n\n// Consolidate old memories\nconst result = await engram.consolidate('session-123', {\n  keep: 20,          // preserve recent memories\n  dryRun: true,      // preview only\n});\n\n// Delete specific memory\nawait engram.forget('session-123', { id: memoryId });\n\n// Delete old memories\nawait engram.forget('session-123', {\n  before: new Date('2024-01-01'),\n  includeLongTerm: false,\n});\n```\n\n### v0.8 Subsystems\n\nSkills, collision-based insights, and the wiki/digest layer hang off\nnamespace accessors rather than flat methods on `Engram`:\n\n```typescript\n// Skills\nconst hits = await engram.skills.search('refund policy', 5);\n\n// Collision engine — generate + retrieve insights, adjust strategy weights\nconst insights = await engram.collide('session-123');        // fetch + run\nconst prior    = await engram.collision.getInsights('session-123');\nawait engram.rateInsight(insights[0].id, 5);                 // updates weights\nconst weights  = engram.collision.getWeights();\n\n// Wiki / digests\nconst digest  = await engram.wiki.create({ slug: 'billing', subtype: 'topic', body: '...' });\nconst results = await engram.wiki.search('billing', 10);\nconst current = await engram.wiki.getBySlug('billing');\nconst next    = await engram.wiki.refresh('billing', 'updated body', 0.8);\nconst history = await engram.wiki.history('billing');\n\n// Wiki-adjacent free-function helpers stay on Engram\nawait engram.lint({ bootstrap: true });\nconst md = await engram.buildIndex();\nawait engram.appendLog('digest.refresh', 'billing updated');\nconst log = await engram.queryLog({ type: 'digest.refresh', limit: 50 });\n```\n\n> **Migration from ≤v0.7.x**: the flat wrappers `createDigest`,\n> `searchDigests`, `getDigest`, `refreshDigest`, `digestHistory`,\n> `getInsights`, `getStrategyWeights`, and `recallWithSkills` were\n> removed. Use the subsystem accessors shown above.\n\n## Hybrid Search\n\nEngram combines multiple signals for ranking:\n\n```typescript\n// Default weights\nconst weights = {\n  semantic: 0.5,    // Vector similarity\n  keyword: 0.25,    // FTS5 BM25 score\n  importance: 0.15, // Memory importance (0-1)\n  recency: 0.1,     // Time decay\n};\n\nconst memories = await engram.recall('session-123', 'machine learning', {\n  applyDecay: true,\n});\n```\n\nThe `combinedScore` is normalized (0-1) and memories are sorted by this score.\n\n## Caching\n\n```typescript\n// Embedding cache (LRU)\nconst cache = new EmbeddingCache({ maxSize: 1000 });\ncache.set(contentHash, embedding);\nconst cached = cache.get(contentHash);\n\n// Check stats\nconst stats = cache.getStats();\nconsole.log(`Hit rate: ${(stats.hitRate * 100).toFixed(1)}%`);\n```\n\n## Deduplication\n\n```typescript\nimport { findSimilarInList, deduplicateMemories } from '@cartisien/engram';\n\n// Find similar memories\nconst similar = findSimilarInList(queryEmbedding, memories, 0.95);\n\n// Deduplicate a list\nconst unique = deduplicateMemories(memories, 0.95);\n```\n\n## Batch Operations\n\n```typescript\n// Batch embed multiple texts\nconst embeddings = await engram.embedBatch([\n  'text 1',\n  'text 2',\n  'text 3',\n]);\n\n// Manual batch embedding\nimport { embedBatch } from '@cartisien/engram';\nconst results = await embedBatch(\n  texts,\n  embedFn,\n  10  // batch size\n);\n```\n\n## TypeScript Types\n\n```typescript\nimport type {\n  MemoryEntry,\n  UserMemoryEntry,\n  MemoryTier,\n  MemoryRole,\n  RecallOptions,\n  GraphResult,\n  GraphPathResult,\n  SessionStats,\n  EngramConfig,\n} from '@cartisien/engram';\n```\n\n## Testing\n\n```bash\nnpm test              # Run all tests\nnpm run test:watch    # Watch mode\n```\n\n## Architecture\n\n```\nsrc/\n├── index.ts              # Main Engram class\n├── types.ts              # TypeScript types\n├── cache/\n│   └── embedding-cache.ts # LRU embedding cache\n├── search/\n│   ├── fts5.ts           # Full-text search\n│   └── hybrid.ts         # Hybrid scoring\n├── utils/\n│   ├── batch.ts          # Batch embedding\n│   └── dedup.ts          # Deduplication\n└── graph/\n    └── traversal.ts      # Graph operations\n```\n\n## Requirements\n\n- Node.js 18+\n- SQLite 3 with FTS5 support\n- Ollama (optional, for embeddings)\n\n## License\n\nMIT\n\n## Changelog\n\n### v0.8.0 (unreleased)\n- **Breaking**: removed flat v0.8 pass-throughs (`createDigest`, `searchDigests`, `getDigest`, `refreshDigest`, `digestHistory`, `getInsights`, `getStrategyWeights`, `recallWithSkills`). Use `engram.wiki.*`, `engram.collision.*`, `engram.skills.search()` instead\n- Added `Engram.openai({ apiKey })` and `Engram.local()` preset factories\n- Added OpenAI embedding provider (`/v1/embeddings`); auto-detected from models starting with `text-embedding-`\n- Added `embeddingProvider` and `embeddingApiKey` config fields\n- Added automatic legacy-schema migration in `init()` (backfills `tier`, `importance`, `consolidated_from`, `created_at` on pre-v0.7 DBs)\n\n### v0.7.0\n- Added embedding cache (LRU)\n- Added batch embedding support\n- Added FTS5 keyword search\n- Added hybrid search with recency decay\n- Added importance scoring\n- Added graph memory and multi-hop traversal\n- Added deduplication utilities\n- Added user-scoped memory\n- Added WAL mode for SQLite\n- Improved consolidation\n","readmeFilename":"README.md"}