{"_id":"@nanonets/graft","_rev":"29-cc2ab7e3c2087dc0c4c83837e46a391e","name":"@nanonets/graft","dist-tags":{"latest":"0.16.0"},"versions":{"0.1.0":{"name":"@nanonets/graft","version":"0.1.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.1.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"85adbf9746083fb3e88d6769b20c96b963958cf1","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.1.0.tgz","fileCount":90,"integrity":"sha512-8Y6pXAGmGzA0qiM+cSrMq8uzjSzj/79hhTKucfDGf5oRfn/J0iZQoesx+nDHo1BL1/X4+n0IuUt8+luckuKgtA==","signatures":[{"sig":"MEQCIHJab88zHUqLSzN6U+AmIEtUBMESw9nfZybZH5kzi0PHAiBof2RsPMdJqxSjUYTYK4VT2yi6aitmR9l8/PTb4TwYaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":259598},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0c579f4930c8bf83aaa6937a8bbed7d610c3e385","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.1.0_1784116983107_0.7660942562762909","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@nanonets/graft","version":"0.2.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.2.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"419fcc2a37e62c0d11e9f7ea59fce4337befbd6b","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.2.0.tgz","fileCount":98,"integrity":"sha512-0Zil/ud7gKOmoZRBvXuoBI/sud6Qt9aGlFFne5kbdoZJfVSLa83KoahGb+zbNQAVOv/Dv+uBXUjYGjt/UQq8bg==","signatures":[{"sig":"MEQCIE8o7v1wy6UE+tM1VcZk6Htr19s3iH6ctOViPHOoI+wcAiB6Pz6zsDU4iIPycEy1PUnuYwDwguRUYXevNOBKR692Bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309330},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ef666de073c0c5ed21f6a00bc2350c0e3ff0b016","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.2.0_1784286888690_0.8504851069907793","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@nanonets/graft","version":"0.2.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.2.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"d4c7bf13fed606b965810dd7cafa7b03e2d053be","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.2.1.tgz","fileCount":98,"integrity":"sha512-4djJZ18mCi3tFbXftTCEjsoIh86kd4x5O7B4x/KrK6aU1om5p6AsypsMIEXCO0bgJmcUVOmvFnVkP0nIoSX/tA==","signatures":[{"sig":"MEQCIHYlxAJoASJnzEM3kIQ4YEAGWEeWiXQbjghMtvT01UxQAiBNVFicSiR//onAby8tJcHkGiWIjQclpshJiHK6uAf6JA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":310149},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c71aa8f6e6d8dbafcfe0da6ab9d1460aca39e9a8","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.2.1_1784296080143_0.5674611130102953","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@nanonets/graft","version":"0.3.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.3.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"4aa11ba1707b0df6e196ece12a80e52a4a0eb3db","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.3.0.tgz","fileCount":136,"integrity":"sha512-cwOpAXNJpFgNZdNOC2ClY9/IMalG3EbgPkrBFcq8drhmA4WesBwwSD5UjfbPSt1TNDv/lXLLpEozSCfCWYymyw==","signatures":[{"sig":"MEYCIQCrZ2M+kdcIMVLEKkiWliivVpfcB8LawqnmXIW9rWQzQgIhAMWOEh7B250dwm2ZK/fTiqbEn29pzcTjB0yV+oxdylI2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":369820},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"597789b642cd9a84207628b378f766464bc106ef","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.3.0_1784554386150_0.9099236199915608","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@nanonets/graft","version":"0.3.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.3.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"cd7682f5ab100de9110fd8a3765ee886e05f8fc8","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.3.1.tgz","fileCount":140,"integrity":"sha512-9HBNZjpEcEzp0EXSauQO0KJy43Nx0gdqCbjkGHU4tnYDQRdXxC0gPKzjC4LsNfqzYB23/SQ9sbfvpH7/8pXSDA==","signatures":[{"sig":"MEUCIBd1mH9RS0+tN4TnpvjrI81eIJsRDvQ+z/dybsBxjVYOAiEAjXLtDTyMwV89tNkq1meSQnv/EcUpEU14+U0IZ65z4cU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383447},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1c5be1cbf48adecee96903b93ab4e6094e951d7e","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.3.1_1784556962399_0.19862361701408848","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@nanonets/graft","version":"0.3.2","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.3.2","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"22b3f8d65cc0e39fcfd64b285ed9ee42db0f060f","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.3.2.tgz","fileCount":140,"integrity":"sha512-XcKdOVXd/WP3dEiLi07++czNcGTCEO0krCMr7wFiuM3nEa8AAyD09xK/hOMAfUP/1ySac8R5p7aM3FLUYGF8BA==","signatures":[{"sig":"MEYCIQCNKoQlyRfjeAWngSNnP5lymdlGtBK1R7AODVM61oW07AIhAKfKmL0viNIlU4upCzln1QlOhOLGvqHLjPPOSj8rUlIw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383597},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"cd0941b1548ad62e1a3448124d0deefbc0a2f332","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.3.2_1784561763869_0.04499988945137057","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@nanonets/graft","version":"0.4.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.4.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"af7884a407bbce44d874b813cadef7c11d6ca90b","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.4.0.tgz","fileCount":144,"integrity":"sha512-wUyappWL33mkiAWPRsFAzQ4G66QZ4PS//KY7QAko9j6QpsyXT7PsrA3FQtIj985UrGl4e7P/PEQPWhWz5u6G7w==","signatures":[{"sig":"MEYCIQCJCszedyKJOBASCtD7heKDLqbef2VD6hfzWi25eC4WgwIhANi8UyVNW36moVVFUj4IaZ1AtASMzsmsg+ZXy+Pi7U6Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408059},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0f076a9ab21c2edd36a07ceeb344072ec202a1e0","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.4.0_1784627922038_0.7117633210065828","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@nanonets/graft","version":"0.4.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.4.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"99e61f7c54526314a0a2563b7da1410bf868f342","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.4.1.tgz","fileCount":148,"integrity":"sha512-6dW+m+THS/M+aJXTL5c79KOvHNcDR3QRBjFAENmL2NcGn8o3GIzxG6oQZ43FK+NyYyVtsTDI+Z+p9QLGkYnwyA==","signatures":[{"sig":"MEQCIDOL5Hy8v/LD2wq3+MWCTlzpFCgpmX6Gh/pxnfdvFn8ZAiBZ/JCxeZUtmpVNlZm6Mh1bWor7jvDMRcMEtexhoMOotQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2802821cd0dd1cdeb266427850f69de0ff10e373","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.4.1_1784634557344_0.45777297873862755","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@nanonets/graft","version":"0.4.2","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.4.2","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"a97a20a4776784b8b6155cb79d5cbd2174e64815","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.4.2.tgz","fileCount":180,"integrity":"sha512-+KTAOATgF4NmhLMaCxfmnOhpv1o/WBPRHWONRvZ+pxAtkiZjxQ08nr4KKsTRwzbyfKF7bXf8qzMa0zPtiSTb1g==","signatures":[{"sig":"MEQCIB07mWZv1ygynA9kaSlp6UB7HpPyMneyji2AaGxaVWKuAiBZRzzdM5GbCBhcqDlPz7BldBJCQ9ESCE2U9GmTzSjLcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486772},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"848a63362df6e8f5db0df7a7cb7bcff5df309e88","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.4.2_1784641227661_0.8902530448766914","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@nanonets/graft","version":"0.4.3","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.4.3","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"96525724d8e490c04db92cb0f0c629f7a9d173c1","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.4.3.tgz","fileCount":184,"integrity":"sha512-eN/+83EDvxzW4gixiU/BFOIuUFOdl/jr9beh8Hpe/vqheMfmEsRiXA/f7jWNfgy8uHWbfh01VvysyFPd6sJASA==","signatures":[{"sig":"MEQCIBhUMud8eJPZYyj+P0l2abRWLKNsKrObbMe6PA27l0DBAiAXfj+8IWYvHSvcSN4vT6hEadtv99CxN6AXpd6mSknJXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":502980},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7ff37d57e763c97dd493d21464ee9b68251fcc50","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.4.3_1784656013701_0.6660177189054173","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@nanonets/graft","version":"0.4.4","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.4.4","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"fa441ee93cdd3d001499c6e760934c80d479fd77","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.4.4.tgz","fileCount":196,"integrity":"sha512-srvh78ELPtWQ+vcZcJNR+/55OjXsaJpetw3n6GatswaxRFMdN4cCzlnLBj0jyEkTUOJppx9uCmDSwSlEUwc6Ng==","signatures":[{"sig":"MEQCICMf6hKr7PMvz01JSQHvsOWig6TLvVDm+gntwEFAtJQlAiAYyf59YUAtw8VR8+L3lPi9vdUtgGhXE5+Jocz9kDxV5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":559874},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0702f6c2042c18d7b8f834818d6e4a4e524d5958","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.4.4_1784702141750_0.7124767673488108","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@nanonets/graft","version":"0.4.5","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.4.5","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"2194ed07e440ee3d9c470723261eea4b362b74e6","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.4.5.tgz","fileCount":204,"integrity":"sha512-eg0HSSYEDRw/VsjrU+pUk4SdOhhNCyjjeMnKhznvtBBGXWZWehxuhxwUw3Q8AkSiii09H91b4D1V37iqqbQMYA==","signatures":[{"sig":"MEQCIEFac/Ew2MstkPRDqHPOZErn6y6PaLCUUJCKtv4JhVX5AiB7TjCaXb5ZdQru4ZkHnkxOYKb+0/1mXFLTK0g7wIUD8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":580935},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"a74d949e23db472de0a72f52141303649a6e3833","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.4.5_1784708541835_0.5988948778249188","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@nanonets/graft","version":"0.5.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.5.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"c097266596d92548abe3ffeec31a0be316aaaf5f","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.5.0.tgz","fileCount":224,"integrity":"sha512-FWeccSXFvmmZMYdbdxBhzP26FEtLd6mWS6RMYQnoQQ7lGm4q33apUxWZKCcCdYLnOweNvZJs4+dPX9YPGL6Lrw==","signatures":[{"sig":"MEQCIBLFxYhsVB4vL7nNn5eelvDfPzVxdcpEIrnRbb2LYOgLAiArYMqnFNtzry00c11F4mVtSizWF4avUenHkStGLCgZ8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":699567},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"92d8ef6c84006093b010a21fb19c49a5ddca03a1","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.5.0_1784748489094_0.3535562527174281","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@nanonets/graft","version":"0.5.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.5.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"60c0c0ce961b587f3e466b5462831274f75d8c7c","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.5.1.tgz","fileCount":248,"integrity":"sha512-K/a0TGX0kh9NygMwXnN3QkkxQ4MsEe3cIi25OJb0RKyQkr/9z0AFO4gNA3AxvOkFtuz9NQManKwxtlmL8eU6eQ==","signatures":[{"sig":"MEYCIQCJtbl98iUPSUrEzimp3jdt6nMd0olKr5dFtkBHyWT0agIhAI6mKxFIMetzgTTreYHkhl4lEfS0r/xBqjBSx/SIaGWh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":791933},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"06ae614e211348aa44dc168e58eb30abcd8a2d85","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.5.1_1784809599536_0.7380835500947691","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@nanonets/graft","version":"0.6.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.6.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"db9ae578751a651955b83ccf2e51cbd5af8f8917","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.6.0.tgz","fileCount":256,"integrity":"sha512-xdRMRdf7fFhj0HvM7e1JxQ7SIuJxko4h0j+iqSQkMfacMeO/tbq3owE02SR+Qh3+Zf0xTpyK02uogHVAJFLoqQ==","signatures":[{"sig":"MEYCIQDuGASe+JoVeJj6eyhCw7rm/eiwKERdifKeWIFLXmMYpwIhAPMPTpXSRFXT18z0XrusKj0dKqhjhjgJ0FC3BZzxANbH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":847061},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"486c03622eac74608b56438ae3d08fc95f37fc92","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.6.0_1784819514842_0.9286376488000199","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@nanonets/graft","version":"0.7.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.7.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"c9bdf4a6281bf79cc18f5f905465918dac729120","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.7.0.tgz","fileCount":260,"integrity":"sha512-PHGPS2yr1PIB3X4JlC0NKsJ2LO9ww9ssjFMYXykYShzUAnzgEognkqarl2IFlhrZJakYrLN5oKvvqxKjsmETSQ==","signatures":[{"sig":"MEQCIDL/mFtShOHeGBcBaBE/oSoVR9pc4X72IguIfd74cC0DAiBgpYjlir3zevVAKBTxkFs87gzL1wIs3qcB8tY89dHxkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":921270},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"eb8961b88c4191e0e8e4b935ccd63493af5b3460","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","bench":"tsx bench/run.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.7.0_1784850461385_0.37020039986655706","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@nanonets/graft","version":"0.7.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.7.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"7e20f83dee1e43de71f65d19b945dbd5edd0523e","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.7.1.tgz","fileCount":260,"integrity":"sha512-V/s0qeMKIHaBJjVY3v44V7TKKHJEaNM2VhDkvXTGyKtHtYzAsTjDrGSaj6g0OBW8H4qCB5OVEmum2sgxnfJy+A==","signatures":[{"sig":"MEUCIGOM07n9z1xVgiFKyVjVhJTEF6/gS3J4lgePJ42TyYYjAiEA1agHJIaGxl9IakHUwuJA4GR5RFj0fSAri+6DXvKDh+M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":932890},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"85a17d00548cd6263d223e9062f07ee059e2818e","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.7.1_1784893514528_0.9735404679008839","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@nanonets/graft","version":"0.8.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.8.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"25080fb73fb2de7aa97c574c968c0e212e5ca169","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.8.0.tgz","fileCount":260,"integrity":"sha512-cOWUvJiWqnzAeHL4ACHEhHZOyazDYSUCeJdbRKgX93f2RXS8Rj4gmEFGHPFoCHBuZU+aGYlYYKdmWUGalaQAdg==","signatures":[{"sig":"MEUCIDevFwqrHALS2MPqWQWPX4Z9yXCxr/2H74s6HrGAQyy2AiEAsabk5jMEX3MmzLaPN05oRUSYHHoEqYMR6iiD+ktPIkA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":949689},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7d74ecde6ccdacdcf754247de7692e899f0810f0","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.8.0_1785142842278_0.06850818795719693","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@nanonets/graft","version":"0.8.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.8.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"14d704c21161750fba4aabf600c37b12d814599e","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.8.1.tgz","fileCount":288,"integrity":"sha512-IeqGJzKcdYjxsL5KdS/2m7gVsGsEWUhkwhSwEh9LqiVnM600mLQxqIliGxsw1fBregraYtKSWIrgkhdjNgVSow==","signatures":[{"sig":"MEYCIQDrsdk9Ee3UjOModPc7YLr9vnAQWu5QNhgZ5ysGv26VwQIhANPu7qQU4Dutsy6Eg42B2F5t5b1foPevY90W2mwlzWFB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1083883},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"9a10ed8ee7f1c2bb0048085d73df395d82c42948","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.8.1_1785359249180_0.9369460384149728","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@nanonets/graft","version":"0.8.2","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.8.2","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"cb6f232549cb082f5006cd5e4123a5537bbf9a2f","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.8.2.tgz","fileCount":292,"integrity":"sha512-Aw1RxjpCvJJhHnvWoE18Go7hazjvgUU7GRiPXRkySOvNwPx/ZUC7F+aDFXWxxeIE5a3B8a2c3/Z/rgU0VuX/BQ==","signatures":[{"sig":"MEYCIQDdxx0YzcN/9yEy5Yq3DR5BuPqA7RAYvH0QGAimFJs9yQIhAMMfrHhTsr01wHjSYqDyg2uQzmv5FpCNvnE+oUdPXWJd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1108076},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d4ec9d7c7ba321d6cde5e3ec892739126930a69b","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node --import tsx --test test/*.test.ts","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.8.2_1785428024093_0.45320898756204864","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@nanonets/graft","version":"0.9.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.9.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"89d32e60f0bbfb7efd24e4d4e5f35e3d08c8925b","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.9.0.tgz","fileCount":305,"integrity":"sha512-D2v7qI/DbkgPQDsLEBRHe2QLH4UiOC9+uCll5i/IFDOgIdcLLCFm9gcnib6j4D1fOuoazG5p8wUbaS84vEFp+w==","signatures":[{"sig":"MEYCIQCGbEf1NXfULhFOv5Mvi82fZ1xR8XdUzJhsOgIspwc9/QIhAJIcD8O/cutYhSdBw6fY5Y6RUL0E0K4TaWOGpwhjvihM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1189705},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"fda5b7f015397d6083c9f209f8263ecdd90016e0","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.9.0_1786091026519_0.941089719776977","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@nanonets/graft","version":"0.9.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.9.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"61709ada6e60db8de85e4dd831f4191816c56f8f","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.9.1.tgz","fileCount":305,"integrity":"sha512-UxJQ47Dcxb4Svgz6350D7rf97bveT/+SVwlBRnGpx/GfI52j3LdhPIaAiFkIXCNwQRXWPERdAdooyym83m6Y6Q==","signatures":[{"sig":"MEUCIQDGgPoPI07NyvUabhpA7uTLUnAYGLun0hIhNNAgnwAzWgIgGveGwA2fvxs9pCnmpRHB+qWoKgSF7lNNDE3OirDt/2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1194919},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"9c4a2e089c0ec750f9e5a5c2b3444de76756b936","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","@anthropic-ai/sdk":"^0.113.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.9.1_1786444461275_0.057427590187700384","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@nanonets/graft","version":"0.10.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.10.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"e14ef2402c0a829bad7f36813e5729caab4626d5","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.10.0.tgz","fileCount":338,"integrity":"sha512-vrj+us4P0ARl83lfV+q45x2dPdHS/+W9Fg1JN7wQ3tHskvPrLw/2Kz5q+07j/+bBZjNe2d+YyxtoY6JKrWnzIg==","signatures":[{"sig":"MEUCIQDZ8M/FrEMhMxvQPr6vC2ufH0B0w60jlNNbp0FAV4CMogIgap7/SsPkZ5hunWeL/8Cth7cb1QaODv4L+DGphUhQhCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1297949},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"fecbd71425347eee188137385b7d106e2bfd634a","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","vscode-jsonrpc":"^8.2.1","web-tree-sitter":"^0.25.10","@anthropic-ai/sdk":"^0.113.0","tree-sitter-wasms":"^0.1.13","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2","vscode-languageserver-protocol":"^3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.10.0_1786555822566_0.1840677955110912","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@nanonets/graft","version":"0.10.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.10.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"21422368814196f26ab059d7209c615d3f56313a","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.10.1.tgz","fileCount":342,"integrity":"sha512-YCA+LPmZeG7Ts6kDblif/nFtvwBfZ6g93ix9UXPEgORoPN9OSSyzy+ck6odmI/n6wTvgYrTwdNHimgHIpH20FQ==","signatures":[{"sig":"MEUCIGRlTFeFuss4GUsWO+vbnayapqdP6ImFypsJZ9r76wYvAiEAn3zGDIp+k5JLTRPOAkIrISJNqd/gZVnTQ1xYJKGRga0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1338853},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"dfaabf31cb6ff829e5fe440c12d192e1d292b312","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.","directories":{},"_nodeVersion":"25.8.0","allowScripts":{"tree-sitter@0.21.1":true,"tree-sitter-go@0.23.4":true,"tree-sitter-java@0.23.5":true,"tree-sitter-python@0.21.0":true,"tree-sitter-javascript@0.23.1":true,"tree-sitter-typescript@0.23.2":true},"dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","vscode-jsonrpc":"^8.2.1","web-tree-sitter":"^0.25.10","tree-sitter-java":"^0.23.5","@anthropic-ai/sdk":"^0.113.0","tree-sitter-wasms":"^0.1.13","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2","vscode-languageserver-protocol":"^3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.10.1_1786613323527_0.522022383054255","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@nanonets/graft","version":"0.12.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.12.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"fefa6aa20b586785dc86a77f5bffac3890dcd492","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.12.0.tgz","fileCount":448,"integrity":"sha512-B8AF5PSETlgvnhmg/xKAcG/t5GtLCFMtX4swH4/PNpjxCmZChHfsjjjh3ffO5k6SXf4kDMKQv+7iT082aZdZPg==","signatures":[{"sig":"MEYCIQCF/HIIRGYa4ww7dV6d9IGl2qYfPP4H4Y/9NFUHUtAE+AIhAJVd9HZmjoAHSP/H/PLkYe3CXKr9EJDyZ85pBT+w9WY2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1841565},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"65a76e5edd4098e0c7f4749d1e87f15ed741d069","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build && node scripts/stamp-telemetry-key.mjs"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.","directories":{},"_nodeVersion":"25.8.0","allowScripts":{"tree-sitter@0.21.1":true,"tree-sitter-go@0.23.4":true,"tree-sitter-java@0.23.5":true,"tree-sitter-python@0.21.0":true,"tree-sitter-javascript@0.23.1":true,"tree-sitter-typescript@0.23.2":true},"dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","vscode-jsonrpc":"^8.2.1","tree-sitter-php":"^0.23.4","web-tree-sitter":"^0.25.10","tree-sitter-java":"^0.23.5","tree-sitter-wasm":"^1.1.4","@anthropic-ai/sdk":"^0.116.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2","vscode-languageserver-protocol":"^3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.12.0_1787398543367_0.32296286510679373","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@nanonets/graft","version":"0.12.1","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.12.1","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"7bc068b9ca07ad4490884a917e352907a31194ee","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.12.1.tgz","fileCount":448,"integrity":"sha512-m/cst665Q/GavheL4AgRxf6LQmuRJ9pzE/l1UcZ4sFLzbRIeT3dhKRNVQ2FEYYJhx2rKE4p+8HNEUB8F3dK0tQ==","signatures":[{"sig":"MEQCIGZS0uk54hEAl2Qwxs5x0vY0hZFcFxpBpp9ZD514CW+NAiBDcfHgtJOiKd9WKUIF+nPaWBgqSFmAM+1oEN87Z9SNPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1841608},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bef4828481b06035d17f6d44aab1c4452a35e777","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build && node scripts/stamp-telemetry-key.mjs","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.","directories":{},"_nodeVersion":"25.8.0","allowScripts":{"tree-sitter@0.21.1":true,"tree-sitter-go@0.23.4":true,"tree-sitter-java@0.23.5":true,"tree-sitter-python@0.21.0":true,"tree-sitter-javascript@0.23.1":true,"tree-sitter-typescript@0.23.2":true},"dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","vscode-jsonrpc":"^8.2.1","tree-sitter-php":"^0.23.4","web-tree-sitter":"^0.25.10","tree-sitter-java":"^0.23.5","tree-sitter-wasm":"^1.1.4","@anthropic-ai/sdk":"^0.116.0","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2","vscode-languageserver-protocol":"^3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.12.1_1787544238154_0.7914023750634562","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@nanonets/graft","version":"0.13.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.13.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"b8d334d4deb91474db625d5efb39928dcd09d6e2","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.13.0.tgz","fileCount":459,"integrity":"sha512-cvwfWerPK5fDXd/ay41AgZrn5vvMRCPMnQd9Z/r2gv67jMB6DMv54e5heeJ1yB7HWftpt4QlkM2CI4HYOUfTuw==","signatures":[{"sig":"MEUCICkRY1G8BQZMlo1QDf7LSgQk5+bQKY3HpBXhC8A+u8cZAiEAvE5hyNcGa8y4K8J2gY/OcwghG/5lSKGSCnaqZagaTsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1984622},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ee1ef03538c4e94b1a8552b13984b9fc2992dd29","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build && node scripts/stamp-telemetry-key.mjs","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.","directories":{},"_nodeVersion":"25.8.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"tree-sitter@0.21.1":true,"tree-sitter-r@1.3.0":true,"tree-sitter-go@0.23.4":true,"tree-sitter-java@0.23.5":true,"tree-sitter-php@0.23.12":true,"tree-sitter-kotlin@0.3.8":true,"tree-sitter-python@0.21.0":true,"tree-sitter-javascript@0.23.1":true,"tree-sitter-typescript@0.23.2":true},"dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-r":"npm:@davisvaughan/tree-sitter-r@^1.3.0","tree-sitter-go":"^0.23.4","vscode-jsonrpc":"^8.2.1","tree-sitter-php":"^0.23.4","web-tree-sitter":"^0.25.10","tree-sitter-java":"^0.23.5","tree-sitter-wasm":"^1.1.4","@anthropic-ai/sdk":"^0.117.1","tree-sitter-kotlin":"^0.3.8","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2","vscode-languageserver-protocol":"^3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.13.0_1787571581010_0.47028738070185194","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@nanonets/graft","version":"0.15.0","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","_id":"@nanonets/graft@0.15.0","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"bin":{"graft":"dist/cli.js"},"dist":{"shasum":"3c35625c703740a5a62b81f10b441ccbecc3bfc8","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.15.0.tgz","fileCount":508,"integrity":"sha512-dC6pHh8qt2UAKqX5CymsIGHsE+vEixlqaUHjaqC6SH5EF68iqf80113evtMss5LhRYUMLHzuPDBtpk9iDB0lMw==","signatures":[{"sig":"MEQCIBrtONI86g4Jl1zQRRkdfQOjWVdBXO8qk5Hzky0/8tKqAiAiXyTr7iBEHZnLgDj8nZEy9Lv0PHccHZliDRh1SWEtog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2288365},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"268e30d750b50df39d7f13873f696c4523fea6b1","scripts":{"cli":"tsx src/cli.ts","dev":"tsc -p tsconfig.json --watch","test":"node scripts/run-tests.mjs","build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","prepare":"npm run build && node scripts/stamp-telemetry-key.mjs","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"overrides":{"tree-sitter-swift":{"tree-sitter":"$tree-sitter"}},"repository":{"url":"git+https://github.com/NanoNets/context-graph-engine.git","type":"git"},"_npmVersion":"11.11.0","description":"Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.","directories":{},"_nodeVersion":"25.8.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"tree-sitter@0.21.1":true,"tree-sitter-go@0.23.4":true,"tree-sitter-java@0.23.5":true,"tree-sitter-php@0.23.12":true,"tree-sitter-swift@0.7.1":true,"tree-sitter-kotlin@0.3.8":true,"tree-sitter-python@0.21.0":true,"tree-sitter-javascript@0.23.1":true,"tree-sitter-typescript@0.23.2":true,"@davisvaughan/tree-sitter-r@1.3.0":true},"dependencies":{"dotenv":"^17.4.2","openai":"^6.45.0","commander":"^15.0.0","gray-matter":"^4.0.3","tree-sitter":"^0.21.1","tree-sitter-r":"npm:@davisvaughan/tree-sitter-r@^1.3.0","tree-sitter-go":"^0.23.4","vscode-jsonrpc":"^8.2.1","tree-sitter-php":"^0.23.4","web-tree-sitter":"^0.25.10","tree-sitter-java":"^0.23.5","tree-sitter-wasm":"^1.1.6","@anthropic-ai/sdk":"^0.117.1","tree-sitter-swift":"^0.7.1","tree-sitter-kotlin":"^0.3.8","tree-sitter-python":"^0.21.0","tree-sitter-typescript":"^0.23.2","vscode-languageserver-protocol":"^3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","esbuild":"^0.28.1","d3-force":"^3.0.0","node-gyp":"^12.4.0","typescript":"^6.0.3","@types/node":"^26.1.0","@types/d3-force":"^3.0.10"},"_npmOperationalInternal":{"tmp":"tmp/graft_0.15.0_1787844308122_0.39240000499947825","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@nanonets/graft","version":"0.16.0","description":"Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/NanoNets/context-graph-engine.git"},"homepage":"https://github.com/NanoNets/context-graph-engine#readme","bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"publishConfig":{"access":"public"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"bin":{"graft":"dist/cli.js"},"scripts":{"build":"tsc -p tsconfig.json && tsc -p viewer/tsconfig.json && node scripts/build-viewer.mjs","dev":"tsc -p tsconfig.json --watch","cli":"tsx src/cli.ts","test":"node scripts/run-tests.mjs","prepare":"npm run build && node scripts/stamp-telemetry-key.mjs","prepublishOnly":"npm run build","postinstall":"node scripts/postinstall.mjs"},"engines":{"node":">=20"},"dependencies":{"@anthropic-ai/sdk":"^0.117.1","commander":"^15.0.0","dotenv":"^17.4.2","gray-matter":"^4.0.3","openai":"^6.45.0","tree-sitter":"^0.21.1","tree-sitter-go":"^0.23.4","tree-sitter-java":"^0.23.5","tree-sitter-kotlin":"^0.3.8","tree-sitter-php":"^0.23.4","tree-sitter-python":"^0.21.0","tree-sitter-r":"npm:@davisvaughan/tree-sitter-r@^1.3.0","tree-sitter-swift":"^0.7.1","tree-sitter-typescript":"^0.23.2","tree-sitter-wasm":"^1.1.6","vscode-jsonrpc":"^8.2.1","vscode-languageserver-protocol":"^3.18.2","web-tree-sitter":"^0.26.13"},"devDependencies":{"@types/d3-force":"^3.0.10","@types/node":"^26.1.0","d3-force":"^3.0.0","esbuild":"^0.28.1","node-gyp":"^12.4.0","tsx":"^4.22.4","typescript":"^6.0.3"},"allowScripts":{"tree-sitter@0.21.1":true,"tree-sitter-typescript@0.23.2":true,"tree-sitter-python@0.21.0":true,"tree-sitter-go@0.23.4":true,"tree-sitter-javascript@0.23.1":true,"tree-sitter-java@0.23.5":true,"esbuild@0.28.2":true,"fsevents@2.3.3":true,"tree-sitter-kotlin@0.3.8":true,"tree-sitter-php@0.23.12":true,"@davisvaughan/tree-sitter-r@1.3.0":true,"tree-sitter-swift@0.7.1":true},"overrides":{"tree-sitter-swift":{"tree-sitter":"$tree-sitter"}},"gitHead":"aa1e2bb0f6326068ac64886da1e67fa25a7804de","_id":"@nanonets/graft@0.16.0","_nodeVersion":"25.8.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-L3E5F1aDYJDCARgfR7O2VaMt8xwO1XNYyHiW2n1WhKnj87gPqoxoZJGNbGXfw6XeA9JSJX3naA36RZ+jDf4AcQ==","shasum":"49b804eecd7941460dfe33549e9d0ea446fef128","tarball":"https://registry.npmjs.org/@nanonets/graft/-/graft-0.16.0.tgz","fileCount":528,"unpackedSize":2394567,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBzkflmR5z7y3plgiH5QrKzivgiZlNP+kJ3vNeXDae3fAiAP9pyzQoeFUhEP9AYlfZJGQBYZnu6yTTj8ZFFv+rTfnQ=="}]},"_npmUser":{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},"directories":{},"maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/graft_0.16.0_1788186952024_0.3425020616316403"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T12:03:02.919Z","modified":"2026-08-31T14:35:52.674Z","0.1.0":"2026-07-15T12:03:03.285Z","0.2.0":"2026-07-17T11:14:48.858Z","0.2.1":"2026-07-17T13:48:00.286Z","0.3.0":"2026-07-20T13:33:06.289Z","0.3.1":"2026-07-20T14:16:02.558Z","0.3.2":"2026-07-20T15:36:04.041Z","0.4.0":"2026-07-21T09:58:42.175Z","0.4.1":"2026-07-21T11:49:17.504Z","0.4.2":"2026-07-21T13:40:27.814Z","0.4.3":"2026-07-21T17:46:53.855Z","0.4.4":"2026-07-22T06:35:42.000Z","0.4.5":"2026-07-22T08:22:22.026Z","0.5.0":"2026-07-22T19:28:09.249Z","0.5.1":"2026-07-23T12:26:39.711Z","0.6.0":"2026-07-23T15:11:54.997Z","0.7.0":"2026-07-23T23:47:41.540Z","0.7.1":"2026-07-24T11:45:14.729Z","0.8.0":"2026-07-27T09:00:42.435Z","0.8.1":"2026-07-29T21:07:29.339Z","0.8.2":"2026-07-30T16:13:44.291Z","0.9.0":"2026-08-07T08:23:46.689Z","0.9.1":"2026-08-11T10:34:21.423Z","0.10.0":"2026-08-12T17:30:22.719Z","0.10.1":"2026-08-13T09:28:43.705Z","0.12.0":"2026-08-22T11:35:43.534Z","0.12.1":"2026-08-24T04:03:58.310Z","0.13.0":"2026-08-24T11:39:41.161Z","0.15.0":"2026-08-27T15:25:08.302Z","0.16.0":"2026-08-31T14:35:52.197Z"},"bugs":{"url":"https://github.com/NanoNets/context-graph-engine/issues"},"license":"MIT","homepage":"https://github.com/NanoNets/context-graph-engine#readme","keywords":["ai","agents","knowledge-graph","context","codebase","llm","graft"],"repository":{"type":"git","url":"git+https://github.com/NanoNets/context-graph-engine.git"},"description":"Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.","maintainers":[{"name":"rushabhnagda11","email":"rushabhnagda11@gmail.com"},{"name":"shrishdwi","email":"dwi.shrish@gmail.com"},{"name":"ashish2","email":"ashish@nanonets.com"}],"readme":"<div align=\"center\">\n\n<img src=\"assets/graft-hero.png\" alt=\"Graft — open-source context layer for large codebases\" width=\"100%\"/>\n\n### Turbocharge Claude Code, Cursor, Codex, Gemini & every coding agent: faster, cheaper, with contextual understanding specific to your codebase.\n\n<a href=\"https://trendshift.io/repositories/92209?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-92209\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://trendshift.io/api/badge/trendshift/repositories/92209/daily?language=TypeScript\" alt=\"trailhq/Graft | Trendshift\" width=\"250\" height=\"55\"/></a>\n\n<p>\n  <a href=\"https://github.com/NanoNets/Graft\"><img src=\"https://img.shields.io/github/stars/NanoNets/Graft?style=for-the-badge&logo=github&logoColor=white&label=Star%20on%20GitHub&color=FFC83D\" /></a>\n  <a href=\"https://graft.nanonets.ai\"><img src=\"https://img.shields.io/badge/website-graft.nanonets.ai-546FFF?style=for-the-badge\" /></a>\n  <a href=\"https://discord.gg/zxmKweAA29\"><img src=\"https://img.shields.io/badge/Discord-join-5865F2?style=for-the-badge&logo=discord&logoColor=white\" /></a>\n  <a href=\"https://www.npmjs.com/package/@nanonets/graft\"><img src=\"https://img.shields.io/npm/v/%40nanonets%2Fgraft?style=for-the-badge&logo=npm&logoColor=white&label=npm\" /></a>\n  <a href=\"https://www.npmjs.com/package/@nanonets/graft\"><img src=\"https://img.shields.io/npm/dm/%40nanonets%2Fgraft?style=for-the-badge&logo=npm&logoColor=white&label=downloads\" /></a>\n  <a href=\"https://nodejs.org\"><img src=\"https://img.shields.io/node/v/%40nanonets%2Fgraft?style=for-the-badge&logo=nodedotjs&logoColor=white\" /></a>\n  <img src=\"https://img.shields.io/badge/TypeScript-strict-3178C6?style=for-the-badge&logo=typescript&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/License-MIT-20C997?style=for-the-badge\" />\n  <a href=\"TELEMETRY.md\"><img src=\"https://img.shields.io/badge/telemetry-anonymous%2C%20opt--out-546FFF?style=for-the-badge\" /></a>\n  <a href=\"https://scorecard.dev/viewer/?uri=github.com/NanoNets/Graft\"><img src=\"https://img.shields.io/ossf-scorecard/github.com/NanoNets/Graft?style=for-the-badge&label=openssf%20scorecard\" /></a>\n  <a href=\"https://github.com/apps/trailhq-graft\"><img src=\"https://img.shields.io/badge/PR%20reviews-install%20GitHub%20App-546FFF?style=for-the-badge&logo=github&logoColor=white\" /></a>\n</p>\n\n### Up to **4× cheaper** and **3× faster**, with better or no loss of correctness.\n\n| Metric | Cold Claude Code | Claude Code with graft |\n|---|---|---|\n| Tool-call reduction | Baseline | **+46%** |\n| Token savings | Baseline | **+42%** |\n| Time savings | Baseline | **+60%** |\n| Correctness | 54% | **66% (+12 pts)** |\n\n</div>\n\n<p align=\"center\"><b>Reviewing pull requests?</b> <a href=\"https://github.com/apps/trailhq-graft\">Add the graft GitHub App</a> to get an automatic blast-radius review on every PR.</p>\n\n<p align=\"center\">\n  <img src=\"assets/graft-comparison-demo.gif\" alt=\"Side-by-side comparison of a coding agent working with and without graft\" width=\"820\"/>\n</p>\n\n---\n\n## Contents\n\n- [Quick start](#quick-start)\n- [The problem](#the-problem)\n- [What Graft does](#what-graft-does)\n- [Benchmark](#benchmark)\n- [SWE-bench Verified](#swe-bench-verified)\n- [How the graph gets built](#how-the-graph-gets-built)\n- [Supported languages](#supported-languages)\n- [What's in a node](#whats-in-a-node)\n- [What runs where](#what-runs-where)\n- [Agent integration](#agent-integration) — [MCP server](#mcp-server) · [Claude Code (deep integration)](#claude-code-deep-integration)\n- [CLI](#cli)\n- [Search & orient](#search--orient-graft-grep--graft-map) (`graft grep` / `graft map`)\n- [Monorepos & multi-repo folders](#monorepos--multi-repo-folders)\n- [Visualize it](#visualize-it-graft-viz) (`graft viz`)\n- [Tested on your popular repos](#tested-on-your-popular-repos)\n- [Development](#development)\n- [License](#license)\n\n---\n\n## Quick start\n\n```bash\nnpm install -g @nanonets/graft   # install the CLI, once\ngraft init                       # build the graph + wire it into Claude Code\n```\n\nThat is the whole setup. `graft init` asks which of your coding agents to wire up, builds `graft/` from your code, and drops a statusline and hooks into `.claude/`, so from the next session on Graft rides along in Claude Code: it pulls the matching nodes into each prompt and rebuilds the graph in the background after every turn. No daemon, no re-indexing to remember, nothing to run or maintain by default — the graph is just files.\n\nNothing is written until you pick. Run `graft init --dry-run` to see every file it would touch first, or `graft init --agents claude` to skip the prompt and wire Claude Code alone.\n\n`graft build` adds `graft/` to your `.gitignore` automatically — the graph is a local, regenerable cache (like `node_modules`), not something you commit. What you share is the wiring `init` dropped into `.claude/`; each teammate runs `graft build` to generate their own graph:\n\n```bash\ngit add .claude && git commit -m \"wire in graft\"\n```\n\nPrefer not to install globally? `npx @nanonets/graft init` works the same way.\n\n<p align=\"center\">\n  <img src=\"assets/graft-terminal.png\" alt=\"Two commands — npm install and graft init — then Graft rides along in a Claude Code session, statusline synced\" width=\"820\"/>\n</p>\n\n---\n\n## The problem\n\nEvery task, your coding agent starts blind. Before it changes anything, it re-explores the repo: grep a term, open a file, follow an import, back out, try again. It is rebuilding a picture of a codebase it mapped an hour ago and threw away. That rediscovery burns most of a run's tool calls, tokens, and latency, and it is pure overhead:\n\n- **Repeated.** Every task pays the exploration cost again, from zero.\n- **Discarded.** Whatever the agent figured out dies with the session.\n- **Unshared.** The next teammate, and their agent, start from scratch too.\n\nHumans onboard to a codebase once. Agents onboard every single time.\n\n<p align=\"center\">\n  <img src=\"assets/graft-site-act-demo.gif\" alt=\"A no-map agent's exploration trail wandering file to file before it finds what it needs\" width=\"820\"/>\n</p>\n\n---\n\n## What Graft does\n\nGraft builds that understanding **once** and writes it into your repo as a folder of linked markdown files, one node per system, API, or concept.\n\n- **Real explanations, not a list of symbols.** Each node says, in plain English, what a part of the system does and how it connects to the rest, the way a senior engineer would explain it. That is the part an agent actually needs so it can skip the exploration. It is not a dump of function names.\n- **A real graph you can read.** No embeddings, no similarity search, no index to keep warm. The graph is a set of linked files your agent opens, greps, and follows, exactly the way it reads any other file in the repo.\n- **A local cache, not a committed artifact.** `graft build` writes `graft/` and adds it to `.gitignore` — it's a regenerable local cache, like `node_modules`. What you commit is the small wiring `graft init` drops in (`.claude/`, `AGENTS.md`, the MCP config); each teammate runs `graft build` to generate their own graph. No database, no server, no setup.\n- **Always fresh, automatically.** Every query rebuilds the graph against the working tree first — structural, `$0`, ~3ms when nothing moved — so `ask`/`grep`/`callers`/`skeleton`/`map` describe the code as it is right now, including uncommitted edits. `graft check` is a local freshness signal; there's no stale index to babysit.\n- **Your provider, your key, your model.** Summaries are written by any provider you choose — OpenAI, Anthropic (native), OpenRouter, Fireworks, Groq, OrcaRouter, a LiteLLM proxy, or a local model — under your own key. The structural code graph (`graft build`, `graft check`) is deterministic tree-sitter and never calls a model at all.\n\n<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/graft-cold-vs-graft-dark.png\">\n    <img src=\"assets/graft-cold-vs-graft.png\" alt=\"The same task, 'fix the auth bug', run two ways. A cold Claude Code session re-reads the repo and wanders file to file; Claude Code + graft loads its map once and rides the hooks to one clean pass. With Graft: 46% fewer tool calls, 42% fewer tokens, 60% less time, +22% more SWE-bench instances resolved.\" width=\"880\"/>\n  </picture>\n</p>\n\n---\n\n## Benchmark\n\nAn agent that reads the graph should be cheaper and faster without getting more answers wrong. That's the whole claim, so we measured it instead of asserting it.\n\nThe harness ran three variants of the same Claude Sonnet 5 agent with the same file tools: **cold** (explores from zero), **Graft** (a `graft ask --source` bundle pushed up front), and **pull** (graft_find_code/graft_file_api tools, nothing injected — context paid for only when asked). An Opus 4.8 judge scored correctness with a required-keyword floor, so a fast-but-wrong answer couldn't win by being fast. Cost is cache-aware: reads ≈0.1×, writes 1.25×, the billing model agents actually run under.\n\n162 runs, two repos (graft itself and a real Node/Express auth service), 3 trials each, tasks split between single-file and multi-file questions.\n\n| Metric (mean/task) | Cold Claude Code | Claude Code with graft |\n|---|---|---|\n| Cost savings ($) | 0.0429 | **0.0292 (+32%)** |\n| Token savings | 8,070 | **4,650 (+42%)** |\n| Tool-call savings | 4.2 | **2.3 (+46%)** |\n| Latency savings (s) | 39.8 | **15.8 (+60%)** |\n| Correctness | 93% | 93% (equal) |\n\nGraft never answered worse than cold, on any corpus. The pull variant gave up most of that speed for something bigger: correctness jumped to 98%, +5 points over cold, the strongest single result in the sweep. Push when speed is what you need; pull when being right matters more.\n\n---\n\n## SWE-bench Verified\n\nThe sweep above is our harness measuring our mechanism. So we ran the industry-standard one too — **SWE-bench Verified**, real GitHub issues from real repos, graded by the official `swebench` harness. No judge model, no similarity score: your patch is applied, the maintainers' own tests are run, and you either flip the failing test without breaking the passing ones or you don't.\n\n**50 instances**, same model on both arms — **Claude Sonnet 5** — same Docker images, same turn limits. The only difference is whether graft is wired in.\n\n| Correctness & efficiency | Cold Claude Code | Claude Code with graft | Improvement |\n|---|---|---|---|\n| Correctness | 27 / 50 (54%) | **33 / 50 (66%)** | **+12 pts** |\n| Token savings | 142.0M | **109.4M** | **+23%** |\n| Cost savings | $52.34 | **$42.43** | **+19%** |\n| Tool-call savings | 1,370 | **1,031** | **+25%** |\n| API-request savings | 2,455 | **1,875** | **+24%** |\n| Wall-clock savings | 13,094s | **8,922s** | **+32%** |\n\ngraft resolved **33 of 50 instances** against Cold Claude Code's 27 — and got there with 25% fewer tool calls, 23% fewer tokens, and 32% less wall-clock time. Every correctness win has the same shape: the baseline patches one file and misses its siblings. On `django-11532` it patched 1 of the 5 files the fix requires and broke 18 previously-passing tests, twice over. On `django-16263` it patched 1 of 4 and scored 102 / 103. graft found the rest — and on `django-16263` did it in half the tokens and half the time.\n\nTwo harnesses, two claims: the controlled sweep says graft is cheaper and faster, SWE-bench says it's also more correct.\n\n<sub>Correctness over all instances; tokens, cost and calls over the instances both arms resolved, for a like-for-like comparison. Official SWE-bench Verified images and official `swebench` 4.1.0 grader, native x86_64.</sub>\n\n---\n\n## How the graph gets built\n\nGraft builds the graph in two passes, both powered by a language model:\n\n1. **Read each file.** Every source file is summarized once into a short description of what it does.\n2. **Group into nodes.** Those summaries are grouped into a curated set of nodes (subsystems, key files, and concepts) with typed links between them. Graft chooses the right level of detail for you instead of making one node per file, so a big repo becomes a few dozen readable nodes.\n\n```mermaid\nflowchart LR\n    S[Source files] --> T[\"Tier 1 — tree-sitter<br/>no model, no key\"]\n    S --> P1[\"Pass 1 — LLM summarizes<br/>each file (--deep)\"]\n    T --> W[\"graft/.graph/wiring.json<br/>per-symbol code graph\"]\n    P1 --> P2[\"Pass 2 — group into nodes<br/>+ typed links\"]\n    P2 --> N[\"graft/*.md<br/>markdown node graph\"]\n```\n\nEvery pass is cached by content hash — the LLM ones and the tree-sitter parse alike. Re-running only touches the files that changed, so the second build is fast and cheap (on this repo, 124 files: 0.74s cold, 0.18s after one edited file, 0.18s with nothing changed). `graft build --no-reuse` forces a cold re-parse.\n\nThat cheapness is what lets **every query refresh the graph before it answers**. A retrieval call stats the tree against the last build's fingerprint (~3ms), and rebuilds only if something moved — so `ask`/`grep`/`callers`/`skeleton`/`map` describe the code as it is right now, including edits that are unsaved to git: uncommitted, unstaged, or staged all look the same to graft. Git determines the visible file set; freshness compares the working-tree bytes rather than commit or index state. The refresh is structural and `$0`; it never calls the LLM. Turn it off per-command with `--no-refresh`, or everywhere with `GRAFT_NO_REFRESH=1`.\n\nAlongside the markdown graph, `graft build` builds `graft/.graph/wiring.json` — a per-symbol code graph — plus a per-file wiring card mirroring your source tree. Tier 1 is pure tree-sitter (every function, class, and call edge; deterministic, no model, no network), which is why plain `graft build` needs no key. The `--deep` pass adds a one-line summary and a crux excerpt per symbol, cached by body hash.\n\n---\n\n## Supported languages\n\nGraft parses with tree-sitter at two levels of fidelity, plus an optional\ncompiler-grade layer — all `$0` and deterministic (no model, no key):\n\n- **Full-fidelity** — hand-written extractors with scope-aware, cross-file call\n  and import resolution:\n  **TypeScript / JavaScript** (incl. JSX & TSX), **Python**, **Go**, **Java**,\n  **Kotlin**, **PHP**, **Swift** (classes, structs, enums, actors, protocols;\n  extension members attach to the extended type), **R** (`.R`/`.r` — plain\n  functions, S3/S4/R6 classes and methods, roxygen `@export`,\n  `library()`/`source()` imports).\n\n- **Broad** — symbols (functions, classes, methods, types, …) plus name-resolved\n  call edges via a generic tree-sitter extractor, one grammar per language:\n  **Rust, C, C++, C#, Ruby, Scala, Elixir, Solidity,\n  OCaml, Zig, Dart, Clojure, Nix, Lua**.\n\n- **Compiler-grade edges (opt-in)** — `graft build --lsp` adds precise\n  `lsp_resolved` call edges (member calls the static pass can't type) when a\n  language server is on your `PATH`: **rust-analyzer** (Rust), **clangd** (C/C++),\n  **gopls** (Go), **pyright** (Python), **typescript-language-server** (TS/JS).\n  It's best-effort — with no server installed the graph is unchanged.\n\nTwenty-three languages in total. A file whose language isn't listed is skipped, not\nindexed. Adding a broad-tier language is a small contribution — see\n[CREDITS.md](CREDITS.md) for the folks who added the current set.\n\n---\n\n## What's in a node\n\nA node is a single markdown file. Most code maps stop at an address: this thing lives in that file, on that line. That tells an agent where to look, not what it will find, so it still has to open the source and read. A Graft node holds the meaning inline, so the agent learns what it needs up front and opens the file only when it wants more.\n\nEach node holds:\n\n| Part | What it holds |\n|---|---|\n| **Summary** | A plain-English explanation of what the code does, written by the model and cached. It is there whether or not the code was ever documented, and it is regenerated when the source changes. |\n| **Crux** | The handful of lines that actually carry the logic: the guard, the skip condition, the state change. Lifted straight from the source and stored inline, so the agent sees *how* it works, not just what. |\n| **Sources** | The exact files the node is built from, each tracked by a content hash, so Graft can tell precisely when a node has gone stale. |\n| **Links** | Typed connections to other nodes (`depends_on`, `part_of`, `uses`, `implements`, `produces`), written as `[[wikilinks]]` your agent can follow. |\n| **Notes** | Anything you write below the generated block. It is preserved across regenerations, so your own context is never overwritten. |\n\nThat is three depths in one file: the summary says *what* the code does, the crux shows *how*, and the sources point to the rest if the agent needs it. A plain index makes it read a whole file to learn one thing. A Graft node hands it the answer inline, and the follow-up read often never happens.\n\nThe crux is stored as the code itself, not as a line range, on purpose. Line numbers drift whenever unrelated code above them shifts, but the lines that matter do not. Keeping the text, not the numbers, means the crux stays correct even as the file around it moves.\n\n_Summary, sources, links, and notes ship today in markdown nodes. The crux ships per-symbol in the code graph (`graft build --deep`); inlining it into markdown nodes is next._\n\n---\n\n## What runs where\n\n- **On your machine, no key, no network:** the structural code graph. `graft build` (wiring graph + per-file cards), `graft check`, and `graft ask` are deterministic tree-sitter — they never call a model.\n- **Through your provider key:** the LLM-written parts — `graft build --deep` adds the concept nodes (file summaries + node synthesis) and the per-symbol summaries and cruxes. graft is vendor-neutral: set `GRAFT_PROVIDER` (`openai` for any OpenAI-compatible endpoint, `anthropic` for the native API, or `litellm` / `orcarouter` for a gateway that speaks the OpenAI-compatible format), your `GRAFT_API_KEY`, `GRAFT_MODEL`, and — for the `openai` wire format — `GRAFT_BASE_URL` to point at OpenRouter, Fireworks, Groq, a LiteLLM proxy, a local server, or OpenAI itself. Or pass `--provider/--model/--api-key/--base-url` on the command line. (`OPENROUTER_API_KEY` still works as a deprecated fallback, and `ORCAROUTER_API_KEY` as a second one.)\n- **Anonymous usage stats** — the only network calls are the LLM requests you configured, a daily npm version check, and one batched usage ping. The ping carries buckets and fixed labels only: never your code, file paths, repo name, symbols, queries, or error messages. [`TELEMETRY.md`](TELEMETRY.md) is the complete list and `graft telemetry debug` prints exactly what your machine would send. Turn it off with `graft telemetry disable`, `DO_NOT_TRACK=1`, or by unchecking the box in `graft init`; it is off in CI and in any build from source.\n\nSee [`.env.example`](.env.example) for the full list of settings (model, base URL, graph directory).\n\n---\n\n## Agent integration\n\nOne command wires Graft into the coding agents you use:\n\n```bash\nnpx @nanonets/graft init\n# detects your agents and writes each one's native instruction file;\n# Claude Code additionally gets the live statusline + hooks below\n```\n\nOn a terminal, `init` shows you every agent it knows about — flagging the ones it detected (via their config directories) and listing the exact files each would write — and wires only the ones you select. Claude Code is pre-selected; nothing else is. Selected agents get a marker-fenced Graft section in their shared instruction file — `AGENTS.md` (Codex, OpenCode and other CLIs that read it), `GEMINI.md`, `.github/copilot-instructions.md` — or a wholly-owned rule/skill file for the agents that use one: `.claude/skills/graft/SKILL.md`, `.cursor/rules/graft.mdc`, `.kiro/steering/graft.md`, `.windsurf/rules/graft.md`, `.grok/skills/graft/SKILL.md` for Grok (xAI), `.adal/skills/graft/SKILL.md` for [AdaL](https://adal.sylph.ai). Claude Code is in the second group: `init` writes its own skill file and never touches your `CLAUDE.md`. Re-running only updates Graft's own section (or replaces the owned file) and never touches the rest of your content.\n\nWith no TTY to prompt on — CI, a Dockerfile, a piped shell — `init` writes **nothing** and prints the command to run instead. Pass `--agents <ids>` or `--yes` to make a scripted run explicit.\n\n| Flag | Effect |\n|---|---|\n| `--agents <ids...>` | wire only these, no prompt — ids: `agents`, `cursor`, `gemini`, `grok`, `copilot`, `kiro`, `windsurf`, `adal`, `claude` |\n| `--yes`, `-y` | skip the prompt and wire every **detected** agent |\n| `--dry-run` | print every file `init` would touch, then exit without writing |\n| `--all-agents` | write instruction files for every known agent, detected or not |\n| `--no-agents` | Claude Code wiring only; skip other agents |\n| `--list-agents` | print the known agent ids and exit |\n| `--no-mcp` | skip MCP server registration |\n| `--no-hooks` | skip hook installation |\n| `--no-statusline` | skip writing Claude Code `statusLine` (same as `GRAFT_NO_STATUSLINE=1`) |\n| `--no-global` | skip writes outside this repo (the `~/.codex/` entries below) |\n\n#### Writes outside the repo\n\nSelecting the `agents` host also touches your **user-level** Codex config, when `~/.codex/` exists:\n\n| Path | What changes |\n|---|---|\n| `~/.codex/config.toml` | registers the Graft MCP server (`[mcp_servers.graft]`) |\n| `~/.codex/hooks/graft/graft-hooks.cjs` | the post-edit hook shim |\n| `~/.codex/hooks.json` | a `PostToolUse` entry matching `Write\\|Edit\\|MultiEdit` |\n\nBoth configs are user-level, so they apply to **every** repo you open with Codex, not just this one. The picker labels these `machine-wide`, `--dry-run` lists them in their own section, and `--no-global` skips them while still wiring `AGENTS.md`.\n\n### MCP server\n\n`graft init` also registers Graft's MCP server with agents that support it, so these six tools appear natively, no shell required. Claude Code gets this too: `graft init` writes the server into the project's `.mcp.json` (restart Claude Code to load it). Skip with `--no-mcp`; run it manually with `graft mcp [dir]`.\n\n| Tool | Takes | What it's for |\n|---|---|---|\n| `graft_find_code` | a question | Ranked nodes with file:line, source inlined — usually the full answer, no follow-up read needed. |\n| `graft_file_api` | a file path | Every signature in that file, no bodies — the API surface for a tenth of the tokens. |\n| `graft_trace_calls` | a symbol | Who depends on it, or what it depends on with `direction: out`, N levels deep for blast radius. |\n| `graft_find_all` | a regex | Every hit, grouped by enclosing symbol, ranked by how coupled that symbol is. |\n| `graft_repo_map` | nothing | A first look at an unfamiliar repo: directory clusters, hubs, hotspots. |\n| `graft_check_freshness` | nothing | Whether the local graph has drifted from the code. |\n\nRegister it by hand if your agent needs it explicit:\n\n```json\n{ \"mcpServers\": { \"graft\": { \"command\": \"npx\", \"args\": [\"-y\", \"@nanonets/graft\", \"mcp\"] } } }\n```\n\nWhere a CLI agent supports user-level `hooks.json`, `init` also installs Graft's post-edit hook — blast-radius warnings and automatic `$0` graph re-sync after edits (skip with `--no-hooks`).\n\n### Claude Code (deep integration)\n\n`graft init` always wires up Claude Code, and Claude Code gets more than the skill file above. From then on, any Claude Code session opened in the repo gets:\n\n- **a live statusline** — graph size, % enriched, and a `⚠ N stale` warning when the code has moved ahead of the graph\n- **auto-sync** — every graft query brings the graph up to date first, so an answer always describes the code as it is right now, uncommitted edits included. A query refreshes only what it reads; the markdown under `graft/` is refreshed by the background rebuild at the end of a turn that touched code. Both are structural and `$0` — auto-sync never calls the LLM on its own\n- **context on tap** — each prompt pulls the matching nodes into the session; editing a file surfaces what depends on it (\"blast radius\"); new sessions start with the repo map\n\n<p align=\"center\">\n  <img src=\"assets/graft-hooks-demo.gif\" alt=\"How Claude Code hooks wire graft in: install, graft init, then the hooks loop (session start, user prompt, post tool use, stop) keeps the graph built, read, and committed automatically\" width=\"820\"/>\n  <br/><sub>install → init → hooks keep the graph fresh every session</sub>\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/graft-hook-blast-radius-demo.gif\" alt=\"graft's post-edit hook: editing node-file.ts prints its blast radius (who depends on it) inline, the statusline flips stale → syncing → synced on its own, and the same dependents light up in graft viz\" width=\"820\"/>\n  <br/><sub>edit a file → blast radius appears inline → graph auto-resyncs → confirmed in <code>graft viz</code></sub>\n</p>\n\n`graft init` is idempotent and never clobbers your existing `.claude/settings.json` — it merges its blocks and leaves the rest alone. A `statusLine` that is not Graft's (anything whose command does not name `graft-statusline.cjs`) is left untouched; re-running `init` will refresh Graft's own helper command if it is already installed. Pass `--no-statusline` (or `GRAFT_NO_STATUSLINE=1`) to skip installing one at all — a project-level `statusLine` would otherwise hide a custom one in `~/.claude/settings.json`. Want the LLM summaries too? Run `graft build --deep` (with a key) whenever you like; auto-sync will never do it for you.\n\n---\n\n## CLI\n\n```bash\ngraft build [dir]                    # build graft/ from the code at [dir]: wiring graph + per-file cards (no LLM, no key)\ngraft build --deep                   # add the LLM layer: concept nodes + per-symbol summary/crux (cached)\ngraft build --extensions .ts .py     # only include these code extensions\ngraft build --no-reuse               # re-parse every file instead of replaying unchanged ones from cache\ngraft build --follow-submodules      # include initialized submodules; persist the choice for builds + MCP refresh\ngraft build --no-follow-submodules   # exclude submodules again and persist that choice (the default)\ngraft build --follow-nested-repos    # include nested git clones the index doesn't track; persist the choice\ngraft build --no-follow-nested-repos # exclude nested clones again and persist that choice (the default)\n\ngraft ask \"<task>\" [dir]             # query the graph — ranked nodes + exact file:line (no LLM, no key)\ngraft ask \"<task>\" --json            # machine-readable result\ngraft ask \"<task>\" --in <scope>      # narrow to one sub-project of a monorepo/multi-repo folder (see below)\n\ngraft skeleton <file> [dir]          # every signature in one file, no bodies — the API surface for ~1/10th the tokens (no LLM, no key)\n\ngraft callers <symbol> [dir]         # who calls/references/imports/implements/extends a symbol (no LLM, no key)\ngraft callers <symbol> --direction out  # the reverse: what the symbol itself calls/references (was `graft callees`)\ngraft callers <symbol> -d N          # walk transitively out to depth N — full blast radius (was `graft impact`)\n\ngraft grep \"<regex>\" [dir]           # exhaustive regex search over indexed files, grouped by enclosing symbol (no LLM, no key)\ngraft grep \"<regex>\" --in <path>     # narrow to files at or under this path prefix\ngraft grep \"<regex>\" -i --fixed      # case-insensitive; treat the pattern as a literal string, not a regex\n\ngraft map [dir]                      # token-budgeted repo orientation — dir clusters, hubs, hotspots (no LLM, no key)\ngraft map --max-dirs N               # raise/lower the number of directories shown\n\ngraft blast [dir]                    # blast radius of a diff: what depends on the lines this change touched (no LLM, no key)\ngraft blast --base origin/main       # diff against the merge base with HEAD — what a PR job runs\ngraft blast --format markdown        # a PR comment: the areas a change can reach, per-symbol detail collapsed under it\ngraft blast --base origin/main --name  # name those areas with one cached LLM call, instead of a full --deep build\ngraft blast --export-viz site/       # also write the interactive page for this radius (what a PR comment links to)\ngraft blast --no-owners              # skip \"who to tag\" — by default git history names the people behind each area\ngraft blast --depth all --format json  # the full transitive closure, machine-readable\n\ngraft check [dir]                    # fail (exit 1) if graft/ has drifted from the code (never auto-refreshes — it's the drift report)\ngraft check --json                   # print the drift report as JSON\n\n# ask / skeleton / callers / grep / map / blast all refresh the graph first if the working tree moved:\n#   --no-refresh                     # answer from the graph exactly as it is on disk\n#   GRAFT_NO_REFRESH=1               # same, for every command\n#   GRAFT_REFRESH=hash               # hash every file instead of trusting size+mtime\n\ngraft viz [dir]                      # see the graph: serves an interactive viewer on localhost\ngraft viz --port 5000 --no-open      # pick a port; don't auto-open the browser\ngraft viz --export site/ --title \"PR #12\"  # one self-contained index.html — for CI, GitHub Pages, or a build artifact\n\ngraft init [dir]                     # pick which agents to wire (prompts on a terminal; writes nothing until you choose)\ngraft init --dry-run                 # list every file it would touch, then exit\ngraft init --agents cursor kiro      # wire only these agents, no prompt (ids: agents, cursor, gemini, grok, copilot, kiro, windsurf, adal, claude)\ngraft init --yes                     # no prompt; wire every detected agent\ngraft init --no-global               # skip writes outside this repo (~/.codex/ config + hooks)\ngraft init --no-statusline           # skip Claude Code statusLine (same as GRAFT_NO_STATUSLINE=1)\ngraft init --no-build                # wire the files only; don't build the graph\ngraft init --all-agents              # wire every known agent, detected or not\ngraft init --list-agents             # list known agent ids and exit\n\ngraft uninstall [dir]                # remove every file and config entry graft wrote here (the inverse of init)\ngraft uninstall -y                   # actually remove (without -y it prints what it would remove and exits)\ngraft uninstall --keep-cache         # wiring only; leave graft/ and the .gitignore entry\ngraft uninstall --no-global          # leave out-of-repo files alone (~/.codex, ~/.gemini)\n\ngraft version                        # print the installed + latest published npm version\ngraft upgrade                        # npm install -g the latest published version\n                                     # a new version is announced automatically (checked once a day);\n                                     # after upgrading, the next session refreshes this repo's wiring itself\n\n# global\ngraft --dir <path>                   # use a context dir other than <repo>/graft\ngraft --version, -v                  # print the installed version and exit\n```\n\nMethod calls resolve through the receiver's type — constructor assignments\n(`self.router = APIRouter()`) and type annotations, not just the call-site\nname — so `callers`/`grep --in` return calls bound to the right\ntype on method-heavy code, not every method anywhere with that name.\n\n## Search & orient (`graft grep` / `graft map`)\n\n`graft grep \"<regex>\"` is exhaustive over every indexed file and groups hits\nby enclosing symbol, ranked by the same in-edge coupling `graft map` uses —\nbuilt for \"every occurrence of this pattern\" tasks where `graft ask`'s\nranked top-N isn't enough:\n\n```\n\"NEEDLE\" — 2 hits in 2 symbols across 1 files (searched 1 indexed files)\n\nheavilyCalled · function · src/a.ts:L1-L3 · 3 in-edges\n  L2: console.log(\"NEEDLE hit in heavilyCalled\");\n\nrarelyCalled · function · src/a.ts:L4-L6 · 0 in-edges\n  L5: console.log(\"NEEDLE hit in rarelyCalled\");\n```\n\n`graft map` is a token-budgeted first look at a repo — directory clusters\nwith file/symbol counts, each dir's local hubs, and the global hotspots —\nall ranked by in-degree, no LLM, no key:\n\n```\nrepo map — 113 files · 687 symbols · 2186 edges · typescript\n\nsrc/                63 files · 527 symbols   hubs: contextDirFor (node-file.ts, 21←), wiringPath (write.ts, 14←), buildGraph (build.ts, 11←)\ntest/               43 files · 102 symbols   hubs: edge (graph-traverse.test.ts, 4←), graphOf (graph-traverse.test.ts, 4←), fileNode (graph-map.test.ts, 3←)\nviewer/             5 files · 58 symbols   hubs: $ (main.ts, 9←), activeGraph (main.ts, 5←), cvar (data.ts, 5←)\nscripts/            2 files · 0 symbols\n\nhotspots: contextDirFor · function · src/context/node-file.ts:L100-L103 · 21←  wiringPath · function · src/graph/write.ts:L20-L22 · 14←  buildGraph · function · src/graph/build.ts:L104-L218 · 11←  ...\n```\n\n## Monorepos, submodules & multi-repo folders\n\nGraft supports these layouts:\n\n- **A monorepo with one `.git`** (a `pnpm-workspace.yaml`/`package.json`\n  `workspaces`, or per-package `go.mod`/`pyproject.toml`/`Cargo.toml`) —\n  `graft build` discovers each sub-project as a ranking scope. `ask`/`map`\n  rank every scope on its own terms and fuse the results, so the biggest\n  sub-project can't drown a small one; hits carry `[scope/]` labels, and\n  `graft map` groups its directory clusters by scope first.\n- **A Git superproject with initialized submodules** — submodules stay excluded\n  by default. Run `graft build --follow-submodules` to fold initialized gitlinks\n  into one graph, prefixing child paths (for example,\n  `deps/parser/src/index.ts`) while honoring each submodule's own Git ignore\n  rules. Visible untracked files are included too; uninitialized submodules\n  remain absent until `git submodule update --init` checks them out. The choice\n  is saved in `.graft/config.json`, so later no-flag builds and MCP automatic\n  refreshes behave the same way. Run `graft build --no-follow-submodules` to\n  restore and persist the default boundary.\n- **A git repo with other repos cloned inside it** (no gitlink, no index entry) — the shape multi-repo manifest tools like `west`, `repo`, `gclient` and `tsrc` check dependencies out into, and the shape you get by cloning an upstream into the tree to patch it locally. `--follow-submodules` cannot reach these: they have no `160000` index entry to follow. Run `graft build --follow-nested-repos` to fold them into one graph, prefixing child paths (for example, `external/parser/src/index.ts`) while honoring each clone's own Git ignore rules. A clone at a git-ignored path stays absent, since Git never reports it. The choice is saved in `.graft/config.json` and is independent of `--follow-submodules` — neither flag implies the other. Run `graft build --no-follow-nested-repos` to restore and persist the default boundary. Prefer this over the multi-repo split below when the nested repos import from each other and you want those edges in one graph; prefer the split when you want each repo scored and refreshed on its own.\n- **A folder of separate git repos** (no `.git` at the top) — `graft build`\n  auto-splits: each child gets its own (git-ignored) `graft/`, and the parent\n  gets a `graft/workspace.json` index. Queries from the parent federate across\n  every child, always labeled `<child>/`. Run `graft build` inside a child to\n  work on just that repo.\n\nIn every layout, narrow to one sub-project with `graft ask \"<task>\" --in <scope>/`\nonce you know where you're working.\n\n`graft init` at the parent of a multi-repo folder wires **every child repo too**,\nnot just the parent — an agent session opens at a repo root and reads its\ninstruction files from there, so each child needs its own. A session started in\nthe parent gets the federated view; one started in a child sees that repo alone.\n\nCommands also find the graph from a subdirectory: with no `[dir]` argument they\nwalk up to the nearest `graft/`, so `graft ask` works from `src/deep/inside/`\nwithout a `cd` to the repo root.\n\n## Visualize it (`graft viz`)\n\n`graft viz` opens a local, interactive view of both graphs — no install, no dev\nserver; the viewer ships prebuilt inside the package.\n\n<p align=\"center\">\n  <img src=\"assets/graft-viz-demo.gif\" alt=\"graft viz — searching a symbol and jumping to it lights up its dependency graph: amber edges are what it depends on, teal is what depends on it\" width=\"820\"/>\n  <br/><sub>search → jump to a node → dependency graph lights up</sub>\n</p>\n\n- **Context** tab — the architecture graph from `graft/*.md`. Nodes colored by\n  type, sized by connectedness.\n- **Code** tab — the per-symbol graph from `graft/.graph/wiring.json` (run `graft build` first).\n- **Outline** tab — the file → class → method hierarchy as a collapsible tree.\n\nEdges speak the code's language. Every link is one of a closed set of verbs, each\nanswering a question someone building or reviewing code actually asks:\n\n| Verb | The question it answers |\n|---|---|\n| `part_of` / `contains` | where does this live? |\n| `uses` / `calls` / `imports` / `depends_on` | what breaks if I change this? |\n| `produces` | where does this output come from? |\n| `configures` | what changes its behavior without a code change? |\n| `validates` | what checks or judges this? (tests, drift checks, scoring) |\n| `extends` / `implements` | what contract must this honor? |\n\nSelect a node and its edges take on direction: **amber = what it depends on,\nteal = what depends on it**, with the verb written on each highlighted edge.\nChips above the canvas filter by verb; tree-sitter-extracted edges draw solid\nwhile LLM-inferred ones draw dashed. The viewer live-reloads when `graft/`\nchanges on disk. Older graphs with vague verbs (`influences`, `supports`) are\nnormalized on load — no regeneration needed.\n\n---\n\n## Tested on your popular repos\n\nThe [benchmarks](#benchmark) measure the mechanism. The real test is whether graft helps an agent **ship real changes** on code people actually run, not just answer questions. So we benchmark it on popular open-source repos: **15 tasks each**, 10 real developer questions plus **5 actual implementation tasks** (real merged pull requests, each re-implemented from its base commit and scored against the files the maintainers actually changed). Same agent (Claude Opus), same file tools; the only difference is whether graft is wired in.\n\nAcross these repos graft runs **up to 4× cheaper and 3× faster**, with better or no loss of correctness: it reproduces the real merged PRs by touching the same files the maintainers did. Per-repo detail below.\n\n### PocketBase (Go, ~350 files)\n\n| Aggregate over 15 tasks | Standard Claude Code | With graft |\n|---|---|---|\n| Cost | $13.91 | **$11.02 (−21%)** |\n| Wall-clock | 2,044s | **1,762s (−14%)** |\n| PRs reproduced | 5 / 5 | **5 / 5 (same files as the maintainers)** |\n\nCheaper and faster with no loss of correctness: graft reproduced all five merged PRs, touching the same files the maintainers did. The gap is widest on cross-file understanding — \"how does auth work across OAuth2 providers\" dropped from $2.19 to $0.84.\n\n<details>\n<summary><b>The 10 questions we asked</b></summary>\n\n1. **Orientation** — Give me a map of PocketBase's architecture: the main subsystems and how an HTTP request flows through to the database.\n2. **Entry-point trace** — Trace end-to-end what happens when a client creates a record via the REST API, from route handler to database write.\n3. **Feature location** — I want to add a brand-new collection field type. Where do I hook it in, and which pieces must change?\n4. **Bug localization** — Realtime subscriptions silently stop delivering events after a while. Where would you start looking, and why?\n5. **Blast radius** — If I change the signature of the record-validation logic, what depends on it and what could break?\n6. **Cross-file synthesis** — How does auth work across OAuth2 providers: where are tokens issued, validated, stored, and refreshed?\n7. **Extensibility** — How do I use PocketBase as a Go framework to register a custom route plus an on-record-create hook?\n8. **Security discovery** — Where is user input validated, and where are collection API access rules enforced before a query runs?\n9. **Public API** — As an external app, how do I authenticate and then list and filter records over the REST API?\n10. **Test verification** — Where are the tests for the record CRUD API, and what do they assert about access rules?\n\n</details>\n\n<details>\n<summary><b>The 5 merged PRs we re-implemented</b></summary>\n\nEach PR was reset to its base commit; graft's diff was scored against the files the merged PR changed.\n\n| PR | Type | What it does | Files the maintainers touched |\n|---|---|---|---|\n| [#6744](https://github.com/pocketbase/pocketbase/pull/6744) | feat | Generate & serve WebP thumbnails | `apis/file.go`, `tools/filesystem/filesystem.go` |\n| [#6947](https://github.com/pocketbase/pocketbase/pull/6947) | fix | Uniform char distribution in regex random strings | `tools/security/random_by_regex.go` |\n| [#6690](https://github.com/pocketbase/pocketbase/pull/6690) | refactor | Patreon OAuth2 to use `x/oauth2/endpoints` | `tools/auth/patreon.go` |\n| [#2726](https://github.com/pocketbase/pocketbase/pull/2726) | perf | Drop a redundant admin-count query on a hot middleware path | `apis/middlewares.go` |\n| [#3192](https://github.com/pocketbase/pocketbase/pull/3192) | fix | Restore prior API rules on automigration rollback | `plugins/migratecmd/templates.go` |\n\n</details>\n\n<details>\n<summary><b>Method</b></summary>\n\nTwo clones of PocketBase at the same commit: one wired with `graft init`, one untouched and verified graft-free. Each task run headless (`claude -p`, Claude Opus) with an empty MCP config. Understanding questions were graded by whether the answer pointed to the right files and functions; PR tasks were scored on whether the agent's diff touched the same files as the merged PR. Every transcript was audited to confirm graft was actually used in the graft arm and absent from the standard arm.\n\n</details>\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/NanoNets/context-graph-engine.git && cd context-graph-engine\nnpm install\nnpm run build\nnpm test\n\nnpm run cli -- build --deep .      # run the CLI from source\n```\n\n---\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","readmeFilename":"README.md"}