{"_id":"@maxgfr/codeindex","_rev":"47-71eb80d360a2132247df968edf19d94f","name":"@maxgfr/codeindex","dist-tags":{"latest":"2.31.2"},"versions":{"2.7.0":{"name":"@maxgfr/codeindex","version":"2.7.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.7.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"85c4f550a5efd88b1b2f8253623767c39bf4abb0","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.7.0.tgz","fileCount":82,"integrity":"sha512-J+7hP8A/OdjjBewE0zK4nugpBqlNIfiiC0EWeCds7Iz2IChZ97HAATaIvR7XiXxKXsKko27pTAh7ebOuyL53fg==","signatures":[{"sig":"MEUCIBYyiLpFFGx1Fe48SEnfI3wxosEihqI/MwXTwFh4z7aBAiEA31v7WuIbpCq3SJIP/NVorZJwwKS18eJ3xZhbhAghVF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24228814},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"dbecd2c4b001275c79fa0414baa5eaf63303ef30","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"maxgfr","email":"maxgolfier@gmail.com"},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^24.2.0","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.7.0_1784758189666_0.06615079681238156","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@maxgfr/codeindex","version":"2.8.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.8.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"1d3eee5d9680ee5d097910ca097d6a8812eed7ab","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.8.0.tgz","fileCount":83,"integrity":"sha512-WJ6mYfcJe1+l9Zg2VKh875zMP+1iVTr1eLmj1A+2oqJNtOaHN8E8+X1cSMxoaoCsT65oKBr0j7OdQYzAF9ziVA==","signatures":[{"sig":"MEYCIQCF0hG841CazK7m5W4L9JkkGfYu/KLF2JlQ2tqtiXzM2gIhAOrf+Px1C6ITU2jG+jTbI/3l6ryVX7Z4fplRsAC2qOyt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24254316},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"3490315b59c160695527dc2bc79f376bababf7e0","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.8.0_1784795381079_0.8371853734290424","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"@maxgfr/codeindex","version":"2.8.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.8.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"5bbcd6e1787b1805b72081748c30118bcf4a1066","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.8.1.tgz","fileCount":83,"integrity":"sha512-s9gYy+gKJ+1pECwm27swLrKQbBmMT2DLj6dmkPUkxC4fO9f+ft80DVNJ2FofQoslTX/x0u7qNyxsuCTge/eSeA==","signatures":[{"sig":"MEUCIQDD4Kk/1olk9CiFgdsrsiAM8bH2lF6C4jejclsqtIhsJQIgHLukCIVlAcCI17nZCr8OFWmxkyol9ejeXTtBg4D0pJI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24255391},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"36fcd7f030c28cb61927bc4a8744f62ff64ead78","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.8.1_1784799076358_0.9420851264294141","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@maxgfr/codeindex","version":"2.9.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.9.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"05779a0c015364333cc437e80a9958d82409dd48","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.9.0.tgz","fileCount":83,"integrity":"sha512-7dhhfCnegCEnOpBKGO6hnLSgXk8yZ1JvCn4o+EU1oyRrvsKkPsLa2V719YUhwtTs5fe/0OSUtL9IU41g4TXxOg==","signatures":[{"sig":"MEYCIQCU0UJb9k3a0MjtmeBnezWx7hm1wAZ1NIjA4Jiam/+53QIhAPiliLPkhhWAwR/ThEM290QNqs1nYEtZvTeW4k/JMesQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24265786},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"7610f57b9a4db364fb6f6fcf5001f4f4acb12dfd","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.9.0_1784799863840_0.17784072776865223","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"@maxgfr/codeindex","version":"2.10.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.10.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"88edfbbed896a3f4887045634eb957f7fd42bbb3","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.10.0.tgz","fileCount":88,"integrity":"sha512-YXxn/7i6acFbBJqYcGBWoit42Ckj1DZYLx+9eoUoeCp2h0GmK5ypomvYllznw/qmYP7Qln5Of4pIYFZxXIMZVQ==","signatures":[{"sig":"MEQCIHRPhyksm1mc7aesnEfD5i3HKE3XCgA2t83hFB5Kq/faAiB59yfgSZS9KGaptORsaGu6nVRx37zzRapMxpuOB2iPRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24321334},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"e67783798b60d92adce7622efc15c8c31f85b672","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.10.0_1784801418470_0.2521008747030815","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"@maxgfr/codeindex","version":"2.11.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.11.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"74a4d3e7554a19ac5ccfaa62829ed3c4e6c29800","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.11.0.tgz","fileCount":89,"integrity":"sha512-z7Nb01lSSwk2e6C7Rqh1knljeyIxvITTcJ3O0N2UAT637lCV9BRyqKYKeKZ2wbMOW3dUHH0ulNd9d8NuvqXwWA==","signatures":[{"sig":"MEYCIQCOUakdQgbcgXVgU3YDbmt0YdVe46nWlKWVGdkqPkrz2gIhAKjWfGaKzDykO+rMW/KoJZ55Jsr7wiein0DJUIsYSbNc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24344539},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"6b4b313a54ae6b6c96a4314e3b86d86a52a5d96d","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.11.0_1784805329165_0.37868904957633975","host":"s3://npm-registry-packages-npm-production"}},"2.11.1":{"name":"@maxgfr/codeindex","version":"2.11.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.11.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"942c315165744e97cdd9585114157105983fcc42","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.11.1.tgz","fileCount":89,"integrity":"sha512-YFNUiCsp6pvEMthiU8hfrbPPQgptijlCKDRfWx5FLLbWYjFdQOA16O35y+LkBxMlb6oTwhFacgqq9nGQUHlU4Q==","signatures":[{"sig":"MEQCIGtEoPuOsjGPi3/36gfn64nsmc9x+JT9a0JAjNOokkVJAiBgx57hXlrDln/Obr7TLeDYGDuOL8NGdK7qkTeJkNNN3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24350527},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"c4f55a55ad03f5f5f6a8f396ae4ff8ce5b435bd2","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.11.1_1784809644890_0.35804659574134545","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"@maxgfr/codeindex","version":"2.12.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.12.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"1c3221f3f5b679b2511d9b5c50465e1ee717878b","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.12.0.tgz","fileCount":90,"integrity":"sha512-/1DmFdQr3X41C5mSKY5XBp9LLbnCzZvnIyD/QsrHGfZ030v0e3TTCOwfNKLt7wW/soypYeWT+4VwHUlNnP3U0g==","signatures":[{"sig":"MEUCIDVhVlEwYqV8nzkcNY1vhS9XHVPOKajPdo+6pEFwChnMAiEAmfPsFqM4mT6YUP4FEUOHya4ufGouEHauwyDvKyRn+ok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24376010},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"28d97f2f12a5f685e70b5192797dc39817da18e1","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.12.0_1784823375386_0.2070404171866278","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"@maxgfr/codeindex","version":"2.13.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.13.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"179d049aa8233cb2df03c6c6fdeb31aa243663b8","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.13.0.tgz","fileCount":90,"integrity":"sha512-7QTRjbEWSgqUp+TJayEGEgbTJGPEea6JDipGhwjMxjL5PSYrTBejdVIx+9qXI4mKyWAdO0Smek+1KMCZmrvfbQ==","signatures":[{"sig":"MEUCIQDQmmqgM7vySh1RCCdhll6Lft19UqQGPUvXabhqM61bZAIgAMKkY8l3ti+OaWuzyyx7F3xU+6uKeUgoyl5MCT9Ok9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24385530},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"96e34f08cbbe2b125b19d493b1c30634d657585e","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.13.0_1784883321784_0.3409659091943953","host":"s3://npm-registry-packages-npm-production"}},"2.14.0":{"name":"@maxgfr/codeindex","version":"2.14.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.14.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"965c723dd477f3d1d04ff930a23c4fc273001a67","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.14.0.tgz","fileCount":92,"integrity":"sha512-PNNC5+Jq/50bH3tfQL0GikEZTAGCsIfYcQ9y65ARtBbiva3BuWEPo+rfGqce1zc7AeSYzNT3G+jwSVHupfGz4Q==","signatures":[{"sig":"MEYCIQCA147i8RUnvExgHZrCXflLb6N2F61H6x4OBDp6G0lxvwIhANillGIoCOBFedOW31M//9z5mkMj+a5dJTowfZqi+gl+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24456239},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"dbb09fefd60071d73c91771ed0d206ffafaa5755","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.14.0_1784912962439_0.4394856566206069","host":"s3://npm-registry-packages-npm-production"}},"2.15.0":{"name":"@maxgfr/codeindex","version":"2.15.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.15.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"64b318a811bf2b23b60d6fb3ac3a37c9d7edc41f","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.15.0.tgz","fileCount":92,"integrity":"sha512-U4r1doF60HxZland4oodV/+2rKrFyAmDGKA70pAmiSx3F7cIv780tPyxfmdGLzcI8cJjU5ntKWDOFo00m6Um6Q==","signatures":[{"sig":"MEQCIAWWuxzmv57KJxZ59nJMgP9xn0tQC8paacs3cLw4U0ZIAiBRtAAc7NudnK/9N1KAbaK6tMnjFVcaQaci6/rgKXfokQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24468671},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"7738afb543d11005d0bd1a85f7f189a160df000f","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.15.0_1784918844773_0.1274770594324861","host":"s3://npm-registry-packages-npm-production"}},"2.16.0":{"name":"@maxgfr/codeindex","version":"2.16.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.16.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"68cf3dcfcef22a9fc4982b2fdfc95040b5b093c0","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.16.0.tgz","fileCount":93,"integrity":"sha512-cJRRs2wc9UBTXV5ACjUQRaAESLXleYxdaSN1BY6iu2y6uKuDXWPk4N+9TNFRZnkmBT7djQcVd+NCANkfaHHb2w==","signatures":[{"sig":"MEUCIQCW4FmIlNSB7UQtrI/eruAlv1HeFeID5OHlOUwzo23WpgIgeuH5JEbbY24Z71Ui84KqvSlOzwlPjiN/4kkbSRkxR/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24476589},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"a4c26c9dc6148ebe6b70ea6ceabd63dae4215a3e","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.10","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.16.0_1784929458379_0.7175097304255209","host":"s3://npm-registry-packages-npm-production"}},"2.17.0":{"name":"@maxgfr/codeindex","version":"2.17.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.17.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"d3eedf925151cbeccbfafa34e8bc6d1029324c06","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.17.0.tgz","fileCount":94,"integrity":"sha512-82rVhN/yKSFHk/rN/aPNjuaygus+GoFb1wJ7edzVLpiO+7g+bixTMQydv7+CqYsyb194zuXNV/bNUUQwyR+Y0A==","signatures":[{"sig":"MEUCIGKGWQpv62nDXGXqdnJdki/6gkX/MKgkbdDSQuKk76rFAiEAwKGe58+Hrzy1xsGpf7iaVSr75eHMctZkdxzjzurESxw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24498506},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"9045b88e85f8493e47de6fe702fa56b169cec2f0","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.17.0_1784968625570_0.6432519308200308","host":"s3://npm-registry-packages-npm-production"}},"2.17.1":{"name":"@maxgfr/codeindex","version":"2.17.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.17.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"36d756a33fb4e770ea07b07b013a507a58797953","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.17.1.tgz","fileCount":94,"integrity":"sha512-y2Wz4iPrGz23O6aSDLykz0FAlC8iKM9wKILgaaMoLalPXMOGdx5OIkFIUbilzdKIbUr+P/FaY15tipfG7laJtA==","signatures":[{"sig":"MEUCIQDkc2rAN5HCQINZf6qALMAw7CPYqqgkemQ1HaKYist0TQIgT7xcH3O3efp4jPGuAfKfeIDx6tRCl+hF/jXbZdSuZlw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24501255},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"418892c6cf100be2bf2ff19fa5e99689075f7c5b","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.17.1_1784971991987_0.8083049248527456","host":"s3://npm-registry-packages-npm-production"}},"2.18.0":{"name":"@maxgfr/codeindex","version":"2.18.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.18.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"1bdd8736133a2d4f7a129152b02a26522cb5e7c7","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.18.0.tgz","fileCount":98,"integrity":"sha512-Bqa5iYYzT7v8zJ8UokZup/BrUTq3MObClc9+1WerWiKMUtEBlSWLTr0yTE79cU3Jw339YeGfdaDGnNNIWXkjSQ==","signatures":[{"sig":"MEUCIQCx2gRMRt3fRiCI+baujEyeUtnNAXFZULS7hJikKrHDXAIgQfDWizBO9FfmFUXOgX1eND6egjzm7TLtukHsH3Zz5ZI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24633675},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"e4a1e46ba33c2de889b7c6b42d987e88e63e0f66","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.18.0_1784977714207_0.6211930498036711","host":"s3://npm-registry-packages-npm-production"}},"2.19.0":{"name":"@maxgfr/codeindex","version":"2.19.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.19.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"16821c49e9db8e5ccf6cbc2a184ddc48f3f84bda","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.19.0.tgz","fileCount":101,"integrity":"sha512-o4TBzyE1t+gY9Gh1OSLNfth+Gt9GqDbjAVqqqT74XMpnKyVLIbYiOWVI9VAuI5SiuX1OwwZsimx0ouAKxj+R0w==","signatures":[{"sig":"MEYCIQCpM223788i4Sp2mNCvqc+bzOs6+Uviux6OKj21hhaDtgIhAIZD9VPWi10VkK2caZIdETDU07A2UZOUaqvV1ITPkRrS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24651026},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"0b7f41e6a58c6592e66914efa01d58b07405bf92","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.19.0_1784979344649_0.048408706608916496","host":"s3://npm-registry-packages-npm-production"}},"2.19.1":{"name":"@maxgfr/codeindex","version":"2.19.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.19.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"4418d7f06b9a4b490f6e1eb12a6767fadcec269f","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.19.1.tgz","fileCount":101,"integrity":"sha512-S0K1nkpgigrq10ciSjbRLK5o5kgUQRFTYaLm3SHpxiwOj3kDf/UnrrMFMf9p1mMwJim/T9fgBR6SRGKBB11gZQ==","signatures":[{"sig":"MEYCIQCs8Rswvv4C+uyOgRYIxE6xeEZ0jOA5K3OPHiq8RmuYMQIhAMhv7lZmt4JllAnT+aMl7dpcHe7vKMvGrgAVTJ0Ih+Ni","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24652446},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"037fbed42077ab6785a13d3f583e6030ff6ba5d7","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.19.1_1784979556637_0.5861528547418835","host":"s3://npm-registry-packages-npm-production"}},"2.20.0":{"name":"@maxgfr/codeindex","version":"2.20.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.20.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"9af5adcadb55d0aa533df4887f889e47dbb4499f","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.20.0.tgz","fileCount":101,"integrity":"sha512-NVIiPD6INrdXiJttTtrLuQchrKKLL/QbsbN+lt2XFV2bPF5CGYLD8zXDT80V/fpzHQAQTtBrvfLcgJPHiLShHw==","signatures":[{"sig":"MEUCIQCoCm/3vM2CtgMq6I4NLjMIdAxT8guePbkDduUmk1JmkAIgWY1I3Zhhl4risSstzoGa7si5+WAbLClJc+QUZF5dtw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24655093},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"fb15bcfde316201ec597a0bbb78805446f58f831","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.20.0_1785010128990_0.9267964730858189","host":"s3://npm-registry-packages-npm-production"}},"2.20.1":{"name":"@maxgfr/codeindex","version":"2.20.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.20.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"9466cf9469c332ff70818606af32c6d09d76f5ea","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.20.1.tgz","fileCount":101,"integrity":"sha512-lmEyqnwUHS3jqt5Qs3FYNeKKIR8WJ0tkdFR6T1yJJkZdJDPszJFhQhHlVDiPJXPJmEnF096gameNIOwrZEpXjw==","signatures":[{"sig":"MEUCIQDPNGwnUBRUh3V5Bl8le0TTpINItFtx+laxWmhFu9TL8QIgOz0STQcfdrXmRUJ4BfkPuFDmR1DYJYpnnDrstB7fkBU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24655673},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"092e977790b6f52c1a1b3f7fd4129b6644c92ad8","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"vitest run","build":"tsup && node scripts/postbuild.mjs","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-lua":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.20.1_1785013190108_0.0035469751651635573","host":"s3://npm-registry-packages-npm-production"}},"2.21.0":{"name":"@maxgfr/codeindex","version":"2.21.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.21.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"c481ec9dcc42d89d5f43a0eb5b8a62ee029ffea5","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.21.0.tgz","fileCount":124,"integrity":"sha512-ASse9Km4c0+Wg7k6/MM+DJmM8nQVzXxEyJWMpbycvhUXprEuLwN/tVezaVkaqRNLeLOHFoYz6OZSqBTw+PkchQ==","signatures":[{"sig":"MEQCIECde9xILrZfpEZFNay7ccSDPTwennFUZTnvz1FwqDYpAiBg5dlcNqTE83lPo8v3BNDQTR0w+wkSULBhAzD4kYd1aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24871473},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"2e46b9b25db878af34156c74c4ee63c499d5c422","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.21.0_1785413972652_0.06840431985368145","host":"s3://npm-registry-packages-npm-production"}},"2.21.1":{"name":"@maxgfr/codeindex","version":"2.21.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.21.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"f2809ecaf88c6b0b5d98073ebf23d502630ed6e9","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.21.1.tgz","fileCount":124,"integrity":"sha512-EBb0Vn+WpcyYoiJycTyVzbPovIL6ebdyo6Y5e8JVt4EZi4ck72LpWaSbWAAEuEhfBmY6YUnlLaSDZQWg48aO8w==","signatures":[{"sig":"MEUCIQD2bvigjO2FUCH4mB7LuCaWRfE5q8qU0ydsgeY4CeZ0xwIgZgZf446R0SjT0JMJ3yn69FTDEs7SP5Qc25dLUlJDiK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24876276},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"913ff0b87246e47ecdb098bfc877db25514419f7","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.21.1_1785414244837_0.5505795907144213","host":"s3://npm-registry-packages-npm-production"}},"2.22.0":{"name":"@maxgfr/codeindex","version":"2.22.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.22.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"e2878201beca1bf39b9e25c99d2464f85c8b9532","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.22.0.tgz","fileCount":125,"integrity":"sha512-Dko3RLRDUC2F1iNWFP/QNnTHQOWksYtDpR/o84NJzLczegDpBIsooA67IWe1pmPX9CWGCNJxzIGuU4fMv0N8Nw==","signatures":[{"sig":"MEUCIQDKXMU0x/JtdK+SATf0VBuuPZlyKPxjvuXAKv98GkqNlwIgOVPIatkDTuIcRKinFPaEgJ8Bhu5NLf19w/ItY3Rj56s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24916873},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"2e174d1c44343b7a95c7e0a2154fee04addfa538","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.22.0_1785423240598_0.04500240357953689","host":"s3://npm-registry-packages-npm-production"}},"2.22.1":{"name":"@maxgfr/codeindex","version":"2.22.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.22.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"3318b4b17dc3784cecd8088a7b397750e8e9a6c4","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.22.1.tgz","fileCount":125,"integrity":"sha512-WstpbWc4FqPDZ0+WaVYJ0cdrAYVsVc1zLOem/8bMdMCuGcsKHTHpaIrmZEXeFnegjBVwRI5LNdpUKMWwB/1vzQ==","signatures":[{"sig":"MEYCIQD8/CyK2ABH166Awk37oo0m4dGGjR7MfURyejo5WGvyBAIhAJ2olbJOWV/LFMCkFgknX99HUDWWvP4CNlPnPFd9QdvM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.22.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24926371},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"8d775620ea45f2b5029fedb9f2b823c68ad17e0a","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.22.1_1785499404238_0.5879268375403874","host":"s3://npm-registry-packages-npm-production"}},"2.23.0":{"name":"@maxgfr/codeindex","version":"2.23.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.23.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"9f3742443cfad6248e3e04276b0c7e4d6ebec723","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.23.0.tgz","fileCount":137,"integrity":"sha512-RCsMbR9jh0k5ih0Z5eVkMiBuZ69WCzRkGtqFwSqyaHV6lPrztsa5GdYgHju3+EhL5mSSEZQwFLJhJCs67pR5gQ==","signatures":[{"sig":"MEUCIQCBRvxXwpj6KSm6u3/x9WUblm0soirdABA3yDZU5on5CwIgEYDt7mRvdtHIuQcIB+ASlNYNd8si1697l24G7rZ/9WE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24973280},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./package.json":"./package.json"},"gitHead":"ed71b88bb92c608fd8788c3318c9e96f583d7ee2","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/cli.mjs scripts/grammars site/playground/engine.browser.mjs","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.27.7","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.23.0_1785571658839_0.07710681355405291","host":"s3://npm-registry-packages-npm-production"}},"2.24.0":{"name":"@maxgfr/codeindex","version":"2.24.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.24.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"eb425869ad28f9a385d2ad6f660b658969cb932d","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.24.0.tgz","fileCount":140,"integrity":"sha512-7ggcTb8x3djCZ6oN1SGEhG4FLXjpTsiT/otkQkR2OmNq6BpXZesKT/sYxVsMR2vqXlHe6N36JDGUz3JY7rkMXQ==","signatures":[{"sig":"MEYCIQChBorPxeuZFc/SwoxRGEyY5PaJg0oLyBNPVlIW/UicGgIhAK30ihZwfqs/gSH+A4dNK8nyxhiU7O+IHA7xTC9OIR+c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357701},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"2cb067b5635f9b586779b156ef8efef12f8918ba","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.27.7","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.24.0_1785572322186_0.40465547541155544","host":"s3://npm-registry-packages-npm-production"}},"2.24.1":{"name":"@maxgfr/codeindex","version":"2.24.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.24.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"efcf705a312d11bc7796ebe47ae8bfaaaf36d1ab","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.24.1.tgz","fileCount":140,"integrity":"sha512-6vKGMZ38VwqMsrsKKzG0Gk+6wPKynAA87yS8j/snlyljwlLpmP4v1PqjnwHJdMS3kjU5F+W1gEqqjDOf2I7y7g==","signatures":[{"sig":"MEQCIDFNBDH/g64zm8ZGJujw60/XMUyNs3UkjDNtkxz8m5JDAiBSXcuqnOzirQQRzIf1eMiLnTUjfMfFwhmdao1LRqB7WA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.24.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357701},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"318b5cfcf069e2454362698d68e70242e9a41626","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.27.7","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.24.1_1785572479898_0.6513007724508584","host":"s3://npm-registry-packages-npm-production"}},"2.24.2":{"name":"@maxgfr/codeindex","version":"2.24.2","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.24.2","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"aea74da88b627e6ce066ea91ff1f441c0f272ab2","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.24.2.tgz","fileCount":140,"integrity":"sha512-LlagmOLMxg0Wh2vDo9l2/jwcRzoMfV3jbqETe/AXiAw2RknlplXcWcRuJpbdlVGccdxc5a4QhSzDkzHGvc4/2Q==","signatures":[{"sig":"MEYCIQCukCGikO/v7UY8qhnJcptjK+DEV8OHGrFqwZEs2tOclwIhAPjVn+M0XFq6YlCu1TIgfFsBv2q24csiYDlFJLJq3lI0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.24.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357701},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"d6457117c43581ce0b3de1b30691c9bcb01690b2","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.27.7","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.24.2_1785573939157_0.8836500310045523","host":"s3://npm-registry-packages-npm-production"}},"2.25.0":{"name":"@maxgfr/codeindex","version":"2.25.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.25.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"9e98883fd5436d0835b8d7506d39d5da8d31999e","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.25.0.tgz","fileCount":140,"integrity":"sha512-CuyrzSL1QOqh0UR6W3kQOHBtJUko0hlgZiZtgeONj3JZg4vHSGDhjwMFrXFn54yQRLr685rpudszFknKM6SJvw==","signatures":[{"sig":"MEQCIA5fiC1or3R77PjfyFV3vTWRe8fhsdei5HtgZqLoUYATAiA37R2LSnmLSBwpLRBk7XWbig9s4tmSJeFb0uVtNW0iBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357754},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"c66087cc92fc11027e1473f11c3aeab1fc4266db","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.25.0_1785575328817_0.893399676897475","host":"s3://npm-registry-packages-npm-production"}},"2.25.1":{"name":"@maxgfr/codeindex","version":"2.25.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.25.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"904177064183e6fbe25925c935df1309d31542bc","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.25.1.tgz","fileCount":140,"integrity":"sha512-Lu7suBVaGddtVB5GX3ApjAnV3v9+T5UIq82dTp66dXUFIYfv1Ck/N4n2/MhXWFNhrmmKMRbXeghVjijY4fUCSA==","signatures":[{"sig":"MEUCIQDbWplqvfyl67L4YKUe4tx8VE1Ny0PbDA0yln0rmPUVzwIgQZUuonnzUtu5b8XhmpVfmFf+l8WmsCN3u0b696R0Psc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.25.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357754},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"955e738f0ff1ed3af17f5fd3ecab94512545f1c2","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.25.1_1785575816435_0.8544312765658673","host":"s3://npm-registry-packages-npm-production"}},"2.25.2":{"name":"@maxgfr/codeindex","version":"2.25.2","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.25.2","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"b9987bd0f9210cc1a06ef9d0e79448dac251ffbb","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.25.2.tgz","fileCount":140,"integrity":"sha512-5q335adcaf+mhodfbknEh5Sm6RTu7mBzMlA87gOjQK6fVdxLVkFDCLQSGr2ujF7/GwWuhYhlBLw4bNYNq/FWoQ==","signatures":[{"sig":"MEYCIQCIYa5re69xRjJU6piFMDho8a69L4UnIG8odUhUJI1zFQIhALWly2FEceLrlR5WSBAhVr1YW1C6Iqza6/8ua9dWkBga","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.25.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357754},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"b190f63595d4dc33b7b2f7d0fc988cadf16c463c","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.25.2_1785585568200_0.9683893497349949","host":"s3://npm-registry-packages-npm-production"}},"2.26.0":{"name":"@maxgfr/codeindex","version":"2.26.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.26.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"6d3d3f149e0ce668aec33fc3efee17814333ce29","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.26.0.tgz","fileCount":140,"integrity":"sha512-gUZu0Ydvdu2bJF5Dqix7+kSHjlqvkE+aQg4aJUFRWxaHwgxXlif+l4RC1l/sfQucYH/3JCu3QJytiaR+JFqIwg==","signatures":[{"sig":"MEYCIQDxGSwD/YI3o2Ht7ZKHdwT4PRZucHWygqi4C7xy/dce4AIhAMiu23CvlR0dCmppy5zWZPxA02Cr1NGd65GRy3CJJjyy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25357754},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"e4b6554ddbd834ba9be89b64b87a08455792eb0a","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.26.0_1785586859166_0.12374166373233741","host":"s3://npm-registry-packages-npm-production"}},"2.27.0":{"name":"@maxgfr/codeindex","version":"2.27.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.27.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"d55083b99c2fa0dbbdd56cf9bb3760f20b0985a9","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.27.0.tgz","fileCount":143,"integrity":"sha512-SSUQ3wTwQZ2XH+jfbd88Vwly2ybGXfCJkGICmO85EfqSq59UiU7YPDZzSqkeJgf6X9EMLYEYz3N3PTa36Mfisg==","signatures":[{"sig":"MEUCICQctrd8/o/IR9pIJnk/o9aPKJZm0mIJubxScjc3xQa7AiEAyAomjsMHrf1MYc1wuKkSCLOEYj3knHUg/YpgydLtQ9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25419933},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"4619e4d5a5234027524b23f8362153ca7366bac0","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.27.0_1785952960351_0.07993745183606338","host":"s3://npm-registry-packages-npm-production"}},"2.27.1":{"name":"@maxgfr/codeindex","version":"2.27.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.27.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"012407a130d61d09b02a71815d789efc0c8e97a6","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.27.1.tgz","fileCount":143,"integrity":"sha512-qd4KZF8arkUeUy1tq2UhEBQm8E9pH9VRo6g/ruui6wdY296o9C/2zwE+0Zdcilg77IgeJtM7jb84ecBA0HRqWg==","signatures":[{"sig":"MEUCIGS2V/uUU9ZfpDVN6ScSB/vxcWvdBOj8lR6fXC8d21vHAiEA/IF5gyN4axl2ZgD7sEtF4ZTq+6vd3f4bt59GrCAYDgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.27.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25422835},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"caea7b018f1623e626c4f2708f487e94cf343b69","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.11","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.27.1_1785953778413_0.3197854789342929","host":"s3://npm-registry-packages-npm-production"}},"2.28.0":{"name":"@maxgfr/codeindex","version":"2.28.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"586785e45ade1fa98e26ad821704472424fa98cf","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.0.tgz","fileCount":150,"integrity":"sha512-tdqbrDEkELwEAbMneYzVOgGx0oIK2wzSTb6Bm06oJlTxO56klWO0mY9swq6QGwr3OWUs2ktphPBdSFWtVgWe1w==","signatures":[{"sig":"MEYCIQCKh3UfBJSgRVk9m1TaJqqeswubcycFePOzZCaxjQNs4gIhANzEwnK0McyrE12Xr0h8nSOgvoApRwd4KXuHg/tK0uEH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25602002},"main":"./scripts/engine.mjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"1543b63b983fdf26e278babb6b168e8df39a0739","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.16.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.0","esbuild":"0.28.1","typescript":"^5.5.0","@types/node":"^20.14.0","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.12","semantic-release":"^25.0.8","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.0_1786554813164_0.392943130048534","host":"s3://npm-registry-packages-npm-production"}},"2.28.1":{"name":"@maxgfr/codeindex","version":"2.28.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"a25778e6324e1934d7a525958f89691d16e20943","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.1.tgz","fileCount":147,"integrity":"sha512-lxO5H7ViR/bUBuTTGf0p98V0yB25uKdLUmqR47dEw7ZB5q4mLyxMATv7WSI3zZu++u3yjEMuqk86BJabPahrRQ==","signatures":[{"sig":"MEUCIQC7kRN+3vHakI+X6c25ATU4XyrXp81i7etBLZl1vcagHgIgCAeyWFsj16Iv9JgwSRuWESwtYW+EZ880WkxybcqoQNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25605983},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"63659189fff950a9744dde9687813bf03478b67c","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.17.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.13","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.1_1788176317758_0.5792400485436484","host":"s3://npm-registry-packages-npm-production"}},"2.28.2":{"name":"@maxgfr/codeindex","version":"2.28.2","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.2","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"a466b257de8987512d2c08f11a195c2a2afb04b3","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.2.tgz","fileCount":147,"integrity":"sha512-kBf5Z7kNSmUfwV5RnuqLh0AYmiCrssiV9ddxi4UxFNFRUPLcCJanJKJ4CetS5vuxnhFJgTbgEiXQqVgD+bfFjg==","signatures":[{"sig":"MEUCIFhv3EI4TbrTIy+uzF45HOInSTI53+O2XLj8ulXx0T6CAiEAgLPr5MBiL4rySVAyyOD2cOlI/4i04z+QJT/f3j+Zq+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25634257},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"8797dfd4d9abe10b8708dd4f4c4c247c50e9b345","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.17.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.13","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.2_1788330993037_0.45755078801421734","host":"s3://npm-registry-packages-npm-production"}},"2.28.3":{"name":"@maxgfr/codeindex","version":"2.28.3","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.3","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"05a94a4145522d98ea665fd326fe3953930a8d81","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.3.tgz","fileCount":147,"integrity":"sha512-J+Ca/NbkxICChExG6MRhkL2wWuf8pdkXgp0ZhitzEP8vFQv2UTX+6nVKk8IRHF/3iT1bU94LnVK4teGcEr+0vw==","signatures":[{"sig":"MEUCIQDWpxMacPM1NlrSWNTOlqWhCF4K+d63m3rzTzGR50pirQIgO1SJXsPFiJsfgjLI7A5pHDD+/GoMDnu6mdarO1vCfXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25640078},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"d09b48205e0a1712260f04434a0295fa50934ad1","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.17.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.13","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.3_1788410971413_0.8660001293858104","host":"s3://npm-registry-packages-npm-production"}},"2.28.4":{"name":"@maxgfr/codeindex","version":"2.28.4","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.4","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"da33195bd084dcef19146af0133a8bcf84ef7c46","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.4.tgz","fileCount":147,"integrity":"sha512-1lhFmKfQNy/lyp4QLWp3WvApJANbTMRo70kePmcvC5rVOciW9PSdA3eWTqeQqY5HShpXaNDbb5O03m1kUF+k6g==","signatures":[{"sig":"MEUCIQDS+1uQgWMrXr2hQobpNA6orTsTx6sFp/g6EdJCjnDIDwIgXyyPP9lMV0q2j+dMZpDZk4UbhnHoWAxBH8ZCR0sabnY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25640528},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"05cba2036ec477930c2521a0b955f5de90dcb94e","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.17.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.26.13","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.4_1788411676415_0.5861347693962653","host":"s3://npm-registry-packages-npm-production"}},"2.28.5":{"name":"@maxgfr/codeindex","version":"2.28.5","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.5","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"ff7c5e0b0bbb7a880e056d2051bc6622888a67d4","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.5.tgz","fileCount":147,"integrity":"sha512-Zp2l0L99d6KoIkEau3CadnUxqbvPG9R46QtupsvGYqSkdMWfb/xsXrL8vSoo+Sxkll1oeDW4fiW988kO2Yk1mg==","signatures":[{"sig":"MEUCIQD3U/4UqJY1o6iHQRctMHaj2fMurZ2Q4ibQmzKxgmstTQIgJRT4o/X0HBBDn2S3JU63MgYKSzJ8rzRni6FCTSP21Kc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25652510},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"f75f828893a9017d90a65bf1ecd5963dd1bb5139","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.5_1788771604499_0.8532041297719386","host":"s3://npm-registry-packages-npm-production"}},"2.28.6":{"name":"@maxgfr/codeindex","version":"2.28.6","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.28.6","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"b5eeee8bd469ba80d6778f91ef86e453739092d7","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.28.6.tgz","fileCount":148,"integrity":"sha512-hWrxj5kI1SZ1wRphPR1w7psraKKtPMYzq4LAVpI+L6PTzLbVzboUbAI9WFm7e65qne8DLuEn8S4eL0t9ovLEEQ==","signatures":[{"sig":"MEYCIQCYe2GPyT2k3ZGZBSBAAEVQIuHhMA6XA5YwH4eX3DXCBAIhAPjcdKpdBLiBpzkt/rHlJLg0hWNA4RKKZmEwSGQeta6+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.28.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25661993},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"99e74c63f8ffe834a7d5a9f2fd28b78c9d505860","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.28.6_1788776979554_0.8758625592963709","host":"s3://npm-registry-packages-npm-production"}},"2.29.0":{"name":"@maxgfr/codeindex","version":"2.29.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.29.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"f2c0958e0c0359b5454bc38d89b41070895d2b13","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.29.0.tgz","fileCount":150,"integrity":"sha512-fOkzW5SjUygVRj6EYPaqXOG3KwRqXbn2rFe9qRyOPtlGkZtGI1HmLXSXyH12vfwB3xJrfNp2qZk/IVbgk5N2fA==","signatures":[{"sig":"MEUCIA9ENTrmagjOYXL25VNqoMrNPKHGfJM/HKH+L9Ycf4a7AiEA7OSnwxYqWGkNbHGk1nfbquJSsbhApPrqwwUzCrAfdVg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25704444},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"8464f7c6ccadff141e9f202b911d57025335adc8","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.29.0_1788789138367_0.16341145190546746","host":"s3://npm-registry-packages-npm-production"}},"2.29.1":{"name":"@maxgfr/codeindex","version":"2.29.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.29.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"3ba985b743bd42c705d8c46534c965efe28752c1","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.29.1.tgz","fileCount":150,"integrity":"sha512-+uLN8T8boIxQ/8dgx7CsX3VKwIXaTF/wwOQ+9veCE7Sm6VIyZp85hDZ1K6ydMp8NLa9Ddy/B5sa9gqpjugQTcQ==","signatures":[{"sig":"MEUCIQDS3fS4wF3Hrr3RSX3SmTUH8/FDf2OsR/E/ZggeqqttPgIgHoJKKDcm9nO94iGuOiUIer0ADi0G6cY3D9K6jRbHU/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.29.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25704444},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"bacb602cde6a65669c3cfa9b5c900c715ec6bcf6","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.29.1_1788790794100_0.6683126156050214","host":"s3://npm-registry-packages-npm-production"}},"2.30.0":{"name":"@maxgfr/codeindex","version":"2.30.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.30.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"6d079f52bd8268ffb3d06b9128b3db3d7ee0ed79","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.30.0.tgz","fileCount":151,"integrity":"sha512-dkHvT3YMBmEERC6s2iQD8uKCL6t55tHMBT5wHpoUEMWnx9/biHHoQArNI/Iyu8smmqllexfFjnW/eGP3HcDR8Q==","signatures":[{"sig":"MEUCIQDrtp5n0xMPEF3nlyElobMkMBQEnoQj56a8kvShKVeKnQIgFuBnXVVK/Hja1dt+/HgcyWqKyjGg31sWYM9aBwaOtpw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25725378},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"25fd946ef58b029c7829e72b3a05a292dc692ded","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.30.0_1788866384670_0.9387165338078691","host":"s3://npm-registry-packages-npm-production"}},"2.30.1":{"name":"@maxgfr/codeindex","version":"2.30.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.30.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"918cd7ccc45be8ab49b748230cf9c7578c8129cf","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.30.1.tgz","fileCount":151,"integrity":"sha512-t//0xecSfDO8iZvwKWSjSncE5/fjgiCe/prYzLKU+f4a8TrtbWJRbYZn6QTwwBuID3GIt8xla9kp/U7ulfBWoA==","signatures":[{"sig":"MEQCID3Ls4V4o8s8dyx3x/3aGyZzFeGvgWJTLzZV/wdtc18NAiBc0WX854//BN/ASb5kT59LyP6WVLxQslW9Dl8PrQ89WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGBDFQpScewDNM08fNXH21hKf47evgyiKb1ZPo9ri0lbAiBAHu35U5gRz2LzZGHIZXLe3D8A17ESISXUCFG3DqV6kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.30.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25725378},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"f2ed49c89c33c5c444f96537414ec47096c00e8a","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.30.1_1789370810400_0.39708409970099834","host":"s3://npm-registry-packages-npm-production"}},"2.31.0":{"name":"@maxgfr/codeindex","version":"2.31.0","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.31.0","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"bb77f15f14c4ce571156b9438bbabace1e28af55","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.31.0.tgz","fileCount":168,"integrity":"sha512-ttJpUmeUdOXh6mLi+geq85zhFVi9bZHA7qiRFB0aw9Gyp+AcKG+SEJG3jSnvuiLwxMthN1PKr5g+38GCXMEtaw==","signatures":[{"sig":"MEUCIBqJcbOXm7YbRmVKwwWzxMRZbfZDlhZbUZCNUkRKErszAiEAn3DHbqUjrTZP7WgUphbTR9kT6LpqYD4hgatS4jgZzcA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCuGB4J03i98pPBpwcde8Vlca2Ddf2Xu+VFoy2i5ijPswIhAKRrNSE0E/3Be5BKTQ6JLZUZtLlCX0F9DbAruWB99/US","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27054828},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"8aa88935ed6329c95e786e68e2c550830085084b","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.31.0_1790691721003_0.5842372556461888","host":"s3://npm-registry-packages-npm-production"}},"2.31.1":{"name":"@maxgfr/codeindex","version":"2.31.1","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"author":{"name":"maxgfr"},"license":"MIT","_id":"@maxgfr/codeindex@2.31.1","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"homepage":"https://github.com/maxgfr/codeindex#readme","bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"bin":{"codeindex":"scripts/cli.mjs"},"dist":{"shasum":"87d0c56e45adbeae555562306a543abd702d23ee","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.31.1.tgz","fileCount":168,"integrity":"sha512-NDWIatO0wHaqTz25PCpr/vmKGwG7sAiNhE4BRUlBv4mAFjkUna/KX09isNzqIzliRpKZ6wfhPhM3dUWNbytB9w==","signatures":[{"sig":"MEYCIQCRHDVGQgNJAGo1kESpwZdQkroIUuu0txQu08hWgvroZgIhAOMoHWorggjCSvPv9h3lhIpNJ8FswWagVZlqFyOqAupV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIA0AUxFdnVe3lvSypnHj+29X05+xi+WHrmyg0pklvpGzAiAjoyXM60hN6/AOpgyCADE3naA9XJbZtHpFG6Wt+SfpOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.31.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27055018},"main":"./scripts/engine.mjs","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"c4fa6c46b3ba5a7405778d6e209da4faef52cca6","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/codeindex_2.31.1_1790789635891_0.6562506611008303","host":"s3://npm-registry-packages-npm-production"}},"2.31.2":{"_id":"@maxgfr/codeindex@2.31.2","bin":{"codeindex":"scripts/cli.mjs"},"bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"dist":{"shasum":"591aefd3983ab9f9a36175e84efbb7f11195051c","tarball":"https://registry.npmjs.org/@maxgfr/codeindex/-/codeindex-2.31.2.tgz","fileCount":168,"integrity":"sha512-kPIFWuizbp9weEUIn/o9oTirQyeSswDIx1Mo2H92eb4NGMdFjUwST97Z1izUi+3XfC8D8MrbVK5uKdSPgvuspg==","signatures":[{"sig":"MEYCIQCrkmQR1vCFyMOah6rMQwoj2vcpFJweQEKBTWxxtmp6qgIhAOgxlydP4fbrnIknBwRUIq+rynknwKh1d67DWSrmMOzD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDM1GODp7JRxWLyGY7ON3ON7PkxhuQmmdDGdjQODMryLwIgLiM39LGwzoVVqcL77//Ch7xfUMafG5UF7tFoV7EsPco="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@maxgfr%2fcodeindex@2.31.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27055018},"main":"./scripts/engine.mjs","name":"@maxgfr/codeindex","pnpm":{"overrides":{"esbuild":"0.28.2"},"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./scripts/engine.d.mts","author":{"name":"maxgfr"},"engines":{"node":">=18"},"exports":{".":{"types":"./scripts/engine.d.mts","import":"./scripts/engine.mjs","default":"./scripts/engine.mjs"},"./browser":{"types":"./scripts/engine.browser.d.mts","import":"./scripts/engine.browser.mjs","default":"./scripts/engine.browser.mjs"},"./package.json":"./package.json"},"gitHead":"e71ee07f863b5f58de3bc58765c8206efef73987","license":"MIT","scripts":{"demo":"node scripts/cli.mjs graph --repo tests/fixtures/mini-repo","test":"node scripts/fetch-grammars.mjs --extended && vitest run","build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs","quality":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_WRITE=1 vitest run tests/quality.test.ts","release":"semantic-release","grammars":"node scripts/fetch-grammars.mjs","test:e2e":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_E2E=1 vitest run tests/e2e-real-repos.test.ts","typecheck":"tsc --noEmit","test:watch":"node scripts/fetch-grammars.mjs --extended && vitest","check:build":"tsup && node scripts/postbuild.mjs && node scripts/build-browser.mjs && git diff --exit-code -- scripts/engine.mjs scripts/engine.d.mts scripts/engine.browser.mjs scripts/engine.browser.d.mts scripts/cli.mjs scripts/grammars","quality:report":"node scripts/fetch-grammars.mjs --extended && CODEINDEX_QUALITY_REPORT=1 vitest run tests/quality.test.ts","grammars:extended":"node scripts/fetch-grammars.mjs --extended"},"version":"2.31.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d2925dce-bbff-4d34-9a8e-59d78d3bd453"}},"homepage":"https://github.com/maxgfr/codeindex#readme","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"_npmVersion":"11.19.0","description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","directories":{},"maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsup":"^8.3.0","vitest":"^4.1.11","esbuild":"0.28.2","typescript":"^5.5.0","@types/node":"^20.19.43","tree-sitter-c":"^0.24.1","tree-sitter-go":"^0.25.0","tree-sitter-cpp":"^0.23.4","tree-sitter-php":"^0.24.2","web-tree-sitter":"^0.27.0","semantic-release":"^25.0.9","tree-sitter-bash":"0.25.1","tree-sitter-java":"^0.23.5","tree-sitter-ruby":"^0.23.1","tree-sitter-rust":"^0.24.0","tree-sitter-scala":"0.24.0","tree-sitter-elixir":"0.3.5","tree-sitter-python":"^0.25.0","tree-sitter-c-sharp":"^0.23.5","tree-sitter-solidity":"1.2.13","@semantic-release/git":"^10.0.1","@semantic-release/exec":"^6.0.3","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2","@semantic-release/changelog":"^6.0.3","@tree-sitter-grammars/tree-sitter-hcl":"1.2.0","@tree-sitter-grammars/tree-sitter-lua":"0.4.1","@tree-sitter-grammars/tree-sitter-zig":"1.1.2","@tree-sitter-grammars/tree-sitter-kotlin":"1.1.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codeindex_2.31.2_1790850913886_0.262386820758828"}}},"time":{"created":"2026-07-22T22:09:49.515Z","modified":"2026-10-01T10:35:14.371Z","2.7.0":"2026-07-22T22:09:49.926Z","2.8.0":"2026-07-23T08:29:41.375Z","2.8.1":"2026-07-23T09:31:16.584Z","2.9.0":"2026-07-23T09:44:24.108Z","2.10.0":"2026-07-23T10:10:18.722Z","2.11.0":"2026-07-23T11:15:29.423Z","2.11.1":"2026-07-23T12:27:25.095Z","2.12.0":"2026-07-23T16:16:15.562Z","2.13.0":"2026-07-24T08:55:21.981Z","2.14.0":"2026-07-24T17:09:22.744Z","2.15.0":"2026-07-24T18:47:24.967Z","2.16.0":"2026-07-24T21:44:18.598Z","2.17.0":"2026-07-25T08:37:05.783Z","2.17.1":"2026-07-25T09:33:12.188Z","2.18.0":"2026-07-25T11:08:34.424Z","2.19.0":"2026-07-25T11:35:44.861Z","2.19.1":"2026-07-25T11:39:16.834Z","2.20.0":"2026-07-25T20:08:49.245Z","2.20.1":"2026-07-25T20:59:50.354Z","2.21.0":"2026-07-30T12:19:32.873Z","2.21.1":"2026-07-30T12:24:05.057Z","2.22.0":"2026-07-30T14:54:00.822Z","2.22.1":"2026-07-31T12:03:24.474Z","2.23.0":"2026-08-01T08:07:39.091Z","2.24.0":"2026-08-01T08:18:42.445Z","2.24.1":"2026-08-01T08:21:20.157Z","2.24.2":"2026-08-01T08:45:39.399Z","2.25.0":"2026-08-01T09:08:49.039Z","2.25.1":"2026-08-01T09:16:56.639Z","2.25.2":"2026-08-01T11:59:28.392Z","2.26.0":"2026-08-01T12:20:59.396Z","2.27.0":"2026-08-05T18:02:40.619Z","2.27.1":"2026-08-05T18:16:18.706Z","2.28.0":"2026-08-12T17:13:33.388Z","2.28.1":"2026-08-31T11:38:37.969Z","2.28.2":"2026-09-02T06:36:33.282Z","2.28.3":"2026-09-03T04:49:31.653Z","2.28.4":"2026-09-03T05:01:16.662Z","2.28.5":"2026-09-07T09:00:04.711Z","2.28.6":"2026-09-07T10:29:39.772Z","2.29.0":"2026-09-07T13:52:18.562Z","2.29.1":"2026-09-07T14:19:54.327Z","2.30.0":"2026-09-08T11:19:44.909Z","2.30.1":"2026-09-14T07:26:50.567Z","2.31.0":"2026-09-29T14:22:01.172Z","2.31.1":"2026-09-30T17:33:56.225Z","2.31.2":"2026-10-01T10:35:14.056Z"},"bugs":{"url":"https://github.com/maxgfr/codeindex/issues"},"author":{"name":"maxgfr"},"license":"MIT","homepage":"https://github.com/maxgfr/codeindex#readme","keywords":["code-index","static-analysis","link-graph","symbol-extraction","tree-sitter","repo-indexing"],"repository":{"url":"git+https://github.com/maxgfr/codeindex.git","type":"git"},"description":"Self-contained, deterministic repo-indexing engine: walk + language detection + symbol/import extraction (tree-sitter AST with regex fallback) + import resolution + typed cross-file link-graph + analytics. Ships as a single zero-dependency engine.mjs that","maintainers":[{"name":"maxgfr","email":"maxgolfier@gmail.com"}],"readme":"# codeindex\n\n[![Site](https://img.shields.io/badge/site-maxgfr.github.io%2Fcodeindex-2a78d6)](https://maxgfr.github.io/codeindex/)\n[![Playground](https://img.shields.io/badge/playground-index%20a%20repo%20in%20your%20browser-a8460f)](https://maxgfr.github.io/codeindex/playground/)\n\nSelf-contained, deterministic **repo-indexing engine**: file walking, language\ndetection, symbol/import extraction (tree-sitter AST with a regex fallback),\nimport resolution, a typed cross-file link-graph, and graph analytics — shipped\nas a single zero-dependency `engine.mjs` that consumer tools **vendor** (copy\ninto their repo) instead of installing.\n\nDesigned for downstream tools — agent skills, CLIs, CI gates — that vendor the\nengine as a single file instead of taking an npm dependency. How it stacks up\nagainst universal-ctags, Serena and Graphify: [How it\ncompares](#how-it-compares).\n\n## What it does\n\n- **Walk** a repo deterministically: ignore lists, `.gitignore` and\n  `.git/info/exclude`, binary/lockfile skips, a size cap, symlink-cycle guard.\n  A symlink that stays inside the repo, file or directory, is an alias: its\n  target is indexed once, under its own path. `build`, `out`, `target` and\n  `tmp` are skipped as build output unless git tracks files in them — they\n  are ordinary package names too (a Go `build` package, `com.acme.build`).\n  Nested repositories (a subdirectory with its own `.git` — linked worktrees,\n  vendored clones, submodules) are skipped like git does, and `.git` itself —\n  like the engine's own `.codeindex` — is never walked even when\n  `--ignore-dir` replaces the default ignore list. No\n  file-count cap unless you ask for one (`--max-files`), and asking sets the\n  `capped` flag — never a silent truncation.\n- **Scan** every file into a `FileRecord`: classification, language, symbols,\n  imports, headings, hashes — with an incremental cache fastpath. Extraction\n  runs across worker threads by default (`--workers`, `CODEINDEX_WORKERS`);\n  artifacts are byte-identical either way, and anything that would make a\n  worker's result differ falls back to the single-threaded path. JS/TS and\n  Python imports are read from code only: comments, docstrings and\n  string/template-literal text are masked first, so example code quoted in a\n  JSDoc block, a docstring or a code generator's template never becomes an\n  edge (JSDoc `import(\"./x\")` types and `@import` tags, which are real type\n  dependencies, are kept). The same scan runs with or without a grammar, so\n  `extractAst` and the index report the same imports. Python\n  `from pkg import name` also links `pkg/name.py` when `name` is a submodule\n  (and nothing when it is a function or class); PHP group (`use A\\{B, C}`) and\n  comma `use` lists and `__DIR__`-anchored includes are followed, and a trait\n  `use` inside a class is not an import. Build output committed under an\n  ordinary name is recognised by its content: minified JavaScript (not only a\n  `.min.js` name) and bundles (esbuild's `// src/x.ts` module banners, webpack's\n  and ncc's module loader). It stays in the index with its summary and\n  imports, flagged `generated: \"minified\"` or `\"bundle\"` on its `FileRecord`\n  and graph node, but its symbols and call sites are not extracted: one-letter\n  noise for the first, copies of the sources' definitions for the second.\n- **Extract symbols** via tree-sitter (15 committed grammars, plus 6 more via\n  `grammars pull`) or per-language regex rules (16 languages, always available).\n  Each symbol carries its **complete signature** (parameters and return type,\n  not the first physical line; one line, with no comment and no body — not an\n  arrow's expression body, a Go interface's method list or a macro's\n  expansion), its own **doc comment**, its qualified `parent`,\n  and its line span — including the members a declaration-only walk misses:\n  interface members, class fields, enum members, every `declare`/`.d.ts`\n  declaration, Rust trait method signatures, Go interface method sets and type\n  aliases, record components, constructor `val` parameters and their\n  TypeScript (`private readonly dep: Dep`) and PHP 8 (promoted) twins, every\n  name of a multi-name declaration (`var a, b int`, `int x, y;`,\n  `a, b = 1, 2`), C `#define` macros and the members of a `typedef struct`,\n  Python declarations under `if TYPE_CHECKING:` / `try:` / `with` blocks, Ruby\n  `class << self` methods, `private def x` definitions and the block of\n  `Point = Struct.new(…) do`, Elixir clauses with a `when` guard and\n  `defguard`, and the members of a class bound by `module.exports =` or an\n  anonymous `export default class` (a default export with no name of its own\n  is named after the file stem). A doc comment is found across Rust\n  attributes and TypeScript decorators. Visibility is read from a\n  declaration's modifiers, never from its parameter names or default values;\n  an `export { … }` list marks only the bindings of its own scope; and a\n  Python module's `__all__` (when written as literals) decides which of its\n  top-level names are public, the names it imports and lists becoming\n  `reexport` symbols. An out-of-line C++ definition (`void Widget::draw()`)\n  belongs to its class, and a Lua `function M.go()` to its table; a `.h`\n  header is parsed as C++ when its content is (a namespace, class or\n  template), as C otherwise. Vue, Svelte and Astro\n  single-file components are extracted from their `<script>` blocks (and\n  Astro's frontmatter) as the JS/TS their `lang` names, at their real lines:\n  symbols, imports, and calls from both the script and the template, bound in\n  the JS/TS call family. A Svelte prop (`export let`) and an Astro frontmatter\n  export are not module exports, so they are never reported as dead code.\n  The regex tier (the only one for Swift and Dart, and for the extended\n  languages until a pull) reads code only: comments and strings are masked,\n  so an example in a doc comment or a code generator's template is not a\n  declaration. It takes each declaration's doc comment from the lines above\n  it and, in brace languages, its line span, but only where the body's\n  braces close as a formatter puts them; otherwise the span is left out\n  rather than guessed. Its signature is the declaration's first line, and it\n  reports no `parent`.\n  Each file's **summary** is the first leading comment that describes\n  something: license and copyright text (MIT, BSD, Apache, GPL, MPL, the Go\n  \"governed by\" line), linter and editor magic comments (`frozen_string_literal`,\n  `-*- coding -*-`, `go:build`), Xcode's file stamp and bundler region markers\n  are skipped, and `#` reads as a comment only in languages where it is one —\n  never a C `#include` or a Rust `#[attribute]`.\n  Docs get a title, section headings, a summary and `doc-link` refs: markdown\n  (ATX and setext headings, inline and reference links) and reStructuredText\n  (Sphinx section titles; `toctree` entries, `:doc:` roles and\n  `include`/`literalinclude` targets as links). Other prose (`.txt`, `.adoc`)\n  is indexed under its file name.\n- **Resolve imports** across languages: tsconfig `paths` (tsc's precedence:\n  exact alias, then longest prefix) and `baseUrl`, `extends` chains into\n  workspace packages and `${configDir}`, package `exports` and `imports`\n  (`#subpath`), bundler `?query` suffixes, Python import roots found the way\n  mypy finds them (the dir holding each top-level package, so src layouts\n  resolve and a package's own `typing.py` does not shadow the stdlib), go.mod\n  (a package's representative file is never a `_test.go` when it has other\n  files), Cargo (`[lib]` names, renamed dependencies, `#[path]` modules, and\n  `use` paths read the way the crate's edition reads them), PSR-4, C#\n  namespaces, and one JVM index for Java, Kotlin and Scala, so a Kotlin file\n  importing a Java class (or the reverse, through the `<File>Kt` facade)\n  links; Scala selector groups and package-relative imports resolve too. Dart\n  (relative and `package:` URIs of an in-repo `pubspec.yaml`), Lua `require`\n  (`a/b.lua`, `a/b/init.lua`), shell `source`/`.` of a literal path, and\n  Elixir `alias`/`import`/`use` of a module the repo defines resolve as well.\n  A markdown link starting with `/` is repo-root-relative, as GitHub renders\n  it.\n- **Build a typed link-graph**: `import` / `call` / `extends` / `implements` /\n  `use` / `doc-link` / `mention` edges at file and module level, plus Louvain\n  communities, PageRank/betweenness centrality, a tests→code map (a test\n  covers what it imports, uses or calls, the file it is named after, and in Go\n  its whole package), and surprise-edge detection. Inheritance also yields a **type hierarchy** (what a\n  type extends and implements, and what extends and implements IT) and a\n  **symbol-level graph** for bounded \"what does this reach\" neighborhoods.\n  Go states no implementations, so the hierarchy adds them: a\n  `var _ I = (*T)(nil)` assertion, or a type whose methods (its own, plus the\n  ones embedding promotes) match the interface's by name and parameter count.\n  The second kind is marked `structural: true`. These are answers to\n  `hierarchy` and `implementations` only, never graph.json edges.\n- **Render** byte-stable `graph.json` / `symbols.json` (two builds of an\n  unchanged repo are byte-identical), plus a **SCIP** code-intelligence index\n  (`index.scip`: nested symbols, package identity, implementation\n  relationships) via a hand-rolled zero-dependency protobuf encoder — validated\n  by the official `scip` CLI (`stats`/`lint`).\n\n## Measured against other indexers\n\n\"Finds better\" is a claim, so the checks that count are the ones this project did\nnot author. Four oracles score extraction against outside authorities — a real\ncompiler, a mature indexer, and the grammars' own published queries and\nvocabulary:\n\n| oracle | what makes it independent | result |\n|---|---|---|\n| **TypeScript compiler index** (`scip-typescript` 0.4.0) | an index built by the real TypeScript compiler — authoritative where every other check here is syntactic | **100%** of its 93 named declarations, against ctags' 94.6% on the same files |\n| **universal-ctags differential** (Universal Ctags 6.2.1) | an independent, mature indexer covering ~40 languages | reports **2,014** declarations ctags does not over 6 real repositories, and reproduces **61.7%–98.8%** of ctags' names — what is left bucketed by kind, per repo below |\n| **Official `tags.scm` queries** | the code-navigation patterns each grammar's own authors publish, and GitHub uses | **1** adjudicated difference, over the 14 of 17 languages that publish one |\n| **Grammar vocabulary** | each tree-sitter grammar's own declared node types, read at runtime from the parser | 21 grammars audited, **209** declaration-ish node types still unhandled |\n\n### The one head-to-head\n\nExactly one figure on this page is a *score*: the one where both tools are\nmeasured against the same third-party authority, rather than against each other.\nOn the 53 files of `create-t3-turbo` that an index built by the **real TypeScript\ncompiler** covers:\n\n| against the compiler's 93 named declarations | found |\n|---|---|\n| **codeindex** | **100%** |\n| universal-ctags | 94.6% |\n\nAll 5 ctags missed are one construct (string-literal declaration names — module\naugmentations, quoted interface keys). That head-to-head is also the calibration\nfor everything below: it is how far a syntactic oracle can be trusted on the ~40\nlanguages no compiler here can check.\n\nEvery other percentage in this section is an *overlap ratio between two tools\nthat disagree about what counts as a declaration*, which is a different thing and\nis not scored as one.\n\n### Per repository, against universal-ctags\n\nDeclaration names compared per file over real code, not fixtures. **The\npercentage here is not a score, which is why it is not in the last column.** It\nis `|ours ∩ ctags| / |ctags|` — the share of ctags' names this index also reports\n— so by construction it can only ever show where we lose: nothing in it measures\nwhat ctags omits. The two count columns are the directions that actually compare\nthe tools; read those.\n\n| repo | files | both report | of ctags reproduced | ctags only | **codeindex only** |\n|---|---|---|---|---|---|\n| BurntSushi/ripgrep | 107 | 3,189 | 98.8% | 40 | **47** |\n| gin-gonic/gin | 100 | 2,010 | 98.6% | 29 | **15** |\n| pallets/flask | 86 | 1,516 | 93.9% | 98 | **6** |\n| t3-oss/create-t3-turbo | 54 | 97 | 76.4% | 30 | **15** |\n| nrwl/nx-examples | 87 | 87 | 69.6% | 38 | **27** |\n| socialgouv/code-du-travail-numerique | 1,429 | 3,659 | 61.7% | 2,271 | **1,904** |\n\nSo no, the low rows are not \"ctags finds more\" — and that is measured, not\nasserted. The differential records what the *ctags only* column **is**, bucketed\nby the kind ctags itself assigned (`ctagsOnlyByKind` in the same record). On\n`code-du-travail`, its 2,271 names are:\n\n| ctags kind | count | what they are |\n|---|---|---|\n| `constant` | 2,020 | all but a handful sit inside a function body, an object literal or a test block — read off the source, not assumed |\n| `variable` | 116 | same story |\n| `property` | 107 | object-literal keys (`Conditions: ConditionsIcon`) |\n| `alias` | 13 | import aliases — `import type Engine from \"publicodes\"` |\n| `method` / `class` / `function` / `enumerator` | 15 | object-literal methods and test-scope declarations |\n\nThat is a definition gap, not a hole: a declaration index omits locals and config\nkeys on purpose, which is the whole reason its output fits in a model's context.\nThe same holds on the other repos — ripgrep's 40 are mostly `variable` and Rust\n`implementation` blocks, flask's include 21 that **ctags itself labels\n`unknown`** (its kind for an import alias), gin's are its synthetic\n`anonMember`/`packageName`.\n\nAnd where a third tool can settle it, it does — `create-t3-turbo` is the 76.4%\nrow above, and it is also the head-to-head at the top of this section, the one\nthe real TypeScript compiler adjudicates **100% to 94.6%** in our favour. A row\nthat looks like a loss against ctags is a row the authority scores as a win over\nctags. That is the whole reason the percentage is not in the score column.\n\nAnd the residue is what the differential is genuinely for. Where it named real\nmisses they were fixed, not explained away: Go package clauses, Python PEP 484\nre-exports, Rust in-function `const`/`static`, and — in `EXTRACTOR_VERSION` 12 —\ndeclarations inside an IIFE, which is why `code-du-travail` moved to 3,659 here.\nThe honest limit stands: on the languages no compiler-backed oracle covers,\nnothing proves the rest of that column is *entirely* surplus.\n\nRefreshed by `CODEINDEX_ORACLE=1 pnpm vitest run\ntests/oracles-external-diff.test.ts` and by the weekly CI job; tool version,\ncorpus and date sit next to the figures in\n`tests/quality/external-oracles.json`.\n\n### Against hand-labelled ground truth\n\nThe external indexers report declarations and nothing else, so doc comments,\ncomplete signatures and call edges cannot be checked against them at all.\nThose are covered by labels written here: `tests/fixtures/quality/` holds every\ndeclaration a correct indexer should report for **17 languages**, with its kind,\nvisibility, doc and signature, plus a relevance-judged search corpus whose query\nterms live only in prose.\n\n| what is scored | score | measured on |\n|---|---|---|\n| symbol precision / recall | **100% / 100%** | 346 labelled declarations in 23 files |\n| kind accuracy | **100%** | the same 346 declarations |\n| visibility accuracy | **100%** on 16 of 17 languages, 95.8% on Go | the same 346 declarations |\n| doc comment attached | **100%** | the 188 declarations labelled with a doc |\n| complete signature | **100%** | the 32 declarations labelled with a signature |\n| call edges / inheritance (F1) | **100% / 100%** | 54 labelled call sites, 24 relations |\n| search MRR / nDCG@10 / recall@5 | **93.8% / 86.0% / 84.4%** | 16 relevance-judged queries |\n\n`pnpm quality:report` reproduces every number; `tests/quality.test.ts` enforces\nthem as a **ratchet in both directions** — losing quality fails CI, and gaining\nit fails too until the baseline is refreshed in the same commit. Two builds of\nan unchanged repo stay byte-identical.\n\nOne judged query still returns nothing relevant, and the reason is honest: it\nasks for \"authentication\" against a file that never writes \"auth\" in any form.\nNo lexical index can answer that; the [semantic tier](#semantic-search-deterministic-static-embedding-tier)\nis what it is for.\n\n## Use as a library (the vendoring model)\n\nConsumers commit `scripts/engine.mjs` + `scripts/engine.d.mts` (fetched at a\npinned release tag) into `src/vendor/` and import from it; their bundler inlines\nthe engine so they still ship a single file:\n\n```ts\nimport { buildIndexArtifacts, renderGraphJson } from \"./vendor/engine.mjs\";\n\nconst { scan, graph, symbols } = buildIndexArtifacts(\"/path/to/repo\");\n```\n\nThe AST tier is optional: without a `grammars/` directory next to the bundle\nthe engine silently uses its regex tier. Only tools that want AST precision\nalso vendor `scripts/grammars/` (~17 MiB of wasm).\n\n### Inventory consumers\n\n`walk(root, options)` also serves exhaustive inventories. The default source-indexing\npolicy is unchanged. Opt into `includeBinary`, `includeLockfiles`, `includeOversize`,\n`includeMinified` and `includeFileSymlinks` (in-repo file links, skipped by default\nas aliases), or replace `binaryExtensions` to keep textual SVG. These\ncontrols are independent: a `.lock` extension still follows the binary policy.\n\n`filter({ rel, abs, directory })` prunes consumer output and out-of-scope trees\nbefore descending. `onSkip({ rel, reason, directory, size? })` records observed\nexclusions, including nested repositories and broken links, without allocating a\nsecond inventory for ordinary indexing. It does not enumerate pruned descendants;\n`capped` still means that an explicitly requested file budget cut the walk short.\n\n`readTextEx(path)` distinguishes empty, binary and unreadable files, reports the\nencoding and original bytes, and marks whether decoded offsets address those bytes.\n`OffsetMap` converts JavaScript string positions to UTF-8 byte positions. Consumers\nkeep their own classification and editing policy; `readText` remains the compatible\nstring-only reader.\n\n### Two grammar tiers\n\n| tier | languages | how you get it |\n|---|---|---|\n| **core** (committed) | TypeScript, TSX, JavaScript, Python, Go, Rust, Java, C, C++, C#, Ruby, PHP, Scala, Bash, Lua | ships in the bundle — no network, no install |\n| **extended** (pull-only) | Kotlin, Elixir, Zig, Solidity, HCL, Terraform | `codeindex grammars pull` |\n\nThe extended set is **not** in git: it adds ~6 MiB of wasm for languages most\nrepos do not contain, so committing it would grow every vendoring consumer's\ncheckout for a benefit only some can use. It ships inside the per-release\n`grammars-<version>.tar.gz` asset instead. Without a pull those grammars are\nsimply absent and the engine falls back to the regex tier, exactly as it does for\na language it has no grammar for at all — `codeindex grammars status` reports\nresolved-vs-missing per tier (and `extendedPullNeeded` while any extended\ngrammar is missing) so a Kotlin repo quietly indexed by regex is visible rather\nthan guesswork.\n\n*Not included, and why:* **Swift** publishes no prebuilt wasm at all, and\n**Dart**'s does not load under web-tree-sitter 0.26 — shipping it would be dead\nbytes advertising precision that silently degrades. Both have regex extractors.\n\n### Slim grammars (pull instead of vendor)\n\nConsumers that want AST precision but not the ~17 MiB of vendored wasm can\n`codeindex grammars pull` the grammars once into a shared, per-machine cache\n(`<XDG_CACHE_HOME|~/.cache>/codeindex/grammars/<ENGINE_VERSION>`) instead:\n\n```sh\ncodeindex grammars status   # active tier (adjacent/env/cache/none) + whether a pull is needed\ncodeindex grammars pull     # fetch the per-release grammars asset, sha256-verified, into the cache\n```\n\nResolution is **adjacent > env > cache > regex**, per grammar: a\nbundle-adjacent `grammars/` still wins if present (offline setups are\nuntouched), then `CODEINDEX_GRAMMARS_DIR`, then the pulled cache — and a\ngrammar the winner lacks is looked up in the tiers below it. That is what lets\nthe npm package (which ships only the core wasms) pick up the extended ones a\npull put in the cache. The legacy `CODEINDEX_GRAMMAR_DIR` still pins one dir\nwith nothing behind it. `pull` fetches the official\n`grammars-<version>.tar.gz` release asset (its `.sha256` sidecar is verified\nbefore anything is written) and extracts it atomically; the same wasm bytes\nproduce **byte-identical** AST extraction from the cache as from a vendored dir.\nIt is fully **offline-safe**: with no grammars resolvable anywhere — and after a\nfailed or absent pull — the engine silently falls back to the regex tier exactly\nas it does today; a pull never throws into indexing.\n\n## Use from npm\n\nFor consumers who don't want to vendor the bundle, `@maxgfr/codeindex` also\nresolves as a regular package:\n\n```sh\nnpm i @maxgfr/codeindex\n```\n\n```ts\nimport { scanRepo, ENGINE_VERSION } from \"@maxgfr/codeindex\";\n\nconst scan = scanRepo(\"/path/to/repo\");\n```\n\nThe CLI ships in the same package — see **Use as a CLI** below for the global\ninstall command. Consumer tools should still prefer vendoring: it keeps their\nown bundle single-file and pinned to an exact commit without an npm dependency.\n\n### In a browser\n\n`@maxgfr/codeindex/browser` is the same engine resolved against browser shims:\nan in-memory filesystem you populate, tree-sitter grammars fetched through your\nown transport, and everything spawn-based degrading along the fallbacks the\nengine already ships. Indexing a tree through it produces `graph.json` and\n`symbols.json` **byte-identical** to the Node build — asserted in CI over three\nfixtures, with the grammars asserted loaded so the comparison cannot pass\nvacuously.\n\nThe VFS is mounted in **two phases**, and the split is the point rather than an\nimplementation detail. Sizes alone satisfy `lstatSync`, which is all `walk()`\nneeds — so the real walk runs *before* you have fetched anything, and its\nkeep-list is your download list. Gitignore chains, `IGNORE_DIRS`, `LOCKFILES`,\n`BINARY_EXT` and the 1 MiB cap all apply, and you never pay for a file the\nengine was going to discard.\n\n<details>\n<summary><b>The full mount → walk → fetch → index sequence, the API this build adds, and sizing</b></summary>\n\n```ts\nimport {\n  resetVfs, mountFiles, setFileBytes, pruneUnfetched,\n  loadGrammars, walk, buildIndexArtifacts, searchIndex,\n} from \"@maxgfr/codeindex/browser\";\n\nconst ROOT = \"/repo\";\nresetVfs();\n\n// Phase A — the whole tree, sizes only. `manifest` is whatever you can\n// enumerate cheaply: a git tree listing, a directory handle, a zip index.\nmountFiles(manifest.map((e) => ({ path: `${ROOT}/${e.path}`, size: e.size })));\n\n// walk() honours .gitignore, so give it the real bytes of those (they are tiny).\nfor (const path of gitignorePaths) setFileBytes(`${ROOT}/${path}`, await readBytes(path));\n\n// The engine decides what is worth reading.\nconst planned = walk(ROOT, { maxFiles: 5000 });\nif (planned.capped) console.warn(\"hit the cap you asked for — the index is partial\");\n\n// Phase B — only those, then drop anything still without contents so no\n// phantom empty file enters the index.\nfor (const file of planned.files) setFileBytes(file.abs, await readBytes(file.rel));\npruneUnfetched();\n\n// Load only the grammars these extensions need: a Go repo pays 217 KB and\n// never touches the 5.4 MB C# grammar.\nconst grammars = await loadGrammars(new Set(planned.files.map((f) => f.ext)), (name) =>\n  fetch(`/grammars/${name}`).then((r) => r.arrayBuffer()).then((b) => new Uint8Array(b)),\n);\nif (grammars.tier !== \"ast\") console.warn(`regex tier: ${grammars.note}`);\n\nconst { scan, graph, symbols } = buildIndexArtifacts(ROOT);\n```\n\nHolding every file already — a directory the user picked, an unpacked archive —\nmount them in one pass with `bytes` set and skip phase A. The two phases matter\nwhen *fetching* is the expensive part.\n\n**API this build adds**, on top of the whole main barrel:\n\n| | |\n|---|---|\n| `resetVfs()` | Empty the VFS. Call between trees so one cannot leak into the next. |\n| `mountFiles(files)` | Mount `{ path, size, bytes? }`. Omit `bytes` for phase A. |\n| `setFileBytes(path, bytes)` | Attach contents to a mounted path (or add a file). |\n| `hasFileBytes(path)` / `residentBytes()` | Is it resident; total bytes held. |\n| `pruneUnfetched()` | Drop every file still without contents; returns how many. |\n| `loadGrammars(exts, fetchWasm)` | Fetch + mount the minimal grammar set; returns the tier achieved. |\n| `mountRuntime(bytes)` / `mountGrammar(key, bytes)` | Lower-level mounts, if you drive loading yourself. Mount *before* `ensureGrammars`, which reads them synchronously. |\n| `grammarWasmName(key)`, `RUNTIME_WASM` | Filenames, for assembling your own URLs. |\n\n`loadGrammars` calls your `fetchWasm(name)` with bare filenames —\n`web-tree-sitter.wasm` first, then `typescript.wasm` and so on. Copy\n`node_modules/@maxgfr/codeindex/scripts/grammars/` into your static assets and\nserve them as `application/wasm`; the set is immutable per release, so a `Cache`\nentry keyed by URL never needs invalidating. Skip it entirely and every language\nfalls back to the regex tier — a real option for a small bundle, and\n`loadGrammars` returns the tier it achieved so you can say which one you got\nrather than implying the better one.\n\n**Sizing.** ~325 KB minified (~90 KB gzipped); grammars are separate and lazy\n(`go` 217 KB, `javascript` 412 KB, `python` 458 KB, `typescript` 1.4 MB, plus a\n201 KB runtime). **Run it in a Web Worker**: extraction is synchronous and\nCPU-bound by design — that is what keeps rebuilds byte-identical — so on the\nmain thread it blocks the page.\n\n</details>\n\nThere is no `browser` export condition on the main entry, so no bundler will\nswap the builds behind your back — ask for `/browser` explicitly. `runCli` and\n`runMcpServer` are exported for signature compatibility and throw if called:\nboth are Node-only end to end.\n\nWorking example: the\n[playground](https://maxgfr.github.io/codeindex/playground/), which indexes any\npublic repository client-side ([source](site/playground/)).\n\n## Use as a CLI\n\n```sh\nbrew install maxgfr/tap/codeindex        # or: npm i -g @maxgfr/codeindex\n\ncodeindex index   --repo . --out .codeindex   # graph + symbols + incremental cache\ncodeindex status  --repo . --check            # is .codeindex still fresh? (exit 1 if not)\ncodeindex scan    --repo . --why src/big.go   # why is this file (not) indexed?\ncodeindex graph   --repo . > graph.json\ncodeindex scip    --repo . --out index.scip   # SCIP index (--out - for stdout)\ncodeindex callers --repo .                    # per-symbol caller index\ncodeindex hierarchy       --repo .            # type hierarchy (both directions)\ncodeindex implementations Runnable --repo .   # who implements it, transitively\ncodeindex callgraph buildGraph --repo . --depth 2\ncodeindex find    Client/send --repo .        # declarations: signature, doc, parent, span\ncodeindex refs    backoff --repo .            # defs, bound call sites, referencing files\ncodeindex outline src/client.ts --repo .      # one file's symbols, in declaration order\ncodeindex symbol-at src/client.ts:42 --repo . # the symbol holding that line, and its id\ncodeindex callpath main backoff --repo .      # how main reaches backoff, shortest chains first\ncodeindex grep    'pattern' --repo .\ncodeindex literals --repo .                   # values with no single source of truth\ncodeindex workspaces --repo . --check         # monorepo packages; undeclared sibling imports exit 1\ncodeindex resolution --repo .                 # per-language import resolution health\ncodeindex mermaid src/app --repo .            # module diagram around a module, dir or file\ncodeindex hotspots --repo . --since \"6 months ago\"   # where work concentrates\n```\n\n`index` keeps a `cache.json` next to the artifacts, and every read command\nreuses whatever sits in `--index` (default `.codeindex`; relative to the repo,\nor absolute): unchanged files skip extraction, and when nothing changed the\nartifacts load instead of being rebuilt — one file at a time: `graph` and\n`symbols` print the sha-verified bytes on disk as they are, and a command that\nneeds only the graph never reads `symbols.json`. A new commit over an unchanged\ntree only restamps `graph.json`'s `commit`; `symbols.json` is kept as it is.\nThe index dir itself is never scanned, and `--out .` at the repo root skips\nonly the artifacts it writes. A record is reused only if it was extracted the\nway this run would extract it — the same `--no-ast`/`--max-calls` setting and\nthe same grammar per language — so switching either, or pulling a grammar,\nre-extracts exactly the files it affects. Freshness is keyed on `(size,\nmtime)`; for an edit that preserves both, `--full-hash` re-hashes every file\nand `--no-index-cache` ignores the cache altogether (for `index` too).\nArtifacts are replaced atomically (a temp file renamed over the old one), so a\nconcurrent reader never sees a torn file.\n\nNext to `cache.json`, `index` writes `freshness.json`: each file's `(hash,\nsize, mtime)`, the artifact shas and versions, without the per-file records\nthat make up nearly all of `cache.json` (10MB against 142MB on a 66k-file\nrepo). It is enough to prove the artifacts fresh, so `graph`, `symbols`, the\ncommands that need only the graph, `status`, and an `index` with nothing to\nwrite never parse `cache.json` (on that repo: `graph` 4.4s → 1.5s, `status`\n4.0s → 1.6s, an unchanged `index` 5.6s → 1.8s). It records `cache.json`'s own\n`(size, mtime)`, so one rewritten without it is ignored; a missing, stale or\nmalformed `freshness.json` only sends the command the slower way, to the same\nanswer.\n\n`codeindex status` says whether that index still describes the tree, without\nrebuilding anything: it reads `freshness.json` (else `cache.json`), walks and\nstats, and hashes only the files whose `(size, mtime)` changed. It reports whether `cache.json` is\nusable (or why not: `absent`, `unreadable`, `corrupt`, or written for another\n`schema` or `extractor` version), the indexed and HEAD commits, per-file drift\n(`unchanged`, `touched`, `modified`, `added`, `deleted`, and `reextract` for\nrecords built under another `--no-ast`/`--max-calls` setting or grammar set),\nand `artifactsFresh` with the reasons it is false (`engine-version`,\n`extraction`, `files`, `graph.json`, `symbols.json`). It judges the index under\nthe flags it is given, as a read command would. `--check` exits 1 unless the\nartifacts are fresh: a CI gate for a committed index. A moved HEAD alone is not\nstale, since an index committed to the repo never matches the commit that\ncontains it and read commands restamp the commit anyway; `embeddings.bin` is\nnot checked. The MCP `index_status` tool gives the same answer.\n\n`--scope <dir|file>` restricts a command to one part of the repo (`./src`,\n`src/` and an absolute path inside the repo all name `src`), and combines with\n`--include`/`--exclude` as an intersection: `--scope src --include '**/*.md'`\nis the markdown under `src/`. Globs are rooted at the repo, so `*.md` is the\ntop-level files only and `**/*.md` any depth. The filter runs inside the walk:\n`--max-files` counts only files it keeps, and a directory that cannot hold one\nis never listed (a `--scope` over 186 files of a 66k-file repo walks those\n186). `grep` takes the same intersection, applied to the files it searches\n(its ripgrep walk is not pruned by it). A `--scope`\nthat does not exist, an `--ignore-dir` given a path rather than a directory\nname, and a filter that keeps no file at all each print a warning on stderr.\n\n`scan` also counts what the walk left out, by reason (`skipped`: `gitignored`,\n`ignore-dir`, `over-max-bytes`, `binary-ext`, `lockfile`, `minified`, `filter`,\n`nested-repo`, the symlink cases and `index-output`; a skipped directory counts\nonce, since its contents are never listed). `scan --skipped` lists every skip,\nsorted by path, and `scan --why <path>` explains one path as `{path, indexed,\nreason, detail}`: the detail names the ignore file, line and pattern that\ndecided it, its size against `--max-bytes`, the\n`--scope`/`--include`/`--exclude` that filtered it out, or the skipped\ndirectory above it.\n\n### Naming a symbol\n\n`callers`, `hierarchy`, `implementations`, `callgraph`, `callpath` and `refs`\n(and MCP `callers`, `find_references`, `type_hierarchy`, `implementations`,\n`call_graph`, `call_path`) read a symbol the same way, so an id copied out of one answer pastes into the next:\n\n| form | means |\n|---|---|\n| `greet` | the name. A single-answer command picks the first homonym; `find_references` covers them all, and then tags each call site with the declaring file it binds to (`def`) |\n| `greet@src/lib/greet.ts` | the declaration in that file — any homonym, the first included |\n| `src/lib/greet.ts#greet`, `src/a.ts#Greeter/hello` | a symbol id, as `callgraph` prints it |\n| `Greeter/hello` | a member of `Greeter` |\n\nAn unknown symbol is an error (exit 2; MCP `isError`). A known one that no call\nsite binds to is still an answer, and says why it is empty:\n\n```jsonc\n// codeindex callers register_blueprint --repo flask\n{\n  \"name\": \"register_blueprint\",\n  \"error\": \"no tracked callers for \\\"register_blueprint\\\"\",\n  \"defs\": [ /* src/flask/sansio/app.py:570, src/flask/sansio/blueprints.py:256 */ ],\n  \"unresolvedSites\": 74,   // sites naming it that bind to no single definition\n  \"sample\": [ /* the first five */ ],\n  \"hint\": \"…\"\n}\n```\n\n`find`, `refs` and `outline` print the same answers as MCP `find_symbol`,\n`find_references` and `symbols_overview`: each declaration's complete\nsignature, doc comment, parent and line span, which `symbols` leaves out.\n`find` takes a name or `Parent/name` (`--substring`, `--include-body`,\n`--concise`, `--limit`, default 50) and answers `[]` when nothing matches;\n`refs` takes any symbol form above and, like MCP, still answers for a name the\nrepo does not declare; `outline` exits 2 on a file the index does not hold.\nLike every read command they reuse a fresh persisted index (`--index`).\n\n`symbol-at <file:line>` (MCP `symbol_at`; `file:line:col` works too) turns a\ngrep hit, a stack frame or a diagnostic into a symbol: the innermost\ndeclaration holding the line, with its id, which pastes into `callers`,\n`callgraph` and `callpath`, and the declarations around it, outermost first.\n`symbol` is `null` outside every declaration. The regex tier records an end\nline only where it can prove one (a brace body closed as a formatter puts it),\nso elsewhere the answer is the nearest declaration above, marked\n`\"approximate\": true`.\n\n`callpath <from> <to>` (MCP `call_path`) answers how one symbol reaches\nanother: the shortest chains of calls, following dispatch like `callgraph`\n(a step onto an override says `\"via\": \"dispatch\"`). Ties are listed in id\norder and `pathCount` counts every equally short chain; `--limit` (default 5)\ncaps how many are spelled out, with `truncated` set. `--depth` caps the hops\n(default 8, max 16). When there is no path, `hops` is `null`, and\n`reverseHops` says whether `<to>` reaches `<from>` instead. `--files` asks the\nsame question of two files over import, use and call edges (\"why does A\ndepend on B\"), with `impact`'s rules: a Go import reaches its whole package,\nand a call inferred from a name alone is a step only with\n`--include-inferred` (otherwise `inferredHops` says one would connect them).\n\n`callers --raw <name>` (MCP `raw: true`) lists every call site of a name before\nany binding, with its receiver and enclosing symbol. `callers --with-caller`\n(MCP `withCaller: true`) keeps the binding and adds `caller` to each site: the\nid of the declaration the call sits in, the node `callgraph` draws that call\nfrom. `callgraph` walks at most 5\nhops and says `depthClamped` when asked for more. It also follows dispatch. An\n`overrides` edge links a method to the nearest supertype method of the same\nname (a Go method to the method of an interface its type implements). A call\nbinds to the method its receiver's declared type names, so walking out through\n`Shape/area` also reaches `Square/area`, and walking in to `Square/area`\nreaches the callers of `Shape/area`. `neighbors` reports every edge\nkind linking each neighbour — an incoming import and an outgoing inferred call to\nthe same file are two links, strongest evidence first — and rejects an unknown\n`--kind`. `impact` walks imports, uses and calls backwards; a Go import reaches\nevery non-test file of the package it names, and a call inferred from a name\nalone is counted (`inferredDependents`) rather than followed unless\n`--include-inferred`. MCP `impact` and `neighbors` answer the same from the\npersisted graph (`target`, `depth`, `includeInferred`; `kinds` as an array),\nso an agent can ask who depends on a file without pulling the whole `graph`.\nFile arguments (`complexity`, `outline`, `symbol-at`, `impact`, `neighbors`) may\nbe written `./path`, absolute or with backslashes; `complexity` exits 2 on a\nfile the index does not hold. `--limit` caps `complexity`, `risk` and `deadcode`, the last as\n`{ total, shown, truncated, candidates }` like MCP `dead_code`.\n\n`complexity` counts branch keywords and operators in code only. Comments,\ndocstrings and string literals are blanked first, per language, so a docstring\nfull of \"if\" and \"for\" adds nothing. Python, Ruby and Lua `and`/`or` count like\n`&&`/`||`. Classes and other containers are not ranked beside functions, and\na nested function counts toward its own score, not its parent's. `risk` uses\nthe same code-only count per file.\n\n`deadcode` lists exported symbols no call site binds to, in two tiers:\n`unreferenced` when no other file of the same language names the symbol, and\n`uncalled` when one does (an import, a type position, a base-class list, a\ncall of the same name that no binding could settle). It also checks the\ndeclaring file outside the declaration. The evidence comes from the AST's\nidentifiers, call sites, imports and inheritance. When that evidence cannot\nsee a name (the AST keeps only 5+ character identifiers, and a regex-tier file\nkeeps none), deadcode reads the other files' text before it claims\n`unreferenced`. Only callables are candidates by default: functions, methods,\nclasses and function-valued consts. `--kinds all` (MCP `kinds: \"all\"`) adds\ntypes, properties and constants, which are reported only when unreferenced,\nsince they are never \"called\". Some symbols are roots and are never\ncandidates:\n\n- test files, and tail files (examples, docs, fixtures, scripts, Go\n  `testdata`) unless `--include-tail` is passed;\n- names the language calls itself (Python `__dunder__`, Go `init`/`main`, JS\n  `constructor`);\n- a method that overrides a live one (called, or public API), since dispatch\n  runs it whenever the base method is called. The same goes for the top of an\n  override chain in a class whose base lies outside the repo, which the\n  framework may call;\n- the package's public API. That means what a manifest entry point declares or\n  re-exports: package.json `main`/`module`/`exports`/`bin`/`types`, with a\n  build path like `dist/index.js` or `scripts/cli.mjs` mapped back to its\n  `src/` file, pyproject `[project.scripts]`, a crate's `lib.rs`/`main.rs`, and\n  every Python package `__init__.py`. The members and base classes of the\n  public classes count too. When no manifest names an entry,\n  `index`/`main`/`cli`/`mod`/`lib`/`__main__` basenames stand in.\n\n### How a call binds\n\n`callers`, `callgraph`, graph.json's `call` edges and SCIP references share one\nbinder, so they agree on every call site. It reads what the site states, with no\ntype inference:\n\n- **the receiver.** `self.f()`, or a Go method's own receiver variable, reaches\n  a member of the enclosing type; `pkg.F()` / `ns.f()` the module that import\n  names, and nothing when it lives outside the repo (`errors.New`, `io.Copy`,\n  `_json.dumps`); any other `x.f()` never a same-file homonym (`this.map.get(k)`\n  is not `Store.get`, `c.ClientIP()` is not a `ClientIP` field), in Go and\n  Python only a method, and nothing when the enclosing signature types `x` with\n  a package from outside the repo (`t *testing.T`). In Go and Python a bare\n  `f()` reaches a function or a type, never a method.\n- **what imports rename and barrels re-export**: `import { a as b }`, a default\n  import, `import * as ns`, `from m import a as b`, then `export { a } from`,\n  `export *` and a Python package's `__init__.py`, up to three hops.\n- **visibility.** A Go package is its directory: an unexported helper binds from\n  every file of it, a `_test.go` file only from its own package's tests, and\n  another package only through an import. JS/TS and Go never bind on a name\n  alone; elsewhere a name-only guess (graph.json labels it `inferred`) never\n  lands in a test file, nor goes from the product into examples, docs or\n  scripts.\n\n`callers --recall` (MCP `recall: true`) adds the name-only matches back — a\nunique JS/TS name with no import, a same-file homonym whatever the receiver, a\nproximity guess anywhere — and labels each site `corroborated` or `unique-name`.\n\n## Values with no single source of truth\n\n`codeindex literals` reports the defect a compiler cannot: **one value written\nout across many files**, where a constant holding it already exists and some\ncall sites use it while others rewrite the literal. Change the value and the\nhelper's users follow; the literal's users silently do not.\n\nThree labeled tiers, the same doctrine `deadcode` uses for\n`unreferenced`/`uncalled` — the analysis says which case it found rather than\nflattening them into one confidence-free list:\n\n| tier | what it means | what to do |\n|---|---|---|\n| `competing` | two or more exported constants hold the same value | pick one owner, delete the rest |\n| `bypassed` | a constant holds it, other files rewrite it anyway | import the constant at those sites |\n| `uncentralized` | nothing holds it | decide whether it deserves an owner |\n\nThree things make the output readable rather than a wall of strings:\n\n- **Namespace families.** Path-like values are grouped by their root, so an app\n  with forty route literals reports one `/checkout` finding, not forty.\n- **Config files are read too.** JSON, YAML and TOML values are extracted\n  alongside code, because the duplications that actually hurt are the ones that\n  cross a language boundary — a threshold declared in TypeScript and again in a\n  rules JSON, a route called from a Kubernetes manifest. Nothing else compares\n  those pairs.\n- **Only fixed values count.** A template with an interpolation (`${id}`,\n  `f\"{id}\"`, `#{id}`) is not a value another file could restate, and a string\n  standing alone as a statement — a Python docstring, a `\"use client\"`\n  directive — is documentation or a pragma. Wherever a grammar parsed the file,\n  neither is collected (the regex fallback reads lines, not syntax).\n- **Repetition with no possible owner is left out.** A value seen only across\n  GitHub Actions workflows (`ubuntu-latest`, `actions/checkout@v4`), or only\n  across one kind of package manifest that cannot inherit (`pyproject.toml`,\n  `package.json`, `composer.json`, `go.mod` in each example project), names no\n  fix. The same value in CI *and* in `pyproject.toml` is still reported. In Go,\n  one constant name declared in two files of a package is read as build-tag\n  variants of one holder (`binding.go` / `binding_nomsgpack.go`), not as two\n  competing ones.\n\n```sh\ncodeindex literals --repo . --min-files 3 --min-count 5   # tighten the floors\ncodeindex literals --repo . --include-tests               # count test files too\n```\n\nAs a CI gate, via the `literals` builtin rule (defaults to the two actionable\ntiers; `tiers` narrows it, and `minFiles`/`minCount`/`includeTests` take the\ncommand's thresholds). The rule computes the whole list, so it fails on exactly\nwhat `codeindex literals` reports, not only on the 24-entry headline that\n`graph.json` carries:\n\n```json\n[{ \"name\": \"no-uncentralized-routes\", \"builtin\": \"literals\", \"tiers\": [\"competing\"] }]\n```\n\n```sh\ncodeindex rules --repo . --config codeindex.rules.json    # exit 1 on violations\n```\n\nA rules config is validated strictly, because a gate that silently checks\nnothing is worse than none. A key the rule does not read (`sevrity`), an unknown\ntier, or an edge kind the graph does not emit fails with exit 2 and names the\nfile. A forbidden-edge rule whose `from` or `to` globs match no indexed file\ncan never fire, so it is reported as an `unmatched` warning. Over MCP,\n`check_rules` reads a `configPath` only when it resolves inside the repository.\n\nThe `orphans` builtin lists code files nothing connects to. It leaves out tests,\nentrypoint-looking names (`index`, `main`, `cli`, `wsgi`, …), languages that no\nimport, call or use edge in the repository reaches (SQL, shell scripts), and,\nin Go, Java, Kotlin and Scala, files whose package is connected: files in one\ndirectory see each other without imports, so an unexported helper called from\na sibling file has no edge of its own.\n\nAn arrow function returning a value (`export const getPath = () => \"/a/b\"`) is\na *consumer*, not a source of truth, and is reported as a call site. A lookup\ntable (`export const ROUTES = { … }`) genuinely is one, and is reported as a\nholder.\n\n## Monorepos and import resolution\n\n`codeindex workspaces` lists the packages of a monorepo with their declared\ndependency graph, one cycle if there is one, and a topological build order. It\nreads npm/yarn `workspaces`, `pnpm-workspace.yaml` (block or flow list), lerna,\nnx, Cargo `[workspace]`, `go.work` (without one, every nested `go.mod` outside\n`vendor`, `testdata` and `fixtures` dirs), Maven `<modules>` (recursing into\nnested aggregators), uv workspaces, Composer path repositories and Gradle\n`include` (multi-line forms too; `project(':x')` and `projects.x` type-safe\naccessors become edges). Manifests are read as JSONC, like the resolver reads\nthem; one that still does not parse is named in `warnings` instead of being\ndropped silently.\n\n`--check` compares what each package declares with what its code imports,\nusing the link-graph's resolved import edges:\n\n- `undeclared` — a package imports a sibling its manifest does not list. It\n  works in a hoisted checkout and breaks the isolated install, the publish or\n  `go mod tidy`. Any entry makes the command exit 1, a CI gate like `rules`.\n  Nx members are skipped: Nx infers project dependencies from imports.\n- `unusedDeclared` — a declared sibling no import uses (npm, pnpm, lerna,\n  Cargo and Go only; informational, never fails the check).\n\n`codeindex resolution` says whether the graph can be trusted for a language\nbefore you rely on `impact`, `callers` or `deadcode` there. Per importer\nlanguage it counts imports that `resolved` to an in-repo file, went `external`\n(third-party or stdlib, by design no edge), `dangling` (a local target that\ndoes not exist, by reason) and `unsupported` (no resolver for that language),\nlists the top dangling specifiers with an example importer and the top\nexternal packages (`--limit`, default 10; `--lang` for one language), notes a\nlanguage that yields no import edges at all, and repeats the config `warnings`\n(an unparseable `tsconfig.json` or `package.json`, a missing `extends` base)\nthat silently turn resolvable imports external. `index` prints those warnings\nto stderr too. Nothing here changes an artifact.\n\n`codeindex mermaid [target]` focuses the diagram on a module slug, a module\ndirectory or a file (its module), and fails on anything else rather than\nprinting an empty diagram.\n\n## SCIP export\n\n`codeindex scip` writes a [SCIP](https://github.com/sourcegraph/scip) index.\nSymbols are global: the package the file's nearest manifest names (npm\n`package.json`, `go.mod`, Cargo, `pyproject.toml`, Maven, Composer; `. . .`\nwhen there is none), one namespace per file, then the declaration chain with\nthe suffix each kind calls for:\n\n```text\ncodeindex python flask 3.1.0 `src/app.py`/create_app().index().     a function nested in a function\ncodeindex python flask 3.1.0 `src/app.py`/create_app().Task#run().  a method of a class nested in one\ncodeindex gomod example.com/svc . `context.go`/Context#BindWith().  a Go method declared in deprecated.go\ncodeindex npm @acme/web 1.2.3 `shapes.ts`/Geo/area().               a function in a namespace\ncodeindex npm @acme/web 1.2.3 `shapes.ts`/over(16).                 a repeated overload, told apart by its line\n```\n\nEvery symbol kind maps to its SCIP `Kind` (property, field, enum member,\nconstructor, getter, macro, namespace, package, …), and a Go method declared\nin another file of its package hangs off the type it belongs to. A re-export\n(`export { X } from`, `from .app import X as X`) is a reference to the\ndeclaration it forwards, not a second definition; `export * from` names nothing\nand emits nothing. A member whose owner is not in the index (a type from\nanother crate) keeps a `Owner#` descriptor under its own file.\n\nThe inheritance `hierarchy` resolves becomes `relationships`: a subtype is an\nimplementation of each type it extends or implements, so \"Find\nimplementations\" on a base lists its subclasses, and a method overriding a\nsame-named supertype method is an implementation and a reference of it, so\n\"Find references\" on the contract's method reaches the overrides.\n\nEvery occurrence and relationship names a symbol the index defines, and\n`scip lint` finds nothing else to report, with one caveat that is upstream's:\nits relationship pass only knows the documents it has already visited, in Go\nmap order, so a relationship to a symbol of another document is reported as\nmissing at random.\n## What git history says\n\nFour commands read the commit history rather than the code: `churn` (commits\nper file), `hotspots` (churn × size: where work and defects concentrate),\n`risk` (churn × complexity) and `coupling` (files that change together).\n\n```sh\ncodeindex hotspots --repo . --since \"6 months ago\" --limit 10\ncodeindex coupling --repo . --hidden        # co-change that no import explains\ncodeindex churn    --repo packages/api      # one package of a monorepo\n```\n\n- **Paths are relative to `--repo`**, which may be any directory inside the git\n  repository: point it at one package of a monorepo and history is limited to\n  that package, keyed the way its index is.\n- **`--since` takes a ref or a date**: a tag, branch or sha (commits after it),\n  or `2024-01-01` / `\"6 months ago\"`. Anything else is an error (exit 2), never\n  an empty window that reads as \"nothing changed\".\n- **Every answer says what it could read.** Outside a repository, or before the\n  first commit, `ok`/`churnOk` is `false` and `error` says why. A **shallow\n  clone** answers with `shallow: true`: counts are lower bounds, and the clone's\n  boundary commit is left out, because git compares it with an empty tree and\n  it would count as a change to every file (a depth-1 CI checkout therefore has\n  no visible history at all).\n- **`hotspots` ranks only files that changed** in the window and labels test\n  files `test: true`.\n- **`coupling` works over the index**: pairs are limited to indexed files, so\n  deleted paths drop out and `--scope`/`--include`/`--exclude` apply. Each pair\n  says whether a graph edge (import, call, use, inheritance, doc link) already\n  `linked` the two files; `--hidden` keeps only the pairs with no such edge.\n  Pairs whose names already declare them (same directory, same name up to the\n  first dot: `x.po`/`x.mo`, `x.js`/`x.min.js`, `x.ts`/`x.test.ts`) are left\n  out. Pairs are ranked by `confidence`, the lower bound of the 95% Wilson\n  interval for `strength`: 12 shared commits out of 13 rank above a thinly\n  evidenced 3 out of 3. `--min-together` (default 3) and `--max-commit-files`\n  (default 30) tune the mining. The second one skips mass-refactor commits by\n  their whole size, including files outside `--repo`.\n- **Renames are not followed.** Rename detection is the expensive part of\n  `git log`, and on a blobless partial clone it downloads blobs. A file's\n  history before a rename stays under its old path.\n- The output does not depend on the user's git config (colour, diff prefixes,\n  signature display, external diff drivers). One `git log` pass is shared by\n  all four commands and reused while HEAD stays the same, so an MCP session\n  asking for `onboard`, `hotspots` and `risk` reads the history once.\n\n## Reviewing a diff\n\n`codeindex delta` maps the git diff onto the graph: changed files, the symbols\nenclosing each hunk, the blast radius, and a risk score per module in which\nevery point comes with the reason that fired it.\n\n```sh\ncodeindex delta --repo .                  # the branch vs its merge-base with the default branch\ncodeindex delta --repo . --staged --json  # the staged changeset, as JSON\ncodeindex delta --repo . --fail-on HIGH   # CI gate: exit 1 when a module scores HIGH\n```\n\nThe MCP `delta` tool answers the same question for an agent that has just\nedited files: `{base?, staged?, depth?}` return the JSON result, `concise`\ndrops the hunks and reduces each enclosing symbol to `name/kind/line`, `limit`\nkeeps the highest-scoring modules (and says it truncated), and\n`format: \"text\"` returns the panel. It is in the `impact` and `risk` profiles.\n\n- **A removed file that is still imported is the highest-weighted signal**\n  (`brokenImport`, 40). The worktree's graph no longer holds a deleted or\n  renamed file, so delta puts the removed paths back and re-resolves the\n  graph's dangling imports: the ones that land on a removed path are listed\n  under `broken` with their importer (and `renamedTo` for a move), the module\n  the file was removed from is scored even when nothing else in it changed,\n  and the importers count as its direct dependents.\n- **The engine's own output is not part of a review.** Paths under the index\n  directory (`--index`, default `.codeindex`) are dropped from the diff, and so\n  are untracked files in directories the walker never indexes (`node_modules/`,\n  `dist/`, …). A tracked change in such a directory stays listed as\n  `unindexed`.\n- **Before the first commit** there is no merge-base: every file (staged,\n  with `--staged`) is reviewed as added, against the empty tree.\n- **The diff is read before the index.** A clean worktree answers\n  `no changes` without loading or walking anything (0.4 s instead of 15 s on a\n  66k-file repository), and symbol attribution reads only the changed files'\n  definitions.\n\n## Docker\n\n`ghcr.io/maxgfr/codeindex` ships the same zero-dependency bundle (`engine.mjs`\n+ `cli.mjs` + the AST grammars), Node and Git, with no `npm install`. Git\nsupports revision metadata and the `churn`, `coupling` and `delta` commands.\nMulti-arch (`linux/amd64`, `linux/arm64`),\nbuilt and pushed on release. Mount the repo to index at `/work`:\n\n```sh\ndocker run --rm -v \"$PWD\":/work ghcr.io/maxgfr/codeindex scan --repo /work\ndocker run --rm -v \"$PWD\":/work ghcr.io/maxgfr/codeindex index --repo /work --out /work/.codeindex\n```\n\nPin by digest in CI or anywhere reproducibility matters, rather than a\nmutable tag:\n\n```sh\ndocker run --rm -v \"$PWD\":/work ghcr.io/maxgfr/codeindex@sha256:... scan --repo /work\n```\n\nRuns as an MCP server over stdio the same way as the npm CLI (see\n**Use as an MCP server** below) — add `-i` so `docker run` keeps stdin open:\n\n```sh\ndocker run -i --rm -v \"$PWD\":/work ghcr.io/maxgfr/codeindex mcp\n```\n\nThe image runs as `node` and trusts `/work` as a Git safe directory so a host\nmount with a different owner remains usable. To test local engine and embedding\nbuilds, including offline semantic search:\n\n```sh\ndocker build -t codeindex:qa .\ndocker build -t codeindex-embed:qa docker/embed\nnode scripts/test-docker.mjs codeindex:qa codeindex-embed:qa\n```\n\nThe [engine validation report](docs/engine-validation-2026-09-07.md) records the\ntested architecture and runtime checks.\n\n## Text search (`grep`)\n\n`codeindex grep '<regex>' --repo .` returns JSON hits sorted by file then line:\n`{file, line, col, text}`. It uses ripgrep when it is on `PATH` and a pure-JS\nscan otherwise, and both give the same answer:\n\n- **One dialect.** The pattern is a JavaScript regular expression on both\n  backends. Before it reaches ripgrep it is translated so that `\\w`, `\\b` and\n  `\\d` stay ASCII and `.` still stops at `\\r`, as they do in JavaScript.\n  Anything that cannot be translated exactly (lookaround, backreferences) runs\n  on the JS engine instead, and a note on stderr says so. Syntax that\n  JavaScript would read as a literal but you probably meant as an operator\n  (`\\A`, `\\z`, `[[:alpha:]]`, `\\x{41}`) is rejected with an explanation.\n- **One file universe.** grep searches the files every other command indexes.\n  `--ignore-dir`, `--no-gitignore` and `--max-bytes` apply to it too. `--scope`\n  (a directory or a single file) is ANDed with `--include`/`--exclude`. Globs\n  are rooted at the repo: `*.ts` matches root-level files only, `**/*.ts`\n  matches at any depth.\n- **Bounded output.** Results stop at `--max-hits` (default 200). When the cap\n  cuts the list, stderr says so and gives the number of matching files. A line\n  longer than 300 characters comes back as a window around the match, and\n  `col` gives the match's position in the full line.\n- **Bounded time.** ripgrep's regex engine runs in linear time. JavaScript's\n  can backtrack exponentially (`(a+)+b`), so the JS scan runs in a worker thread\n  with a time limit (`--timeout-ms`, default 10000). When the limit is reached,\n  the hits from the files already scanned are returned, together with a note\n  naming the file where the scan stopped.\n\nThe MCP `grep` tool returns the bare hit array by default. With\n`withMeta: true` it returns `{ hits, truncated, filesMatched, notes? }`. A\nresult cut short by the time limit always comes back in that form, with\n`timedOut: true`.\n\n## Search\n\n`codeindex search \"<query>\" --repo .` ranks files with keyless **BM25F** over six\nweighted fields: symbol names, path segments, doc headings (markdown and\nreStructuredText), the file\nsummary, per-symbol **doc comments**, and the **prose body** (words from comments\nand short string literals, a template's fixed text included, captured at\nextraction time so they ride the incremental cache). An all-lowercase compound\nfile name (`tsconfigparsing.go`, `knownsymlinks.go`) is also indexed as the\nwords it is made of, when the repo uses those words as names, so \"parse\ntsconfig json\" reaches it.\n\nThe last two are the point. An index built only from names — what a tags file or\na symbol-only search ships — is a perfectly scored index of the wrong text: the\nwords people search with are overwhelmingly in prose. Measured on the same\njudged corpus, a names-and-paths-only index returns *nothing* relevant for 6 of\n16 queries; with doc comments and prose in the index it is 1, at 93.8% MRR.\nField weights are calibrated against nDCG@10 on that corpus, not chosen by\ntaste.\n\nResults carry `matchedFields` (was it the path or a doc comment?), a `line`\nanchor and `symbolHits` (name, kind, line), so a hit is a place to open rather\nthan a file to re-read. A whole-identifier match outranks a subtoken match, and a\ntest file ranks below the code it tests unless the query asks for tests; fixture\nand snapshot trees (`testdata/`, `fixtures/`, `__snapshots__/`) rank lower\nstill, unless the query says `fixture` or `testdata`. A\nbarrel's re-exports (`export { x } from`, Python's `from .x import y as y`) are\nindexed as prose rather than as names, so the module that defines a name ranks\nabove the `__init__.py` or `index.ts` that re-exports it. English\nstopwords are dropped from a sentence, but not from a name: a query that is only\na stopword (`default`), or a capitalised stopword the repo declares as a symbol\n(`Use middleware`, `Context.Set` — gin's `Use` and `Set`), is searched as the\nname it is. A query term that\nmatches nothing in the corpus (zero document frequency) gets two deterministic\nfallbacks, morphology first: a **stem match** (\"caching\" finds \"cache\",\n\"retries\" finds \"retry\") because an unmatched term is far more often an\ninflection than a typo, and only then a **trigram fuzzy fallback** — typo\ntolerance without embeddings: the term is\ncompared to the corpus vocabulary by character-trigram Dice similarity\n(threshold 0.6, top-3 candidates, contribution scaled by the Dice score so a\nnear-miss always ranks below an exact hit). Terms that already match anything\nare never touched, so an existing query stays byte-identical. Enabled by\ndefault; disable with `--no-fuzzy` (CLI) or `fuzzy: false` (library/MCP\n`SearchOptions.fuzzy`); results carry an additive `fuzzyTerms` field when the\nfallback contributed.\n\n`--rank graph` (MCP `rank: \"graph\"`) multiplies each score by the file's\nPageRank over the resolved import graph, relative to an average file: a leaf is\n×0.95, a file with ten times the average PageRank ×1.16. Go files are left\nalone, because a Go import resolves to the package's alphabetically first file.\nIt is opt-in because it does not win: on flask it lifts MRR from 0.807 to 0.824,\non a second flask query set it drops it from 0.851 to 0.816, and gin,\nmicrosoft/TypeScript and the judged corpus do not move.\n\n### When the query matched nothing\n\nA search that finds nothing useful and a search that finds nothing *at all* look\nidentical in a ranked list, and the second one is the dangerous one.\n`subtokens(\"nullGipStep7\")` emits `[\"nullgipstep7\", \"null\", \"gip\", \"step7\"]`, so\nan identifier that is **not in the tree** still scores every file containing\n`null` or `gip` — twenty confident-looking rows for a symbol that does not\nexist. That is a real report, and it cost an afternoon.\n\nSo `search` now says so:\n\n```sh\n$ codeindex search nullGipStep7 --repo .\ncodeindex: No file in this index defines or mentions \"nullgipstep7\". The 5 results\nbelow match only its parts (null, gip). Closest indexed names: nullgipstep2,\nnullgipstep3. If you expected it here, check you are indexing the right branch\nor commit.\n```\n\nThe note goes to **stderr**, so stdout stays a bare JSON array. Machine-readable\ndiagnostics come from `explainQuery` (library), `--explain` (CLI) or the\n`explain_search` tool (MCP):\n\n| field | what it answers |\n|---|---|\n| `verdict` | `match` · `weak` (results rest on a near match, or the identifier has df 0) · `none` |\n| `wholeIdentifier` | the identifier you typed, with its document frequency — df 0 is the finding |\n| `unresolvedTerms` | terms that exist nowhere and bridged to nothing |\n| `droppedStopwords` | why an all-stopword query returned an empty array (a stopword searched as a name is not listed) |\n| `terms[].bridge` | what a zero-df term fell back to, and whether by stem or trigram |\n\nIndividual results carry `bridgedOnly: true` when nothing matched verbatim —\npresent only when true, so an ordinary hit serialises to exactly the bytes it\nalways did. `--exact` drops those rows entirely. Nothing here changes a score or\nan ordering, which is why the judged corpus cannot move.\n\n### Semantic search (deterministic static-embedding tier)\n\n`codeindex search \"<query>\" --repo . --semantic` RRF-fuses lexical BM25 with a\n**keyless, byte-deterministic** embedding tier. It uses a *static* embedding\nmodel (a `token → vector` lookup table, no neural forward pass, no wasm): the\npure-JS encoder tokenizes → mean-pools → L2-normalizes → int8-quantizes\n(round-half-to-even), and ranking is a **pure integer dot product** — so encode\nand the `embeddings.bin` artifact are byte-identical across builds and platforms.\n\nIt is **opt-in by asset**: with no model on disk the engine silently stays\nlexical, and `--semantic` without a model returns lexical results on **exit 0**\n(a stderr note only). Models are **never** shipped in the package; a model is\nresolved from `CODEINDEX_EMBED_DIR` or `<repo>/.codeindex/models/`. Getting one\nis zero-config: `codeindex embed pull` fetches the official `embed-model-v1`\nrelease asset, sha256-verified before anything is written.\n\n```sh\ncodeindex embed pull   --repo .              # fetch the official model asset into\n                                             # CODEINDEX_EMBED_DIR (or <repo>/.codeindex/models/); sha256-verified\ncodeindex embed status --repo .              # effective mode + reachability (JSON)\ncodeindex embed build  --repo . --out .codeindex   # write embeddings.bin\ncodeindex search \"http client retry\" --repo . --semantic\n```\n\n`codeindex index` also writes `embeddings.bin` next to `graph.json` when a model\nis present, and `search --semantic` reads it back instead of re-encoding the\ncorpus: a stored vector is reused only for the same unit text under the same\nmodel and `EMBED_VERSION`, so after an edit only the changed units are encoded,\nand a stale, foreign or corrupt file costs a re-encode, never a wrong ranking\n(microsoft/TypeScript, 244k units: 12.1 s to encode, 2.3 s to read and reuse).\n`index` and `embed build` reuse the previous file the same way and write the\nbytes a fresh build would. Fusion reuses the engine's `rrf` helper (k=60);\n`SCHEMA_VERSION` is untouched (a dedicated `EMBED_VERSION` keys the sidecar).\n\n#### Three embedding modes (precedence: endpoint > static > none)\n\n| mode | trigger | determinism |\n|---|---|---|\n| **none** | no model, no endpoint | — (pure lexical) |\n| **static** | a `model.json` on disk | byte-deterministic (goldens) |\n| **endpoint** | `CO","readmeFilename":"README.md"}