{"_id":"@adeel712/localdocs","_rev":"11-f80dd04e8628fb3482abc3450504cbc5","name":"@adeel712/localdocs","dist-tags":{"latest":"1.1.8"},"versions":{"1.0.0":{"name":"@adeel712/localdocs","version":"1.0.0","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.0.0","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"3ff235ef006039f9db39005fde4d2c0ec4d99fb2","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.0.0.tgz","fileCount":119,"integrity":"sha512-7o8TQFhrGcAvM2Opmc9zijAMrkyDdSlxb5SOoVT3iSyIw1Kjcp3GO6gjgmtKxffLPiv+oAYXoW/GnAYIUm8byg==","signatures":[{"sig":"MEUCIArGWldHF7myUwf20YtFy3pEe6cbkDky43n14c6BxP9aAiEAijEZj+uCREo5L4nzMOux+N6FO5BeIz2cfQtfi2S9lEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124992},"main":"dist/cli/index.js","type":"module","types":"./dist/cli/index.d.ts","gitHead":"f1dd068afb00669bfaa16076ddf4496e2daaca49","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","prepublishOnly":"pnpm build"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.31.0","devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.0.0_1777539915690_0.883482667932296","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@adeel712/localdocs","version":"1.0.1","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.0.1","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"882482c65f75eeda4bca763a5e3b674930b54f42","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.0.1.tgz","fileCount":119,"integrity":"sha512-KDl0E86jjey7mEtHqQkzZO1l1TVSURV4wYkGnZHsunb+ZoITH9FBUUAMyMhE82/Np6ciRUzqRJi5Dq1Mt5TeDw==","signatures":[{"sig":"MEYCIQDF4TvIiYYQffD/9eRs5+GxXMkULKcY+4ub9CyxXSqAgQIhANTdBS/rIY/lZ614bZbvcJDkzoBNwTJ/qzbQF2xVmyeS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125032},"main":"dist/cli/index.js","type":"module","types":"./dist/cli/index.d.ts","gitHead":"2831dfab103bd3bde5cc62f65dc41cbd5d39ca30","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","prepublishOnly":"pnpm build"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.31.0","devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.0.1_1777540443961_0.7664257586899457","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@adeel712/localdocs","version":"1.1.0","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.0","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"928639301681e3dda685b212ff006c1359ae5d67","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.0.tgz","fileCount":127,"integrity":"sha512-6CVgukFOq1MvN9UkhtTy2MPTsfalvFlOLAxErUex38u9JLrhXmq+Zoix/MpU2YgdMhthWo/67zZXKDhhla9JOw==","signatures":[{"sig":"MEQCIEcrpxsbVxIrewtStbUOBQ3YBSu3Qac1q2B3PP6IjdwcAiANonOXtJchYdjLSoLP9HXP0W6T28EszA4URI8PCRDbQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142581},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.0.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/da31f81bcc57cb5b76d1dd39459c383f/adeel712-localdocs-1.1.0.tgz","_integrity":"sha512-6CVgukFOq1MvN9UkhtTy2MPTsfalvFlOLAxErUex38u9JLrhXmq+Zoix/MpU2YgdMhthWo/67zZXKDhhla9JOw==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.0_1777701565769_0.03371741045291765","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@adeel712/localdocs","version":"1.1.1","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.1","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"8374e5354f632f8438a5dc09912d385a4eeb2f7d","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.1.tgz","fileCount":127,"integrity":"sha512-6D/BNkMe9OCcdjoJ2nHyyJgBDYT8ne/P7uimwjX1tDysYHvXRjByTGF367eJxFCht72wbNrwGFjYLNwHbsB6HQ==","signatures":[{"sig":"MEQCIB0ohcjP/suvglwWRjQu3prsPs2cddYIjU12N5maM75uAiBJ5jzs+AlSp4gtytDqmWCmlBK3NtqvlySLDgPWBsm+Sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148193},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.1.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/478f21cd9b6f65b01c3618f15068d546/adeel712-localdocs-1.1.1.tgz","_integrity":"sha512-6D/BNkMe9OCcdjoJ2nHyyJgBDYT8ne/P7uimwjX1tDysYHvXRjByTGF367eJxFCht72wbNrwGFjYLNwHbsB6HQ==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.1_1777702487639_0.841579112712056","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@adeel712/localdocs","version":"1.1.2","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.2","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"efc81ebbe698915f3c85fa10f601a0ffd30243f9","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.2.tgz","fileCount":127,"integrity":"sha512-usFJdAKTBlkwbwD6ty4pWyOiK+i8vV7qF6UZGVoJLXTe5CWsdhyI7sVNglObCZyLKpAnl/CNg/8gEzTla9NHaQ==","signatures":[{"sig":"MEUCIQDg4gsN9IhUcQH+OXm5JD4AWlJP+Ci1oxrUuOgU3B9rlwIgQ5Dpj7Z22B5tZiPbPtUkFqM4uc7qZZgnrjphOXDFtwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148210},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.2.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/3f71d024704ff707cc51dbe61bdbbd81/adeel712-localdocs-1.1.2.tgz","_integrity":"sha512-usFJdAKTBlkwbwD6ty4pWyOiK+i8vV7qF6UZGVoJLXTe5CWsdhyI7sVNglObCZyLKpAnl/CNg/8gEzTla9NHaQ==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.2_1777702651986_0.5508393118095167","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@adeel712/localdocs","version":"1.1.3","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.3","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"ecbc5b856dc13c7ef7e7c0ba85716297ad02a394","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.3.tgz","fileCount":127,"integrity":"sha512-SJkU6nxOqzSnqcvUpY7i+6H1zwwFjSX5IIZ0jaemWrQgXxnFFzBhZ9ztKZvWvkuXujPK85m1GC3Dovn23IBkxw==","signatures":[{"sig":"MEUCIQCgRbE60stq6ehfYbXwF6mX8A/6Wo1PyOYtPkr8bGJuswIgDTkFc/9VIUHrjnIS8q0E+chsJggqmpdLK8UzYBbJAcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148202},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.3.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/5879d13c518c5c562382c7d4039bcd95/adeel712-localdocs-1.1.3.tgz","_integrity":"sha512-SJkU6nxOqzSnqcvUpY7i+6H1zwwFjSX5IIZ0jaemWrQgXxnFFzBhZ9ztKZvWvkuXujPK85m1GC3Dovn23IBkxw==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.3_1777702857345_0.16261809787141313","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@adeel712/localdocs","version":"1.1.4","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.4","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"29f378a0184c84308562cfbed3cf8df35aafda4d","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.4.tgz","fileCount":127,"integrity":"sha512-MbI8B0Cw1hbq1w+ya+gVttSp89ihHOKki9soSwSiG0dNLxeNEGEqt7NjNgE6aqQwjmDgmXPaGpwOZK3kqrZYEw==","signatures":[{"sig":"MEUCIBfQhc00nRPJRNSOfvI87sTj1N3RDdklPWgWHM5AVnm4AiEAoSDf5oQT2/85IFM6/XsudJ2fCIcqlcNbnwokB7no3RE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148349},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.4.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/ecb8d0751d41b96b82511dd9da2a611a/adeel712-localdocs-1.1.4.tgz","_integrity":"sha512-MbI8B0Cw1hbq1w+ya+gVttSp89ihHOKki9soSwSiG0dNLxeNEGEqt7NjNgE6aqQwjmDgmXPaGpwOZK3kqrZYEw==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.4_1777704676495_0.993317652772943","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@adeel712/localdocs","version":"1.1.5","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.5","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"201d55aac3d5d497673b158b66cf451d46ac27eb","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.5.tgz","fileCount":127,"integrity":"sha512-jS8cfMGmUAnDhlQxHrHI64gtIxEg5x8aycjGVXaHdzXP5wKtlOFKGIqXsqPvqRaIvSDKRQ5lV51p7y5vPlJs2g==","signatures":[{"sig":"MEYCIQDuny/kWokCctHSlosCV3J4F7HFOaexP55oetyuEvE7twIhAPiJ+74+W8Enrs2T9CCi00G+1PtSqur+Al7DU/5OobkU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148598},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.5.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/f4456d00fa36b8fc79ba9fac3097e55e/adeel712-localdocs-1.1.5.tgz","_integrity":"sha512-jS8cfMGmUAnDhlQxHrHI64gtIxEg5x8aycjGVXaHdzXP5wKtlOFKGIqXsqPvqRaIvSDKRQ5lV51p7y5vPlJs2g==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.5_1777705443200_0.44928134728512203","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@adeel712/localdocs","version":"1.1.6","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.6","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"2adc9e59d0f09d79b4880999bba3af4240502763","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.6.tgz","fileCount":127,"integrity":"sha512-FTck+iQ1k3qi6VmDKF88suRedYM2NsXkDeON5yG9SghG011GygUqM6XFRpT/8ZyXXVL6MEzP2xVqTjpHwooc8w==","signatures":[{"sig":"MEUCIFd685Eu+oLaVRELZwT7ShQct8ybBBz5JvlL/Y7/YdiwAiEArKPLFubT8xV+HUxekj1ahJEQgdE4fWs/WgmYolzdwRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148646},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.6.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/ab0885036f444f9ab3bd8a1aa6a3ae52/adeel712-localdocs-1.1.6.tgz","_integrity":"sha512-FTck+iQ1k3qi6VmDKF88suRedYM2NsXkDeON5yG9SghG011GygUqM6XFRpT/8ZyXXVL6MEzP2xVqTjpHwooc8w==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.6_1777707106742_0.1714151544810214","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@adeel712/localdocs","version":"1.1.7","keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","_id":"@adeel712/localdocs@1.1.7","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"homepage":"https://github.com/adeelakhani/localdocs#readme","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"bin":{"localdocs":"dist/cli/index.js"},"dist":{"shasum":"1f2dda76a26473b946ef8c4bf52702a1ea337adb","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.7.tgz","fileCount":127,"integrity":"sha512-QwQIHJ4L72EMFspSHuheOZkvp/zmi8Jb7Co9n1jIlhQwAE+qgk+EamMCeT+MyFTkLkeIOFhrBxSV/EO/XkPqXg==","signatures":[{"sig":"MEUCIQDHX+JTQCKSw9HRxnvViHwyO8KiCUBMCMzjI1QJor1ZfAIgTEbpk9vsRekOqGYC0gNlKv8xXib0Ogm7Pp6rBgcebpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148858},"main":"dist/cli/index.js","type":"module","_from":"file:adeel712-localdocs-1.1.7.tgz","types":"./dist/cli/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"_resolved":"/private/var/folders/zk/5wfgvcwd53g1nkhnbmmnxs8w0000gn/T/26abc5764dc0bd91db4467f77adad575/adeel712-localdocs-1.1.7.tgz","_integrity":"sha512-QwQIHJ4L72EMFspSHuheOZkvp/zmi8Jb7Co9n1jIlhQwAE+qgk+EamMCeT+MyFTkLkeIOFhrBxSV/EO/XkPqXg==","repository":{"url":"git+https://github.com/adeelakhani/localdocs.git","type":"git"},"_npmVersion":"11.4.1","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.4.1","jsdom":"^29.0.2","cheerio":"^1.2.0","crawlee":"^3.16.0","p-limit":"^7.3.0","commander":"^14.0.3","playwright":"^1.59.1","sitemapper":"^4.1.5","ml-distance":"^4.0.1","apache-arrow":"^18.1.0","@lancedb/lancedb":"^0.27.2","robots-txt-parser":"^2.0.3","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/localdocs_1.1.7_1777708079167_0.1294283717454523","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@adeel712/localdocs","version":"1.1.8","description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","type":"module","main":"dist/cli/index.js","bin":{"localdocs":"dist/cli/index.js"},"scripts":{"build":"tsc","prepublishOnly":"pnpm build","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["docs","search","rag","ollama","mcp","local","ai"],"author":{"name":"Adeel Akhani"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/adeelakhani/localdocs.git"},"homepage":"https://github.com/adeelakhani/localdocs#readme","packageManager":"pnpm@10.31.0","dependencies":{"@lancedb/lancedb":"^0.27.2","@modelcontextprotocol/sdk":"^1.29.0","@mozilla/readability":"^0.6.0","apache-arrow":"^18.1.0","cheerio":"^1.2.0","commander":"^14.0.3","crawlee":"^3.16.0","jsdom":"^29.0.2","ml-distance":"^4.0.1","p-limit":"^7.3.0","playwright":"^1.59.1","robots-txt-parser":"^2.0.3","sitemapper":"^4.1.5","zod":"^4.4.1"},"devDependencies":{"@types/node":"^25.6.0","tsx":"^4.21.0","typescript":"^6.0.3"},"_id":"@adeel712/localdocs@1.1.8","gitHead":"cb5e07f5df34ddbbf738b62c0fac9cdd4fcddfb5","types":"./dist/cli/index.d.ts","bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"_nodeVersion":"24.1.0","_npmVersion":"11.4.1","dist":{"integrity":"sha512-U6t3bml1vpVy2W4t/IhKXPmLTfLcxC7MD/mDu2V3H0xBskIG6jQtS6sOCpjCpZunY5z8A8xaW1L0XIi6jn6pwg==","shasum":"4234b0545f33467ca7fb98301f6b4c6d284e7c3a","tarball":"https://registry.npmjs.org/@adeel712/localdocs/-/localdocs-1.1.8.tgz","fileCount":127,"unpackedSize":149357,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBjQREgvsElz+1o9qbFyETpM4OFy7ik9X9Tqrw9HdqBhAiASKsH9Re23fyc7jiAbSqGnLbdqSVg0SK9b0WtmH//i/Q=="}]},"_npmUser":{"name":"adeel712","email":"akhaniadeel@gmail.com"},"directories":{},"maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/localdocs_1.1.8_1779522782924_0.7287344659993946"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-30T09:05:15.585Z","modified":"2026-05-23T07:53:03.195Z","1.0.0":"2026-04-30T09:05:15.850Z","1.0.1":"2026-04-30T09:14:04.112Z","1.1.0":"2026-05-02T05:59:25.920Z","1.1.1":"2026-05-02T06:14:47.792Z","1.1.2":"2026-05-02T06:17:32.152Z","1.1.3":"2026-05-02T06:20:57.488Z","1.1.4":"2026-05-02T06:51:16.641Z","1.1.5":"2026-05-02T07:04:03.347Z","1.1.6":"2026-05-02T07:31:46.875Z","1.1.7":"2026-05-02T07:47:59.318Z","1.1.8":"2026-05-23T07:53:03.077Z"},"bugs":{"url":"https://github.com/adeelakhani/localdocs/issues"},"author":{"name":"Adeel Akhani"},"license":"MIT","homepage":"https://github.com/adeelakhani/localdocs#readme","keywords":["docs","search","rag","ollama","mcp","local","ai"],"repository":{"type":"git","url":"git+https://github.com/adeelakhani/localdocs.git"},"description":"Local-first documentation indexer and natural language search. No cloud, no API keys, runs entirely on your machine via Ollama.","maintainers":[{"name":"adeel712","email":"akhaniadeel@gmail.com"}],"readme":"# localdocs\n\nIndex any documentation site and search it with natural language - entirely on your machine. No cloud, no API keys, no cost.\n\nWorks as a CLI and as an MCP server for Claude Code, Cursor, or any MCP-compatible editor.\n\n---\n\n## The idea\n\nMost developers either pay for cloud RAG tools or settle for ctrl+F. localdocs is a third option: a fully local documentation search tool that runs entirely on your hardware using [Ollama](https://ollama.com).\n\nEvery part of the pipeline - embedding, reasoning, reranking - runs on your machine via local LLMs. Your docs never leave your computer, and it costs nothing to run - no subscriptions, no per-query fees, no API keys.\n\n---\n\n## Why this is different from regular search\n\nStandard keyword search finds pages that contain your exact words. Vector search finds pages semantically similar to your query. localdocs does both, and adds a reasoning layer on top - all powered by your local models.\n\n**How a search works:**\n\n1. **Tree reasoning** - a local LLM looks at the section tree of the indexed docs (URL hierarchy + headings) and identifies which sections are most likely to contain your answer. Instead of searching the entire corpus, search is scoped to relevant sections only.\n\n2. **Hybrid search** - inside those sections, vector search (semantic meaning) and BM25 (keyword relevance) run in parallel. Results are merged using Reciprocal Rank Fusion - chunks appearing in both result lists rank higher.\n\n3. **Reranking** - a local LLM reads the top results and filters out anything that doesn't genuinely answer the query.\n\nThe result: you can search vague natural language like \"how do I handle side effects\" and get the right page, and you can search exact terms like `useEffect dependency array` and get precise keyword matches. No cloud required.\n\n---\n\n## Requirements\n\n- Node.js 18+\n- [Ollama](https://ollama.com) installed and running (`ollama serve`)\n- Pull the required models:\n  ```bash\n  ollama pull nomic-embed-text   # embedding model - converts text to vectors\n  ollama pull phi4-mini          # chat model - tree reasoning + reranking\n  ```\n\n---\n\n## Install\n\n```bash\nnpm install -g @adeel712/localdocs\n```\n\n---\n\n## Quick start\n\n```bash\n# verify everything is set up\nlocaldocs check\n\n# index a docs site\nlocaldocs add https://react.dev/learn\n\n# search it\nlocaldocs search \"how do I manage state between components\"\n```\n\n---\n\n## CLI Reference\n\n### `localdocs add <url>`\n\nCrawls and indexes a documentation site. Scoped to the path you provide - `localdocs add https://docs.example.com/api` only indexes `/api/*`, not the entire site.\n\nRe-running on an already-indexed URL refreshes the content. Source ID stays stable so nothing breaks.\n\n---\n\n### `localdocs search \"<query>\"`\n\nSearch all indexed sources with natural language.\n\n```bash\nlocaldocs search \"how do I manage state\"\nlocaldocs search \"useEffect dependency array\"\nlocaldocs search \"how do I verify webhook signatures\"\n```\n\nSearch a specific source with `-s`:\n```bash\nlocaldocs search \"how do I manage state\" -s react-dev-learn\n```\n\nScoped search is more reliable when you have multiple unrelated sources indexed.\n\n---\n\n### `localdocs list`\n\nShow all indexed sources - source ID, URL, chunk count, and when indexed.\n\n```bash\nlocaldocs list\n\n# 2 source(s) indexed:\n#\n#   react-dev-learn\n#     url:     https://react.dev/learn\n#     chunks:  563\n#     indexed: 30/04/2026, 2:48:48 am\n```\n\nThe source ID is what you pass to `-s` for scoped search.\n\n---\n\n### `localdocs tree <sourceId>`\n\nPrint the section tree for a source - the structure the LLM uses to narrow searches.\n\n```bash\nlocaldocs tree react-dev-learn\n```\n\n---\n\n### `localdocs remove <sourceId>`\n\nRemove a source and all its data - vectors, tree, registry entry.\n\n---\n\n### `localdocs cache`\n\nManage the reasoning cache. localdocs caches which tree nodes the LLM picks for each query — repeat and similar searches skip the LLM entirely and return instantly.\n\n```bash\nlocaldocs cache stats                      # show entry count per source\nlocaldocs cache stats docs-cronofy-com     # show for one source\nlocaldocs cache clear                      # clear all caches\nlocaldocs cache clear docs-cronofy-com     # clear one source's cache\n```\n\nThe cache is cleared automatically when you re-index a source. Clear it manually if search results feel stale.\n\n---\n\n### `localdocs check`\n\nVerify Ollama is running and required models are pulled. Run this first if anything seems broken.\n\n---\n\n### `localdocs config`\n\n```bash\nlocaldocs config show\nlocaldocs config set chatModel gemma4:26b\n```\n\nThe chat model handles tree reasoning and reranking. Default is `phi4-mini`. Any model pulled in Ollama works - larger models improve search quality, smaller models are faster.\n\nThe embedding model is fixed as `nomic-embed-text`. It is specifically optimised for retrieval and changing it would invalidate all stored vectors.\n\n---\n\n## MCP Server\n\nlocaldocs runs as an MCP server so any MCP-compatible client (Claude Code, Cursor, Windsurf, Codex, or any other) can search your indexed docs as a tool while you code.\n\nAdd this to your MCP client's config:\n```json\n{\n  \"localdocs\": {\n    \"command\": \"localdocs\",\n    \"args\": [\"serve\"]\n  }\n}\n```\n\nThe server launches automatically when your client starts and stays running for the session.\n\nAvailable tools: `search`, `add`, `list`, `tree`, `remove`, `check`, `clear_cache`, `how_to_use`\n\nThe `how_to_use` tool returns best practices for agents — when to scope URLs, how to handle terminology mismatches, how the cache works, and how to debug bad results. Call it once when getting started.\n\n---\n\n## macOS app (experimental)\n\nA native SwiftUI window for searching your indexed docs, in `mac/`. Wraps the CLI — same engine, native UI.\n\nRequirements: macOS 13+, Swift toolchain (ships with Xcode or Command Line Tools), `localdocs` on your `PATH`, Ollama running.\n\n```bash\ncd mac\nswift run\n```\n\nA search window opens — type a query, hit return, click a result to open the source URL in your browser. Cmd+Q to quit.\n\n---\n\n## Model selection\n\nlocaldocs uses two models — one for embeddings (fixed) and one for reasoning (configurable).\n\n**Embedding model:** `nomic-embed-text` — fixed, do not change. It's specifically optimised for retrieval and all stored vectors depend on it.\n\n**Chat model:** handles tree navigation and reranking. Default is `phi4-mini`.\n\nTested 10+ models for this task. Key findings:\n\n| Model | Size | Quality | Speed | Notes |\n|---|---|---|---|---|\n| `phi4-mini` | 2.5GB | Good | Fast | Default. Best balance for most use cases. |\n| `llama3.2` | 2GB | Acceptable | Fastest | Good fallback if phi4-mini isn't available |\n| `qwen2.5:14b` | 9GB | Good | Slow | Marginally better on large sites |\n| `gemma4:26b` | 17GB | Excellent | Very slow | Best quality but ~5 min per cold search |\n| `mistral:7b` | 4.4GB | Poor | Medium | Not recommended — hallucinates node IDs |\n| `deepseek-coder:6.7b` | 3.8GB | Poor | Medium | Not recommended — worst accuracy tested |\n\nSwitch models any time:\n```bash\nlocaldocs config set chatModel gemma4:26b\n```\n\n**Important:** the first search on a site is slow (the LLM reads the full page tree). Subsequent searches on the same site are fast thanks to the semantic cache — the LLM result is reused for similar queries.\n\n---\n\n## Tips\n\n**Indexing**\n- Sites with a `sitemap.xml` index most reliably and completely. Check at `<domain>/sitemap.xml` before indexing.\n- Scope your index to the relevant path: `localdocs add https://docs.example.com/api` only indexes `/api/*`.\n- JavaScript-rendered sites are handled automatically via a Playwright fallback — no extra setup needed.\n- Re-index any time with `localdocs add <url>` to pick up new content. The source ID stays stable.\n\n**Searching**\n- Always use `-s <sourceId>` when you have multiple sources — scoped search is significantly more reliable.\n- If results feel wrong, try rephrasing. \"OAuth flow\" and \"how do I authorize a user\" may route to different tree nodes.\n- Run `localdocs cache clear <sourceId>` after rephrasing to force fresh LLM reasoning on the next search.\n- `localdocs cache stats` shows how many queries are cached per source.\n\n**Performance**\n- First search on a site: ~5-15s (LLM reads tree, caches result).\n- Repeat or similar searches: ~2-3s (cache hit, no LLM call).\n- The cache is per-source and cleared automatically on re-index.\n- Larger models improve cold-search quality but the cache means you only pay the cost once per unique query.\n\n---\n\n## Known limitations\n\n**Tree navigation on large sites**\n\nlocaldocs scopes search by asking a local LLM to read a list of all page names and pick the relevant ones. For small sites (under ~150 pages) this works reliably. For large sites (300+ pages), small models (under ~20B parameters) can pick the wrong section, especially when the site uses product-specific naming that doesn't match common terminology.\n\nExamples of tricky cases tested:\n- \"OAuth flow\" → page is called \"Individual Connect\" (Cronofy's name for OAuth)\n- \"serverless functions\" → page is called \"Edge Functions\" (Supabase's name)\n- \"charge a customer\" → page is called \"PaymentIntent\" (Stripe's abstraction)\n\n**Workarounds:**\n- Use a larger model: `localdocs config set chatModel gemma4:26b` — 26B+ models handle this well\n- Rephrase to match the site's own terminology\n- The semantic cache means once a query routes correctly, similar queries reuse the result\n\n**JS-rendered sites**\n\nSites that render content via JavaScript are crawled with a Playwright fallback. This works for most sites but may miss pages on heavily dynamic sites.\n\n---\n\n## Data storage\n\n```\n~/.localdocs/\n├── sources.json          # registry of indexed sources\n├── config.json           # config (chatModel etc.)\n├── db/                   # LanceDB vector + BM25 indexes\n└── sources/<id>/\n    ├── tree.json         # section tree per source\n    └── reasoning-cache.json  # cached LLM tree reasoning results\n```\n","readmeFilename":"README.md"}