{"_id":"@agentage/memory-core","_rev":"19-0866100903fb1186ceb69bf81669e634","name":"@agentage/memory-core","dist-tags":{"latest":"1.5.0"},"versions":{"0.0.1":{"name":"@agentage/memory-core","version":"0.0.1","license":"UNLICENSED","_id":"@agentage/memory-core@0.0.1","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"dist":{"shasum":"736a371770abcb9f01679dd3d83219f3d5a96c13","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.0.1.tgz","fileCount":54,"integrity":"sha512-2siRlh4sscOYmCLlEgug/NypyClAXBhz+vR2MhP5CVN96vxFqgiedcYDYcioZ+WONH8WQ6p2yP2IBCMUbhxlJw==","signatures":[{"sig":"MEQCIBSl627i2mQItprKqFo+cZcQU59Wm9HfMUC5Dshm/R0mAiAVght5BlT5PE9g8IswY4Z4+RpTzG0TgjRDlI85ZetgtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89973},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"ec8a6911b4947eff859019ab3bfc7e2a35306489","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"_npmVersion":"11.7.0","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.0.1_1781982711576_0.09825649961807881","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@agentage/memory-core","version":"0.1.0","license":"UNLICENSED","_id":"@agentage/memory-core@0.1.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"3fd1f566d17722124cfcc0ccf70c9c17308310d9","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.1.0.tgz","fileCount":54,"integrity":"sha512-ontC1Zs1YRgmGtrBuZ9qIB5VYPabYdiJhr/FSjsFPvnT6Gn3jaLZJP/QIdJzNlB8upNydByiuP7BfUkjRDc0VA==","signatures":[{"sig":"MEUCIEZKlNL9djG7LdFR14LXfKDVDu/zS95BIU3hyunqmF+4AiEAqG+NRLEFrIwU/hZO8tgTPGkzQ+eyJ40OQC01eojGYnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94792},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"39a1430de4ce8efef3ba371f725c87ea7167016e","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.1.0_1781987240516_0.8502059577241292","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agentage/memory-core","version":"0.1.1","license":"MIT","_id":"@agentage/memory-core@0.1.1","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"73cd84005cbacd779969c997dbd6d499ef929aef","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.1.1.tgz","fileCount":55,"integrity":"sha512-e4NMCWIjKoZcwDaemLqSmd02/VgDBEVrRz2/0t9T94O3ERlZhhUjOn0+Ya193YLyjfquRNdVMkXpKHV2k7SE6w==","signatures":[{"sig":"MEQCIGHrx+5UFy2yEch34G3+YxTgr8w1+K2xlV5xWReYLGwmAiBC1tvbeuBnh75cKYOxdthUhNKtOdijUKw+V4GWSJFBTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95908},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"55aab76aae7d813e3cc8735330ed5be0e75bb768","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.1.1_1783299396612_0.32271365336075375","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agentage/memory-core","version":"0.1.2","license":"MIT","_id":"@agentage/memory-core@0.1.2","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"2192b0f2b10a41f1775d3e878ca9e3ac31811f79","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.1.2.tgz","fileCount":55,"integrity":"sha512-bnUjYcDpvzzPfJMY1ZZ3yOHAdAIku0Ez9f308QjL6Uy36EjllRUPYyfVZRjnXbn4mPp6GMlCCo4wFDEIcxqkFA==","signatures":[{"sig":"MEUCIQDrz4CxMDxP3142DAuk4n/UdUs3026Xumm9xI3heQZiBQIgAYxTD1KbuOl9t7NdDIx0C1Fg2kc1exwtMrOMt8+9XXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96854},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"1351200bc347e61bbda70178a11a1b10a573615c","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.1.2_1783320937748_0.7783018346962252","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@agentage/memory-core","version":"0.1.3","license":"MIT","_id":"@agentage/memory-core@0.1.3","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"3e1f65bf97ce56d27c69e6e0dce9eadd9c7d9c5a","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.1.3.tgz","fileCount":63,"integrity":"sha512-BFzh/VoP5zm9j7CwazCRJRyqHT6PzImbaDqmKi8Iay3QX6TKYmWCIg1pXxy02yuJdSou4NR6FX5r8ezVSmBhhA==","signatures":[{"sig":"MEQCIE+x6mSAqZTz4OSkba0CBrv0XD/bkdEhrxkuc7CtojrHAiAHnaNdN8z5R/sP5Z3XlPnKSBoPJtAn9mr3svi4nC34Gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111723},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"7fc18b1b46909e3c913f4a47edb2b360571a66b1","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.1.3_1783330407458_0.7160557442176689","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@agentage/memory-core","version":"0.2.0","license":"MIT","_id":"@agentage/memory-core@0.2.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"c568b6ec30162e9d1d1d85e703d47f3625ac5d34","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.2.0.tgz","fileCount":72,"integrity":"sha512-ZeKu4jIi4T3O02SjVBLoGzVRMR1/xfhkCsUAy06yRQ2bf9oFtRL7VcATJ7/nBP7zy1Bp/5R+DUsKOkrSkl5lVA==","signatures":[{"sig":"MEYCIQCNiuvxXnr3Uld/ahbyvkMByUkA7lN75Wb/GqsAv3ZbwAIhAOZzaRuPrdNGepJLs8cf8DRnCouVa9QkMcPV5VtZrIYw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":125781},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"9653e42e6f6c08cf27d45dc1e06aeecba988931f","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify","generate-schema":"npm run build && node scripts/generate-schema.mjs"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.2.0_1783351162761_0.0026975561050788244","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@agentage/memory-core","version":"0.3.0","license":"MIT","_id":"@agentage/memory-core@0.3.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"9befd575e1584dc7c64066c28c1120e6d4427f48","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.3.0.tgz","fileCount":96,"integrity":"sha512-AUVOImejMPKTo6E0yVWiaIYschKSi0kSay+oZyXDzIyqeFTbTQvKlCV8mIkv6WqoSaTSUIYmRcwkOpCXM8GIrA==","signatures":[{"sig":"MEYCIQCKdBVaxQUSym1Hae/VsPV9Ba1rXQzVim9vNf8duEWfIwIhAPVLsCFfBLy2rS9uXXojQ/hTgjzTvimUirljxTPxHQJO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179947},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"6c2fd8d03a80ca9e3b91c2eb82ffab90230b8ffa","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify","generate-schema":"npm run build && node scripts/generate-schema.mjs"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.3.0_1783352118135_0.7790103578067322","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@agentage/memory-core","version":"0.3.1","license":"MIT","_id":"@agentage/memory-core@0.3.1","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"14c18fe4cdb91af6e5bbcd54f77b557f68c60014","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.3.1.tgz","fileCount":96,"integrity":"sha512-GBP+DCBLf1E/WTr8lbj3j3lq1aW+gCFIJsaSgJxSH7y8b30wts76UEMHzYskJeeofFRvpwnUEN/9sIEnNWYz5Q==","signatures":[{"sig":"MEUCIQCtxePYbcqo5QCFYnGNA3SWrjV/LIyIg64Ht76h/+YY0AIgbv9ES6QST+axHAV+FPSWbd9ofncyqH41SXBPzSJsXw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187558},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"48c6a847bba5a7a74c4c2a03e60d865dc64e090a","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify","generate-schema":"npm run build && node scripts/generate-schema.mjs"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.3.1_1783356630296_0.8566059242274073","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@agentage/memory-core","version":"0.3.2","license":"MIT","_id":"@agentage/memory-core@0.3.2","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"d1e741ab7e70a56d4a20e6bb874b7c4076c6833c","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.3.2.tgz","fileCount":96,"integrity":"sha512-r/Mpm/hekKs2d8UQv7k2UyZxE6JoKKct+1s0cY0B/tv+vP0c7Wb50R1Mn/GkXoi6oKxdh9P/pnkGAjPBQ55neA==","signatures":[{"sig":"MEUCIF3QO0ZJbPhuNIWk64frGuUT5NX+8AKpyq+877FskJMWAiEArzUdPC4QhqfN0XB6S3QFBX3Of2QiwLxq093zp1o/b/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":190385},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"a72a0c6926c297471ceaf260874b419c70ba7687","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify","generate-schema":"npm run build && node scripts/generate-schema.mjs"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","vitest":"^2.1.8","prettier":"^3.4.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.3.2_1783375691717_0.06145748987288635","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@agentage/memory-core","version":"0.4.0","license":"MIT","_id":"@agentage/memory-core@0.4.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"385b34241323c6fd1c921d2520c34779f317567e","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.4.0.tgz","fileCount":96,"integrity":"sha512-ZJ3s4WSdUpoGt5H1SWT6xVgz3laEGd+8S57hf1w2+bfNjtkAsELobghh8xomaz2H2q7mYClrQdo8PgrSPue7MQ==","signatures":[{"sig":"MEQCICqdXlT9XT/y29Vf8P9ipYCy/5x5Y2a0KMKzYVB8kExYAiA7bfK/CGMh0eB2kXUw6U29N4bRSznnw5zafqaML3zcWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":190388},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"583f26b550dbdbe1b18a5778d0aa246a48345e8a","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify","generate-schema":"npm run build && node scripts/generate-schema.mjs"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.0","vitest":"^4.1.10","prettier":"^3.4.2","typescript":"^6.0.3","@types/node":"^26.1.2","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.4.0_1786135179433_0.10952361095284124","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@agentage/memory-core","version":"0.5.0","license":"MIT","_id":"@agentage/memory-core@0.5.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/memory-core#readme","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"aaf84958bc48ea1b92f7f7c9f93b6e4e7946e49e","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-0.5.0.tgz","fileCount":76,"integrity":"sha512-CYYcluaqrz9lNU1yPXLR11FAIMePuFkZiSSkjWOWmqxwWf/0tiepWhmFIjqDRJ4HbrB8xjRylldnU91NjpjYvA==","signatures":[{"sig":"MEUCIQDDHMuYuaMWN/qMTvaoAlwlhdK1bCWRYGJTw93oniZLiAIgeDq5+PqKxqNqCovAKu8UnWCHK0fB4/4xV4iK7vPgKWY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135386},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=22.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"11307e2f41d681d378267dc0640a160892ea9f2e","scripts":{"lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo coverage","format":"prettier --write \"{src,test}/**/*.ts\"","verify":"npm run type-check && npm run lint && npm run format:check && npm run test && npm run build","lint:fix":"eslint src test --fix","test:watch":"vitest","type-check":"tsc --noEmit","format:check":"prettier --check \"{src,test}/**/*.ts\"","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify","generate-schema":"npm run build && node scripts/generate-schema.mjs"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Transport-agnostic engine for agentage Memory: config, vault registry, storage backends, and a federation router.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","yaml":"^2.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.0","vitest":"^4.1.10","prettier":"^3.4.2","typescript":"^6.0.3","@types/node":"^26.1.2","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/eslint-plugin":"^8.18.0"},"_npmOperationalInternal":{"tmp":"tmp/memory-core_0.5.0_1786736680732_0.04073548985410347","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@agentage/memory-core","version":"1.0.0","license":"MIT","_id":"@agentage/memory-core@1.0.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://github.com/agentage/store-core#readme","bugs":{"url":"https://github.com/agentage/store-core/issues"},"dist":{"shasum":"2fd9da69c2f63620f1f4cc769293b6e76c5f8c11","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.0.0.tgz","fileCount":57,"integrity":"sha512-gW1uapLbDgVqnAMDCnjrfVSSXi+viRKT7od22qdj3DutgJknJgjF70HpAc/Mc6FZQitEG2aZcrvqA2LsPPAYdA==","signatures":[{"sig":"MEUCIQDtWu9MmwVJhCHGcdTJ1TOlpqJKD5nav7J5lMhaS50L6gIgK0E9RJRzEQmukTSnfsntN4osTZuovEfUbETdznyu+IA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128074},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"64b03bc05648d860590c41991a4cc51e791c0995","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/store-core.git","type":"git"},"_npmVersion":"10.9.8","description":"The memory engine for agentage: vault store contract, stores, container, router","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.1","vitest":"^4.1.10","prettier":"^3.4.0","@eslint/js":"^10.0.1","fast-check":"^4.9.0","typescript":"^5.9.0","@types/node":"^26.2.0","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.0.0_1787177437294_0.9861264409852926","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@agentage/memory-core","version":"1.0.1","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"author":{"name":"Agentage"},"license":"MIT","_id":"@agentage/memory-core@1.0.1","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://agentage.io","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"d1d9fbe89de101c34a9c962abc598b741958d678","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.0.1.tgz","fileCount":57,"integrity":"sha512-NGV7vtgSZqbc2FUt0w+M2az9Y84SSBmawGyOnOzGz/VyfO6ozEXq9K/PqdIbCaZlRLNsS5urZp0H5UnSlqb0tQ==","signatures":[{"sig":"MEUCIQC9RZFBcVYsVoZQoEJIbXHWGwsYciYHoIHnRsmq8zEjAwIgK414Zq2bjn1coyHedjNWC1MViU7MFNgm1/4JBMYyKFY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":133782},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"14444bae657c5f2666e7bb128e7d658ca0767bb5","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.67.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.0.1_1787353080967_0.5846929666503049","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@agentage/memory-core","version":"1.0.2","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"author":{"name":"Agentage"},"license":"MIT","_id":"@agentage/memory-core@1.0.2","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://agentage.io","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"de7f1c596c3fbeecfec3f878cf13250e6f3ae066","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.0.2.tgz","fileCount":57,"integrity":"sha512-ssQ+TmlZnU9jfO+9Z/NaRHqOXZJ+vHMauNkcLt2FLimecgQ/sCeGXiTt9ikRiFKTOioi2Ct5EvO52SSpb8NZdA==","signatures":[{"sig":"MEYCIQC+5otn9Ols/VKUaBRlt4ni+geDsWTA3OMDQq91j32l0gIhALg8M6uom+fFW/1yAxs/1oKK0sl2y2J13AekceDxAWEX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":136851},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"4d56a22f48de22afc1e0c3987aaf555118521e5b","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.67.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.0.2_1787390094397_0.640405115873689","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@agentage/memory-core","version":"1.1.0","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"author":{"name":"Agentage"},"license":"MIT","_id":"@agentage/memory-core@1.1.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://agentage.io","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"97c282acdf79266298026623a23fcd38ef44bb9a","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.1.0.tgz","fileCount":57,"integrity":"sha512-2aIagnW3XbkpQc+5fW1I70pOiT1vR8NmxqzTiGdBAhtJcrpUqw3txpQgbqn4WfZTq14c09ooDqj2q7n4H9UihA==","signatures":[{"sig":"MEUCIQCGWZ4hjhebYrob70sMfwcNn/Euh5Mrb+DP1bYX2I+Y4wIge/hAfwuR9AXuBNOtMrtW60LKcAvBA4RFYj+fB5WSyog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154047},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"da5e7e46607a0feec33a566a090c4525f607dd69","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.67.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.1.0_1787433510988_0.456108387200026","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@agentage/memory-core","version":"1.2.0","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"author":{"name":"Agentage"},"license":"MIT","_id":"@agentage/memory-core@1.2.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://agentage.io","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"ddc7411a35ce99ba51b4916a45a10ce144d412bd","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.2.0.tgz","fileCount":61,"integrity":"sha512-DGtA4aAQPkdEe283EPENMn7HXbyaASl7MTLGU5PKNrI9Aoxy6TeyRIzX1PsZis5q1q1VF5QSK5pI8/+dHqEUMA==","signatures":[{"sig":"MEUCIQDhCDPI2UQZqrZXV1Ph4BfhMudivC0LRXEdlli6LzfmuQIgETUh3dUN1tFdcmLafwh1XGmgRnLHhvacqgePwZ3JAgo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":163967},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"db32498f7928b4436c9674b76581db107a2e4359","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); if (m.vaultRepoDir('/data', 'alice01', 'main') !== '/data/alice01/main.git' || m.REPO_SUFFIX !== '.git') process.exit(1); try { m.vaultRepoDir('/data', 'alice01', '../escape'); process.exit(1); } catch (e) { if (e.code !== 'invalid_path') process.exit(1); } const gone = await m.checkRoot('/definitely/not/here', { markerFile: '.volume' }); if (gone.reachable !== false || gone.writable !== false || gone.markerPresent !== false || gone.diskTotalBytes !== 0) process.exit(1); const here = await m.checkRoot(process.cwd()); if (here.reachable !== true || here.markerPresent !== null || !(here.diskFreeBytes > 0) || here.diskFreeBytes > here.diskTotalBytes) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.67.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.2.0_1787444144901_0.47275681897702704","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@agentage/memory-core","version":"1.3.0","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"author":{"name":"Agentage"},"license":"MIT","_id":"@agentage/memory-core@1.3.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://agentage.io","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"bd780813a860c54947ad369243e59ff1400cdca3","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.3.0.tgz","fileCount":65,"integrity":"sha512-nfF6ji+aq1MMT/iigZaa4vIvLszH8NoYnchv3CfL4+assdGdhegCMd+dhuX7xh/WqC8ADTewCMXce3F25nVqzw==","signatures":[{"sig":"MEUCIQCCaRdi92lZ6PQGXjXHpR5QdVoYA7jcr77akQ2gHBZ2hAIgVc4bxioizFpwrWcBZWOjxcGzcHxeFZVCXEh+syO26bI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178468},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"f4bd57c718d5f7d1f6c3e4425293ba4a8f8f5ffb","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); if (m.vaultRepoDir('/data', 'alice01', 'main') !== '/data/alice01/main.git' || m.REPO_SUFFIX !== '.git') process.exit(1); try { m.vaultRepoDir('/data', 'alice01', '../escape'); process.exit(1); } catch (e) { if (e.code !== 'invalid_path') process.exit(1); } const gone = await m.checkRoot('/definitely/not/here', { markerFile: '.volume' }); if (gone.reachable !== false || gone.writable !== false || gone.markerPresent !== false || gone.diskTotalBytes !== 0) process.exit(1); const here = await m.checkRoot(process.cwd()); if (here.reachable !== true || here.markerPresent !== null || !(here.diskFreeBytes > 0) || here.diskFreeBytes > here.diskTotalBytes) process.exit(1); const s = m.createMemoryStore(); if ((await s.authors()).length !== 0) process.exit(1); await s.write({ path: 'a.md', body: 'x' }, { id: 'cli', name: 'CLI' }); await s.write({ path: 'b.md', body: 'y' }); const [who, ...rest] = await s.authors(); if (rest.length || who.author.id !== 'cli' || who.author.name !== 'CLI' || who.writes !== 1 || !Number.isFinite(Date.parse(who.lastAt))) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.8.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.67.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.3.0_1787482541747_0.9350079060056697","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@agentage/memory-core","version":"1.4.0","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"author":{"name":"Agentage"},"license":"MIT","_id":"@agentage/memory-core@1.4.0","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"homepage":"https://agentage.io","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"8eb1da50dae2b55a51785e2bc11a9041eca132c3","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.4.0.tgz","fileCount":65,"integrity":"sha512-JNb+yKH0nkCdYY70owYgYKveoLRRKZ36fTWeYHeo8ydIsYH7BrIZRUJjewBCZ89tWlRcF7AhupTWVl97CnDT4w==","signatures":[{"sig":"MEQCIG4QoQW5Q53k+j2RdUZ6PsUuSRnozTE8woSQBJEEnqcvAiAkR5iun8QGA80j/oaZ0j99k+4bHuem0DBSSmdqAiaHuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178468},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"211c08cba07522704b6b78ba76287e804346c9ec","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); if (m.vaultRepoDir('/data', 'alice01', 'main') !== '/data/alice01/main.git' || m.REPO_SUFFIX !== '.git') process.exit(1); try { m.vaultRepoDir('/data', 'alice01', '../escape'); process.exit(1); } catch (e) { if (e.code !== 'invalid_path') process.exit(1); } const gone = await m.checkRoot('/definitely/not/here', { markerFile: '.volume' }); if (gone.reachable !== false || gone.writable !== false || gone.markerPresent !== false || gone.diskTotalBytes !== 0) process.exit(1); const here = await m.checkRoot(process.cwd()); if (here.reachable !== true || here.markerPresent !== null || !(here.diskFreeBytes > 0) || here.diskFreeBytes > here.diskTotalBytes) process.exit(1); const s = m.createMemoryStore(); if ((await s.authors()).length !== 0) process.exit(1); await s.write({ path: 'a.md', body: 'x' }, { id: 'cli', name: 'CLI' }); await s.write({ path: 'b.md', body: 'y' }); const [who, ...rest] = await s.authors(); if (rest.length || who.author.id !== 'cli' || who.author.name !== 'CLI' || who.writes !== 1 || !Number.isFinite(Date.parse(who.lastAt))) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.9.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.3.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.68.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/memory-core_1.4.0_1787953062966_0.6796434869960417","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"_id":"@agentage/memory-core@1.5.0","bugs":{"url":"https://github.com/agentage/memory-core/issues"},"dist":{"shasum":"11d3129af483e0efe4742230a55f0d8a8664ea49","tarball":"https://registry.npmjs.org/@agentage/memory-core/-/memory-core-1.5.0.tgz","fileCount":65,"integrity":"sha512-rsWyDqLfG92i7X8KsyXjUFFcSRJ3HMBywgp7Jgg8Fo/fI5LbXXgRQ8zddEY8QiBWjbYCp3syTumCrL4poqoiDg==","signatures":[{"sig":"MEUCIQDcV8TbK3y4K7b0syEVIoJwH7F0mh/LXqTdvppdff1fVgIgNdaTL3E1a49Bd2Oh2ankuswYGEjQqz9IUXwCM5GVPu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDyIrACTcCd/ZiGNO8GAtol25pvaUXE0G4D3Cl9h+UvaQIhAI6uyTEZNtqoy8MOWea/wtgGqrr7NWjS51xeUHaxxcpH"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentage%2fmemory-core@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178468},"main":"dist/index.js","name":"@agentage/memory-core","type":"module","types":"dist/index.d.ts","author":{"name":"Agentage"},"engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./conformance":{"types":"./dist/conformance/index.d.ts","default":"./dist/conformance/index.js"}},"gitHead":"ceaf880b8214507a752237cb65a45448d6c75a94","license":"MIT","private":false,"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json","format":"prettier --write .","verify":"npm run type-check && npm run lint && npm run format:check && npm run test:coverage && npm run build && npm run smoke:dist","smoke:dist":"node --input-type=module -e \"const m = await import('./dist/index.js'); const k = await import('./dist/conformance/index.js'); if (typeof k.contractSuite !== 'function' || !Array.isArray(k.HOSTILE_PATHS)) process.exit(1); if (typeof m.ObjectCache !== 'function' || typeof m.createVaultContainer !== 'function' || typeof m.createRouter !== 'function') process.exit(1); if (m.unknownVaultMessage('x') !== 'Unknown vault \\\"@x\\\". Use memory__list with no folder to see available vaults.') process.exit(1); const c = new m.ObjectCache({ max: 1 }); const o = c.get('a', () => ({})); if (c.get('a', () => ({})) !== o || c.size !== 1 || !c.has('a')) process.exit(1); if (m.vaultRepoDir('/data', 'alice01', 'main') !== '/data/alice01/main.git' || m.REPO_SUFFIX !== '.git') process.exit(1); try { m.vaultRepoDir('/data', 'alice01', '../escape'); process.exit(1); } catch (e) { if (e.code !== 'invalid_path') process.exit(1); } const gone = await m.checkRoot('/definitely/not/here', { markerFile: '.volume' }); if (gone.reachable !== false || gone.writable !== false || gone.markerPresent !== false || gone.diskTotalBytes !== 0) process.exit(1); const here = await m.checkRoot(process.cwd()); if (here.reachable !== true || here.markerPresent !== null || !(here.diskFreeBytes > 0) || here.diskFreeBytes > here.diskTotalBytes) process.exit(1); const s = m.createMemoryStore(); if ((await s.authors()).length !== 0) process.exit(1); await s.write({ path: 'a.md', body: 'x' }, { id: 'cli', name: 'CLI' }); await s.write({ path: 'b.md', body: 'y' }); const [who, ...rest] = await s.authors(); if (rest.length || who.author.id !== 'cli' || who.author.name !== 'CLI' || who.writes !== 1 || !Number.isFinite(Date.parse(who.lastAt))) process.exit(1); console.log('dist smoke ok');\"","type-check":"tsc --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"version":"1.5.0","_npmUser":{"name":"vreshch","email":"vreshch@gmail.com"},"homepage":"https://agentage.io","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"_npmVersion":"10.9.8","description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","directories":{},"maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.9.1","vitest":"^4.1.10","prettier":"^3.4.0","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^26.4.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.0.0","eslint-plugin-prettier":"^5.2.1","@typescript-eslint/parser":"^8.67.0","@typescript-eslint/eslint-plugin":"^8.69.0"},"peerDependencies":{"vitest":">=3"},"peerDependenciesMeta":{"vitest":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/memory-core_1.5.0_1788728131311_0.055854464716931895"}}},"time":{"created":"2026-06-20T19:11:51.378Z","modified":"2026-09-06T20:55:31.743Z","0.0.1":"2026-06-20T19:11:51.709Z","0.1.0":"2026-06-20T20:27:20.651Z","0.1.1":"2026-07-06T00:56:36.737Z","0.1.2":"2026-07-06T06:55:37.886Z","0.1.3":"2026-07-06T09:33:27.573Z","0.2.0":"2026-07-06T15:19:22.961Z","0.3.0":"2026-07-06T15:35:18.274Z","0.3.1":"2026-07-06T16:50:30.425Z","0.3.2":"2026-07-06T22:08:11.874Z","0.4.0":"2026-08-07T20:39:39.562Z","0.5.0":"2026-08-14T19:44:40.905Z","1.0.0":"2026-08-19T22:10:37.448Z","1.0.1":"2026-08-21T22:58:01.117Z","1.0.2":"2026-08-22T09:14:54.530Z","1.1.0":"2026-08-22T21:18:31.138Z","1.2.0":"2026-08-23T00:15:45.053Z","1.3.0":"2026-08-23T10:55:41.872Z","1.4.0":"2026-08-28T21:37:43.124Z","1.5.0":"2026-09-06T20:55:31.408Z"},"bugs":{"url":"https://github.com/agentage/memory-core/issues"},"author":{"name":"Agentage"},"license":"MIT","homepage":"https://agentage.io","keywords":["memory","agent-memory","ai-memory","mcp","model-context-protocol","markdown","git","vault","knowledge-base","storage","notes","agentage"],"repository":{"url":"git+https://github.com/agentage/memory-core.git","type":"git"},"description":"Markdown memory engine for AI agents: read, write, search and version notes in a git-backed vault. One storage-agnostic contract, a bare-git store, a multi-vault container and an @vault/path router - the local engine behind agentage Memory and @agentage/s","maintainers":[{"name":"vreshch","email":"vreshch@gmail.com"}],"readme":"# @agentage/memory-core\n\n[![npm](https://img.shields.io/npm/v/@agentage/memory-core.svg)](https://www.npmjs.com/package/@agentage/memory-core)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n[![CI](https://img.shields.io/github/actions/workflow/status/agentage/memory-core/ci.yml?branch=master&label=CI)](https://github.com/agentage/memory-core/actions/workflows/ci.yml)\n[![Node](https://img.shields.io/badge/node-%3E%3D22-3c873a.svg)](https://nodejs.org)\n[![agentage.io](https://img.shields.io/badge/by-agentage.io-e0a234.svg)](https://agentage.io)\n\nGive your AI a memory it can read, write and search - stored as plain markdown files you own.\n\n## What is this?\n\nAI apps forget everything between chats. [agentage Memory](https://agentage.io) fixes that with\n**one markdown memory every AI can read and write** - Claude, Cursor, ChatGPT - kept as ordinary\n`.md` files in a git repository you can clone, grep and export at any time.\n\nThis package is the engine underneath. It turns a folder of markdown into a small, boring API -\n`read`, `write`, `edit`, `delete`, `search`, `list` - with the awkward parts already solved: path\nsafety, secret refusal, size caps, snippets and ranking, cursor paging, change events, and a\nversion token that only moves when content moves. Every write is a git commit, so nothing is ever\nsilently lost.\n\nUse it when you are building the thing that talks to a memory rather than using one:\n\n- an **MCP server** - [`@agentage/server-memory`](https://github.com/agentage/server-memory) is\n  exactly this engine behind the frozen 6 `memory__*` tools\n- an **agent or app** that needs durable, greppable notes instead of a vector blob\n- a **multi-tenant service** - the container and router layers add per-user vault isolation\n\nWant the product, not the library? Start at [agentage.io](https://agentage.io).\n\n## Install\n\n```bash\nnpm install @agentage/memory-core\n```\n\nMIT licensed, published to public npm. Requires **Node >=22** and `git` on `PATH` for the git store.\n\n## Quickstart\n\n```ts\nimport { createBareGitStore } from '@agentage/memory-core';\n\nconst store = createBareGitStore('/data/repos/alice01/main.git'); // one instance = one vault\n\nawait store.write(\n  { path: 'inbox/idea.md', body: 'A quiet zebra #inbox' },\n  { id: 'claude-desktop', name: 'Claude' }\n);\nconst hits = await store.search({ query: 'zebra', limit: 10 }); // { results: [{ path, title, snippet, score, updated }], nextCursor? }\nconst view = await store.read('inbox/idea.md'); // MemoryView | null - { path, title, frontmatter, body, tags, updated, deleted, sizeBytes? }\nawait store.edit({ path: 'inbox/idea.md', mode: 'str_replace', old_str: 'quiet', new_str: 'loud' });\nawait store.delete('inbox/idea.md'); // recoverable - git history keeps it\nawait store.describe(); // { files, folders, sizeBytes, updated, version } - the vault card\nawait store.authors(); // [{ author, writes, lastAt }] - which AIs write here, busiest first\n```\n\nEvery write is a git commit with client attribution; guards are always on (path safety incl.\n`.git`/`.agentage` reservation, secrets/PII refusal, 8MB doc cap, 64KB read clamp).\n\nThe engine is hermetic: every git spawn gets a minimal explicit environment (`PATH` only, no\n`HOME`, global+system gitconfig voided), so a host's `~/.gitconfig` - identity, `core.autocrlf`,\n`core.hooksPath`, proxies - can never change engine behavior. Commit identity comes from the call,\nnot the machine.\n\n## The contract\n\n`VaultStore` is the whole surface. One instance = one vault; every store implements the same shape,\nso a consumer written against one runs unchanged on another.\n\n| Verb                     | Returns                  | What it does                                                              |\n| ------------------------ | ------------------------ | ------------------------------------------------------------------------- |\n| `read(path, opts?)`      | `MemoryView \\| null`     | One doc: body, frontmatter, tags, title. Clamped to 64KB unless opted out |\n| `readMany(paths, opts?)` | `(MemoryView \\| null)[]` | Those same reads in ONE round trip: same order, a `null` per miss         |\n| `write(input, author?)`  | `WriteResult`            | Create or replace a doc; one git commit, attributed to the client         |\n| `edit(input, author?)`   | `WriteResult \\| null`    | `replace` / `append` / `str_replace` on an existing doc; `null` = absent  |\n| `delete(path)`           | `boolean`                | Remove a doc; recoverable from history. `false` = it was not there        |\n| `search(query)`          | `SearchResult`           | Ranked hits with snippets, `{ results, nextCursor? }`, cap 50 per page    |\n| `list(query)`            | `ListResult`             | Bounded folder tree with truncation + cursor paging                       |\n| `refresh()`              | `StoreEvent[]`           | Pick up out-of-band changes (a `git push`, a human edit) as events        |\n| `subscribe(observer)`    | `() => void`             | Fire-and-forget change events; returns the unsubscribe                    |\n| `describe()`             | `VaultDescription`       | Cheap vault card: `{ files, folders, sizeBytes, updated, version }`       |\n| `authors()`              | `AuthorStat[]`           | Who has written here: one row per attributed client, busiest first        |\n| `version()`              | `string \\| null`         | Opaque change token; changes iff content changed, `null` = empty vault    |\n| `capabilities()`         | `StoreCapabilities`      | What this store can do: mutable, versioned, externallyMutable, search     |\n\nGuards are part of the contract, not of one implementation: refusals come back as a `StoreError`\nwith a stable code - `invalid_path`, `restricted`, `unknown_vault`, `forbidden`, `unavailable`.\nA `null` / `[]` / `false` answer always means definitively-not-found; infrastructure failure throws\n`unavailable` instead of a degraded answer.\n\n```ts\n// One page of a folder listing, enriched - one git process, not one per file\nconst views = await store.readMany(paths); // (MemoryView | null)[], aligned to `paths`\nawait router.readMany(['@main/a.md', '@work/b.md']); // refs may span vaults\n```\n\n`readMany` is the bulk shape of `read` and nothing else: element-for-element the same answer the\nindividual reads would give (same order, `null` in place of every miss, same clamp), and an\ninfrastructure failure still throws for the whole call rather than degrading one element to a\n`null`. At the router, a ref it would refuse (`invalid_path`, `forbidden`, `unknown_vault`) refuses\nthe batch, before any IO.\n\n### Who wrote here\n\n```ts\nawait store.write({ path: 'a.md', body: 'x' }, { id: 'claude-desktop', name: 'Claude' });\nawait store.authors(); // [{ author: { id: 'claude-desktop', name: 'Claude' }, writes: 1, lastAt }]\n```\n\n`authors()` is the read-only view of the attribution `write` and `edit` already record - the same\nhistory, aggregated. There is no second bookkeeping: the bare store stamps the client as the git\n**author** (the committer stays the system identity), so `authors()` is one `git log` pass and a\nrestored clone answers exactly like the store that wrote it.\n\nThe contract is deliberately narrow, because everything else is product policy:\n\n- **Attributed changes only.** A write with no author, a `delete`, and a commit that arrived out of\n  band (a `git push` from a person) carry no client and appear in no row.\n- **A change is what the store recorded.** A no-op write makes no commit, so it counts for nobody.\n- **Order is pinned**: `writes` descending, then `author.id` ascending - a total order that never\n  reads a clock, so two stores holding the same history agree. Sort by recency yourself if that is\n  the view you want.\n- `lastAt` is a strict ISO 8601 instant at second precision. What counts as \"recently active\", how\n  a client is labelled or badged, and which clients to show belong to the host.\n- `writes` and `lastAt` cover the history the store **retains**: every commit for the bare store,\n  what the instance has seen for the in-memory one (`capabilities().versioned` tells you which).\n\n### What a verb costs (bare git store)\n\nCost here is git processes. The budget below is asserted by the conformance kit (via the target's\noptional round-trip counter) and by the store's own spawn-budget test - \"warm\" means the\nversion-keyed snapshot is already built:\n\n| Verb                           | Warm spawns | How                                                             |\n| ------------------------------ | ----------- | --------------------------------------------------------------- |\n| `version()`, quiet `refresh()` | 0           | the ref is read as a file, never through git                    |\n| `list()`                       | 0           | served from the snapshot (+1 `cat-file --batch` to filter tags) |\n| `read(path)`                   | 1           | `cat-file --batch`                                              |\n| `readMany(paths)`              | 1           | one `cat-file --batch`, whatever N is                           |\n| `search(query)`                | 2           | `grep`, then one batch for the page it decided                  |\n| `describe()`                   | 0           | computed once per version (`ls-tree -l`, `log -1`), then cached |\n| `authors()`                    | 0           | one `git log` pass per version, then cached like the card       |\n| `write` / `edit` / `delete`    | 6-7         | blob, tree build, `commit-tree`, compare-and-swap ref update    |\n| `container.bundle(vault)`      | 1           | one `git bundle create - --all` - the whole history, streamed   |\n| first query on a cold store    | +2          | the once-per-version snapshot build (`ls-tree`, `log`)          |\n| a push landing (drift)         | 3           | the diff, an ancestry check, and a log of the range only        |\n\nThe snapshot is version-keyed and kept fresh by patches - own writes update it for free, and an\nincoming push is applied from the diff the drift check already paid for. Only a force-push or a\nchange git cannot attribute to a commit costs a fresh walk of history.\n\n## Layers\n\n```text\ncaller  (MCP tool layer, /v1 REST handlers, sync)\n  |     every ref is @vault/path\n  v\nRouter      permission fail-fast: the ref's vault is checked against Access BEFORE any\n  |         container call; every path it emits comes back as @vault/path\n  v\nContainer   Access-gated lifecycle over <root>/<userId>/<vault>.git - list/create/open/\n  |         remove/bundle/destroyUserData, plus the root's own facts (checkRoot) and the\n  |         layout helpers; open never provisions; an ObjectCache holds one live store\n  |         instance per vault (LRU by object count, dispose on evict)\n  v\nVaultStore  the frozen contract - read/write/edit/delete/search/list/describe + events;\n  |         guards always on (path safety, restricted data, size caps, read clamp)\n  v\nbare git    one bare repo per vault - every write is a commit, `git grep` is the index\n```\n\nEach layer stands alone: a single-vault consumer can hold a `VaultStore` directly, the container\nworks without the router, and the router is a pure binding cheap enough to rebuild per request.\n\n### Events, out-of-band changes, derived data\n\n```ts\nstore.subscribe((e) => console.log(e.type, e.paths, e.version)); // write | edit | delete | external\n\n// someone `git push`ed / a human saved a file? surface it as events:\nconst externalEvents = await store.refresh();\n\n// derived data: computed views cached by policy, disposable by construction\nimport { createDerivedCache, createStatsView } from '@agentage/memory-core';\nconst cache = createDerivedCache(store, '/data/repos/alice01/main.cache');\nconst stats = await cache.get(createStatsView('/data/repos/alice01/main.git')); // { files, folders, sizeBytes }\n```\n\n### Shared live objects\n\n```ts\nimport { ObjectCache, type VaultStore } from '@agentage/memory-core';\n\n// build ONE per process - bounded by object COUNT (not bytes), LRU by last use\nconst stores = new ObjectCache<VaultStore>({ max: 256, dispose: (s, key) => detach(s, key) });\nstores.get(key, () => createBareGitStore(pathFor(key))); // same key = same instance\n```\n\nType-agnostic by construction (it never imports an engine type), so the same class caches stores,\nparsed configs, watchers - anything rebuildable. `dispose` is best-effort cleanup on\neviction/`delete`, never a correctness hook.\n\n### Many vaults, one root (the server shape)\n\n```ts\nimport {\n  createBareGitStore,\n  createVaultContainer,\n  ensureBareRepo,\n  ObjectCache,\n  type VaultStore,\n} from '@agentage/memory-core';\n\nconst container = createVaultContainer({\n  root: '/data/repos', // layout: <root>/<userId>/<vault>.git\n  store: (dir) => createBareGitStore(dir),\n  provision: ensureBareRepo, // store-kind-specific init: the ONLY path that creates\n  cache: new ObjectCache<VaultStore>({ max: 256, dispose: (s, key) => detach(s, key) }),\n});\n\nconst access = await resolveAccess(principal); // host policy: token claims, plan limits, DB\nawait container.list(access); // allowlist-intersected, sorted\nawait container.create(access, 'work'); // gated by canCreate, idempotent\nawait container.open(access, 'work'); // NEVER provisions - unknown_vault if absent\nawait container.remove(access, 'work', stamp); // gated by canDelete -> <vault>.deleted-<stamp>.git\nawait container.bundle(access, 'work'); // Buffer | null - clone-able git bundle, history included\nawait container.destroyUserData(access, userId); // erase a user's DATA: own user + canDelete, tombstones too\n```\n\n`Access` (`{ userId, vaults: Set | '*', canCreate, canDelete }`) is the only authority the container\nreads: the host decides who may touch which vault - `ResolveAccess` is a **type** here, policy never\nenters the engine - and the container enforces that decision against storage facts. It never reads\nthe clock (deletion stamps are supplied by the caller), never provisions on a read path, and never\nconfigures the cache: the composition root builds the `ObjectCache` with its own `dispose`, because\nwhoever creates subscriptions owns tearing them down. Refusals are coded: `invalid_path` (hostile id\nor stamp), `forbidden` (outside the grant, or missing canCreate/canDelete), `unknown_vault` (not\nprovisioned).\n\n`bundle` is the export path: gated exactly like `open`, `null` when there is nothing to export (no\nrepo yet, no commits yet, or a tombstoned name) - so an absent vault of another account never reads\ndifferently from an empty one of your own. `destroyUserData` erases what a user has STORED - not the\nuser, whose account lives in your identity service and never in here - and is the one verb keyed by\nuser rather than vault: it refuses any `userId` but `access.userId` (`forbidden`, whether or not that\nuser has anything here), needs `canDelete`, disposes every live object it wipes, and takes the\ntombstones with it. There is no stamp - `remove` tombstones, `destroyUserData` erases.\n\n### The root itself - health, layout\n\nAbove one vault sits the root, and a host should not have to open `node:fs` to reason about it:\n\n```ts\nimport {\n  checkRoot,\n  vaultRepoDir,\n  userDir,\n  tombstoneRepoDir,\n  REPO_SUFFIX,\n} from '@agentage/memory-core';\n\n// facts, never exceptions - a vanished root is all-false + zeros, not a throw\nconst facts = await checkRoot('/data/repos', { markerFile: '.volume-ok' });\n// { reachable, writable, markerPresent: boolean | null, diskFreeBytes, diskTotalBytes }\n\nvaultRepoDir('/data/repos', 'alice01', 'main'); // /data/repos/alice01/main.git\nuserDir('/data/repos', 'alice01'); // /data/repos/alice01\ntombstoneRepoDir('/data/repos', 'alice01', 'main', stamp); // ...main.deleted-<stamp>.git\n```\n\n`checkRoot` is cheap by default - `access(R_OK|W_OK)`, because health endpoints poll forever. Pass\n`probeWrite: true` for the honest test (write + unlink) when the bits can lie: a full disk or a\nread-only remount still reports `writable` permission. `markerFile` catches the writable-but-WRONG\nvolume, and is `null` (not `false`) when no marker was asked for. `checkRootWritable(dir)` stays as\nit was - the same two booleans, write-probing, now a projection of the fact set.\n\nThe layout helpers are the same ones the container computes with: every segment goes through the\nallowlist, so a hostile name throws `invalid_path` instead of returning a path (there is no way to\nget a path out of a name that was never safe). Stamps allow dots and colons - timestamps - but never\na separator.\n\n### One addressable surface over those vaults (the router)\n\n```ts\nimport { createRouter } from '@agentage/memory-core';\n\n// pure binding - no IO here, so build one per request\nconst router = createRouter(container, access);\n\nawait router.read('@main/inbox/idea.md'); // every ref is @vault/path\nawait router.write('@work/plan.md', { body: 'ship it' }, client);\nawait router.search({ query: 'zebra' }); // no folder: fans out across every granted vault\nawait router.list({}); // no ref: each vault as a top-level @folder\nawait router.list({ ref: '@work/dir' }); // list and search may scope to @vault or @vault/folder\n```\n\n**One input rule:** a ref is always `@vault/path`. Anything without the prefix is `invalid_path` -\nthere is no default vault and no single-vault special case, so a caller that wants a default resolves\nit itself. **One output rule:** every path the router emits - `view.path`, write/edit results, search\nhits, list entries and folders - comes back as `@vault/path`, so every output round-trips as an input.\nThe two unscoped shapes are the discovery ones: `list({})` is the vault directory, `search({ query })`\nfans out across every granted vault and merges the per-vault pages into the contract's total order\n(score desc, recency desc, path asc) before re-paging.\n\n**Router = permission check + routing to the corresponding vault instance. No default vault.** It is\nthe responsible layer for permission: the ref's vault is checked against `Access` BEFORE any container\ncall, so an ungranted vault is refused with `forbidden` and zero container interaction (the container's\nown gate stays the last line of defense). Everything else stays where it belongs - guards, ranking and\npaging in the store, provisioning in the container - and their refusals pass through untouched\n(`restricted`, `invalid_path`, `unavailable`). The one refusal the router owns is `unknown_vault` for\na granted-but-unprovisioned `@vault`: its message text is a frozen client contract, exported as\n`unknownVaultMessage`. What it asks for is the lifecycle subset, `RoutedContainer` (`list` / `open` /\n`create` / `remove`): export and data erasure are not routing concerns, so a container verb can be\nadded without widening what a router - or a stand-in for one - has to provide.\n\nStrip the tags off a response and what is left is byte-for-byte what calling the store directly\nreturns - same values, same cursors, same events.\n\n### Swap the store, keep the contract\n\n```ts\nimport { createMemoryStore } from '@agentage/memory-core';\n\ncreateMemoryStore(); // dev/test fixture - the reference implementation\n```\n\n| Store                | World                 | Search                           |\n| -------------------- | --------------------- | -------------------------------- |\n| `createMemoryStore`  | tests/dev             | in-process scan (reference impl) |\n| `createBareGitStore` | server (multi-tenant) | `git grep` HEAD                  |\n\nBoth pass the same conformance kit, so a consumer written against one runs unchanged on the other.\nStores for other worlds (local working copy, FTS-indexed, HTTP client/server) are out of scope for\nnow - they were cut before `1.0.0` and are recoverable from git history.\n\n## Consumer templates (start here when integrating)\n\nWorking, executed examples - each is a test in this repo, so they can never drift from the API:\n\n- **MCP tool layer** (memory-mcp shape - token ctx, `@vault/` routing, isError results):\n  [`test/integration/mcp-tools.showcase.test.ts`](https://github.com/agentage/memory-core/blob/master/test/integration/mcp-tools.showcase.test.ts)\n- **/v1 REST handlers** (resource JSON, `{error:{code,message}}` envelope, derived stats; `/notes` =\n  the memory\\_\\_list shape, cursor-drainable on opt-in):\n  [`test/integration/rest-api.showcase.test.ts`](https://github.com/agentage/memory-core/blob/master/test/integration/rest-api.showcase.test.ts)\n- **Full lifecycle on one vault** (push -> events -> derived state -> restart):\n  [`test/integration/e2e-lifecycle.test.ts`](https://github.com/agentage/memory-core/blob/master/test/integration/e2e-lifecycle.test.ts)\n\n## Conformance\n\nEvery implementation must pass the shared kit - a store that passes is guaranteed swappable:\n\n```ts\n// vitest is an optional peer dependency - run the kit inside your own suite\nimport { contractSuite, securitySuite, HOSTILE_PATHS } from '@agentage/memory-core/conformance';\n\ncontractSuite({ name: 'my-store', make: () => createMyStore() });\nsecuritySuite({ name: 'my-store', make: () => createMyStore() });\n// HOSTILE_PATHS / RESTRICTED_BODIES / BENIGN_BODIES: fire the same corpus at your HTTP/MCP edge\n```\n\nThe suites live in\n[`src/conformance/`](https://github.com/agentage/memory-core/tree/master/src/conformance) and are\nshipped as a subpath export, not as a dev-only fixture.\n\n## Test layout & CI\n\nThe [`test/`](https://github.com/agentage/memory-core/tree/master/test) tree:\n\n```\ntest/\n├── unit/          contract helpers + fuzzing (property oracles, memory-vs-git differential)\n├── container/     access matrix, containment, lifecycle (no-provision + tombstone proofs)\n├── stores/        conformance + security per implementation\n├── integration/   consumer showcases + e2e lifecycle\n└── perf/          non-functional gate - budgets asserted AND printed to the CI job summary\n```\n\nCI tiers: **PR** = full verify incl. perf @1000 notes / 4000 commits (merge-blocking, `verify` is a\nrequired check) · **nightly** = perf @5000 notes / 20000 commits + deep fuzz (500 property runs /\n25 differential sequences). The perf gate has two axes because the engine has two: note count sets\nthe cost of listing and searching, commit count sets the cost of building a snapshot.\n\n## Develop\n\n```bash\nnpm install\nnpm run verify   # type-check + lint + format:check + coverage + build + dist smoke\n```\n\n## Release\n\nReleases publish to npm via GitHub Actions when a version bump lands on `master` (the squash-merge\nof a release PR), or by dispatching the workflow by hand. The workflow skips any version already on\nnpm and publishes with npm provenance. No one publishes from a laptop.\n\n## Security\n\nPath traversal, reserved namespaces, secret/PII persistence and storage abuse are contract-level\ncontrols enforced by the conformance kit - see [SECURITY.md](./SECURITY.md). Report vulnerabilities\nprivately via GitHub Security Advisories, never a public issue.\n\n## Links\n\n- [agentage.io](https://agentage.io) - the product this engine powers\n- [`@agentage/server-memory`](https://www.npmjs.com/package/@agentage/server-memory) - the stdio MCP\n  server built on it ([source](https://github.com/agentage/server-memory))\n- [github.com/agentage/memory-core](https://github.com/agentage/memory-core) - source, issues,\n  releases\n\n## License\n\nMIT - see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}