{"_id":"@alistar.max/coderecall","_rev":"7-9f7fa39890f873208f70cf4070c728da","name":"@alistar.max/coderecall","dist-tags":{"latest":"0.1.9"},"versions":{"0.1.3":{"name":"@alistar.max/coderecall","version":"0.1.3","author":{"name":"alistar.max"},"license":"MIT","_id":"@alistar.max/coderecall@0.1.3","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"homepage":"https://github.com/CodingOX/CodeRecall#readme","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"bin":{"cr":"dist/index.js","coderecall":"dist/index.js"},"dist":{"shasum":"45486e1db981ce064ff8d7e53f00b57bd6d64286","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.3.tgz","fileCount":27,"integrity":"sha512-IbEmaRkZrlGqRkfjP9elPX8pp6n9kMUOrQTSVeW0ZGqh8C3SgK/pTXRBR47D6y4tBnlPvmQ3/onbl3Dsmn9F4w==","signatures":[{"sig":"MEYCIQCYfB+ewZTeMCa6JnbD8rwFPkUZ/zkM5hP1VDkL9GkjHwIhAMxZ8GV9tjYw3OF9AKk0whj5xMA+jJM21cVZCJn+3Iwc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":282911},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"type":"module","engines":{"node":">=20 <24"},"gitHead":"a169acbdcdbb1ab5334a170269321f38f31ba8ed","private":false,"scripts":{"dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/docs-guard.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/test-script-completeness.test.ts","build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","test:runtime":"tsx tests/runtime/registry.test.ts","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3","prepublishOnly":"pnpm test","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","test:install:node24":"node tests/install/node24-smoke.mjs"},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"repository":{"url":"git+https://github.com/CodingOX/CodeRecall.git","type":"git"},"_npmVersion":"11.16.0","description":"A context weaving tool for LLMs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"cac":"^6.7.14","zod":"^4.2.1","fdir":"^6.5.0","pino":"^10.1.0","dotenv":"^17.2.3","ignore":"^7.0.5","chardet":"^2.1.1","p-limit":"^7.2.0","iconv-lite":"^0.7.1","tree-sitter":"^0.25.0","better-sqlite3":"^12.2.0","tree-sitter-go":"0.25.0","@lancedb/lancedb":"^0.22.0","tree-sitter-python":"0.25.0","tree-sitter-javascript":"0.25.0","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^5.78.0","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^24.0.0","@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/coderecall_0.1.3_1780380096788_0.1577834190097689","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alistar.max/coderecall","version":"0.1.4","author":{"name":"alistar.max"},"license":"MIT","_id":"@alistar.max/coderecall@0.1.4","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"homepage":"https://github.com/CodingOX/CodeRecall#readme","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"bin":{"cr":"dist/index.js","coderecall":"dist/index.js"},"dist":{"shasum":"d912b89fb4646966d61878fd0a7f306828a9e1e9","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.4.tgz","fileCount":31,"integrity":"sha512-qbltaH/3OdbLQX+a3MQ+4ASb6TWFFznI8Z2vHByFowk8brGN9qfCHDmUZqbjuTF0V/Fi0iHKWaAfUIegJoh2+g==","signatures":[{"sig":"MEUCIQDQz7YJeAacqPpB+PG18zCccpyAaJyKfrEe5pC5yxjeHgIgci5loHo92umSYXLDRJryjsAtUfz8xtQWAeZrb9zQlS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":293073},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"type":"module","engines":{"node":">=20 <24"},"gitHead":"f903f37aeed64bfa1c7bed7b771e09e39f536fdb","private":false,"scripts":{"dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/docs-guard.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/batch-index-resilience.test.ts && tsx tests/runtime/batch-index-resilience-integration.test.ts && tsx tests/runtime/runtime-resource-governance.test.ts && tsx tests/runtime/test-script-completeness.test.ts","build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","test:runtime":"tsx tests/runtime/registry.test.ts","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3","prepublishOnly":"pnpm test","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","test:install:node24":"node tests/install/node24-smoke.mjs"},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"repository":{"url":"git+https://github.com/CodingOX/CodeRecall.git","type":"git"},"_npmVersion":"11.16.0","description":"A context weaving tool for LLMs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"cac":"^6.7.14","zod":"^4.2.1","fdir":"^6.5.0","pino":"^10.1.0","dotenv":"^17.2.3","ignore":"^7.0.5","chardet":"^2.1.1","p-limit":"^7.2.0","iconv-lite":"^0.7.1","tree-sitter":"^0.25.0","better-sqlite3":"^12.2.0","tree-sitter-go":"0.25.0","@lancedb/lancedb":"^0.22.0","tree-sitter-python":"0.25.0","tree-sitter-javascript":"0.25.0","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^5.78.0","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^24.0.0","@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/coderecall_0.1.4_1780400366328_0.2773112092895731","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@alistar.max/coderecall","version":"0.1.5","author":{"name":"alistar.max"},"license":"MIT","_id":"@alistar.max/coderecall@0.1.5","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"homepage":"https://github.com/CodingOX/CodeRecall#readme","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"bin":{"cr":"dist/index.js","coderecall":"dist/index.js"},"dist":{"shasum":"b1fe5fb6f9d06bcbd48d9dc9ef086b9e95faf5c7","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.5.tgz","fileCount":32,"integrity":"sha512-V1uGhU9C7vBNRbeZaRQK/7EsGW7d52GC3H4uGCTRK0mhDszFnq/eUJ79t7kJKpDuToHxhQyZjEBhexqayWy8Ew==","signatures":[{"sig":"MEYCIQCYmqWox3Rp9sLGyHoxCkreYsLUNufUQlgm2NfEZW8KNgIhAMaAS8/kJV4E3OMhn5ocrWbv5FZ+Jx1GmsH4cwz2qsoF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":309229},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"type":"module","engines":{"node":">=20 <24"},"gitHead":"38dcd0157d4d9e3da64aeeaf67df91cb8fbbd6cf","private":false,"scripts":{"dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/chunking-performance-profile.test.ts && tsx tests/runtime/encoding-read.test.ts && tsx tests/runtime/files-fts-rebuild.test.ts && tsx tests/runtime/batch-index-resilience.test.ts && tsx tests/runtime/batch-index-resilience-integration.test.ts && tsx tests/runtime/runtime-resource-governance.test.ts && tsx tests/runtime/test-script-completeness.test.ts","build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","test:runtime":"tsx tests/runtime/registry.test.ts","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3","prepublishOnly":"pnpm test","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","test:install:node24":"node tests/install/node24-smoke.mjs"},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"repository":{"url":"git+https://github.com/CodingOX/CodeRecall.git","type":"git"},"_npmVersion":"11.16.0","description":"A context weaving tool for LLMs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"cac":"^6.7.14","zod":"^4.2.1","fdir":"^6.5.0","pino":"^10.1.0","dotenv":"^17.2.3","ignore":"^7.0.5","chardet":"^2.1.1","p-limit":"^7.2.0","iconv-lite":"^0.7.1","tree-sitter":"^0.25.0","better-sqlite3":"^12.2.0","tree-sitter-go":"0.25.0","@lancedb/lancedb":"^0.22.0","tree-sitter-python":"0.25.0","tree-sitter-javascript":"0.25.0","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^5.78.0","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^24.0.0","@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/coderecall_0.1.5_1780554622485_0.03717781520095986","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@alistar.max/coderecall","version":"0.1.6","author":{"name":"alistar.max"},"license":"MIT","_id":"@alistar.max/coderecall@0.1.6","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"homepage":"https://github.com/CodingOX/CodeRecall#readme","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"bin":{"cr":"dist/index.js","coderecall":"dist/index.js"},"dist":{"shasum":"b573006e23e63390cddafe3cfdfe16f879bc9028","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.6.tgz","fileCount":32,"integrity":"sha512-H3eOeqxjWMuUkqd00ni+8wft2he5tvp7gWqAqp9jUMQTLTbITwGVcb7cjblYo3U2qnH3grYDJ3/hVBWZnzhb4w==","signatures":[{"sig":"MEUCIQC+MlhnLCQWa1+UUKiW1gVkDtRDB7nnQ9gAwTrr+MstaAIgaIVw4iYLGQKAIKltGu9oNNXTxXBeW1LvR4vL63PPv/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":309184},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"type":"module","engines":{"node":">=20 <24"},"gitHead":"7f98c586d47c2ef0ba2aa35d34dd7905462353cb","private":false,"scripts":{"dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/chunking-performance-profile.test.ts && tsx tests/runtime/encoding-read.test.ts && tsx tests/runtime/files-fts-rebuild.test.ts && tsx tests/runtime/batch-index-resilience.test.ts && tsx tests/runtime/batch-index-resilience-integration.test.ts && tsx tests/runtime/runtime-resource-governance.test.ts && tsx tests/runtime/test-script-completeness.test.ts","build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","test:runtime":"tsx tests/runtime/registry.test.ts","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3","prepublishOnly":"pnpm test","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","test:install:node24":"node tests/install/node24-smoke.mjs"},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"repository":{"url":"git+https://github.com/CodingOX/CodeRecall.git","type":"git"},"_npmVersion":"11.16.0","description":"A context weaving tool for LLMs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"cac":"^6.7.14","zod":"^4.2.1","fdir":"^6.5.0","pino":"^10.1.0","dotenv":"^17.2.3","ignore":"^7.0.5","chardet":"^2.1.1","p-limit":"^7.2.0","iconv-lite":"^0.7.1","tree-sitter":"^0.25.0","better-sqlite3":"^12.2.0","tree-sitter-go":"0.25.0","@lancedb/lancedb":"^0.22.0","tree-sitter-python":"0.25.0","tree-sitter-javascript":"0.25.0","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^5.78.0","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^24.0.0","@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/coderecall_0.1.6_1780589370668_0.7602213989423368","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@alistar.max/coderecall","version":"0.1.7","author":{"name":"alistar.max"},"license":"MIT","_id":"@alistar.max/coderecall@0.1.7","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"homepage":"https://github.com/CodingOX/CodeRecall#readme","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"bin":{"cr":"dist/index.js","coderecall":"dist/index.js"},"dist":{"shasum":"81ff5f1664fe1204ed8244e1cb8ad3adf8d02af2","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.7.tgz","fileCount":32,"integrity":"sha512-nO9U3eCsZkWrnJ3jcTub/EiRaEKA/KX+a8hFw+bxy8CQwlSt//ZyXQAi6Sh5KxZov4OzY//cbi9KjGnpCjZ/Yg==","signatures":[{"sig":"MEUCIQChLJ9MeL178w750cJMnm58rl4RfkzuRtd+pGR7PHWsSAIgLpRYsWBpWK/spdu+QRXPBKbljpLSNV4rKpwc4MWIvgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":311608},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"type":"module","engines":{"node":">=20 <24"},"gitHead":"8e02a3712b40cc22e797d3d7e1cb22498b3ee4ca","private":false,"scripts":{"dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/oversized-chunk-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/chunking-performance-profile.test.ts && tsx tests/runtime/encoding-read.test.ts && tsx tests/runtime/files-fts-rebuild.test.ts && tsx tests/runtime/batch-index-resilience.test.ts && tsx tests/runtime/batch-index-resilience-integration.test.ts && tsx tests/runtime/runtime-resource-governance.test.ts && tsx tests/runtime/test-script-completeness.test.ts","build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","test:runtime":"tsx tests/runtime/registry.test.ts","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3","prepublishOnly":"pnpm test","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","test:install:node24":"node tests/install/node24-smoke.mjs"},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"repository":{"url":"git+https://github.com/CodingOX/CodeRecall.git","type":"git"},"_npmVersion":"11.18.0","description":"AI 代码助手的语义检索引擎 — 混合搜索（向量+FTS）、智能上下文扩展、Token 感知打包，CLI + MCP 双模式","directories":{},"_nodeVersion":"22.23.1","dependencies":{"cac":"^6.7.14","zod":"^4.2.1","fdir":"^6.5.0","pino":"^10.1.0","dotenv":"^17.2.3","ignore":"^7.0.5","chardet":"^2.1.1","p-limit":"^7.2.0","iconv-lite":"^0.7.1","tree-sitter":"^0.25.0","better-sqlite3":"^12.2.0","tree-sitter-go":"0.25.0","@lancedb/lancedb":"^0.22.0","tree-sitter-python":"0.25.0","tree-sitter-javascript":"0.25.0","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^5.78.0","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^24.0.0","@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/coderecall_0.1.7_1783695043116_0.6269481986343624","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@alistar.max/coderecall","version":"0.1.8","author":{"name":"alistar.max"},"license":"MIT","_id":"@alistar.max/coderecall@0.1.8","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"homepage":"https://github.com/CodingOX/CodeRecall#readme","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"bin":{"cr":"dist/index.js","coderecall":"dist/index.js"},"dist":{"shasum":"0d0555972523e5b969a439f6a3bfb4f5f8a05317","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.8.tgz","fileCount":32,"integrity":"sha512-Plax0ntnNUJ+71D3MEdxk7JxyPzL/GbXewEJkdCT4OBnEmcgBAlBwgmljpWKh3QhQ1CRoxIX+Q+vFrNhBaXL2g==","signatures":[{"sig":"MEYCIQCRBtthmc2ypufxhFf+s/PwXjSyGCJtY6Z41ep4Sy4reAIhALm+keRT3mPCEixVhZX5R9MrMtkFyhVd5GOjV6c0CRH0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":312125},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"type":"module","engines":{"node":">=20 <24"},"gitHead":"3de4a55b9c18841b59fedfad7f1e9c1f4508e583","private":false,"scripts":{"dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/oversized-chunk-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/chunking-performance-profile.test.ts && tsx tests/runtime/encoding-read.test.ts && tsx tests/runtime/files-fts-rebuild.test.ts && tsx tests/runtime/batch-index-resilience.test.ts && tsx tests/runtime/batch-index-resilience-integration.test.ts && tsx tests/runtime/runtime-resource-governance.test.ts && tsx tests/runtime/test-script-completeness.test.ts","build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","test:runtime":"tsx tests/runtime/registry.test.ts","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3","prepublishOnly":"pnpm test","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","test:install:node24":"node tests/install/node24-smoke.mjs"},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"repository":{"url":"git+https://github.com/CodingOX/CodeRecall.git","type":"git"},"_npmVersion":"11.18.0","description":"AI 代码助手的语义检索引擎 — 混合搜索（向量+FTS）、智能上下文扩展、Token 感知打包，CLI + MCP 双模式","directories":{},"_nodeVersion":"22.23.1","dependencies":{"cac":"^6.7.14","zod":"^4.2.1","fdir":"^6.5.0","pino":"^10.1.0","dotenv":"^17.2.3","ignore":"^7.0.5","chardet":"^2.1.1","p-limit":"^7.2.0","iconv-lite":"^0.7.1","tree-sitter":"^0.25.0","better-sqlite3":"^12.2.0","tree-sitter-go":"0.25.0","@lancedb/lancedb":"^0.22.0","tree-sitter-python":"0.25.0","tree-sitter-javascript":"0.25.0","@modelcontextprotocol/sdk":"^1.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^5.78.0","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^24.0.0","@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/coderecall_0.1.8_1783741203678_0.9649019328474853","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@alistar.max/coderecall","version":"0.1.9","description":"AI 代码助手的语义检索引擎 — 混合搜索（向量+FTS）、智能上下文扩展、Token 感知打包，CLI + MCP 双模式","license":"MIT","author":{"name":"alistar.max"},"repository":{"type":"git","url":"git+https://github.com/CodingOX/CodeRecall.git"},"homepage":"https://github.com/CodingOX/CodeRecall#readme","private":false,"publishConfig":{"access":"public"},"type":"module","bin":{"coderecall":"dist/index.js","cr":"dist/index.js"},"engines":{"node":">=20 <24"},"scripts":{"build":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --clean","build:release":"tsup src/index.ts --format esm --dts --out-dir dist --clean","dev":"tsup src/index.ts --format esm --dts --out-dir dist --sourcemap --watch","fmt":"biome check --write ./src","test":"tsx tests/language-support.test.ts && tsx tests/runtime/registry.test.ts && tsx tests/runtime/workspace-packages.test.ts && tsx tests/runtime/plugin-loader.test.ts && tsx tests/runtime/config-multi-key.test.ts && tsx tests/runtime/cli-behavior.test.ts && tsx tests/runtime/embedding-client.test.ts && tsx tests/runtime/reranker-client.test.ts && tsx tests/runtime/multi-key-docs.test.ts && tsx tests/runtime/parser-pool.test.ts && tsx tests/runtime/fallback-split.test.ts && tsx tests/runtime/oversized-chunk-split.test.ts && tsx tests/runtime/search-rerank-fallback.test.ts && tsx tests/runtime/chunk-fts-content.test.ts && tsx tests/runtime/query-channel-build.test.ts && tsx tests/runtime/search-query-routing.test.ts && tsx tests/runtime/per-file-cap.test.ts && tsx tests/runtime/scanner-coverage-expansion.test.ts && tsx tests/runtime/chunk-fts-fields.test.ts && tsx tests/runtime/chunks-fts-search.test.ts && tsx tests/runtime/chunk-index-consistency.test.ts && tsx tests/runtime/feedback-loop.test.ts && tsx tests/runtime/lock-regression.test.ts && tsx tests/runtime/index-healing-convergence.test.ts && tsx tests/runtime/context-packer.test.ts && tsx tests/runtime/graph-expander.test.ts && tsx tests/runtime/language-filter.test.ts && tsx tests/runtime/install-guard.test.ts && tsx tests/runtime/chunking-performance-profile.test.ts && tsx tests/runtime/encoding-read.test.ts && tsx tests/runtime/files-fts-rebuild.test.ts && tsx tests/runtime/batch-index-resilience.test.ts && tsx tests/runtime/batch-index-resilience-integration.test.ts && tsx tests/runtime/runtime-resource-governance.test.ts && tsx tests/runtime/test-script-completeness.test.ts","test:runtime":"tsx tests/runtime/registry.test.ts","test:e2e:mcp":"pnpm build && tsx tests/mcp-e2e-smoke.ts","prepublishOnly":"pnpm test","prepack":"pnpm build","preinstall":"node scripts/check-node-version.js","test:install:node24":"node tests/install/node24-smoke.mjs","test:benchmark":"tsx tests/benchmark/offline-benchmark.test.ts && tsx tests/benchmark/auto-tune.test.ts","test:unit:all":"pnpm test && pnpm run test:benchmark","benchmark:offline":"tsx src/search/eval/runOfflineBenchmark.ts tests/benchmark/fixtures/sample-offline-benchmark.jsonl --k 1,3,5","benchmark:tune":"tsx src/search/eval/runAutoTune.ts tests/benchmark/fixtures/sample-auto-tune-dataset.jsonl --target mrr --k 1,3,5 --top 3"},"dependencies":{"tree-sitter":"^0.25.0","@lancedb/lancedb":"^0.22.0","@modelcontextprotocol/sdk":"^1.25.1","better-sqlite3":"^12.2.0","cac":"^6.7.14","chardet":"^2.1.1","dotenv":"^17.2.3","fdir":"^6.5.0","iconv-lite":"^0.7.1","ignore":"^7.0.5","p-limit":"^7.2.0","pino":"^10.1.0","tree-sitter-go":"0.25.0","tree-sitter-javascript":"0.25.0","tree-sitter-python":"0.25.0","zod":"^4.2.1"},"devDependencies":{"@biomejs/biome":"2.3.10","@types/better-sqlite3":"^7.6.13","@types/node":"^24.0.0","knip":"^5.78.0","tsup":"^8.5.1","tsx":"^4.21.0","typescript":"^5.9.3"},"pnpm":{"onlyBuiltDependencies":["tree-sitter","better-sqlite3","esbuild","tree-sitter-go","tree-sitter-javascript","tree-sitter-python","tree-sitter-c","tree-sitter-c-sharp","tree-sitter-cpp","tree-sitter-java","tree-sitter-kotlin","tree-sitter-php","tree-sitter-ruby","tree-sitter-rust","tree-sitter-swift","tree-sitter-typescript","tree-sitter-cli"]},"gitHead":"fed2f9751b055f9928d84aa1ce05b5eeb979f0c6","_id":"@alistar.max/coderecall@0.1.9","bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"_nodeVersion":"22.23.1","_npmVersion":"11.18.0","dist":{"integrity":"sha512-O2rG4ar2f6fRFSu8WkNmVYLf5MEzEmxeABmnMyvTJQv7HMnqjfkzULD6NkJyNKLUwKk5geN0/lHITVYAJEwBIQ==","shasum":"5c755a3540a478af2a1e3a78f48560fbcabc5170","tarball":"https://registry.npmjs.org/@alistar.max/coderecall/-/coderecall-0.1.9.tgz","fileCount":32,"unpackedSize":313469,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistar.max%2fcoderecall@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDThOmp1mgg6q+8TQMthNnPjpFFcLqQPGEbWPmJxKjMrAIhAPEJweOWIY1gtfAMFVzHIhnfADMuvIkcSy3EpT+/Q7pc"}]},"_npmUser":{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"},"directories":{},"maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/coderecall_0.1.9_1783757111847_0.7182359956096369"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-02T06:01:36.598Z","modified":"2026-07-11T08:05:12.278Z","0.1.3":"2026-06-02T06:01:37.014Z","0.1.4":"2026-06-02T11:39:26.472Z","0.1.5":"2026-06-04T06:30:22.630Z","0.1.6":"2026-06-04T16:09:30.827Z","0.1.7":"2026-07-10T14:50:43.300Z","0.1.8":"2026-07-11T03:40:03.813Z","0.1.9":"2026-07-11T08:05:11.991Z"},"bugs":{"url":"https://github.com/CodingOX/CodeRecall/issues"},"author":{"name":"alistar.max"},"license":"MIT","homepage":"https://github.com/CodingOX/CodeRecall#readme","repository":{"type":"git","url":"git+https://github.com/CodingOX/CodeRecall.git"},"description":"AI 代码助手的语义检索引擎 — 混合搜索（向量+FTS）、智能上下文扩展、Token 感知打包，CLI + MCP 双模式","maintainers":[{"name":"alistar.max","email":"liuchunfu.vip@gmail.com"}],"readme":"# CodeRecall\n\n<p align=\"center\">\n  <strong>🧵 为 AI Agent 精心编织的代码库上下文引擎</strong>\n</p>\n\n<p align=\"center\">\n  <em>Semantic Code Retrieval for AI Agents — Hybrid Search • Graph Expansion • Token-Aware Packing</em>\n</p>\n\n> **致谢**：本项目基于 [hsingjui/ContextWeaver](https://github.com/hsingjui/ContextWeaver) 修改和扩展而来。衷心感谢原作者 [hsingjui](https://github.com/hsingjui) 的开创性工作与开源精神，为 CodeRecall 打下了坚实基础。我们将在此基础上持续演进，为 AI 辅助编码社区提供更完善的代码库上下文检索体验。\n\n---\n\n**CodeRecall** 是一个面向 AI 代码助手的语义检索引擎。它把代码库索引成可检索的语义上下文，并通过混合搜索（向量 + 词法）、上下文扩展和 Token 感知打包，把更完整、更相关的代码片段交给 LLM。\n\n<p align=\"center\">\n  <img src=\"docs/architecture.png\" alt=\"CodeRecall 架构概览\" width=\"800\" />\n</p>\n\n## ✨ 核心特性\n\n- **混合检索**：向量召回理解语义，FTS 召回匹配函数名、类名等精确术语，并通过 RRF 融合。\n- **AST 语义分片**：主包内置 JavaScript、Python、Go，并默认加载 TypeScript、Kotlin、Java、Rust 核心语言插件；其他语言通过按需插件增强。\n- **上下文扩展**：支持同文件邻居、面包屑补全、导入文件扩展，减少只命中孤立片段的问题。\n- **Token 感知打包**：合并相邻片段，控制上下文预算，避免输出过散或过长。\n- **CLI + MCP 双入口**：既能作为命令行工具独立检索，也能作为 MCP Server 接入 Claude、Codex 等客户端。\n\n## 📦 安装\n\n### 环境要求\n\n- Node.js >= 20 且 < 24（推荐 Node.js 22 LTS，不支持 Node 24）\n- npm >= 10\n\n### 安装主包\n\n```bash\nnpm install -g @alistar.max/coderecall\n```\n\n### 默认核心支持\n\n安装主包后，下列语言默认具备 AST 分片能力，无需额外安装语言插件：\n\n- JavaScript（主包内置）\n- Python（主包内置）\n- Go（主包内置）\n- TypeScript（默认核心插件，自动加载）\n- Kotlin（默认核心插件，自动加载）\n- Java（默认核心插件，自动加载）\n- Rust（默认核心插件，自动加载）\n\n> 默认核心插件（TypeScript、Kotlin、Java、Rust）保持独立包边界，避免把更多 grammar 直接并入主包内置 runtime；安装主包时它们会自动加载，用户无需额外操作。\n\n### 按需安装语言包\n\n这些包属于按需语言插件，用来补齐默认核心支持以外语言的 AST 分片能力。**未安装语言插件时，对应语言仍可索引和搜索，但会回退为纯文本分片。**\n\n```bash\n# C / C++ /  C#\nnpm install -g @alistar.max/coderecall-lang-c\nnpm install -g @alistar.max/coderecall-lang-cpp\nnpm install -g @alistar.max/coderecall-lang-csharp\n\n# PHP / Ruby  / Swift\nnpm install -g @alistar.max/coderecall-lang-php\nnpm install -g @alistar.max/coderecall-lang-ruby\nnpm install -g @alistar.max/coderecall-lang-swift\n```\n\n## ⚙️ 初始化配置\n\n```bash\ncoderecall init\n# 或使用别名\ncr init\n```\n\n初始化后编辑 `~/.coderecall/.env`，填写 6 个必需变量：\n\n> **API Key 获取**：推荐到 [硅基流动（SiliconFlow）](https://cloud.siliconflow.cn/me/account/ak) 注册账户，完成实名认证 创建免费的 Key 就可以了。用量较大时可认证多个账户，每个账户创建一个Key，利用 `逗号分隔` 实现请求级轮转，避免触发频率限制。\n\n```env\n# Embedding API（必需）\nEMBEDDINGS_API_KEYS=your-embedding-api-key\nEMBEDDINGS_BASE_URL=https://api.siliconflow.cn/v1/embeddings\nEMBEDDINGS_MODEL=BAAI/bge-m3\n\n# Reranker API（必需）\nRERANK_API_KEYS=your-reranker-api-key\nRERANK_BASE_URL=https://api.siliconflow.cn/v1/rerank\nRERANK_MODEL=BAAI/bge-reranker-v2-m3\n```\n\n其它可选变量（向量维度、索引/限流档位、包含/忽略模式、多 Key 轮转、旧变量兼容等）详见 `docs/developer/developer-guide.md` 的\"环境变量配置参考\"小节。\n\n## 📖 使用方法\n\nCodeRecall 提供两种使用方式，可根据你的 个人习惯 选择，推荐：Skill方式，更省 Token。\n\n### 方式一：Skill 加载(✊推荐)\n\n1. 将 `skills/coderecall-search/` 目录复制到 用户目录的 `~/.claude/skills/` 或者 `~/.codex/skills`下即可【其他工具类似 skills 目录即可】**：\n\n2. [可选] 在项目 或者 全局 CLAUDE.md 或者 AGENTS.md 上加一句类似的引导提示词：\n```\ncoderecall-search 是一个 通过 自然语言定位代码 的优先工具，用在：需要理解代码上下文、探索性搜索、或自然语言定位代码的场景\n\n**✅ 适用场景**：\n\n- 探索性搜索（不确定代码在哪个文件/目录）\n- 用自然语言描述要找的逻辑（如\"XX核心流程\"、\"XX事件处理\"）\n- 需要跨文件追踪调用链\n\n**❌ 不适用场景**：\n- 已知精确文件路径，直接读取即可\n- 简单的文本匹配搜索（用 grep/ripgrep 更快）\n```\n\n### 方式二：MCP 集成(不推荐)\n\n> ⚠️ **已知限制**（计划 0.2.0 之前修复）：MCP 模式下为长驻进程，其 VectorStore/Indexer 按 `projectId` 缓存的资源无容量上限。若同一 MCP 进程持续服务多个不同仓库，缓存会随项目数单调增长，可能导致连接数和内存占用不可预测。详见 `docs/developer/cache-and-lock-refactor-design-2026-06-02.md`。\n>\n> 当前更推荐使用 **CLI 模式**（每次调用独立短生命周期进程，不存在此问题）。\n\n在 MCP 客户端（Claude、Codex、OpenCode 等）中配置 CodeRecall 作为 MCP Server，获得 `codebase-retrieval` 工具的完整检索能力。\n\n**Claude / OpenCode 配置：**\n\n```json\n{\n  \"mcpServers\": {\n    \"@alistar.max/coderecall\": {\n      \"command\": \"coderecall\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\n**Codex CLI 配置**（`~/.codex/config.toml`）：\n\n```toml\n[mcp_servers.\"@alistar.max/coderecall\"]\ntype = \"stdio\"\ncommand = \"coderecall\"\nargs = [\"mcp\"]\nstartup_timeout_sec = 20\ntool_timeout_sec = 30\n```\n\n无论走 CLI 的 `coderecall search` 还是 MCP 的 `codebase-retrieval`，两者共用同一检索入口，每次调用都会先执行自动索引检查：首次使用自动完整索引，后续自动增量索引。\n\n\n## 🖥️ CLI 使用\n\n### 1) 查看版本\n\n```bash\ncoderecall --version\ncr --version\n```\n\n### 2) 初始化配置\n\n```bash\ncoderecall init\n```\n\n该命令会创建 `~/.coderecall/.env`。如果文件已存在，不会覆盖现有配置。\n\n### 3) 索引代码库\n\n```bash\n# 索引当前目录\ncoderecall index .\n\n# 强制重建当前目录索引\ncoderecall index . --force\n\n# 索引指定项目\ncoderecall index /path/to/your/project --force\n```\n\n首次接入一个项目时，可直接执行 `coderecall search`，入口会自动触发首次全量索引。如果你想在终端里直观观察 Embedding 进度、429 限流和配置错误，也可以先手动跑一次 `--force`。\n\n### 4) 本地搜索\n\n```bash\ncoderecall search \\\n  --information-request \"登录鉴权流程在哪里实现\" \\\n  --technical-terms \"AuthService,login,token\"\n```\n\n`--information-request` 是必填的语义意图；`--technical-terms` 是可选的精确术语（逗号分隔）；`--repo-path` 可指定目标仓库（默认当前目录）。\n\n### 5) 索引一致性检查\n\n```bash\ncoderecall doctor /path/to/your/project\ncoderecall doctor /path/to/your/project --repair\n```\n\n`doctor` 用于检查向量索引和 FTS 索引是否一致。`--repair` 会删除 FTS 中没有对应向量记录的孤儿数据。\n\n> `coderecall feedback`（检索反馈摘要）与 `coderecall tune`（离线调参）偏维护者/评测场景，详见 `docs/developer/developer-guide.md`。\n\n## ✅ 测试流程\n\n### 安装后冒烟\n\n```bash\n# 1) 确认 CLI 可执行\ncoderecall --version\n\n# 2) 初始化并配置 API\ncoderecall init\n\n# 3) [可选] 在目标仓库手动跑一次索引，便于直接在终端观察进度和限流\n#    可跳过：下一步 search 会自动触发首次全量索引\ncd /path/to/your/project\ncoderecall index . --force\n\n# 4) 执行一次检索\ncoderecall search \\\n  --information-request \"插件默认加载顺序在哪里定义\" \\\n  | tee /tmp/coderecall-smoke.txt\n\n# 5) 校验结果是否命中预期术语\nrg \"PluginLoader|DEFAULT_PLUGIN_CANDIDATES\" /tmp/coderecall-smoke.txt\n```\n\n### 开发者测试\n\n```bash\n# 构建\npnpm build\n\n# 当前主测试流程\npnpm test\n\n# Benchmark / 自动调参回归\npnpm run test:benchmark\n\n# 单元 + Benchmark 汇总\npnpm run test:unit:all\n\n# MCP E2E 冒烟\npnpm run test:e2e:mcp\n```\n\n如果在后台执行测试，建议给命令加超时，避免原生依赖安装、网络或 E2E 流程卡住：\n\n```bash\ntimeout 60s pnpm test\n```\n\nmacOS 默认没有 GNU `timeout` 时，可使用 `gtimeout`，或直接在任务运行器中配置 60s 超时。\n\n## 🌍 多语言支持\n\nCodeRecall 当前采用“主包内置 + 默认核心插件 + 按需插件”三层能力模型：\n\n- 主包内置 AST：JavaScript、Python、Go\n- 默认核心插件 AST：TypeScript、Kotlin、Java、Rust\n- 按需语言插件 AST：C#、C++、Ruby、C、PHP、Swift\n- 未安装按需语言插件：自动回退为纯文本分片，仍可索引、检索和返回上下文\n\n| 语言 | 默认支持层级 | 插件包 | Import 解析 | 扩展名 |\n|------|--------------|------------|-------------|--------|\n| JavaScript | 主包内置 | 内置 | ✅ | `.js`, `.jsx`, `.mjs` |\n| Python | 主包内置 | 内置 | ✅ | `.py` |\n| Go | 主包内置 | 内置 | ✅ | `.go` |\n| TypeScript | 默认核心插件 | `@alistar.max/coderecall-lang-typescript` | ✅ | `.ts`, `.tsx` |\n| Kotlin | 默认核心插件 | `@alistar.max/coderecall-lang-kotlin` | ✅ | `.kt` |\n| Java | 默认核心插件 | `@alistar.max/coderecall-lang-java` | ✅ | `.java` |\n| Rust | 默认核心插件 | `@alistar.max/coderecall-lang-rust` | ✅ | `.rs` |\n| C# | 按需插件 | `@alistar.max/coderecall-lang-csharp` | ✅ | `.cs`, `.csx` |\n| C++ | 按需插件 | `@alistar.max/coderecall-lang-cpp` | ✅ | `.cpp`, `.cc`, `.cxx`, `.hpp` |\n| Ruby | 按需插件 | `@alistar.max/coderecall-lang-ruby` | ✅ | `.rb` |\n| C | 按需插件 | `@alistar.max/coderecall-lang-c` | ✅ | `.c`, `.h` |\n| PHP | 按需插件 | `@alistar.max/coderecall-lang-php` | ✅ | `.php` |\n| Swift | 按需插件 | `@alistar.max/coderecall-lang-swift` | ✅ | `.swift` |\n| Dart | 纯文本回退 | 当前无语言包 | ✅ | `.dart` |\n\nC# Import 解析支持 `using`、`using static`、`global using`、别名导入，并兼容 `global::` 与 `@` 标识符写法。\n\n## ⚙️ 配置参考\n\n仅需填写 Embedding / Reranker 各 3 个必需变量（见\"初始化配置\"小节）。其它可选变量、旧变量兼容、高级限流覆盖等详见 `docs/developer/developer-guide.md` 的\"环境变量配置参考\"小节。\n\n## 🧱 技术文档\n\nREADME 只保留安装、配置、CLI、MCP 和测试入口。更细的工程内容请看独立文档：\n\n- 开发者指南：`docs/developer/developer-guide.md`\n- 发布流程：`docs/release/local-manual-release.md`\n\n基础架构概览：\n\n```text\n索引: Crawler -> Processor -> SemanticSplitter -> Indexer -> VectorStore / SQLite\n搜索: Query -> Vector + FTS Recall -> RRF Fusion -> Rerank -> GraphExpander -> ContextPacker\n```\n\n## 🐛 日志与调试\n\n日志文件位于 `~/.coderecall/logs/app.YYYY-MM-DD.log`。\n\n```bash\nLOG_LEVEL=debug coderecall search --information-request \"...\"\n```\n\n## 📄 开源协议\n\n本项目采用 MIT 许可证。\n\n## 🙏 致谢\n\n- [missdeer](https://github.com/hsingjui/) - 原项目组者\n- [Tree-sitter](https://tree-sitter.github.io/tree-sitter/) - 高性能语法解析\n- [LanceDB](https://lancedb.com/) - 嵌入式向量数据库\n- [MCP](https://modelcontextprotocol.io/) - Model Context Protocol\n- [SiliconFlow](https://siliconflow.cn/) - 推荐的 Embedding/Reranker API 服务\n- [LINUX DO](https://linux.do/) 社区朋友们的支持与反馈。\n---\n\n<p align=\"center\">\n  <sub>Made with ❤️ for AI-assisted coding</sub>\n</p>\n\n[![Star History Chart](https://starchart.cc/CodingOX/CodeRecall.svg)](https://starchart.cc/CodingOX/CodeRecall)","readmeFilename":"README.md"}