{"_id":"@ambicuity/kindx","_rev":"10-5a5057724db4f60f308133e327a6ba13","name":"@ambicuity/kindx","dist-tags":{"latest":"1.3.6"},"versions":{"0.1.0":{"name":"@ambicuity/kindx","version":"0.1.0","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@0.1.0","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"dist/kindx.js"},"dist":{"shasum":"74aa22c0cd8d82db7904d05c30768aab26196ad9","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-0.1.0.tgz","fileCount":18,"integrity":"sha512-Q12V8AJf+qLiFJ6un1DMxz/vQZqqPlB+6tjFr42XRKx7n/eaw8nKi1zzdTynXXYE8TOHveO8zlYgEaDVNcLhxg==","signatures":[{"sig":"MEUCIQCmXOV7kpTrXPHRGVQYWr5aIpAHtVBJbBT6TkzbdbSjrwIgBW88UMtm2dOGRo/buAeiOoBYZDu0jNB21MVhBvQqUcY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403647},"type":"module","engines":{"node":">=22.0.0"},"scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"_npmVersion":"10.9.4","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","fast-glob":"^3.3.0","picomatch":"^4.0.0","sqlite-vec":"^0.1.7-alpha.2","better-sqlite3":"^11.0.0","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.0.0","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^5.9.3"},"optionalDependencies":{"sqlite-vec-linux-x64":"^0.1.7-alpha.2","sqlite-vec-darwin-x64":"^0.1.7-alpha.2","sqlite-vec-linux-arm64":"^0.1.7-alpha.2","sqlite-vec-windows-x64":"^0.1.7-alpha.2","sqlite-vec-darwin-arm64":"^0.1.7-alpha.2"},"_npmOperationalInternal":{"tmp":"tmp/kindx_0.1.0_1772930593982_0.4728868450103756","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ambicuity/kindx","version":"1.1.0","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.1.0","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"edd3c45bdc0e352d8919a3d4c938f323e6ce8ace","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.1.0.tgz","fileCount":27,"integrity":"sha512-fRV8obaxztpPoRo3LxujVcp08pz5KZig8ihZhDMnVSv/xQMgqTpIW4FXoErOUbRclQRJo0pUwY7oGRhgkYGH3A==","signatures":[{"sig":"MEUCIAjvkp+Ym60Bz0bNEiqLSOoHeSoovFa2Mcw+RE24Ec3KAiEAw8rFZnNs2YlzxCaHAJojjugcMQFWdsz6Aw0VZiVWKg8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":512222},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"6c615568de510edb655274272eb4acd9e6e357be","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.4","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.0","sqlite-vec":"0.1.7","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^4.1.2","typescript":"^5.9.3","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^5.9.3"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.7","sqlite-vec-darwin-x64":"0.1.7","sqlite-vec-linux-arm64":"0.1.7","sqlite-vec-windows-x64":"0.1.7","sqlite-vec-darwin-arm64":"0.1.7"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.1.0_1774641823598_0.4025708591348447","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ambicuity/kindx","version":"1.2.0","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.2.0","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"45841b9cdfec263df61a9beaa338cca615e7907c","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.2.0.tgz","fileCount":29,"integrity":"sha512-qoTVsiegoE16c+RmZbCLM/9m3yFWFWDiwLREPRz1W9ZHQ0xKKGPnnWFiySiW/3c7Ne6MA47A5vs9K4549IWKeg==","signatures":[{"sig":"MEUCIQDINy7vvj0xdXJJ4CQv7Ynqn3w2nZSXK2PlT615fUqaMQIgc+sB9ERuJCEw0PmUTdK16tu6bXTFJwoDttpIoElNif8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":567212},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"fabb51eecc84ac9286c21845d56aea0ecbf78cb8","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.0","sqlite-vec":"0.1.9","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^4.1.2","typescript":"^6.0.2","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^6.0.2"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.2.0_1775625210709_0.8384867634370892","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ambicuity/kindx","version":"1.3.0","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.0","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"5b43c6a7338805277ac4fb8f1be58a03115ebf85","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.0.tgz","fileCount":39,"integrity":"sha512-XnqU41zlAu0n0FYW3Mu/lP87jZoCKnilCyPqd/FWYmqwja64frQAMmOCjLA5qaTgh8dL+uCyAdh3Oorlmz2Aag==","signatures":[{"sig":"MEUCIQD7GfC4ktbdQRXSidcNIpGVcVouvUZkcN6PNinPXwkgWgIgCjI8VKJi8Ia+n/u+IkYyIF4WyM9619yWvAlekRTPYmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":634528},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"8ad6794ce6709360491834b11a31f7f5564efd95","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.0","sqlite-vec":"0.1.9","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^4.1.2","typescript":"^6.0.2","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^6.0.2"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.3.0_1775627386616_0.5021559969909559","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ambicuity/kindx","version":"1.3.1","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.1","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"c29189a9af197e7acc9df90001a70a671f51971c","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.1.tgz","fileCount":55,"integrity":"sha512-yrER6tNhf0NcId+RKzi+6TGnyx0RuCc8UfKeCsOApOOqSYFFPA2zvPaOhFegNAUJ/UmQRZ+TQbOLywOyOD3hZA==","signatures":[{"sig":"MEQCIGwNvRR15ZEkgNxcKsJv6PcK3W6w3CXKCFvBGiNHBeEPAiAa3JYLk56ganSUTE57g1P4QQNxIqIkhXiUVPmhISfGtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":692931},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"f0d67fecce6440b0d8def650cd99b967566377e0","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","arch:status":"tsx engine/kindx.ts arch status","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","arch:refresh":"tsx engine/kindx.ts arch refresh","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.4","sqlite-vec":"0.1.7","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.0.0","typescript":"^5.9.3","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^6.0.2"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.3.1_1775685857820_0.3482315515592438","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@ambicuity/kindx","version":"1.3.2","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.2","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"f4a876feaa3939d268bd9966dcf1bb50e8e2839a","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.2.tgz","fileCount":91,"integrity":"sha512-De2vTCKVn45FCbeshnCj1BcAShLZqFwBLX4c8zXaZMP7s/Z2QZWMiwxcjh5GFVsloSYWia53XDunWZ1R2Mlufg==","signatures":[{"sig":"MEUCIQCnS5GEP6mJN0kkx8DGeFJ9tmDj5QJGyKz5mESpUsUPyQIgSWpMuFnam9Oe5/tMwqP8l1WgH6mz7cXq3Fdrhc8JqwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":942280},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"73530f8fcd5469ad6f2d2452e7b62a933b163464","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","arch:status":"tsx engine/kindx.ts arch status","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","arch:refresh":"tsx engine/kindx.ts arch refresh","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client","qa:customer-pov":"tsx tooling/customer_pov_launch_gate.ts --phase P0","perf:warm-daemon":"tsx tooling/benchmark_warm_daemon.ts","qa:customer-pov:p0":"tsx tooling/customer_pov_launch_gate.ts --phase P0 --output tooling/artifacts/customer-pov-p0.json","qa:customer-pov:p1":"tsx tooling/customer_pov_launch_gate.ts --phase P1 --output tooling/artifacts/customer-pov-p1.json","qa:customer-pov:p2":"tsx tooling/customer_pov_launch_gate.ts --phase P2 --output tooling/artifacts/customer-pov-p2.json","qa:customer-pov:p3":"tsx tooling/customer_pov_launch_gate.ts --phase P3 --output tooling/artifacts/customer-pov-p3.json","qa:customer-pov:all":"tsx tooling/customer_pov_launch_gate.ts --phase all --output tooling/artifacts/customer-pov-all.json","perf:llm-pool-contention":"tsx tooling/benchmark_llm_pool_contention.ts"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.4","sqlite-vec":"0.1.7","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.0.0","typescript":"^5.9.3","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^6.0.2"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.3.2_1776285182575_0.3723014159021456","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@ambicuity/kindx","version":"1.3.3","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.3","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"8083aaee52b3dff1c4e8cfdf9992babc92c6b02a","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.3.tgz","fileCount":91,"integrity":"sha512-MNHGtIcYjl2r3nFU+T0BmfJMc3rR0Qa9q3d9ofqkObhHTfFUwmpo22QXat1xqIm/mAFFMLmV/mvg+nY1cxzApA==","signatures":[{"sig":"MEQCIH7lEL0JWmGEJiCUQmAncid8CIagENUcBrmqJJLK+iTEAiBlF16SL2cscvbFKCeOjimXJzS2LD1jyr/FryWavguT6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":977325},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"b6f3d01b6844346bbc528a56425343c7a15e4762","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","bench:all":"tsx tooling/benchmarks/runner.ts --all --enforce","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","bench:full":"tsx tooling/benchmarks/runner.ts --all --include-optional","arch:status":"tsx engine/kindx.ts arch status","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","arch:refresh":"tsx engine/kindx.ts arch refresh","bench:daemon":"tsx tooling/benchmarks/runner.ts --track daemon-load","bench:latency":"tsx tooling/benchmarks/runner.ts --track latency","bench:quality":"tsx tooling/benchmarks/runner.ts --track bm25-quality --enforce","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","bench:section6":"tsx tooling/benchmarks/section6_bench.ts","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client","qa:customer-pov":"tsx tooling/customer_pov_launch_gate.ts --phase P0","perf:warm-daemon":"tsx tooling/benchmark_warm_daemon.ts","bench:regressions":"tsx tooling/benchmarks/runner.ts --track insert-regression --enforce","qa:customer-pov:p0":"tsx tooling/customer_pov_launch_gate.ts --phase P0 --output tooling/artifacts/customer-pov-p0.json","qa:customer-pov:p1":"tsx tooling/customer_pov_launch_gate.ts --phase P1 --output tooling/artifacts/customer-pov-p1.json","qa:customer-pov:p2":"tsx tooling/customer_pov_launch_gate.ts --phase P2 --output tooling/artifacts/customer-pov-p2.json","qa:customer-pov:p3":"tsx tooling/customer_pov_launch_gate.ts --phase P3 --output tooling/artifacts/customer-pov-p3.json","qa:customer-pov:all":"tsx tooling/customer_pov_launch_gate.ts --phase all --output tooling/artifacts/customer-pov-all.json","perf:llm-pool-contention":"tsx tooling/benchmark_llm_pool_contention.ts"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.4","sqlite-vec":"0.1.9","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.0.0","typescript":"^5.9.3","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^6.0.2"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.3.3_1776803550735_0.8630267807499177","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@ambicuity/kindx","version":"1.3.4","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.4","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"c34128fa82b79345e63a3305062824b129a12ca6","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.4.tgz","fileCount":101,"integrity":"sha512-/FHkZga0iUBnm986TXmngFQgodmEK6Z8kGyEdyKHjiM0/X6e0w2jpPY1xGuso2kjUpFtPyUi5zGBcDqtWWwZgQ==","signatures":[{"sig":"MEUCIHrzDsVcUZDdqF7+IDTNMlr/7WdPVUJr9HmzjkR1wyuIAiEA3sCTCU5LKwmH9FmZzUpr9v1FZSWR8bIEPqjBI14SCmk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1031019},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"e0357f9cd99d6b71c0c9f37b8027e34b4fdb3c79","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","bench:all":"tsx tooling/benchmarks/runner.ts --all --enforce","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","bench:full":"tsx tooling/benchmarks/runner.ts --all --include-optional","arch:status":"tsx engine/kindx.ts arch status","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","arch:refresh":"tsx engine/kindx.ts arch refresh","bench:daemon":"tsx tooling/benchmarks/runner.ts --track daemon-load","bench:latency":"tsx tooling/benchmarks/runner.ts --track latency","bench:quality":"tsx tooling/benchmarks/runner.ts --track bm25-quality --enforce","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","bench:section6":"tsx tooling/benchmarks/section6_bench.ts","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client","qa:customer-pov":"tsx tooling/customer_pov_launch_gate.ts --phase P0","perf:warm-daemon":"tsx tooling/benchmark_warm_daemon.ts","bench:regressions":"tsx tooling/benchmarks/runner.ts --track insert-regression --enforce","qa:customer-pov:p0":"tsx tooling/customer_pov_launch_gate.ts --phase P0 --output tooling/artifacts/customer-pov-p0.json","qa:customer-pov:p1":"tsx tooling/customer_pov_launch_gate.ts --phase P1 --output tooling/artifacts/customer-pov-p1.json","qa:customer-pov:p2":"tsx tooling/customer_pov_launch_gate.ts --phase P2 --output tooling/artifacts/customer-pov-p2.json","qa:customer-pov:p3":"tsx tooling/customer_pov_launch_gate.ts --phase P3 --output tooling/artifacts/customer-pov-p3.json","qa:customer-pov:all":"tsx tooling/customer_pov_launch_gate.ts --phase all --output tooling/artifacts/customer-pov-all.json","perf:llm-pool-contention":"tsx tooling/benchmark_llm_pool_contention.ts","test:openclaw-integration":"pnpm --dir openclaw-integration exec vitest run --config vitest.unit.config.ts src/memory/kindx-manager.test.ts"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.4","sqlite-vec":"0.1.9","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.0.0","typescript":"^5.9.3","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"peerDependencies":{"typescript":"^6.0.2"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.3.4_1777516455377_0.4449165175236234","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@ambicuity/kindx","version":"1.3.5","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.5","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"bin":{"kindx":"bin/kindx"},"dist":{"shasum":"a0231eadaef63f52c3e9ae7705d626c262a456ee","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.5.tgz","fileCount":121,"integrity":"sha512-Z5xIjJojvNyOtCXjwjUrzrWznMlrRfupVyYBJlbpiTrYEUjL7wwgSoyl+BUzVSArW7XfK6Baumw35sRjdLRXng==","signatures":[{"sig":"MEYCIQDXg0cqU8D7jr/wYbrXxo8JMaEllk/WKlV+0EUQOuHYhwIhALSFwQD3/CyMW9YJ41mTWcYSLhNGsYHamMpldxm+0wOw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1158730},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"b1739ebab71d24326e66af342bf56ec72dd68f92","scripts":{"test":"vitest run --reporter=verbose specs/","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","index":"tsx engine/kindx.ts index","kindx":"tsx engine/kindx.ts","rerank":"tsx engine/kindx.ts rerank","search":"tsx engine/kindx.ts search","vector":"tsx engine/kindx.ts vector","prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","pretest":"npm run build","release":"./tooling/release.sh","vsearch":"tsx engine/kindx.ts vsearch","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","bench:all":"tsx tooling/benchmarks/runner.ts --all --enforce","build:all":"npm run build && npm run build:packages","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","bench:full":"tsx tooling/benchmarks/runner.ts --all --include-optional","arch:status":"tsx engine/kindx.ts arch status","pretest:all":"npm run build:all","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","arch:refresh":"tsx engine/kindx.ts arch refresh","bench:daemon":"tsx tooling/benchmarks/runner.ts --track daemon-load","bench:latency":"tsx tooling/benchmarks/runner.ts --track latency","bench:quality":"tsx tooling/benchmarks/runner.ts --track bm25-quality --enforce","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","bench:section6":"tsx tooling/benchmarks/section6_bench.ts","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client","qa:customer-pov":"tsx tooling/customer_pov_launch_gate.ts --phase P0","perf:warm-daemon":"tsx tooling/benchmark_warm_daemon.ts","bench:regressions":"tsx tooling/benchmarks/runner.ts --track insert-regression --enforce","qa:customer-pov:p0":"tsx tooling/customer_pov_launch_gate.ts --phase P0 --output tooling/artifacts/customer-pov-p0.json","qa:customer-pov:p1":"tsx tooling/customer_pov_launch_gate.ts --phase P1 --output tooling/artifacts/customer-pov-p1.json","qa:customer-pov:p2":"tsx tooling/customer_pov_launch_gate.ts --phase P2 --output tooling/artifacts/customer-pov-p2.json","qa:customer-pov:p3":"tsx tooling/customer_pov_launch_gate.ts --phase P3 --output tooling/artifacts/customer-pov-p3.json","qa:customer-pov:all":"tsx tooling/customer_pov_launch_gate.ts --phase all --output tooling/artifacts/customer-pov-all.json","perf:llm-pool-contention":"tsx tooling/benchmark_llm_pool_contention.ts","test:openclaw-integration":"pnpm --dir openclaw-integration exec vitest run --config vitest.unit.config.ts src/memory/kindx-manager.test.ts"},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"repository":{"url":"git+https://github.com/ambicuity/KINDX.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.7","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.2.1","yaml":"^2.8.2","chokidar":"^5.0.0","fast-glob":"^3.3.0","picomatch":"^4.0.4","sqlite-vec":"0.1.9","better-sqlite3":"^12.4.5","node-llama-cpp":"^3.17.1","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.0.0","typescript":"^5.9.3","@types/node":"^25.3.5","@types/yaml":"^1.9.6","@types/picomatch":"^4.0.2","@types/better-sqlite3":"^7.6.0"},"optionalDependencies":{"sqlite-vec-linux-x64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-windows-x64":"0.1.9","sqlite-vec-darwin-arm64":"0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/kindx_1.3.5_1778301871150_0.42252268729482956","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"@ambicuity/kindx","version":"1.3.6","description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","type":"module","workspaces":["packages/*"],"bin":{"kindx":"bin/kindx"},"scripts":{"prepare":"[ -d .git ] && ./tooling/install-hooks.sh || true","build":"tsc -p tsconfig.build.json && printf '#!/usr/bin/env node\\n' | cat - dist/kindx.js > dist/kindx.tmp && mv dist/kindx.tmp dist/kindx.js && chmod +x dist/kindx.js","build:packages":"npm run build -w @ambicuity/kindx-schemas && npm run build -w @ambicuity/kindx-client","build:all":"npm run build && npm run build:packages","pretest":"npm run build","pretest:all":"npm run build:all","test":"vitest run --reporter=verbose specs/","test:ci":"vitest run --coverage --reporter=verbose --reporter=junit --outputFile.junit=test-results/junit.xml specs/","test:packages":"npm run test -w @ambicuity/kindx-schemas && npm run test -w @ambicuity/kindx-client","test:python":"python3 -m unittest discover -s python/kindx-langchain/tests -v","test:all":"npm run pretest:all && npm run test && npm run test:packages && npm run test:python","test:coverage":"vitest run --coverage specs/","kindx":"tsx engine/kindx.ts","index":"tsx engine/kindx.ts index","vector":"tsx engine/kindx.ts vector","search":"tsx engine/kindx.ts search","vsearch":"tsx engine/kindx.ts vsearch","rerank":"tsx engine/kindx.ts rerank","perf:warm-daemon":"tsx tooling/benchmark_warm_daemon.ts","perf:llm-pool-contention":"tsx tooling/benchmark_llm_pool_contention.ts","bench:quality":"tsx tooling/benchmarks/runner.ts --track bm25-quality --enforce","bench:latency":"tsx tooling/benchmarks/runner.ts --track latency","bench:regressions":"tsx tooling/benchmarks/runner.ts --track insert-regression --enforce","bench:daemon":"tsx tooling/benchmarks/runner.ts --track daemon-load","bench:all":"tsx tooling/benchmarks/runner.ts --all --enforce","bench:full":"tsx tooling/benchmarks/runner.ts --all --include-optional","bench:section6":"tsx tooling/benchmarks/section6_bench.ts","qa:customer-pov":"tsx tooling/customer_pov_launch_gate.ts --phase P0","qa:customer-pov:p0":"tsx tooling/customer_pov_launch_gate.ts --phase P0 --output tooling/artifacts/customer-pov-p0.json","qa:customer-pov:p1":"tsx tooling/customer_pov_launch_gate.ts --phase P1 --output tooling/artifacts/customer-pov-p1.json","qa:customer-pov:p2":"tsx tooling/customer_pov_launch_gate.ts --phase P2 --output tooling/artifacts/customer-pov-p2.json","qa:customer-pov:p3":"tsx tooling/customer_pov_launch_gate.ts --phase P3 --output tooling/artifacts/customer-pov-p3.json","qa:customer-pov:all":"tsx tooling/customer_pov_launch_gate.ts --phase all --output tooling/artifacts/customer-pov-all.json","inspector":"npx @modelcontextprotocol/inspector tsx engine/kindx.ts mcp","release":"./tooling/release.sh"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"repository":{"type":"git","url":"git+https://github.com/ambicuity/KINDX.git"},"homepage":"https://github.com/ambicuity/KINDX#readme","bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"dependencies":{"@iarna/toml":"^2.2.5","@modelcontextprotocol/sdk":"^1.25.1","better-sqlite3":"^12.4.5","chokidar":"^5.0.0","fast-glob":"^3.3.0","node-llama-cpp":"^3.17.1","picomatch":"^4.0.4","sqlite-vec":"0.1.9","yaml":"^2.8.2","zod":"^4.2.1"},"optionalDependencies":{"sqlite-vec-darwin-arm64":"0.1.9","sqlite-vec-darwin-x64":"0.1.9","sqlite-vec-linux-arm64":"0.1.9","sqlite-vec-linux-x64":"0.1.9","sqlite-vec-windows-x64":"0.1.9"},"devDependencies":{"@types/better-sqlite3":"^7.6.0","@types/node":"^25.3.5","@types/picomatch":"^4.0.2","@types/yaml":"^1.9.6","@vitest/coverage-v8":"^4.1.7","tsx":"^4.0.0","typescript":"^6.0.3","vitest":"^4.1.6"},"engines":{"node":">=20.0.0"},"keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","_id":"@ambicuity/kindx@1.3.6","gitHead":"663acc2d59469001eefa3826decabecc21c2b60e","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-E7KPyfUy5mx7CAn0zqcd61/vcScYc5F4qLRzRIyZpS2DKn44b7n1pEZ/I7Ah8349SfKnF0d9wIYQNU/ZeyAOdQ==","shasum":"3e45679e79e054bfac73e161f76c030c22b9996e","tarball":"https://registry.npmjs.org/@ambicuity/kindx/-/kindx-1.3.6.tgz","fileCount":233,"unpackedSize":1539935,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambicuity%2fkindx@1.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC4ULwdEXbGLvAMUbxHrkwLxAKyu3TBttCm+pkRFV4oJwIhAPUSC4D6cGOnoQRJw/XuBMEUNYf7Ex87HqCmTb4a/PKt"}]},"_npmUser":{"name":"ambicuity","email":"riteshrana36@gmail.com"},"directories":{},"maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kindx_1.3.6_1781033286277_0.005856731884239741"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-08T00:43:13.887Z","modified":"2026-06-09T19:28:06.674Z","0.1.0":"2026-03-08T00:43:14.150Z","1.1.0":"2026-03-27T20:03:43.808Z","1.2.0":"2026-04-08T05:13:30.907Z","1.3.0":"2026-04-08T05:49:46.797Z","1.3.1":"2026-04-08T22:04:18.005Z","1.3.2":"2026-04-15T20:33:02.749Z","1.3.3":"2026-04-21T20:32:30.914Z","1.3.4":"2026-04-30T02:34:15.610Z","1.3.5":"2026-05-09T04:44:31.382Z","1.3.6":"2026-06-09T19:28:06.450Z"},"bugs":{"url":"https://github.com/ambicuity/KINDX/issues"},"author":{"name":"Ritesh Rana","email":"contact@riteshrana.engineer"},"license":"MIT","homepage":"https://github.com/ambicuity/KINDX#readme","keywords":["markdown","search","fts","full-text-search","vector","semantic-search","sqlite","bm25","embeddings","rag","mcp","reranking","knowledge-base","local-ai","llm","on-device","document-search"],"repository":{"type":"git","url":"git+https://github.com/ambicuity/KINDX.git"},"description":"KINDX - On-device hybrid search engine for markdown documents with BM25, vector embeddings, and LLM reranking","maintainers":[{"name":"ambicuity","email":"riteshrana36@gmail.com"}],"readme":"```\n ██╗  ██╗██╗███╗   ██╗██████╗ ██╗  ██╗\n ██║ ██╔╝██║████╗  ██║██╔══██╗╚██╗██╔╝\n █████╔╝ ██║██╔██╗ ██║██║  ██║ ╚███╔╝\n ██╔═██╗ ██║██║╚██╗██║██║  ██║ ██╔██╗\n ██║  ██╗██║██║ ╚████║██████╔╝██╔╝ ██╗\n ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝╚═════╝ ╚═╝  ╚═╝\n```\n\n# KINDX\n\n[![MCP-Compatible](https://img.shields.io/badge/MCP-Compatible-6f42c1?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHJ4PSIyIiBmaWxsPSIjNmY0MmMxIi8+PC9zdmc+)](https://modelcontextprotocol.io)\n[![Local-First](https://img.shields.io/badge/Local--First-Privacy%20Guaranteed-22c55e?style=flat-square)](https://github.com/ambicuity/KINDX)\n[![Node.js](https://img.shields.io/badge/Node.js-20%2B-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Strict-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](./LICENSE)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ambicuity/KINDX/badge)](https://scorecard.dev/viewer/?uri=github.com/ambicuity/KINDX)\n\nKINDX is a local-first hybrid CLI/MCP search engine for personal knowledge bases and agentic workflows, combining BM25, vector retrieval, and LLM reranking locally via node-llama-cpp/GGUF. It provides a command-line interface, a Model Context Protocol (MCP) server, and HTTP endpoints for indexing files, retrieving documents, and storing scoped agent memories.\n\nThe core package is a Node.js/TypeScript project. It can run local GGUF models through `node-llama-cpp`, or use an OpenAI-compatible remote backend such as Ollama or LM Studio for embedding, expansion, and reranking.\n\n## Features\n\n- Index local collections configured in YAML under the KINDX config directory.\n- Search with BM25 full-text queries, vector similarity, or hybrid structured queries.\n- Retrieve documents by path, virtual `kindx://` path, glob, or docid.\n- Serve MCP tools over stdio or Streamable HTTP.\n- Expose HTTP endpoints for health, metrics, structured query, streaming query, and MCP.\n- Store scoped agent memories with text and semantic search.\n- Watch collections and incrementally update the index.\n- Run diagnostics, cleanup, backup, restore, and shard scheduler status commands.\n- Optionally extract text from PDF and DOCX files when local system tools are available.\n- Provide TypeScript schema/client packages and a Python LangChain retriever wrapper.\n\n## Tech Stack\n\n- Node.js `>=20`, TypeScript ESM, npm workspaces\n- SQLite through `better-sqlite3`; optional SQLCipher-capable runtime through `better-sqlite3-multiple-ciphers`\n- SQLite FTS5 and `sqlite-vec`\n- `node-llama-cpp` for local GGUF inference\n- `@modelcontextprotocol/sdk` for MCP\n- `chokidar`, `fast-glob`, `yaml`, and `zod`\n- Vitest for TypeScript tests\n- Python `>=3.10` for `python/kindx-langchain` and `training/`\n- Docker runtime based on `node:22-bookworm-slim`\n\n## Project Structure\n\n```text\n.\n├── bin/kindx                  # npm executable wrapper for the compiled CLI\n├── engine/                    # CLI, MCP/HTTP server, data layer, inference, memory, diagnostics\n├── packages/kindx-schemas/    # shared Zod schemas and TypeScript types\n├── packages/kindx-client/     # typed TypeScript client for KINDX HTTP/MCP APIs\n├── python/kindx-langchain/    # Python retriever wrapper\n├── specs/                     # Vitest test suite and fixtures\n├── tooling/                   # release, benchmark, QA, and development utilities\n├── training/                  # query-expansion training and evaluation tools\n├── capabilities/kindx/        # packaged KINDX skill files\n├── demo/                      # sample data, recipes, demos, and comparison fixtures\n├── Dockerfile                 # multi-stage production image\n├── package.json               # root package, workspace, scripts, and CLI metadata\n└── sample-catalog.yml         # example collection configuration\n```\n\n## Architecture\n\nKINDX is organized around a TypeScript CLI, an MCP/HTTP integration layer, a SQLite-backed repository layer, and local or OpenAI-compatible inference.\n\n### Component Overview\n\n```mermaid\ngraph TB\n    subgraph CLI[\"CLI Layer (engine/kindx.ts)\"]\n        CMD[\"Command Parser\"]\n    end\n\n    subgraph Engine[\"Core Engine\"]\n        REPO[\"Repository (engine/repository.ts)\"]\n        INF[\"Inference (engine/inference.ts)\"]\n        CAT[\"Catalogs (engine/catalogs.ts)\"]\n        REN[\"Renderer (engine/renderer.ts)\"]\n        RT[\"Runtime (engine/runtime.ts)\"]\n    end\n\n    subgraph Protocol[\"Integration Layer\"]\n        MCP[\"MCP Server (engine/protocol.ts)\"]\n    end\n\n    subgraph Storage[\"Data Layer\"]\n        SQLite[\"SQLite + FTS5\"]\n        VEC[\"sqlite-vec Vectors\"]\n        CACHE[\"LLM Response Cache\"]\n    end\n\n    subgraph Models[\"Inference Backends\"]\n        EMBED[\"Embedding model\"]\n        RERANK[\"Rerank model\"]\n        EXPAND[\"Expansion model\"]\n    end\n\n    CMD --> REPO\n    CMD --> CAT\n    CMD --> REN\n    MCP --> REPO\n    REPO --> RT\n    REPO --> INF\n    RT --> SQLite\n    RT --> VEC\n    INF --> EMBED\n    INF --> RERANK\n    INF --> EXPAND\n    REPO --> CACHE\n    CAT --> SQLite\n```\n\n### Hybrid Retrieval Pipeline\n\n```mermaid\nflowchart TD\n    Q[\"User Query\"] --> SPLIT\n\n    subgraph SPLIT[\"Query Processing\"]\n        ORIG[\"Original Query\"]\n        EXP[\"Optional Expansion\"]\n    end\n\n    SPLIT --> P1 & P2 & P3\n\n    subgraph P1[\"Original Query\"]\n        BM25_1[\"BM25 / FTS5\"]\n        VEC_1[\"Vector Search\"]\n    end\n\n    subgraph P2[\"Expanded Query\"]\n        BM25_2[\"BM25 / FTS5\"]\n        VEC_2[\"Vector Search\"]\n    end\n\n    subgraph P3[\"HyDE Query\"]\n        BM25_3[\"BM25 / FTS5\"]\n        VEC_3[\"Vector Search\"]\n    end\n\n    P1 & P2 & P3 --> RRF\n\n    subgraph RRF[\"Result Fusion\"]\n        FUSE[\"Reciprocal Rank Fusion\"]\n        BONUS[\"Strong retrieval signal preservation\"]\n        TOPK[\"Candidate selection\"]\n    end\n\n    RRF --> RERANK_STEP\n\n    subgraph RERANK_STEP[\"Optional Reranking\"]\n        LLM[\"Cross-encoder reranker\"]\n    end\n\n    RERANK_STEP --> BLEND\n\n    subgraph BLEND[\"Final Scoring\"]\n        B1[\"Retrieval score\"]\n        B2[\"Vector score\"]\n        B3[\"Rerank score\"]\n    end\n\n    BLEND --> RESULTS[\"Ranked Results\"]\n```\n\n## Integrations\n\n- **OpenClaw** — KINDX integration code previously vendored at `openclaw-integration/` was extracted on 2026-05-20 to keep this repo focused on the core engine. Full history is preserved on the local branch `openclaw-extracted`, ready to be pushed to a dedicated sibling repository. The CLI command `kindx migrate openclaw <path>` for migrating external OpenClaw repos into KINDX remains supported (see `engine/migrate-openclaw.ts`).\n\n## Prerequisites\n\n- Node.js `20` or newer.\n- npm.\n- Git, if you use collection update commands or contribute to the repository.\n- Python `3.10` or newer for Python integration tests and training tools.\n- Optional local tools:\n  - `pdftotext` for better PDF extraction.\n  - `unzip` for DOCX extraction.\n  - A C/C++ build toolchain for native Node modules when prebuilt binaries are unavailable.\n\n## Getting Started\n\nInstall the published CLI:\n\n```bash\nnpm install -g @ambicuity/kindx\nkindx --help\n```\n\nConfigure MCP clients with the global binary:\n\n```json\n{\n  \"mcpServers\": {\n    \"kindx\": {\n      \"command\": \"kindx\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\nFor local development from source:\n\n```bash\ngit clone https://github.com/ambicuity/KINDX.git\ncd KINDX\nnpm install\nnpm run build\n```\n\nFor local CLI development, run the TypeScript entry point through the package script:\n\n```bash\nnpm run kindx -- --help\n```\n\nTo link the built CLI as `kindx` on your machine:\n\n```bash\nnpm link\nkindx --help\n```\n\n## Indexing A Collection\n\nThe quickest path is `init`, which registers a collection, indexes metadata, and generates embeddings:\n\n```bash\nnpm run kindx -- init . --name notes\n```\n\nYou can also run the steps separately:\n\n```bash\nnpm run kindx -- collection add . --name docs\nnpm run kindx -- update\nnpm run kindx -- embed\n```\n\nSearch the index:\n\n```bash\nnpm run kindx -- search \"authentication\"\nnpm run kindx -- vsearch \"how does authentication work\"\nnpm run kindx -- query \"authentication configuration\"\n```\n\nRetrieve documents:\n\n```bash\nnpm run kindx -- get \"docs/architecture.md\"\nnpm run kindx -- get \"#abc123\"\nnpm run kindx -- multi-get \"docs/**/*.md\"\n```\n\n## Application Entry Points\n\n| Entry point | Purpose |\n| --- | --- |\n| `npm run kindx -- <args>` | Runs `engine/kindx.ts` with `tsx` for local development. |\n| `bin/kindx` | npm package executable wrapper. Requires `npm run build` first in a clone. |\n| `node dist/kindx.js <args>` | Runs the compiled CLI directly. |\n| `kindx mcp` | Starts the MCP server over stdio. |\n| `kindx mcp --http [--daemon]` | Starts the MCP HTTP server. |\n| Docker `CMD` | Runs `node dist/kindx.js mcp --http --port 8181`. |\n\n## Available Scripts\n\n| Command | Description |\n| --- | --- |\n| `npm run prepare` | Installs repository hooks when `.git` exists. |\n| `npm run build` | Compiles `engine/**/*.ts` to `dist/` and makes `dist/kindx.js` executable. |\n| `npm run build:packages` | Builds `@ambicuity/kindx-schemas` and `@ambicuity/kindx-client`. |\n| `npm run build:all` | Builds the CLI and workspace packages. |\n| `npm test` | Builds the CLI, then runs Vitest tests in `specs/`. |\n| `npm run test:packages` | Runs package tests for schemas and client. |\n| `npm run test:python` | Runs Python unittest discovery for `python/kindx-langchain/tests`. |\n| `npm run test:all` | Builds all TypeScript targets, then runs root, package, and Python tests. |\n| `npm run kindx -- <args>` | Runs the CLI TypeScript source with `tsx`. |\n| `npm run index` | Runs `kindx index`. |\n| `npm run vector` | Runs `kindx vector`. |\n| `npm run search` | Runs `kindx search`. |\n| `npm run vsearch` | Runs `kindx vsearch`. |\n| `npm run rerank` | Runs `kindx rerank`. |\n| `npm run perf:warm-daemon` | Runs the warm daemon benchmark helper. |\n| `npm run perf:llm-pool-contention` | Runs the LLM pool contention benchmark helper. |\n| `npm run bench:quality` | Runs enforced BM25 quality benchmarks. |\n| `npm run bench:latency` | Runs latency benchmarks. |\n| `npm run bench:regressions` | Runs enforced insert regression benchmarks. |\n| `npm run bench:daemon` | Runs daemon load benchmarks. |\n| `npm run bench:all` | Runs all enforced benchmark tracks. |\n| `npm run bench:full` | Runs all benchmark tracks including optional tracks. |\n| `npm run bench:section6` | Runs the Section 6 benchmark script. |\n| `npm run qa:customer-pov` | Runs the P0 customer point-of-view launch gate. |\n| `npm run qa:customer-pov:p0` | Writes P0 customer point-of-view results to `tooling/artifacts/customer-pov-p0.json`. |\n| `npm run qa:customer-pov:p1` | Writes P1 customer point-of-view results to `tooling/artifacts/customer-pov-p1.json`. |\n| `npm run qa:customer-pov:p2` | Writes P2 customer point-of-view results to `tooling/artifacts/customer-pov-p2.json`. |\n| `npm run qa:customer-pov:p3` | Writes P3 customer point-of-view results to `tooling/artifacts/customer-pov-p3.json`. |\n| `npm run qa:customer-pov:all` | Writes all-phase customer point-of-view results to `tooling/artifacts/customer-pov-all.json`. |\n| `npm run inspector` | Starts the MCP inspector against `tsx engine/kindx.ts mcp`. |\n| `npm run release` | Runs `tooling/release.sh`. |\n\n## CLI Commands\n\nRun `kindx --help` for grouped overview; `kindx <command> --help` for per-command details.\n\nQuickstart:\n\n```bash\nkindx init ~/notes               # register + index + embed in one shot (interactive)\nkindx search \"query\"             # full-text BM25 search\nkindx query \"how does auth work\" # hybrid search with reranking\nkindx tui                         # interactive search UI\nkindx status --format json        # machine-readable health snapshot\n```\n\n### Output formats\n\nEvery command takes a `--format` flag with one of:\n\n| Format | Description |\n| --- | --- |\n| `pretty` (default on TTY) | Colored terminal output. |\n| `cards` | Search-only: stacked result cards with snippet and metadata. |\n| `table` | Search-only: one row per result. |\n| `lines` | Search-only: fzf-style one line per hit. |\n| `plain` | ANSI-stripped text (default off-TTY). |\n| `json` | Structured JSON; see [`docs/json-schemas.md`](docs/json-schemas.md). |\n| `csv` / `md` / `xml` / `files` | Legacy formats for scripts. |\n\nLegacy boolean flags (`--json`, `--csv`, `--md`, `--xml`, `--files`) still work; on conflict `--format` wins.\n\nUseful global flags: `--no-color`, `--color`, `--verbose`, `--quiet`, `--debug`, `--trace`, `--dry-run`, `--yes`, `--limit <n>`, `-c <collection>`, `--profile <name>`, `--timeout <ms>`.\n\n### Common commands\n\n| Command | Description |\n| --- | --- |\n| `kindx init [path]` | Guided setup (collection → index → embed). Refuses to prompt in CI. |\n| `kindx query <query>` | Hybrid search with expansion and reranking. |\n| `kindx query $'lex: ...\\nvec: ...'` | Structured query document with typed subqueries. |\n| `kindx search <query>` | BM25/FTS full-text search. |\n| `kindx vsearch <query>` | Vector similarity search. |\n| `kindx tui` | Interactive search UI (requires a real TTY). |\n| `kindx get <file>[:line]` | Retrieve one document by path or docid. |\n| `kindx multi-get <pattern>` | Retrieve multiple documents by glob or comma-separated list. |\n| `kindx collection add <path> [--name <name>] [--mask <glob>]` | Register a collection. |\n| `kindx collection list` | List configured collections. |\n| `kindx context add/list/rm` | Manage human-written context annotations. |\n| `kindx ls [collection[/path]]` | Inspect indexed files. |\n| `kindx update [--pull]` | Re-index configured collections. |\n| `kindx embed [-f] [--resume]` | Generate or refresh vector embeddings. |\n| `kindx watch [collections...]` | Run the incremental indexing daemon. |\n| `kindx status [--format json]` | Show index and collection health. |\n| `kindx pull [--refresh]` | Download or check default local GGUF models. |\n| `kindx cleanup` | Clear caches and vacuum the database. |\n| `kindx doctor [--format json]` | Run deterministic health diagnostics. |\n| `kindx repair --check-only` | Dry-run integrity and repair checks. |\n| `kindx backup <create\\|verify\\|restore> [path]` | Manage SQLite backups. |\n| `kindx scheduler status [--format json]` | Show shard sync checkpoint and queue status. |\n| `kindx verify-wipe [--format json]` | Scan for residual local index artifacts. |\n| `kindx memory <subcommand>` | Manage scoped agent memories. |\n| `kindx mcp [--http] [--daemon] [--port N]` | Run MCP server (stdio default). |\n| `kindx mcp status [--format json]` | Show transport, endpoints, daemon PID, masked token. |\n| `kindx mcp stop` | Stop the MCP HTTP daemon. |\n| `kindx migrate chroma <path>` | Migrate a ChromaDB SQLite file. |\n| `kindx migrate openclaw <path>` | Migrate an OpenClaw repository to use KINDX. |\n\nSee [`docs/cli.md`](docs/cli.md) for the full reference, [`docs/tui.md`](docs/tui.md) for the TUI, [`docs/json-schemas.md`](docs/json-schemas.md) for stable JSON contracts, and [`docs/troubleshooting.md`](docs/troubleshooting.md) for error messages and recovery.\n\n## Build\n\n```bash\nnpm run build\nnpm run build:packages\nnpm run build:all\n```\n\nThe root build compiles `engine/**/*.ts` into `dist/`. The package build compiles the workspace packages under `packages/`.\n\n## Testing\n\n```bash\nnpm test\nnpm run test:packages\nnpm run test:python\nnpm run test:all\n```\n\n`npm test` runs `npm run build` first through the `pretest` script.\n\n## Configuration\n\nKINDX reads runtime configuration from environment variables. The repository includes `.env.example`, but the application does not load dotenv files automatically. Export variables in your shell, set them in your process manager, or pass them to Docker with `-e`.\n\nCollection configuration is stored as YAML. By default, the config file is `~/.config/kindx/index.yml`; the example shape is shown in `sample-catalog.yml`.\n\nIndex data is stored in SQLite. By default, the database path is under `~/.cache/kindx/`, unless overridden.\n\n### Environment Variables\n\n| Variable | Required | Description |\n| --- | ---: | --- |\n| `INDEX_PATH` | No | Overrides the SQLite database path. |\n| `KINDX_CONFIG_DIR` | No | Overrides the KINDX config directory. |\n| `XDG_CONFIG_HOME` | No | Base directory used for config when `KINDX_CONFIG_DIR` is unset. |\n| `XDG_CACHE_HOME` | No | Base directory used for cache, index, PID, and model paths. |\n| `HOME` | No | Used to resolve default config/cache paths and `~/` collection paths. |\n| `KINDX_MCP_TOKEN` | No | Bearer token for HTTP MCP/query authentication in single-tenant mode. |\n| `KINDX_HTTP_CONCURRENCY` | No | Maximum concurrent HTTP requests. Default: `150`. |\n| `KINDX_MAX_CONCURRENCY_PER_TENANT` | No | Maximum concurrent HTTP requests per tenant. Default: `10`. |\n| `KINDX_RATE_LIMIT_BURST` | No | Per-tenant rate-limit burst size. Default: `100`. |\n| `KINDX_RATE_LIMIT_MS` | No | Rate-limit window in milliseconds. Default: `1000`. |\n| `KINDX_AUTO_INVOKE` | No | Auto-invocation contract delivered in MCP `initialize.instructions`. Default: on. Set to `off` (or `0` / `false`) to suppress the contract block. |\n| `KINDX_SQLITE_DRIVER` | No | Forces a SQLite driver module. By default KINDX tries `better-sqlite3-multiple-ciphers`, then `better-sqlite3`. |\n| `KINDX_ENCRYPTION_KEY` | No | Enables keyed SQLCipher runtime support when using a compatible SQLite driver. |\n| `KINDX_LLM_BACKEND` | No | Set to `remote` to use the OpenAI-compatible backend; otherwise local `node-llama-cpp` is used. |\n| `KINDX_CPU_ONLY` | No | Set to `1` to force local model execution on CPU. |\n| `KINDX_EMBED_MODEL` | No | Local embedding model URI or model override used by inference. |\n| `KINDX_RERANK_MODEL` | No | Local reranking model URI. |\n| `KINDX_GENERATE_MODEL` | No | Local generation/query-expansion model URI. |\n| `KINDX_OPENAI_BASE_URL` | No | Base URL for the OpenAI-compatible remote backend. Default: `http://localhost:11434/v1`. |\n| `KINDX_OPENAI_API_KEY` | No | API key for the remote backend. If set, KINDX sends it as a bearer token. |\n| `KINDX_OPENAI_EMBED_MODEL` | No | Remote embedding model name. |\n| `KINDX_OPENAI_GENERATE_MODEL` | No | Remote generation model name. |\n| `KINDX_OPENAI_RERANK_MODEL` | No | Remote reranking model name. |\n| `KINDX_EXPAND_CONTEXT_SIZE` | No | Context size for expansion sessions. |\n| `KINDX_RERANK_CONTEXT_SIZE` | No | Context size for reranking sessions. |\n| `KINDX_VRAM_RESERVE_MB` | No | Reserve budget used by local model/device planning. |\n| `KINDX_LLM_POOL_SIZE` | No | Size override for the default LLM pool. |\n| `KINDX_QUERY_TIMEOUT_MS` | No | Query timeout guard. `0` disables it. |\n| `KINDX_INFLIGHT_DEDUPE` | No | In-flight query deduplication mode. Supported value in code: `join`; other values disable joining. |\n| `KINDX_QUERY_REPLAY_DIR` | No | Directory for query replay artifacts. |\n| `KINDX_MAX_RERANK_CANDIDATES` | No | Maximum rerank candidate ceiling. |\n| `KINDX_RERANK_TIMEOUT_MS` | No | Timeout budget for reranking before fallback. |\n| `KINDX_RERANK_QUEUE_LIMIT` | No | Queue length cap for reranking. |\n| `KINDX_RERANK_CONCURRENCY` | No | Rerank worker concurrency. |\n| `KINDX_RERANK_DROP_POLICY` | No | Rerank backpressure policy: `timeout_fallback` or `wait`. |\n| `KINDX_VECTOR_FANOUT_WORKERS` | No | Parallel worker cap for vector fanout. |\n| `KINDX_ANN_ENABLE` | No | Enables ANN routing for sharded collections. Default: `1`. |\n| `KINDX_ANN_CENTROIDS` | No | Requested centroid count for ANN shard routing. |\n| `KINDX_ANN_PROBE_COUNT` | No | Number of ANN centroid probes per shard. Default: `4`. |\n| `KINDX_ANN_SHORTLIST` | No | ANN shortlist size per shard. |\n| `KINDX_EXTRACTOR_PDF` | No | Enables PDF extraction. Default: enabled. |\n| `KINDX_EXTRACTOR_DOCX` | No | Enables DOCX extraction. Default: enabled. |\n| `KINDX_EXTRACTOR_FALLBACK_POLICY` | No | PDF fallback behavior: `fallback` or `strict`. |\n| `CHOKIDAR_USEPOLLING` | No | Set to `1` or `true` to make the watch daemon use polling. |\n| `CHOKIDAR_INTERVAL` | No | Polling interval for `chokidar`. Default: `100`. |\n| `KINDX_LOG_LEVEL` | No | Logging verbosity: `DEBUG`, `INFO`, `WARN`, or `ERROR`. |\n| `KINDX_LOG_JSON` | No | Set to `1` or `true` for JSON logs. |\n| `NO_COLOR` | No | Disables colored CLI output. |\n| `KINDX_ENABLE_MAINTENANCE_TOOLS` | No | Exposes maintenance MCP tools such as `status`, `memory_stats`, `memory_history`, `memory_mark_accessed`, `memory_delete`, and `memory_bulk`. |\n| `KINDX_TRUST_UPDATE_CMDS` | No | Trusts configured collection update commands when set to `1` or `true`. |\n| `KINDX_MCP_SERVERS_JSON` | No | Inline MCP control-plane server configuration. |\n| `KINDX_TRUST_PROJECT` | No | Marks a project-scoped MCP control-plane config as trusted. |\n\n## HTTP And MCP Server\n\nStart the stdio MCP server:\n\n```bash\nkindx mcp\n```\n\nStart the HTTP server:\n\n```bash\nkindx mcp --http\nkindx mcp --http --port 8080\nkindx mcp --http --daemon\nkindx mcp stop\n```\n\nHTTP mode uses bearer-token authentication for protected endpoints when `KINDX_MCP_TOKEN` is configured or when multi-tenant RBAC is enabled. `/health` and `/metrics` are intentionally unauthenticated.\n\n### HTTP Endpoints\n\n| Endpoint | Description |\n| --- | --- |\n| `GET /health` | Liveness response with status and uptime. |\n| `GET /metrics` | Prometheus text metrics. |\n| `POST /query` | Structured retrieval endpoint. |\n| `POST /search` | Alias for `POST /query`. |\n| `POST /query/stream` | Streaming structured query endpoint. |\n| `POST /mcp` | MCP Streamable HTTP endpoint. |\n\n`POST /query` accepts this request shape:\n\n```json\n{\n  \"searches\": [\n    { \"type\": \"lex\", \"query\": \"authentication\" },\n    { \"type\": \"vec\", \"query\": \"how authentication is configured\" },\n    { \"type\": \"hyde\", \"query\": \"Authentication is configured with tokens, secrets, and middleware.\" }\n  ],\n  \"limit\": 10,\n  \"minScore\": 0,\n  \"candidateLimit\": 40,\n  \"collections\": [\"docs\"]\n}\n```\n\n`type` must be one of `lex`, `vec`, or `hyde`.\n\n### MCP Tools\n\nThe server registers these core tools:\n\n| Tool | Description |\n| --- | --- |\n| `query` | Structured search across one or more `lex`, `vec`, or `hyde` subqueries. |\n| `get` | Retrieve one document by path or docid. |\n| `multi_get` | Retrieve multiple documents by glob or list. |\n| `memory_put` | Store or update a scoped memory. |\n| `memory_search` | Search scoped memories by semantic or text mode. |\n\nAdditional maintenance tools are registered only when `KINDX_ENABLE_MAINTENANCE_TOOLS` is set: `status`, `memory_history`, `memory_stats`, `memory_mark_accessed`, `memory_delete`, and `memory_bulk`.\n\nThe TypeScript client exposes helpers for `/query`, `get`, `multi_get`, `status`, `memory_put`, `memory_search`, `memory_history`, and `memory_mark_accessed`.\n\n## YAML Configuration\n\nBy default, collection settings are stored in `~/.config/kindx/index.yml`. The config directory is resolved as `KINDX_CONFIG_DIR` (if set), then `XDG_CONFIG_HOME/kindx` (if set), then `~/.config/kindx`. Named indexes use `~/.config/kindx/{indexName}.yml` (default: `index.yml`). You can edit this file directly to configure `ignore` patterns and glob rules for files that should be skipped during indexing and search.\n\n### Example\n\n```yaml\ncollections:\n  docs:\n    path: ~/work/docs\n    pattern: \"**/*.md\"\n    ignore:\n      - \"archive/**\"\n      - \"sessions/**\"\n      - \"**/*.draft.md\"\n```\n\n### How it works\n\n- `pattern` defines which files are included\n- `ignore` excludes matching files and directories\n- A file must match `pattern` **and not match any `ignore` rule** to be indexed\n- Ignored files are skipped during indexing and will not appear in search results\n\n### Notes\n\n- `ignore` is configured in YAML (no CLI support currently)\n- Patterns are evaluated relative to the collection `path`.\n- By default, `node_modules`, `.git`, `.cache`, `vendor`, `dist`, and `build` are already ignored; `ignore` adds custom exclusions.\n- After editing `index.yml`, run `kindx update` to re-index with the updated rules.\n\n## Docker\n\nBuild the image:\n\n```bash\ndocker build -t kindx .\n```\n\nRun the HTTP MCP server on port `8181`:\n\n```bash\ndocker run --rm \\\n  -p 8181:8181 \\\n  -v kindx-data:/data \\\n  -e KINDX_MCP_TOKEN=<token> \\\n  kindx\n```\n\nThe Docker image sets `HOME=/data`, `KINDX_LOG_JSON=1`, and `KINDX_SQLITE_DRIVER=better-sqlite3-multiple-ciphers`.\n\n## Workspace Packages\n\n### `@ambicuity/kindx-schemas`\n\nShared Zod schemas and TypeScript types for KINDX request and response payloads.\n\n```bash\nnpm run build -w @ambicuity/kindx-schemas\nnpm run test -w @ambicuity/kindx-schemas\n```\n\n### `@ambicuity/kindx-client`\n\nTyped TypeScript client for the KINDX HTTP and MCP APIs.\n\n```bash\nnpm run build -w @ambicuity/kindx-client\nnpm run test -w @ambicuity/kindx-client\n```\n\n## Python Integration\n\n`python/kindx-langchain` is a thin LangChain retriever wrapper around the KINDX HTTP API. It is not a supported Python product tier — see [PYTHON.md](./PYTHON.md) for the policy and reversal criteria. For production integrations from Python, call the HTTP API directly.\n\n```bash\npython3 -m unittest discover -s python/kindx-langchain/tests -v\n```\n\nThe package requires Python `>=3.10`. Its optional `langchain` extra installs `langchain-core>=0.3.0`.\n\n## Training Tools\n\n`training/` contains Python tooling for query-expansion fine-tuning and evaluation. It is a separate Python project named `qmd-finetune` with Python `>=3.10` and dependencies declared in `training/pyproject.toml`.\n\nSee `training/README.md` for training-specific commands.\n\n## Database And Storage\n\nKINDX stores indexed content in SQLite. The schema includes:\n\n- `content` for content-addressed document bodies.\n- `documents` for collection/path metadata and active document mapping.\n- `documents_fts` for FTS5 full-text search.\n- `content_vectors` and a sqlite-vec virtual table for vector search.\n- `llm_cache` for LLM expansion/rerank cache entries.\n- memory, audit, and AI usage tables initialized by the corresponding engine modules.\n\nCollection definitions live in YAML config, not in the SQLite `collections` table.\n\n## How It Works\n\n### Indexing Flow\n\n```mermaid\nflowchart LR\n    COL[\"Collection Config\"] --> GLOB[\"Glob Pattern Scan\"]\n    GLOB --> FILES[\"Supported Files\"]\n    FILES --> INGEST[\"Ingest / Extract Text\"]\n    INGEST --> PARSE[\"Title + Content Hash\"]\n    PARSE --> SQL[\"Store in SQLite\"]\n    SQL --> FTS[\"FTS5 Full-Text Index\"]\n```\n\n### Embedding Flow\n\nDocuments are split into chunks before embedding. The chunker prefers natural document boundaries such as headings, paragraphs, and code fences where possible.\n\n```mermaid\nflowchart LR\n    DOC[\"Document\"] --> CHUNK[\"Smart Chunking\"]\n    CHUNK --> FMT[\"Embedding Text\"]\n    FMT --> LLM[\"Embedding Backend\"]\n    LLM --> STORE[\"sqlite-vec Vectors\"]\n    CHUNK --> META[\"Chunk Metadata\"]\n    META --> STORE\n```\n\nLocal inference defaults are defined in `engine/inference.ts` and can be overridden with `KINDX_EMBED_MODEL`, `KINDX_RERANK_MODEL`, and `KINDX_GENERATE_MODEL`. Set `KINDX_LLM_BACKEND=remote` to use the OpenAI-compatible backend instead of local GGUF execution.\n\n## Contributing\n\nSee `CONTRIBUTING.md` for contributor setup and workflow details. At minimum, verify the root build and tests before opening a pull request:\n\n```bash\nnpm run build\nnpm test\n```\n\nSecurity issues should be reported according to `SECURITY.md`.\n\n## License\n\nMIT. See `LICENSE`.\n","readmeFilename":"README.md"}