{"_id":"@bodhi-ventures/aiocs","_rev":"13-0b8295b5a75a2ab6d0a57cff0b0cd471","name":"@bodhi-ventures/aiocs","dist-tags":{"latest":"0.6.1"},"versions":{"0.1.0":{"name":"@bodhi-ventures/aiocs","version":"0.1.0","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.1.0","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"9f64d25a8c0959c4a78ddb6ff1288d7bf9459d22","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.1.0.tgz","fileCount":19,"integrity":"sha512-R1/lqtabkO7nILQ3rY963FY8iXXFBO/Szngw9M02AxiH8rNjEoVWD5nv78ubdS8LwKS5izgclF0kD1ecMGNRDw==","signatures":[{"sig":"MEUCIQCWqAZRJZGf7IKLjNLbLjJx71ohVSnzXfkjgRuMBFUaDQIgR57gSu+rTUJ9L/qwHbLjwJVwV8FD8ja/gauLALvzelc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256304},"type":"module","engines":{"node":">=22"},"gitHead":"5861248a8029ab37e5fc542d89f3aa3cce8f3a06","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.4","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.1.12","yaml":"^2.8.1","jsdom":"^27.0.1","turndown":"^7.2.1","commander":"^14.0.1","playwright":"^1.57.0","better-sqlite3":"^12.4.1","turndown-plugin-gfm":"^1.0.2","@mozilla/readability":"^0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"^1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"^4.20.6","tsup":"^8.5.0","execa":"^9.6.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.7.2","@types/jsdom":"^21.1.7","@types/turndown":"^5.0.5","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.1.0_1774817694473_0.27138663795434836","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bodhi-ventures/aiocs","version":"0.1.1","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.1.1","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"26a8de9c7632afac862d798f8c3c4a01965027d2","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.1.1.tgz","fileCount":15,"integrity":"sha512-/sbg/HgsDJUg6/tgmGfzn6vtBEt4g+NCHdxHqjjuRxYM4IwTxPqv84KOQPe8so3AWECI0hkWKSRgE4iFBMhJAg==","signatures":[{"sig":"MEMCIE1B3HJPNJwUgyoQlx7/ASOjqr/uRgLXMsNKSVtbgbEMAh9J+3PNAieTVw35BOhT04gqVfUXp19uusuhYAyQ1Nc+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":254789},"type":"module","engines":{"node":">=22"},"gitHead":"c571daaf6dee0e401cd6d5fa8335e99969fad854","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.4","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.1.12","yaml":"^2.8.1","jsdom":"^27.0.1","turndown":"^7.2.1","commander":"^14.0.1","playwright":"^1.57.0","better-sqlite3":"^12.4.1","turndown-plugin-gfm":"^1.0.2","@mozilla/readability":"^0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"^1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"^4.20.6","tsup":"^8.5.0","execa":"^9.6.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.7.2","@types/jsdom":"^21.1.7","@types/turndown":"^5.0.5","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.1.1_1774823987953_0.5904452997717489","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bodhi-ventures/aiocs","version":"0.1.2","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.1.2","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"4ffe896599adf8d6766b49924a4ea79a5df02d8f","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.1.2.tgz","fileCount":14,"integrity":"sha512-VkdONXFu0dlNDvNJcgunY3HUk/sFXGeraw7OlnxfbbZAKT4NOQIiZuuSYVTRZdjy6/jfPnZho+99jr1zmOWq6w==","signatures":[{"sig":"MEUCIQCgKxhhrl7103RZnfz9WOWtHBxt914gVnVZwjePvmkKTQIgEHxfeUfnrYLZz9OZ7EIpC8h7qJGUME6627a2MEf4dnA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256807},"type":"module","engines":{"node":">=22"},"gitHead":"d8aec4b1845137bf2f98fc2cb2e76cdc3ae2fb4c","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.4","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.1.12","yaml":"^2.8.1","jsdom":"^27.0.1","turndown":"^7.2.1","commander":"^14.0.1","playwright":"^1.57.0","better-sqlite3":"^12.4.1","turndown-plugin-gfm":"^1.0.2","@mozilla/readability":"^0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"^1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"^4.20.6","tsup":"^8.5.0","execa":"^9.6.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.7.2","@types/jsdom":"^21.1.7","@types/turndown":"^5.0.5","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.1.2_1774827516487_0.6827969036595234","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bodhi-ventures/aiocs","version":"0.2.0","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.2.0","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"173e9671b957dab084d2301d10e45a68fab1dc1a","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.2.0.tgz","fileCount":13,"integrity":"sha512-/Vlth5vqt2lMHmwOtFjpSiDPDRFG77Lv4s3IQ5IYN97eyGWtHgMLlBsNT2iUJ7AKlNNSzG44ShKoOHbAllwgOw==","signatures":[{"sig":"MEUCIQCwmGagv8lovX+MjlAUS10CHClC7+MHAukGVw075oeCTgIgDJbN0GOmXDhYkeC8j04mtrmugpsRgzvy4n9YVWsNv9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269788},"type":"module","engines":{"node":">=22"},"gitHead":"560dcd51e475ee2cc64f33d61b435b3489308b22","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.4","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.2.0_1775228311334_0.9073447403756896","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bodhi-ventures/aiocs","version":"0.3.0","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.3.0","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"24673b81abf59edd603ae20fd06c45145a691681","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.3.0.tgz","fileCount":13,"integrity":"sha512-SXvsW9ED7QWePkRpn9I/1eBwbZ6fhAXHOO3oZVfxxAOb7oss2fmw9zYSenU83W2dHZ7VSSROTk3aci3WH00Lwg==","signatures":[{"sig":"MEUCIQCbOhTt4sUKTTtv2ASryAcXsFVIZt/kOUdir2NjDtaHxgIgRPFetZdZK9BVK7SioKM5q6F55kLtCu3ESEVYKIEv5x4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":506664},"type":"module","engines":{"node":">=22"},"gitHead":"a62f889ca83eafdebcddb751f9fd61ad604fce72","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","csv-parse":"6.2.1","pdf-parse":"2.4.5","playwright":"1.57.0","@lmstudio/sdk":"1.5.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.3.0_1775296159428_0.2130749100974778","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bodhi-ventures/aiocs","version":"0.3.1","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.3.1","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"58ec4bc6aae0114254716678d740897a6f3c4f39","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.3.1.tgz","fileCount":13,"integrity":"sha512-9EeuS2oN0ymjGKA4Yixs5evKHSGgWtHv6/U5GPizA8BTJ22d4zCY9gydVQMbsdBJGqPCKwJV5lZ5UaFOR+eaRg==","signatures":[{"sig":"MEUCIQCy7A6tVCy+3Ou0532pcEOxvCwg2hObUU7V6fXjZZnEBwIgEwWcUFMJLUa1d6CRrYCyMPfHghf4VraOXNd4CdUrLtY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":510052},"type":"module","engines":{"node":">=22"},"gitHead":"0387a5d53e9e28e39c779ee019914f5b17720089","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","csv-parse":"6.2.1","pdf-parse":"2.4.5","playwright":"1.57.0","@lmstudio/sdk":"1.5.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.3.1_1775297550022_0.5631126713618881","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bodhi-ventures/aiocs","version":"0.4.0","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.4.0","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"docs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"30b111101b7339950be08b2a65aa0b046ce4ec21","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.4.0.tgz","fileCount":13,"integrity":"sha512-uvHEUALzM1ZEc1vbLU6NzVSG7yeORMZgo0WJ6wFKT3XKkWMETC9O+OblFnifOznshXwQE0tVa3aY9qlZ0WlAFA==","signatures":[{"sig":"MEYCIQDNV5mzLZ85RWu4AQUC5CGcLJ26D3PYTqDRpf7ZqIX80gIhAM5XfrO5/qsbiiNffL0XA6zfhwLZJKMx66Y2RekwGWLJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269788},"type":"module","engines":{"node":">=22"},"gitHead":"ada286ae6db4afb4c69aea314a36c160676f1f72","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.4.0_1775649388800_0.2489384356317912","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bodhi-ventures/aiocs","version":"0.5.0","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.5.0","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"aiocs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"c60887cb7327c524d8c4936ba31119f719c6177b","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.5.0.tgz","fileCount":13,"integrity":"sha512-lOyfytoR8Jsbk37/1iktTk5Sr5++fQSNkJ9WrxEDn9oeYgzc1gufk3wfdRZUSYEZ8YFHshaGKkzXxr9Rsp5Bkw==","signatures":[{"sig":"MEQCIGABW7JxHq/v02UsDGxO1e39DUP0RWDAI77H2h9+LNOxAiB5i2t/QKyrYzCg01mk8inFVoz/GSLZdvIkNWjlEKIhLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269906},"type":"module","engines":{"node":">=22"},"gitHead":"34e83b7ac0893c3054984ea0baa9fa8163201969","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.5.0_1775653778606_0.8540224965848053","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@bodhi-ventures/aiocs","version":"0.5.1","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.5.1","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"aiocs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"a38f68b1ebcc9c8735abb91f83e3c545fdbe6b1a","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.5.1.tgz","fileCount":13,"integrity":"sha512-+j7QPv67EPqr9xKlUnRP2L0ew3fZiWErLBA8DPLzSRRxt0bbP6b8BGSNLztRCCCHGhNPsRLhB2zo5tdretUvrw==","signatures":[{"sig":"MEUCIQCv7XEHWnYEC+ugqkz5CJd2W8kotGJp7bdP3/dHVaeIAAIgI75vUH0eaX8A0WbQhnexWqaGr+SZKjPG7E4NOCYwdbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269889},"type":"module","engines":{"node":">=22"},"gitHead":"cd325a567a6eaf63862a5e1276b8dabd07f41657","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.5.1_1775656232461_0.4507903074394386","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@bodhi-ventures/aiocs","version":"0.5.2","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.5.2","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"aiocs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"d9e4b31f95d3ead85a6a85eeb9f0b480ecf66887","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.5.2.tgz","fileCount":13,"integrity":"sha512-tmjgspwpPQ6L76NFDZbDA4GcGhS27sQPQBpyoIOcZ8JMk7IeCFwU55bC/ZdeF9n35av3eaQDGmPRZENwpZVjBQ==","signatures":[{"sig":"MEYCIQDIvgJfp2sKVSn2d2ZneS6oDxfBu5VaA8VavmEIt13obwIhAL6XyidNQ1qJOTXdgiyChxigeHsaDfbYfiZ3q7bIXpvo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":270183},"type":"module","engines":{"node":">=22"},"gitHead":"3f74072dc4e15527e72da8e1d24e717d98023e19","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.5.2_1775663634817_0.9560867800493529","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@bodhi-ventures/aiocs","version":"0.5.3","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.5.3","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"aiocs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"e0e3fa4304a42e0a29ff380f448a269049a875fb","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.5.3.tgz","fileCount":13,"integrity":"sha512-55F2tZOQtwmChF11AQXUKlhua8w6/ckx336rkAoBWa6jqeGDtpv6ST047yb+TqrIk0rqnLeai25BPs2LeFF1cQ==","signatures":[{"sig":"MEUCIA+gukPJ6xadrBfwhoFpJttmGpplfAUI3IH1I8yZ33qtAiEAliTFsu7kb6E7MTGZMz147R5Q7ozLR/tQCk7k16+/zd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":270183},"type":"module","engines":{"node":">=22"},"gitHead":"d2b292a3cf216739f7c62c140b3c8c9d77eda558","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.5.3_1775663903494_0.20626107702133778","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bodhi-ventures/aiocs","version":"0.6.0","keywords":["ai","docs","search","mcp","cli"],"license":"MIT","_id":"@bodhi-ventures/aiocs@0.6.0","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"bin":{"aiocs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"dist":{"shasum":"b17b91a5a7452e72901acb7340acbec3b92865a7","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.6.0.tgz","fileCount":13,"integrity":"sha512-PP8SBUfZyL1Dp3jnUnxcw8Bwlr8G0QlEoC7/rR4VJZK++nvKJ3vKSu0U5lfkhpeBR5TRFn0oidf8z3OG6NmKCQ==","signatures":[{"sig":"MEYCIQDWJnqYCKE0XwnP/Qt8aK5R9PYqUt7Wy8K1ejNlqnVDTQIhANlSkowrkgx1eB9Mr/ue5Ux2Xm9d3QrZRzMDyaXqtlIA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":323294},"type":"module","engines":{"node":">=22"},"gitHead":"35e7705632225bf17f89b6b8544086295bf8e0cb","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup --config tsup.config.ts","dev:mcp":"tsx src/mcp-server.ts","test:watch":"vitest"},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"repository":{"url":"git+https://github.com/Bodhi-Ventures/aiocs.git","type":"git"},"_npmVersion":"10.9.7","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"4.1.12","yaml":"2.8.1","jsdom":"27.0.1","turndown":"7.2.1","commander":"14.0.1","playwright":"1.57.0","better-sqlite3":"12.4.1","turndown-plugin-gfm":"1.0.2","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","@modelcontextprotocol/sdk":"1.28.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"tsx":"4.20.6","tsup":"8.5.0","execa":"9.6.0","vitest":"3.2.4","typescript":"5.9.3","@types/node":"24.7.2","@types/jsdom":"21.1.7","@types/turndown":"5.0.5","@types/better-sqlite3":"7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/aiocs_0.6.0_1775684163122_0.5767082396924283","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@bodhi-ventures/aiocs","version":"0.6.1","license":"MIT","type":"module","description":"Local-only documentation store, fetcher, and search CLI for AI agents.","keywords":["ai","docs","search","mcp","cli"],"homepage":"https://github.com/Bodhi-Ventures/aiocs","bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"repository":{"type":"git","url":"git+https://github.com/Bodhi-Ventures/aiocs.git"},"publishConfig":{"access":"public","provenance":true},"packageManager":"pnpm@9.15.9","bin":{"aiocs":"dist/cli.js","aiocs-mcp":"dist/mcp-server.js"},"engines":{"node":">=22"},"scripts":{"build":"tsup --config tsup.config.ts","dev":"tsx src/cli.ts","dev:mcp":"tsx src/mcp-server.ts","lint":"tsc --noEmit","test":"vitest run","test:watch":"vitest"},"dependencies":{"@modelcontextprotocol/sdk":"1.28.0","@mozilla/readability":"0.6.0","@qdrant/js-client-rest":"1.17.0","better-sqlite3":"12.4.1","commander":"14.0.1","jsdom":"27.0.1","playwright":"1.57.0","turndown":"7.2.1","turndown-plugin-gfm":"1.0.2","yaml":"2.8.1","zod":"4.1.12"},"devDependencies":{"@types/better-sqlite3":"7.6.13","@types/jsdom":"21.1.7","@types/node":"24.7.2","@types/turndown":"5.0.5","execa":"9.6.0","tsup":"8.5.0","tsx":"4.20.6","typescript":"5.9.3","vitest":"3.2.4"},"_id":"@bodhi-ventures/aiocs@0.6.1","gitHead":"b2240f43dab7429217cbaa14927d1bdbe26bbe0b","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-OlUtuwcPSLEEqvPgy9JNcn/0bJa5A+OZNBpjNVxZfdJq5Z76yP+jPRBnRfXc0cizbO6euyLWeMWYpsPiQ+vhJA==","shasum":"8ff0f267ab9bf4cf4ee3d4d33eb0a8e10d71936d","tarball":"https://registry.npmjs.org/@bodhi-ventures/aiocs/-/aiocs-0.6.1.tgz","fileCount":13,"unpackedSize":330414,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bodhi-ventures%2faiocs@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCXNojObGLqKussqPi3Gb06vqGlxEwr6zACJRL84X033wIgJfDa888gBxyEIIi2IGB48wCw7wiX19tPelc5EDOtjNw="}]},"_npmUser":{"name":"drptbl","email":"jakub.mucha@icloud.com"},"directories":{},"maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aiocs_0.6.1_1775688206456_0.2946606500506572"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-29T20:54:54.412Z","modified":"2026-04-08T22:43:26.912Z","0.1.0":"2026-03-29T20:54:54.605Z","0.1.1":"2026-03-29T22:39:48.111Z","0.1.2":"2026-03-29T23:38:36.646Z","0.2.0":"2026-04-03T14:58:31.484Z","0.3.0":"2026-04-04T09:49:19.584Z","0.3.1":"2026-04-04T10:12:30.180Z","0.4.0":"2026-04-08T11:56:29.076Z","0.5.0":"2026-04-08T13:09:38.750Z","0.5.1":"2026-04-08T13:50:32.610Z","0.5.2":"2026-04-08T15:53:54.955Z","0.5.3":"2026-04-08T15:58:23.646Z","0.6.0":"2026-04-08T21:36:03.286Z","0.6.1":"2026-04-08T22:43:26.604Z"},"bugs":{"url":"https://github.com/Bodhi-Ventures/aiocs/issues"},"license":"MIT","homepage":"https://github.com/Bodhi-Ventures/aiocs","keywords":["ai","docs","search","mcp","cli"],"repository":{"type":"git","url":"git+https://github.com/Bodhi-Ventures/aiocs.git"},"description":"Local-only documentation store, fetcher, and search CLI for AI agents.","maintainers":[{"name":"drptbl","email":"jakub.mucha@icloud.com"}],"readme":"# aiocs\n\nLocal-only documentation fetch, versioning, and search CLI for AI agents.\n\n## What it does\n\n- fetches docs from websites with Playwright\n- snapshots curated external git repositories as shared local reference sources\n- supports authenticated sources via environment-backed headers and cookies\n- runs lightweight canaries to detect source drift before full refreshes\n- normalizes them into Markdown\n- stores immutable local snapshots in a shared catalog\n- diffs snapshots to show what changed between fetches\n- indexes heading-aware chunks in SQLite FTS5\n- adds optional hybrid retrieval with local Ollama embeddings and a dedicated Qdrant vector index\n- links docs sources to local projects for scoped search\n- exports and imports manifest-backed backups for `~/.aiocs`\n\nAll state is local. By default, data lives under `~/.aiocs`:\n\n- data: `~/.aiocs/data`\n- config: `~/.aiocs/config`\n\nFor testing or local overrides, set:\n\n- `AIOCS_DATA_DIR`\n- `AIOCS_CONFIG_DIR`\n\n## Install\n\n```bash\nnpm install -g @bodhi-ventures/aiocs\naiocs --version\naiocs --help\ncommand -v aiocs-mcp\n```\n\nZero-install fallback:\n\n```bash\nnpx -y -p @bodhi-ventures/aiocs aiocs --version\nnpx -y -p @bodhi-ventures/aiocs aiocs-mcp\n```\n\nFor repository development only:\n\n```bash\npnpm install\npnpm build\npnpm dev -- --help\npnpm dev:mcp\n```\n\nFor AI agents, prefer the root-level `--json` flag for one-shot commands:\n\n```bash\naiocs --json version\naiocs --json doctor\naiocs --json init --no-fetch\naiocs --json source list\naiocs --json source describe hyperliquid\naiocs --json page list hyperliquid --query \"auth\"\naiocs --json search \"maker flow\" --source hyperliquid\naiocs --json retrieve \"where is maker flow documented\" --source hyperliquid --mode lexical\naiocs --json show 42\n```\n\n`--json` emits exactly one JSON document to stdout with this envelope:\n\n```json\n{\n  \"ok\": true,\n  \"command\": \"search\",\n  \"data\": {\n    \"total\": 0,\n    \"limit\": 20,\n    \"offset\": 0,\n    \"hasMore\": false,\n    \"results\": []\n  }\n}\n```\n\nFailures still exit with status `1`, but emit a JSON error document instead of human text:\n\n```json\n{\n  \"ok\": false,\n  \"command\": \"show\",\n  \"error\": {\n    \"code\": \"CHUNK_NOT_FOUND\",\n    \"message\": \"Chunk 42 not found\"\n  }\n}\n```\n\nThe full stable JSON contract lives in [docs/json-contract.md](./docs/json-contract.md).\n\n## Release\n\nStable releases are tag-driven. Bump `package.json.version`, commit the change, then create and push a matching stable tag:\n\n```bash\ngit add package.json\ngit commit -m \"release: vX.Y.Z\"\ngit tag vX.Y.Z\ngit push origin main\ngit push origin vX.Y.Z\n```\n\nGitHub Actions publishes `@bodhi-ventures/aiocs` publicly to npm and creates the GitHub release only from pushed tags matching `vX.Y.Z`. The workflow validates that the tag exactly matches `package.json.version` and is safe to rerun after partial success.\n\n## Codex integration\n\nFor Codex-first setup, automatic-use guidance, MCP recommendations, and agent definitions, see [docs/codex-integration.md](./docs/codex-integration.md).\n\nCanonical Codex setup:\n\n- register `aiocs-mcp` in `~/.codex/config.toml`\n- link `skills/aiocs` into `~/.codex/skills/aiocs`\n- link `skills/aiocs-curation` into `~/.codex/skills/aiocs-curation`\n- keep the optional specialist subagent linked only as a fallback for heavier docs workflows\n\n## Managed sources\n\nThe open-source repo bundles both web and git sources in `sources/`:\n\n- `hyperliquid` for the public docs site\n- `nktkas-hyperliquid` for the `nktkas/hyperliquid` GitHub repository\n\nAdditional machine-local source specs belong in `~/.aiocs/sources`.\n\n`aiocs init` bootstraps both managed locations, so source behavior is the same regardless of\nwhether a spec lives in the repo or in `~/.aiocs/sources`.\n\nBootstrap managed sources in one command:\n\n```bash\naiocs init --no-fetch\naiocs --json init --no-fetch\n```\n\nValidate the machine before bootstrapping:\n\n```bash\naiocs doctor\naiocs --json doctor\n```\n\n## Workflow\n\nRegister a source:\n\n```bash\nmkdir -p ~/.aiocs/sources\ncp /path/to/source.yaml ~/.aiocs/sources/my-source.yaml\naiocs source upsert ~/.aiocs/sources/my-source.yaml\naiocs source upsert /path/to/source.yaml\naiocs source list\n```\n\nFetch and snapshot docs:\n\n```bash\naiocs refresh due hyperliquid\naiocs snapshot list hyperliquid\naiocs refresh due\n```\n\nForce fetch remains available for explicit maintenance:\n\n```bash\naiocs fetch hyperliquid\naiocs fetch all\n```\n\nLink docs to a local project:\n\n```bash\naiocs project link /absolute/path/to/project hyperliquid lighter\naiocs project unlink /absolute/path/to/project lighter\n```\n\nSearch and inspect results:\n\n```bash\naiocs source describe hyperliquid\naiocs source context show hyperliquid\naiocs page list hyperliquid --query \"auth\"\naiocs page show hyperliquid --url \"https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api\"\naiocs search \"maker flow\" --source hyperliquid\naiocs search \"WebSocketTransport\" --source nktkas-hyperliquid --path \"src/**\" --language typescript\naiocs search \"maker flow\" --source hyperliquid --mode lexical\naiocs search \"maker flow\" --source hyperliquid --mode hybrid\naiocs search \"maker flow\" --source hyperliquid --mode semantic\naiocs search \"maker flow\" --all\naiocs search \"maker flow\" --source hyperliquid --limit 5 --offset 0\naiocs show 42\naiocs canary hyperliquid\naiocs diff hyperliquid\naiocs embeddings status\naiocs embeddings backfill all\naiocs embeddings run\naiocs backup export /absolute/path/to/backup\naiocs verify coverage hyperliquid /absolute/path/to/reference.md\n```\n\nAwareness and learning flow:\n\n```bash\naiocs source context upsert hyperliquid ~/.aiocs/source-context/hyperliquid.yaml\naiocs learning save --source hyperliquid --kind discovery --intent \"maker flow\" --page-url \"https://...\"\naiocs learning list --source hyperliquid\naiocs retrieve \"where is maker flow documented\" --source hyperliquid --mode lexical\n```\n\nWhen `aiocs search` runs inside a linked project, it automatically scopes to that project's linked sources unless `--source` or `--all` is provided.\n\nFor agents, the intended decision order is:\n\n1. check `source list`, `source describe`, or `page list` first\n2. if the source exists and is due, run `refresh due <source-id>`\n3. use `search` to shortlist candidates, then `retrieve` or `page show` to read the full page before answering\n4. if the source is missing but worth reusing, add a spec under `~/.aiocs/sources`, then upsert and refresh only that source\n5. save durable discoveries or negative paths with `learning save`\n6. avoid `fetch all` unless the user explicitly asks or the daemon is doing maintenance\n\n### Git repo sources\n\n`aiocs` supports first-class `kind: git` sources for curated external repositories that should be\nreused across multiple local projects.\n\nExample:\n\n```yaml\nkind: git\nid: nktkas-hyperliquid\nlabel: nktkas/hyperliquid Repo\nrepo:\n  url: https://github.com/nktkas/hyperliquid.git\n  ref: main\n  include:\n    - README.md\n    - docs/**\n    - src/**\n  exclude:\n    - .github/**\n    - dist/**\nschedule:\n  everyHours: 24\n```\n\nGit source snapshots are commit-based, stored under the shared local catalog, and searchable with\nthe same project linking, diffing, canary, and hybrid search flows as website docs.\n\n### Hybrid search\n\n`aiocs` keeps SQLite FTS5/BM25 as the canonical lexical index and adds an optional hybrid layer:\n\n- `--mode lexical`: lexical search only\n- `--mode hybrid`: BM25 plus vector recall fused with reciprocal-rank fusion\n- `--mode semantic`: vector-only recall over the latest indexed snapshots\n- `--mode auto`: default; uses hybrid only when the vector layer is healthy and current for the requested scope\n\nVector state is derived from the catalog, not a second source of truth. If Ollama or Qdrant is unavailable, `auto` degrades back to lexical search.\n\n### Authenticated sources\n\nSource specs can reference secrets from the environment without storing raw values in YAML:\n\n```yaml\nauth:\n  headers:\n    - name: authorization\n      valueFromEnv: AIOCS_DOCS_TOKEN\n      hosts:\n        - docs.example.com\n      include:\n        - https://docs.example.com/private/**\n  cookies:\n    - name: session\n      valueFromEnv: AIOCS_DOCS_SESSION\n      domain: docs.example.com\n      path: /\n```\n\nHeader secrets are scoped per entry. If `hosts` is omitted, the header applies to the source `allowedHosts`; `include` can further narrow it to specific URL patterns.\n\n### Canary checks\n\nCanaries execute the real extraction strategy without creating snapshots. They are intended to catch selector/copy-markdown drift before a full refresh degrades silently.\n\n```yaml\ncanary:\n  everyHours: 6\n  checks:\n    - url: https://docs.example.com/start\n      expectedTitle: Private Docs Start\n      expectedText: Secret market structure docs\n      minMarkdownLength: 40\n```\n\nIf `canary` is omitted, `aiocs` defaults to a lightweight canary against the first `startUrl`.\n\n### Backups\n\n`backup export` creates a manifest-backed directory snapshot. The catalog database is exported with SQLite's native backup mechanism so the backup stays consistent even if `aiocs` is reading or writing the catalog while the export runs.\n\nBackups intentionally include only the canonical `~/.aiocs` data/config state. The Qdrant vector index is treated as derived state and is rebuilt from the restored catalog after `backup import`.\n\n## JSON command reference\n\nAll one-shot commands support `--json`:\n\n- `version`\n- `init`\n- `doctor`\n- `source upsert`\n- `source list`\n- `fetch`\n- `canary`\n- `refresh due`\n- `snapshot list`\n- `diff`\n- `project link`\n- `project unlink`\n- `backup export`\n- `backup import`\n- `embeddings status`\n- `embeddings backfill`\n- `embeddings clear`\n- `embeddings run`\n- `search`\n- `verify coverage`\n- `show`\n\nRepresentative examples:\n\n```bash\naiocs --json doctor\naiocs --json init --no-fetch\naiocs --json source list\naiocs --json source upsert sources/hyperliquid.yaml\naiocs --json refresh due hyperliquid\naiocs --json canary hyperliquid\naiocs --json refresh due\naiocs --json diff hyperliquid\naiocs --json embeddings status\naiocs --json embeddings backfill all\naiocs --json embeddings clear hyperliquid\naiocs --json embeddings run\naiocs --json project link /absolute/path/to/project hyperliquid lighter\naiocs --json snapshot list hyperliquid\naiocs --json backup export /absolute/path/to/backup\naiocs --json verify coverage hyperliquid /absolute/path/to/reference.md\n```\n\nFor multi-result commands like `fetch`, `refresh due`, and `search`, `data` contains structured collections rather than line-by-line output:\n\n```json\n{\n  \"ok\": true,\n  \"command\": \"search\",\n  \"data\": {\n    \"query\": \"maker flow\",\n    \"total\": 42,\n    \"limit\": 20,\n    \"offset\": 0,\n    \"hasMore\": true,\n    \"modeRequested\": \"auto\",\n    \"modeUsed\": \"hybrid\",\n    \"results\": []\n  }\n}\n```\n\n## Daemon\n\n`aiocs` ships a first-class long-running refresh process:\n\n```bash\naiocs daemon\n```\n\nThe daemon bootstraps source specs from the configured directories, refreshes due sources, sleeps for the configured interval, and repeats.\nConfigured source spec directories are treated as the daemon’s source of truth:\n\n- if a managed source spec changes, the source is made due immediately in the same daemon cycle\n- if a managed source spec is removed from disk, the source is removed from the catalog on the next bootstrap\n- if `AIOCS_SOURCE_SPEC_DIRS` is explicitly set but resolves to missing or empty directories, the daemon fails fast instead of silently idling\n- due canaries run independently from full fetch schedules so drift is caught earlier than the next full snapshot refresh\n- daemon heartbeat state is persisted in the local catalog and surfaced through `aiocs doctor`\n- queued embedding jobs are processed in the same daemon cycle after fetches complete\n\nEnvironment variables:\n\n- `AIOCS_DAEMON_INTERVAL_MINUTES`\n  - positive integer, defaults to `60`\n- `AIOCS_DAEMON_FETCH_ON_START`\n  - `true` by default\n  - accepted values: `true`, `false`, `1`, `0`, `yes`, `no`, `on`, `off`\n- `AIOCS_SOURCE_SPEC_DIRS`\n  - comma-separated list of source spec directories\n  - defaults to `~/.aiocs/sources`, the bundled `sources/` path, plus `/app/sources` inside Docker when present\n\nFor local agents, the daemon keeps the shared catalog under `~/.aiocs` warm while agents continue to use the normal CLI with `--json`.\n\n### Daemon JSON mode\n\n`aiocs daemon --json` is intentionally different from one-shot commands. Because it is long-running, it emits one JSON event per line:\n\n```bash\naiocs --json daemon\n```\n\nExample event stream:\n\n```json\n{\"type\":\"daemon.started\",\"intervalMinutes\":60,\"fetchOnStart\":true,\"sourceSpecDirs\":[\"/app/sources\"]}\n{\"type\":\"daemon.cycle.started\",\"reason\":\"startup\",\"startedAt\":\"2026-03-26T00:00:00.000Z\"}\n{\"type\":\"daemon.cycle.completed\",\"reason\":\"startup\",\"result\":{\"canaryDueSourceIds\":[],\"dueSourceIds\":[],\"bootstrapped\":{\"processedSpecCount\":5,\"sources\":[]},\"canaried\":[],\"canaryFailed\":[],\"refreshed\":[],\"failed\":[],\"embedded\":[],\"embeddingFailed\":[]}}\n```\n\n## MCP server\n\n`aiocs` also ships an MCP server binary for tool-native agent integrations:\n\n```bash\ncommand -v aiocs-mcp\naiocs-mcp\n```\n\nFor repository development only:\n\n```bash\npnpm dev:mcp\n```\n\nThe MCP server exposes the same shared operations as the CLI without shell parsing:\n\n- `version`\n- `doctor`\n- `init`\n- `source_upsert`\n- `source_list`\n- `canary`\n- `fetch`\n- `refresh_due`\n- `snapshot_list`\n- `diff_snapshots`\n- `project_link`\n- `project_unlink`\n- `embeddings_status`\n- `embeddings_backfill`\n- `embeddings_clear`\n- `embeddings_run`\n- `backup_export`\n- `backup_import`\n- `search`\n- `show`\n- `verify_coverage`\n- `batch`\n\n## Release automation\n\nThe repo ships two GitHub Actions workflows:\n\n- [ci.yml](./.github/workflows/ci.yml): validation for lint, tests, build, pack, and Docker smoke coverage\n- [release.yml](./.github/workflows/release.yml): tag-driven stable release flow that validates the tagged package state, publishes to npm, and creates a GitHub release\n\nThe release workflow is triggered only by pushed stable tags matching `vX.Y.Z` and expects an npm publish token in GitHub repository secrets. The release job is retryable: if `@bodhi-ventures/aiocs@X.Y.Z` already exists on npm or the GitHub release already exists for `vX.Y.Z`, the workflow skips the completed publication step and finishes the remaining one.\n\nSuccessful MCP results use an envelope:\n\n```json\n{\n  \"ok\": true,\n  \"data\": {\n    \"name\": \"@bodhi-ventures/aiocs\",\n    \"version\": \"0.1.1\"\n  }\n}\n```\n\nFailed MCP results use the same machine-readable error shape:\n\n```json\n{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"CHUNK_NOT_FOUND\",\n    \"message\": \"Chunk 42 not found\"\n  }\n}\n```\n\n## Docker\n\nThe repo ships a long-running Docker service for scheduled refreshes.\n\nBuild and start it with:\n\n```bash\ndocker compose up --build -d\n```\n\nThe compose file:\n\n- runs `aiocs daemon` as the container entrypoint\n- bind-mounts `${HOME}/.aiocs` into `/root/.aiocs` so the container shares the same local catalog defaults as the host CLI\n- bind-mounts `./sources` into `/app/sources` so source spec edits are picked up without rebuilding\n- runs a dedicated `aiocs-qdrant` container for vector search\n- points the daemon at host Ollama with `AIOCS_OLLAMA_BASE_URL` (defaults to `http://host.docker.internal:11434` in Compose)\n\nOverride cadence with environment variables when starting compose:\n\n```bash\nAIOCS_DAEMON_INTERVAL_MINUTES=15 docker compose up --build -d\n```\n\n## Source spec shape\n\nEach source spec is YAML or JSON and must define:\n\n- `id`\n- `label`\n- `startUrls`\n- `allowedHosts`\n- `discovery.include`\n- `discovery.exclude`\n- `discovery.maxPages`\n- `extract`\n- `normalize`\n- `schedule.everyHours`\n\nSupported extraction strategies:\n\n- `clipboardButton`\n- `selector`\n- `readability`\n\n## Verification\n\n```bash\npnpm lint\npnpm test\npnpm build\nnpm pack --dry-run\n```\n","readmeFilename":"README.md"}