{"_id":"reponova","_rev":"31-eb16275273636843b51ab7c50999d242","name":"reponova","dist-tags":{"latest":"0.7.1"},"versions":{"0.1.0":{"name":"reponova","version":"0.1.0","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.0","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"2fe8b76652c32253f7f3f172c0f263e74d34aa0f","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.0.tgz","fileCount":10,"integrity":"sha512-7VAnJx1qR+/JQOP4ta8+w/dBTUg3aXNO7gr1W/lMXRIO3pAYepCm7lTSmJfpIPb8hwrZEsEQdk3rxKqX7x7lCw==","signatures":[{"sig":"MEYCIQC3txeIl9Qwa7mwM617Y+cYfDNiCTVOIHioYYOuoBO+EQIhAOu9Z1t5vkZ6Y4mRG2DPLNF6X/u1qTj71QhhqhvV9QHp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1734891},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ecb3601c7ccb59c6ff9379348886a0e4d8ca5e52","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.12.1","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.0_1777633719031_0.6893222333500018","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"reponova","version":"0.1.1","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.1","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"9515445b0e55772b62b0168b148d060388c74eb2","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.1.tgz","fileCount":10,"integrity":"sha512-zIkMcKcrM0t5912B4m0dotVXxDRmZWVY00banLvu1EYvm2pfv3K4KphGZ41WFnZKbVQ2fL+t7Nl9w5DqlbthFA==","signatures":[{"sig":"MEUCICRAc9DiBV2d8kdxS++x76up2WgXaKyxrrQv5umsH55NAiEAwjDh942hBGcZImQz9zlNSgPvvX6dhYCsavPhxM+FWOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1714354},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1350d38cf3d1901bffbcb24723eb9f822e8c2feb","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.1_1777638499891_0.630308243627046","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"reponova","version":"0.1.20","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.20","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"3454b05c2827d9a8118b1c2a22339c89f600bbd4","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.20.tgz","fileCount":10,"integrity":"sha512-rWGbmnE2/MJ3T5TMXP8dD0HvpprDL91UYwcJ6lXbujmlJ3oLuT3dxDA4D/W9Ef4SBfUuBcQQrRURgB2fsSJCvQ==","signatures":[{"sig":"MEUCIQCw6Tr9bIUkO3tNpmlYhAjao8Xnc2bDBrzDYtXKno+5zQIgOkNvVknjo1dYejRPSZDraCQdAoCqeXe7NlApUcBRLzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2096946},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"74decfac907ba475541689a41b139f5e855661ae","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.20_1777666935614_0.6435651522827188","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"reponova","version":"0.1.21","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.21","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"6a0e0b32968c4f6837f7bf28bb1fd4a3e1fbdeb3","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.21.tgz","fileCount":10,"integrity":"sha512-4FZ0QqYqba0ut8/iV1ol1vUA/W9InBNKbivJXe5DVqvvtQsD8dZ29htbFQXyA7+Dqsx0xkXYw5nqeFuHNwtAoQ==","signatures":[{"sig":"MEQCIHdGTDIY2bA6ayvdrlLxf9XpzX3yfPVza4AgUi0eIWoqAiADabW5IoTis8gLgcQVQflzSjlo5GoKcAdQF3rvapMzLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2096946},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"13baaf447820f1b5156a922d4857cbb24c7cdea9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.21_1777667447582_0.5990452962453421","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"reponova","version":"0.1.22","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.22","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"3d135072829227bb37c334d8192c017c6612763f","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.22.tgz","fileCount":10,"integrity":"sha512-596wvBqnR9QdBCJObdz6Ehe8FlpXYJvMmZdxzPDGejLczJm46E4MQymepHyYwUpIZKTQpHazNoJZPtQhOlcuyw==","signatures":[{"sig":"MEUCIClC3PK4ecKq0VWM6NccRzHAHPBgFVioGThCrqy3KNDyAiEAoAKG4OR2HsnS8EB3FSVohVWzlYEDIm3VwiyunV3tMmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2220930},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1db44a7a5e46bbeee67858f52d885099866f8c4b","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.22_1777742133224_0.488201336744968","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"reponova","version":"0.1.23","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.23","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"2e86b21b7c10681a0a3f6b85573b07af04c32243","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.23.tgz","fileCount":10,"integrity":"sha512-vfvsVEZ15IHeoe7aVkJmHo8E3ITWi2rE/filjHz014Tv0tsGr1YN63lw7JVz4jyuAEyVIz3HIuPaSgS7gd9WeQ==","signatures":[{"sig":"MEUCIQDlBO5WJbQe/UxA8v73aAt0Na6ex5bbAfe0BQJv+R/YVwIgApCs3R9JjgrmPCBrQAK+f528MpAJHB1o0BrS0BPaQrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2267056},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"bd5b65d22f517fcdd3c48037411802ffaadff6d7","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.23_1777816629671_0.9249577087300471","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"reponova","version":"0.1.24","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.24","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"bfbdaf8634df290102b363b163fcff80caf9124b","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.24.tgz","fileCount":10,"integrity":"sha512-TaR7OAYEex+XIwKENUlWw9Y3fvoISljUaEZaK7rFUNXgNYZr0Y3nM96DVffLUijtGjEJu2N+2nboVO3ByCXOkw==","signatures":[{"sig":"MEQCIHYzzUA12+kho0J8DgEysuSzZ6GZrXZS/Yitr5hjN10nAiAgyp8/VcDVh+/LM752VvJqYnnGlGstu9v4/+UN7WwrMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2175960},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1a859d01f38d42f21654832a477e86ba033030a0","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.24_1777834926511_0.4053699701515674","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"reponova","version":"0.1.25","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.25","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"8048ab99bab4c5b22749dca3c796d0ec0d3ba555","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.25.tgz","fileCount":10,"integrity":"sha512-rLf8ZvsNDB70MKyQ8PBrr5IHFnWkHzxbNUzyyhy4Mz4jLwjOA3zIG2Bdt+F1Cp6dtuJqFzV5KCkmces8FTxhDA==","signatures":[{"sig":"MEUCID0Tq1kxig9aMUeINPtSs0FQgXG1f6YxrZ4V7boFEAIOAiEA4w1t5J4k5YHiKZ3KpiVhZeXhMlXHKMerR5SvbnRQ7zo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2178038},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"408851a36e88f1301a1bde5c138f8163389f0a67","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.25_1777840728854_0.827063352530321","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"reponova","version":"0.1.26","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.26","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"ceba2c39bf888a6b4f95d98fb50fe688285d62b6","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.26.tgz","fileCount":10,"integrity":"sha512-txn4yXKVHRgUkTw5+IfNyPuKcm+a9nRjnz9BsxfYmKcqGwEAEcji9Jl/z5hla16ij0NpLWVXfusBJwdeaU+bbQ==","signatures":[{"sig":"MEQCIBTBwl9vEefsps0YTv7ZYy/MClv5Jd6gD3xOg/PPAyJSAiBO2JduhKnClML3Ck+YyxNlzY7eF5bRi2qd77sjdMxwNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2178665},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"4bc9be3ca04380760b46b94208617af87acdff0b","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.26_1777887321899_0.36600063081082235","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"name":"reponova","version":"0.1.27","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.27","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"ca6ebde608bb3c19567d50e133886a8026f814ee","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.27.tgz","fileCount":10,"integrity":"sha512-NQxVqIXuEjRULYfN7MMBthh/GkU5dEGMoVkTItJCWIR8AxhHQ7Piyeqfk90EbolNyS5NAOGu9ijwIp5xxkLbDw==","signatures":[{"sig":"MEYCIQDZu229hlpj/dxa905bcsnpeByrDDkimH6EiOECF/XzEwIhAN3NUtrrhO398fX6iZL/ruhyKJkl4NdNr9I5oYqXe0Eu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2183498},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a29ac5b3fc2ba7d1a8c82ebbc0ddf09a94ca04d9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.27_1777892350961_0.4887327896323861","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"name":"reponova","version":"0.1.28","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.28","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"2f25099452b295c39f8f45848a06cfb4caa5518e","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.28.tgz","fileCount":10,"integrity":"sha512-p4haCIPbWZgmIgvrRXQfo8J+bUuaWGWDuSIYsX6lIFt82AJ7U1nYqeuQkZ2vZGMqgsVXnJ60MKQS90qhQaNU2g==","signatures":[{"sig":"MEQCICaMIoLofmTnvvqYtWB0mG5TbMStAhHFuE+dyJouHfFSAiA0u24MvPjcA86rvlzf4NBXjqy0s5+xYAn6DyXkXp3TGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2180977},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1f2b64c4ea59373fdb3870ac675e8221e2793c13","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.28_1777901639209_0.9922813835445894","host":"s3://npm-registry-packages-npm-production"}},"0.1.29":{"name":"reponova","version":"0.1.29","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.29","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"f68e32c4157384c0d11fb2d90077cd0f9f2522eb","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.29.tgz","fileCount":10,"integrity":"sha512-su4roaheknQRHVCrHgjmiux8u4q0J8LMYFJZ6zysxhDMw/8EIoLoLGWm8IkA54y4+0OtG5nBU0ebPqs458k8Hg==","signatures":[{"sig":"MEQCID49h3wMQjjlQ64IRLxbEASECo4h5ZKoPEDQr7kP30KXAiA5C28QT55BQX7xiMqGILU/AaNYJ9UQRAPam3UosN/Q2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2181297},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"995e59df78d35937eee084f7181dffb4b70ca27e","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.29_1777903517602_0.027280510763580068","host":"s3://npm-registry-packages-npm-production"}},"0.1.30":{"name":"reponova","version":"0.1.30","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.30","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"02b094406f2bbca717fef5a383f8468006a49d06","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.30.tgz","fileCount":10,"integrity":"sha512-529IzVzXVLhrNyh+pTx1AsryEIk85t0kOU1rO29U0febnSjCriHqvYPR6lcQgh+O3tNHu9mNVShGfrstN4EXHQ==","signatures":[{"sig":"MEUCIFZZrvq+XHuJGn+V/E2uuGTAcZjnj9JSbOg4jB9dPnj0AiEAl44xlc2bg6hIufLLD0yua5mWvMj2WnP3i9EDvo56bqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2181297},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"995e59df78d35937eee084f7181dffb4b70ca27e","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.30_1777904518963_0.553643002230296","host":"s3://npm-registry-packages-npm-production"}},"0.1.31":{"name":"reponova","version":"0.1.31","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.31","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"9244cf95a4354433f720e2cd68e1885ab8ac973d","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.31.tgz","fileCount":10,"integrity":"sha512-6bjz1UNhFRP+uEJXLEMT+hMzOp9paxu+UHvpxQe8sL3RTCyRpitW32LSr7ILbty11sSwEOu3J/NMlGeVWzM7oA==","signatures":[{"sig":"MEYCIQDBusAH+lyLMuKYpKFiSSyCKRWu88VzKi3aDNbXyabUKwIhAKFBF+KJYw7/LP6VT6NkcR1cL3Ixa6YchI+kYG0CvyFT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2209017},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"7aa46f08bb0690b2f9188ea32ccb28f94b18f4d6","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.31_1777965289535_0.9233310180985879","host":"s3://npm-registry-packages-npm-production"}},"0.1.32":{"name":"reponova","version":"0.1.32","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.32","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"f4f9302caaa6bffa064e2ffc3fcb218d7558beea","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.32.tgz","fileCount":10,"integrity":"sha512-j18hvKnhN8UciGCCa7n1B/euKVq32dsldXPTM46Y74RGFLHLsX0YBKORf6QVFQLW3pmLnqsmMf7AxRZRANtWDg==","signatures":[{"sig":"MEUCIQDm8q58FMtuyZv1Mhf0GxjLz9DzRese4fKPZpFVATTcbAIgJODzwGui33o8O91lCbMj9OOAyzd4uiVCFyIkw6Lief4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2284142},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"da6bdbefa93bef58edd2153db7fb50bdec0c55b4","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.32_1777982472113_0.9549601425485177","host":"s3://npm-registry-packages-npm-production"}},"0.1.33":{"name":"reponova","version":"0.1.33","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.1.33","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"b0639a51809a3ebed0aeda130449670b93f05843","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.1.33.tgz","fileCount":10,"integrity":"sha512-M240nReFUB/Iph5gC8jCG/3JObqO7Ivsj3Bh4L/gCbjLpgNo7d0nEx8aw1i2J4QkVmnj0rG/jA/DEtx1u7xTSg==","signatures":[{"sig":"MEUCIEgS8y61GLM5YoQHu+1gIV9MHLQ9ddD/+jFsEwXYud9SAiEAir+1UXFHPIu4volI/STxDNS/W1ZQCQelYcoKYohz6Ss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.1.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2292530},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d86c2060e7e28f288b668b964b5451f9c6d2edff","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.13.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.1.33_1777985845190_0.2509411373143211","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"reponova","version":"0.2.0","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.2.0","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"05f8e74fa99244c4dd484b1d5d11ec192be5a95c","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.2.0.tgz","fileCount":10,"integrity":"sha512-OE8WDa8tcSLYlMXUeV0BQthJ9M81r6L1cmWfWVCBNU5X/SGPh/7TCrpu/LdFR62JBCNc7lbT/SyFy70/2/WJzw==","signatures":[{"sig":"MEYCIQCiofZcXSfWnRoSVHAbWf9ORLVVyDrrzhOAysDfCbX6swIhAM7P8tKVIynJN9ZCDDyhLBbH0x3cd1E9ceQslYPJ/ePl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2399033},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"541eea9aa5267fef7c9922633f7f3781e71ba495","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.14.1","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.2.0_1778414177341_0.8838152686477174","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"reponova","version":"0.2.2","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.2.2","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"3d72ebb83888a96a4805c74d8a9498bde65c8389","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.2.2.tgz","fileCount":10,"integrity":"sha512-QJ4GIL/CX+etVlj6z7qtR/RS5Vzrc+/cyl5sGMDzePjV1Nl6vavSMj2gkQWz6JGyWkQaG8Zc4Xr4bTbi6lQw7Q==","signatures":[{"sig":"MEYCIQDp+v2Jn7/cV7lVCyr0i9i2L9jFqvPNrHp1C1g3BXMioQIhAJZWqJ0w0PSWX2M+9kdVP5Glg4pSOOWhGUtm1Zhg3f0I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2592807},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"41f2f16e997f3e83951931d476b1585a9d0f2159","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.14.1","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.2.2_1778685848526_0.1803529215222146","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"reponova","version":"0.3.2","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.3.2","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"1bfe177562ae619efd4ccb27f1dc1e639a2b7549","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.3.2.tgz","fileCount":10,"integrity":"sha512-JNKEPCEE+mpMaw6m0HuKrFo3hIXPR0PfIwvTnJpZewFHxqmYT0G/IQdL4mV1z8+0NLW2V1IzX28qz5HEvsW2pA==","signatures":[{"sig":"MEUCIQDC3AncGZRQPdi7ifo4IbhK4LdXCg08y43eViBNuLVtagIgb9zBFZf4yp5OBZ8rdEP62jBaUJKIlLS+DJwOD+hOj4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2801703},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"30ce60b8c6a9f41ce394e55a89434d8b16a8006e","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","undici":"^8.3.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.3.2_1780066619511_0.25358005190361554","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"reponova","version":"0.3.3","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.3.3","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"a64faa1e4875aa52fb580cbbb5394f8cf537545b","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.3.3.tgz","fileCount":10,"integrity":"sha512-aceTXnRDSuFUW4gFhKyl+1TJOExvYyxtJm+3zf7clM4UZd07Sj7iBwU1vwAt+ytAkiO5NwLyIXee3VqyQcbGgA==","signatures":[{"sig":"MEUCIC1QuIFPnewPxEVJdCwPzDYs7SznU0j9DZuPU/0zJ93SAiEA7eaNtN9ruvPd3OAB7TiDd/VjXt0q1UMCXXTL2iCa9kw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2775763},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a65c4c69231bc4ba622ade1d669630510380a834","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","undici":"^8.3.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.3.3_1780129548763_0.9857360064079486","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"reponova","version":"0.3.4","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.3.4","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"f1b5619694cdeb750e47dbbcf9d84af07439c97d","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.3.4.tgz","fileCount":138,"integrity":"sha512-qSy73AeNpjMSergjFpA/v27C+G2y8aWdP+DtvnPoj6mcBXg2u3P8T4kXcHiLOmPJxS1n7Qb8CFYqH972HwCrMg==","signatures":[{"sig":"MEYCIQCWIq3EnpbgZ/yUDQUzIrLf2rHHfDM9ViRXjIFa9B3RDAIhALUEOlovzXeK16mjQ/ePdlkuQt8B+Nl+i4dN0aEefcnj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2834241},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"7fe12b1463c0e0f988948c4b5fd63835dc1718b7","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.0","sql.js":"^1.11.0","undici":"^8.3.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.3.4_1780403629448_0.9604137385600768","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"reponova","version":"0.4.3","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.4.3","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"c8da700e074f7a976f4429b5b7882efdce35efea","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.4.3.tgz","fileCount":147,"integrity":"sha512-n01rq0lKNsSZYwDnCkjg2K2jaXF2890K1yTkH6RMwA/23ixxXTwljYZjakQ/WjMT3VVfjG2+4zxIjzPzrB44vw==","signatures":[{"sig":"MEYCIQCMinzwd/11oxhJb6pKPRKUaa+kwxGXlPfelwEUY9NEvwIhAJQAbXsmt2fo+CN2ABMGWJovmZDKH3sX+AOSR6k73Hhz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2277640},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"4c8d07982d78e0e0f8fc2df8973e8192c5673064","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.1.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.4.3_1780472951257_0.3009338069745908","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"reponova","version":"0.4.4","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.4.4","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"c693c5fc4187afd6761db67ec36740cbd3e967c9","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.4.4.tgz","fileCount":147,"integrity":"sha512-zNqMceuBS/RnEA+YYuEmLB8AOIQMkpRfSNTY77ScTkIHVMIKzUMk9RjwZ97Jhh2wdOxU9m2uy5ZVD1HSWbvT4A==","signatures":[{"sig":"MEQCIHnstXa6U4J5tQsmEBUqg6yxq/6PswZwk9uuM/4L+eiWAiBZNlNbhpLGdwcpznsgMuRq7EWYjVd3I8h+7Ll1iD2Dcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2280139},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"c922be06876cb8aa0e63d02e12429627051987ae","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","js-yaml":"^4.1.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/js-yaml":"^4.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.1.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.4.4_1780698964959_0.5175261776881201","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"reponova","version":"0.4.5","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.4.5","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"bc1d0c906baf1308972c99167aa48c7a9262917b","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.4.5.tgz","fileCount":147,"integrity":"sha512-A1qQybVFBZlFfPxEJ6FyeMJuQ6vH0DeywiTIjTohvABMcCBMAclfc2RWxJTxSZ/HsWfiJFYHGu71ashpo9UiMw==","signatures":[{"sig":"MEQCIAyIgD/TGt3VOcqeArzpW3oivA/eFAwquSOaCOYIbHeCAiAQ6KlAilRTWdg5QqjwrS5u6cxIpcLej0ea1Z7TkOlb6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.4.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2284501},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"9dbe445673bb88d520d4b4ea48d6415ac0da00c2","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","graphology-types":"^0.24.8","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.4.5_1780703237101_0.8236916162345038","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"reponova","version":"0.5.0","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.5.0","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"6c91d4978b7231223951ce7def123cf1a2cb55bc","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.5.0.tgz","fileCount":157,"integrity":"sha512-6+L+51/I4yjyJLkFRO/c8zm3woysLWuLnmwujFghOp14zR9vyaW8BdN7ZELPc9XEUSqtrwONE1HUc9hhFl/D4g==","signatures":[{"sig":"MEQCIFBJep1jI0y1z6tC1wf0byqhC8D8h3G8HUkLyMkHb4OcAiAwTomN8nVBO5jNTPrEfjqcIMjMTjltZXW7eW/1QwZ+FA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2388373},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"5b49207bd30c9574a80a326c76260076ddd8af8a","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","global-directory":"^4.0.1","graphology-types":"^0.24.8","@inquirer/confirm":"^4.0.1","@inquirer/checkbox":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.5.0_1780757442685_0.8773100172743176","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"reponova","version":"0.5.1","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.5.1","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"099e342699bb83b8d61734e8f6581ce7b434bedc","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.5.1.tgz","fileCount":157,"integrity":"sha512-aoj7UnD4mBn8IIvzSakR7t+DO/S9I5UX+2up7FHoXK0g832mS9wWaiF8MwprkAgVE7JiBX05bRWoEMTVmhaT0g==","signatures":[{"sig":"MEUCIF3+X0s+ZxypiPkVQ/60EqeBG1sLCahpJQdrddm51sebAiEA8t5/6C26qGCSwY4i70Yt0Q++WSKfZXklS+LheaAuY8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2391428},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"28d69e3b84975322eab44e9cee530602ca67f6bf","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","global-directory":"^4.0.1","graphology-types":"^0.24.8","@inquirer/confirm":"^4.0.1","@inquirer/checkbox":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.5.1_1780758903927_0.1648265918133982","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"reponova","version":"0.5.2","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.5.2","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"5d4e11ebf61867691b84b2adf942f8de123ffdac","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.5.2.tgz","fileCount":157,"integrity":"sha512-Yf5o7E6NL/U4xf32hAi6VW2h8bJisnA97378ggvrfPNC/Y38kiTlpFcEFiL88ERD4m7c0nKyEh5OHYGpqxkF6Q==","signatures":[{"sig":"MEYCIQDjvXXq+r5IOSoGF//i+NIypSJvxqfOC97k9uEn+bY9kwIhAOpOCWXwoqFoDP/OMRq2IkSoRQboV1idRNj+afxH0MU9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2392067},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"46c40e505a7dbc6e3d5ffb758fdd83631189bfbb","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","global-directory":"^4.0.1","graphology-types":"^0.24.8","@inquirer/confirm":"^4.0.1","@inquirer/checkbox":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.5.2_1780759944244_0.14341171100609773","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"reponova","version":"0.6.0","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.6.0","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"a2d68bb58600dd7f5837c9c439c298c86475ae36","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.6.0.tgz","fileCount":159,"integrity":"sha512-m4X2J/UT1zCOqsv+RXOi4HaKLx4lGosvJICjhmfLZT9pfEKUJNQJLIVG8V8klxOWZlim91R3KqkMHnr2A9gC2A==","signatures":[{"sig":"MEUCIGXwg5GnEkE/i/LLwcuL6b7Z1K8Zaztd9zL2d18tQ9qFAiEApDK5/K7XnRnrfDipd+aoTkZ0H6wqB/BxmMpXbVFaLI8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2399756},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e7921cd8a38d1a01319a6e22f76331582c87c465","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","global-directory":"^4.0.1","graphology-types":"^0.24.8","@inquirer/confirm":"^4.0.1","@inquirer/checkbox":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.6.0_1780916660739_0.8077023293242223","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"reponova","version":"0.6.1","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.6.1","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"20f2866ef7f69e3d70b05215653c384283dd18ca","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.6.1.tgz","fileCount":159,"integrity":"sha512-bTEwW1inNrOBv4DxPc5Dl7fGKOrzWFN/jl01LaDGbrHfi/si7NNXmuqG50U/rYuiSUvc8tpAs8Y+/wj1reeYFA==","signatures":[{"sig":"MEYCIQC2SXg9ZKZVjiLkpyJh2U0057CtdnMHUQ4hxrPmGKDJgwIhAMoxte3m/P5WY437oRZBTJ02THqMq7wz6DhBT8LsUvYU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2402888},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"6ea9795e35af175a39457f2eb2a01c5e3f597c36","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","global-directory":"^4.0.1","graphology-types":"^0.24.8","@inquirer/confirm":"^4.0.1","@inquirer/checkbox":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.6.1_1781017212063_0.25087078453850054","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"reponova","version":"0.7.0","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","_id":"reponova@0.7.0","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"homepage":"https://github.com/CristianoCiuti/reponova","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"bin":{"reponova":"dist/cli/index.js"},"dist":{"shasum":"d03dda6a94b8b4db62dcac7b5a87d7c45880e0f2","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.7.0.tgz","fileCount":159,"integrity":"sha512-t/eRhxth17WaLOrIPAWne2edyGJ6ojp8lq8Kt233CcgsTO3pefC1oZdpYQa39D0LzeBArzl9GnYyRbOiHv4ntQ==","signatures":[{"sig":"MEYCIQDDCaXarIs2hfO6WurA1TJAzPyzH+WiFYT1Y7gbiqo2PAIhALZ+9GsuSCKVajKBhkHNXzTKihExpSyiPUUVO2v5Xuhj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2422312},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"72ae3c04344137143b010f7718c3c1d40e6fe56a","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"repository":{"url":"git+https://github.com/CristianoCiuti/reponova.git","type":"git"},"_npmVersion":"11.16.0","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.0","yaml":"^2.9.0","yargs":"^17.7.2","sql.js":"^1.11.0","undici":"^8.3.0","picomatch":"^4.0.4","graphology":"^0.26.0","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","web-tree-sitter":"^0.25.10","global-directory":"^4.0.1","graphology-types":"^0.24.8","@inquirer/confirm":"^4.0.1","@inquirer/checkbox":"^3.0.1","@modelcontextprotocol/sdk":"^1.12.0","graphology-layout-forceatlas2":"^0.10.1","graphology-communities-louvain":"^2.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/yargs":"^17.0.0","@types/picomatch":"^4.0.3","@reponova/lang-svg":"^0.3.0","@reponova/lang-python":"^0.1.0","@reponova/lang-plantuml":"^0.1.0"},"optionalDependencies":{"node-llama-cpp":"^3.18.1","@lancedb/lancedb":"^0.27.2","onnxruntime-node":"^1.25.1"},"_npmOperationalInternal":{"tmp":"tmp/reponova_0.7.0_1781032979439_0.05787593132834323","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"reponova","version":"0.7.1","description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"reponova":"dist/cli/index.js"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"npm run build && npm test"},"dependencies":{"@inquirer/checkbox":"^3.0.1","@inquirer/confirm":"^4.0.1","@modelcontextprotocol/sdk":"^1.12.0","global-directory":"^4.0.1","graphology":"^0.26.0","graphology-communities-louvain":"^2.0.2","graphology-layout-forceatlas2":"^0.10.1","graphology-types":"^0.24.8","js-tiktoken":"^1.0.21","jsonc-parser":"^3.3.1","picomatch":"^4.0.4","sql.js":"^1.11.0","undici":"^8.3.0","web-tree-sitter":"^0.25.10","yaml":"^2.9.0","yargs":"^17.7.2","zod":"^3.22.0"},"devDependencies":{"@reponova/lang-plantuml":"^0.1.0","@reponova/lang-python":"^0.1.0","@reponova/lang-svg":"^0.3.0","@types/node":"^20.0.0","@types/picomatch":"^4.0.3","@types/yargs":"^17.0.0","tsup":"^8.0.0","typescript":"^5.4.0","vitest":"^2.0.0"},"engines":{"node":">=18"},"keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/CristianoCiuti/reponova.git"},"homepage":"https://github.com/CristianoCiuti/reponova","optionalDependencies":{"@lancedb/lancedb":"^0.27.2","node-llama-cpp":"^3.18.1","onnxruntime-node":"^1.25.1"},"gitHead":"202e7c9ba1feb7e555b19cc7ded9304c5842c247","_id":"reponova@0.7.1","bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"_nodeVersion":"22.14.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-ufaiU1Ouyzqoo3C0ugnuo70JIvop81LSgBTexQ8Yi7CW3isgDONKgUZlY+AM8kVwLnShxEBZtBnpXrNGBD6hIg==","shasum":"17eddf4aaf2abe942bb92aee25c67e2af1a5decb","tarball":"https://registry.npmjs.org/reponova/-/reponova-0.7.1.tgz","fileCount":159,"unpackedSize":2422983,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/reponova@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCQMqGX4F1FIYEdeRxgriX6n88PEfkf6iShEg+zizqSFwIhAOPR8HU4Nlsg/3e3grJEX4X8RWQrqOsFRodhjwr/BK26"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7655e48d-7048-450e-ae8d-43994d88991d"}},"directories":{},"maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/reponova_0.7.1_1781037063504_0.2821144794924564"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-01T11:08:39.030Z","modified":"2026-06-09T20:31:03.938Z","0.1.0":"2026-05-01T11:08:39.213Z","0.1.1":"2026-05-01T12:28:20.071Z","0.1.20":"2026-05-01T20:22:15.829Z","0.1.21":"2026-05-01T20:30:47.823Z","0.1.22":"2026-05-02T17:15:33.472Z","0.1.23":"2026-05-03T13:57:09.881Z","0.1.24":"2026-05-03T19:02:06.703Z","0.1.25":"2026-05-03T20:38:49.060Z","0.1.26":"2026-05-04T09:35:22.230Z","0.1.27":"2026-05-04T10:59:11.136Z","0.1.28":"2026-05-04T13:33:59.440Z","0.1.29":"2026-05-04T14:05:17.855Z","0.1.30":"2026-05-04T14:21:59.147Z","0.1.31":"2026-05-05T07:14:49.696Z","0.1.32":"2026-05-05T12:01:12.336Z","0.1.33":"2026-05-05T12:57:25.362Z","0.2.0":"2026-05-10T11:56:17.509Z","0.2.2":"2026-05-13T15:24:08.715Z","0.3.2":"2026-05-29T14:56:59.684Z","0.3.3":"2026-05-30T08:25:48.910Z","0.3.4":"2026-06-02T12:33:49.594Z","0.4.3":"2026-06-03T07:49:11.452Z","0.4.4":"2026-06-05T22:36:05.141Z","0.4.5":"2026-06-05T23:47:17.266Z","0.5.0":"2026-06-06T14:50:42.876Z","0.5.1":"2026-06-06T15:15:04.144Z","0.5.2":"2026-06-06T15:32:24.395Z","0.6.0":"2026-06-08T11:04:20.950Z","0.6.1":"2026-06-09T15:00:12.260Z","0.7.0":"2026-06-09T19:22:59.631Z","0.7.1":"2026-06-09T20:31:03.641Z"},"bugs":{"url":"https://github.com/CristianoCiuti/reponova/issues"},"license":"MIT","homepage":"https://github.com/CristianoCiuti/reponova","keywords":["reponova","mcp","knowledge-graph","code-intelligence","search","impact-analysis","tree-sitter","opencode","cursor","claude-code"],"repository":{"type":"git","url":"git+https://github.com/CristianoCiuti/reponova.git"},"description":"Knowledge graph builder & MCP server for AI code assistants: search, impact analysis, semantic similarity, and architecture visualization","maintainers":[{"name":"cristianociuti","email":"cristiano.ciuti@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"https://img.shields.io/npm/v/reponova?style=flat-square&color=cb3837&logo=npm\" alt=\"npm version\" />\n  <img src=\"https://img.shields.io/npm/dm/reponova?style=flat-square&color=blue\" alt=\"npm downloads\" />\n  <img src=\"https://img.shields.io/node/v/reponova?style=flat-square&color=339933&logo=node.js&logoColor=white\" alt=\"node version\" />\n  <img src=\"https://img.shields.io/github/license/CristianoCiuti/reponova?style=flat-square&color=green\" alt=\"license\" />\n  <img src=\"https://img.shields.io/badge/MCP-compatible-8A2BE2?style=flat-square\" alt=\"MCP compatible\" />\n</p>\n\n<p align=\"center\">\n  <img src=\"media/reponova-social.jpg\" alt=\"RepoNova\" width=\"600\" />\n</p>\n\n<h1 align=\"center\">🤖 RepoNova 🔭</h1>\n\n<p align=\"center\">\n  <strong>Turn your codebase into a knowledge graph. Query it with AI.</strong>\n</p>\n\n<p align=\"center\" style=\"font-style: italic;\">\n  Knowledge graph builder &amp; <a href=\"https://modelcontextprotocol.io/\">MCP</a> server for AI code assistants.<br/>\n  Extracts symbols, relationships, and semantics from your code — then exposes the entire structure<br/>\n  as 11 graph tools that any MCP-compatible agent can use.\n</p>\n\n---\n\n> **⚠️ Alpha — Active Development**\n> APIs, config format, and CLI may change between releases.\n> Already usable in production workflows. [Open an issue](https://github.com/CristianoCiuti/reponova/issues) if something doesn't work.\n\n---\n\n## Why RepoNova?\n\nAI agents read files one at a time. They don't understand how your codebase fits together — which functions call what, which modules depend on which, where the architectural bottlenecks are.\n\n**RepoNova fixes that.** It builds a persistent knowledge graph of your entire codebase (or multiple repos) and gives your AI agent 11 specialized tools to query it: search, impact analysis, shortest path, semantic similarity, community detection, and more.\n\n> **One build. Persistent graph. Instant queries across sessions.**\n> No re-reading files. No burning tokens on context. The graph remembers everything.\n\n### What makes it different\n\n- **Zero external dependencies** — no Python, no Docker, no database servers. Pure Node.js\n- **Plugin-based language support** — install only what your workspace needs via `reponova lang suggest` (Markdown is the only built-in)\n- **Multi-repo support** — build one graph spanning multiple repositories\n- **Smart incremental builds** — SHA256 file hashing, per-phase config change detection\n- **Intelligent enrichment** — your AI agent or a configured LLM provider generates architectural descriptions, community profiles, and routing decisions\n- **11 MCP tools** — from text search to weighted Dijkstra, semantic similarity to structural queries\n- **Works with any AI coding agent** — OpenCode, Cursor, Claude Code, VS Code Copilot\n\n---\n\n## How it works\n\n```\n  Your Codebase                      /reponova-enrich                             AI Agent\n  ─────────────                      ────────────────                             ────────\n\n  Source Code          ──────────►   1. tree-sitter AST parsing                   graph_search\n  Markdown / Docs                    2. Symbol + edge extraction        ──────►   graph_impact\n  Diagrams (plugins)                 3. Louvain communities                       graph_path\n  Multi-repo                         4. Enrichment (summaries + descriptions)     graph_similar\n                                     5. TF-IDF / ONNX / API embeddings\n                                     6. HTML visualizations                       ... (11 tools)\n```\n\nLanguage extraction lives in [language plugins](#available-plugins) — only Markdown is built-in. Run `reponova lang suggest` to scan your repos and install the ones you need (the [official `@reponova/lang-*` catalogue](#available-plugins) plus any community plugin). See [Contributing](#contributing) to author a new plugin.\n\n---\n\n## Quick Start\n\n### 1. Install into your editor\n\n```bash\nreponova install --target opencode\n```\n\nSupported targets: `opencode`, `cursor`, `claude`, `vscode`\n\nArtifacts installed per editor:\n\n| Editor | MCP Config | Hook / Plugin | MCP Skill | Enrich Command | Config |\n|--------|-----------|---------------|-----------|----------------|--------|\n| OpenCode | `.opencode/opencode.json` | `.opencode/plugins/reponova.js` | `.opencode/skills/reponova-mcp/SKILL.md` | `.opencode/commands/reponova-enrich.md` | `.opencode/reponova.yml` |\n| Cursor | `.cursor/mcp.json` | `.cursor/rules/reponova-mcp.mdc` | *(embedded in rule)* | `.cursor/commands/reponova-enrich.md` | `.cursor/reponova.yml` |\n| Claude Code | `claude mcp add` (manual) | `.claude/settings.json` (PreToolUse) | `.claude/skills/reponova-mcp/SKILL.md` | `.claude/skills/reponova-enrich/SKILL.md` | `.claude/reponova.yml` |\n| VS Code | `.vscode/mcp.json` | *(skill auto-loads)* | `.github/skills/reponova-mcp/SKILL.md` | `.github/skills/reponova-enrich/SKILL.md` | `.vscode/reponova.yml` |\n\n### 2. Install language plugins for your workspace\n\n```bash\nreponova lang suggest\n```\n\nScans every repo in the workspace and queries the public npm registry for matching language plugins. Pick what you need; `reponova lang add <pkg>` then declares them in `reponova.yml`. See [Available Plugins](#available-plugins) for the official catalogue.\n\n### 3. Build and enrich the graph\n\nType `/reponova-enrich` in your editor. This single command handles the entire pipeline:\n\n- Builds the structural graph (file detection, AST parsing, community detection)\n- Generates architectural node descriptions\n- Profiles communities with meaningful labels\n- Routes misplaced nodes to correct communities\n- Proposes and applies structural merges/splits\n- Runs downstream phases (search index, embeddings, HTML visualizations)\n\nYour AI agent acts as the reasoning engine — no API keys, no local models, no downloads.\n\n> **Headless alternative:** Run `reponova build` from the CLI for a fully algorithmic build (no LLM). For automated LLM enrichment, configure `enrich.provider` in `reponova.yml` — then `reponova build` handles everything including intelligent enrichment.\n\n### 4. Use it\n\nThe MCP server starts automatically. Your AI agent now has 11 graph tools.\n\n```\nYou: \"What would be the impact of refactoring the authenticate function?\"\nAgent: [calls graph_impact] → shows upstream/downstream blast radius across repos\n```\n\n### Keeping the graph fresh\n\nAfter code changes, re-run `/reponova-enrich` — only changed files are re-parsed, only affected steps re-run.\n\nFor CI or headless environments: `reponova build` (incremental by default, `--force` for full rebuild).\n\n---\n\n## MCP Tools\n\n11 specialized tools exposed over MCP (stdio):\n\n| Tool | Description |\n|------|-------------|\n| `graph_search` | 🔍 Full-text search across nodes. Filter by type, repo. Expand results with BFS/DFS. |\n| `graph_impact` | 💥 Blast radius analysis — find all upstream/downstream dependents of any symbol. |\n| `graph_path` | 🛤️ Weighted shortest path (Dijkstra) between two symbols. Filter by edge type. |\n| `graph_explain` | 📋 Full detail on a node: edges, community, centrality metrics, signature, docstring. |\n| `graph_similar` | 🧲 Semantic similarity search using vector embeddings (TF-IDF, ONNX, or remote provider). |\n| `graph_context` | 🧠 Smart context builder with token budget — combines search + vectors + graph expansion. |\n| `graph_community` | 🏘️ List all nodes in a community, ranked by degree centrality. |\n| `graph_hotspots` | 🔥 God nodes / architectural bottlenecks — most connected symbols in the graph. |\n| `graph_outline` | 🗂️ Tree-sitter code outline: functions, classes, imports with signatures and line ranges. |\n| `graph_docs` | 📄 Search documentation nodes (markdown, text, rst). |\n| `graph_status` | 📊 Graph metadata: node/edge counts, repos, build timestamp, version. |\n\n---\n\n## Enrichment\n\nRepoNova supports two enrichment modes:\n\n| Mode | How it works | Requires |\n|------|-------------|----------|\n| **Agent-driven** | `/reponova-enrich` — your AI agent builds the graph AND acts as the reasoning engine for enrichment. Complete pipeline in one command. | Any AI coding agent |\n| **Automated** | `reponova build` with `enrich.provider` configured — an external LLM generates descriptions, profiles, and routing decisions during the build. | A configured LLM provider in `reponova.yml` |\n\n### What enrichment does\n\nThe enrichment pipeline (7 steps) transforms a raw structural graph into an architecturally-aware knowledge base:\n\n| Step | What |\n|------|------|\n| 0 | Classify boundary nodes (candidates for rerouting) + compute edge density |\n| 1 | Generate architectural descriptions for high-degree nodes |\n| 2 | Profile each community (label, purpose, misfits) |\n| 3 | Route misfit nodes to better communities based on profiles |\n| 4 | Detect merge/split opportunities across communities |\n| 5 | Apply routing + restructure mutations to the graph |\n| 6 | Re-profile affected communities |\n| 7 | Finalize output files (`graph-enriched.json`, `node_descriptions.json`, `community_summaries.json`) |\n\n### Agent-driven enrichment (`/reponova-enrich`)\n\nThe installed command guides the agent through the full pipeline:\n\n```\nYou: /reponova-enrich\nAgent: [builds structural graph]\n       [reads input batches, reasons about architecture, writes output batches]\n       [CLI merges results, applies mutations]\n       [runs downstream phases: search index, embeddings, HTML]\n```\n\nThe agent uses `reponova enrich:*` subcommands for batch preparation and merging. All reasoning (descriptions, profiles, routing decisions) comes from the agent itself.\n\n---\n\n## CLI Reference\n\n### `reponova install`\n\nSet up editor integration (MCP server, plugin/hook, skills, enrich command, config).\n\n```bash\nreponova install --target <editor> [--graph <path>]\n```\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--target` | Yes | `opencode`, `cursor`, `claude`, `vscode` |\n| `--graph` | No | Path to output directory. Default: `./reponova-out` |\n\n### `reponova build`\n\nRun the full build pipeline (incremental by default).\n\n```bash\nreponova build [--config <path>] [--force] [--target <phase,...>] [--start-after <phase>] [--check <phase>]\n```\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--config` | No | Path to `reponova.yml` (default: auto-detected) |\n| `--force` | No | Ignore all caches and rerun every phase |\n| `--target` | No | Run only these phases and their dependencies (comma-separated, e.g. `communities,outlines`) |\n| `--start-after` | No | Run only phases downstream of this phase |\n| `--check` | No | Check if a phase needs to run (exit 0 = up to date, exit 1 = needs run) |\n\n**Build pipeline (9 DAG phases, 5 levels):**\n\n```\nLevel 0: file-detection\nLevel 1: graph, outlines                         (parallel)\nLevel 2: communities\nLevel 3: enrich\nLevel 4: search-index, embeddings, html, report  (parallel)\n```\n\n| Phase | What it does |\n|-------|-------------|\n| **file-detection** | Discover files by registered type (built-in docs + plugin extensions) |\n| **graph** | Parse with tree-sitter, extract symbols/calls/imports/inheritance, build graph |\n| **outlines** | Generate tree-sitter code outlines per file (SHA256 hashing — skip unchanged) |\n| **communities** | Louvain community detection, write `graph.json` |\n| **enrich** | Generate `graph-enriched.json`, community summaries, node descriptions (algorithmic or LLM) |\n| **search-index** | SQLite search index (`graph_search.db`) |\n| **embeddings** | Incremental embeddings (TF-IDF, ONNX, or remote provider) |\n| **html** | Interactive visualizations (`graph.html`, `graph_communities.html`) |\n| **report** | Build report with stats, hotspots, community breakdown |\n\n### `reponova enrich`\n\nRun the intelligent enrichment pipeline with a configured LLM provider. Builds up to `communities` if needed, runs all enrichment steps, seals the cache.\n\n```bash\nreponova enrich [--config <path>]\n```\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--config` | No | Path to `reponova.yml` (default: auto-detected) |\n\n> **Note:** Does NOT run downstream phases (search-index, embeddings, html, report). Run `reponova build --start-after enrich` afterwards to complete the pipeline.\n\n### `reponova enrich:*`\n\nStep-by-step enrichment subcommands for IDE/agent workflows.\n\n```bash\nreponova enrich:metrics                        # Step 0: candidates + edge density\nreponova enrich:prepare <step>                 # Prepare input batches\nreponova enrich:merge <step>                   # Merge output batches\nreponova enrich:apply                          # Step 5: apply routing + restructure\nreponova enrich:finalize                       # Step 7: produce final output files\n```\n\n| Step | What it produces |\n|------|-----------------|\n| `descriptions` | Architectural descriptions for high-degree nodes |\n| `profiles` | Community profiles (label, purpose, misfits) |\n| `routing` | Routing decisions for boundary candidates |\n| `restructure` | Merge/split proposals across communities |\n| `updated-profiles` | Re-profiled communities after mutations |\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--config` | No | Path to `reponova.yml` (default: auto-detected) |\n\n### `reponova mcp`\n\nStart the MCP server (stdio transport). Normally launched automatically by the editor.\n\n```bash\nreponova mcp [--graph <path>]\n```\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--graph` | No | Path to output directory. Default: `./reponova-out` |\n\n### `reponova check`\n\nHealth check for graph artifacts, search index, outlines, tree-sitter runtime, and declared language plugins. Exits `1` if anything is missing — declared-but-not-installed plugins are listed with the exact `lang add` command to fix them.\n\n```bash\nreponova check [--config <path>] [--graph <path>]\n```\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--config` | No | Path to `reponova.yml` (default: auto-detected) |\n| `--graph` | No | Path to output directory. Default: `./reponova-out` |\n\n### `reponova lang`\n\nManage language plugins. The package manager (`npm` / `pnpm` / `yarn` / `bun`) and install scope (global / local / linked) are detected automatically.\n\n```bash\nreponova lang <subcommand> [args] [flags]\n```\n\n| Subcommand | Description |\n|------------|-------------|\n| `add <package>` | Install a language plugin and declare it in `reponova.yml` |\n| `remove <id>` | Remove a plugin from `reponova.yml` and uninstall its package |\n| `list` | List declared plugins with their load status |\n| `suggest` | Scan repos, find used file extensions, propose matching plugins (interactive) |\n\n| Flag | Applies to | Description |\n|------|-----------|-------------|\n| `--config-only` | `remove` | Only update `reponova.yml`, keep the package installed |\n| `--purge-global` | `remove` | In global context, uninstall without confirmation prompt |\n| `--dry-run` | `suggest` | Print the report only, skip the interactive prompt |\n| `--yes` | `suggest` | Install all suggestions without prompting (CI mode) |\n\nBy default, `remove` on a globally-installed reponova prompts before touching the system-wide package (and skips it with a warning in non-interactive shells). `suggest` queries the public npm registry for every package tagged with the `reponova-language` keyword; `@reponova/lang-*` packages are ranked first as \"official\".\n\n### `reponova cache`\n\nInspect and manage per-phase cache state. Exactly one operation is required. Phases are the same as in [`reponova build`](#reponova-build).\n\n```bash\nreponova cache --status                        # Show cache status for all phases\nreponova cache --check <phase>                 # Check if fresh (exit 0 = fresh, exit 1 = stale)\nreponova cache --seal <phase>                  # Manually seal (marks as up-to-date)\nreponova cache --invalidate <phase>            # Invalidate (forces re-run on next build)\n```\n\n| Option | Required | Description |\n|--------|----------|-------------|\n| `--config` | No | Path to `reponova.yml` (default: auto-detected) |\n\n### `reponova models`\n\nManage local AI models (ONNX embeddings, GGUF LLM weights).\n\n```bash\nreponova models <subcommand>\n```\n\n| Subcommand | Description |\n|------------|-------------|\n| `status` | Show configured and cached models |\n| `download` | Pre-download all models needed by config |\n| `remove <name>` | Remove a specific cached model |\n| `clear` | Remove all cached models |\n\n---\n\n## Supported Languages\n\nRepoNova uses a plugin system for language support. Only Markdown is built-in; everything else is provided by external plugin packages (see [Contributing](#contributing) for how to create one).\n\n### Built-in\n\n| Language | Extensions | Parser | Symbols Extracted |\n|----------|-----------|--------|-------------------|\n| Markdown | `.md`, `.txt`, `.rst` | Regex | Documents, sections (as containment hierarchy) |\n\n### Available Plugins\n\nAll official plugins are developed in the [`reponova-langs`](https://github.com/CristianoCiuti/reponova-langs) monorepo and published to npm under the `@reponova/lang-*` scope. Install with `reponova lang add <package>`:\n\n| Plugin | Package | Extensions | What it extracts |\n|--------|---------|-----------|------------------|\n| C | [`@reponova/lang-c`](https://www.npmjs.com/package/@reponova/lang-c) | `.c`, `.h` | Functions (definitions vs prototypes), structs, unions, enums, typedefs, `#define` macros (object-like + function-like), global variables, function-pointer fields. `#include` graph (quote-form resolved relative to the file, angle-form treated as external), preprocessor-conditional walking, Doxygen `/** … */` and `///` comments as docstrings. `static` / `extern` modifiers as decorators; exports filtered to linker-visible definitions. Tree-sitter AST outlines. |\n| C++ | [`@reponova/lang-cpp`](https://www.npmjs.com/package/@reponova/lang-cpp) | `.cpp`, `.cc`, `.cxx`, `.c++`, `.hpp`, `.hh`, `.hxx`, `.h++` | Everything from `lang-c` plus: namespaces (named, anonymous, nested) as modules with dotted scope, classes / structs with access modifiers (`public` / `protected` / `private`) and inheritance as `extends`, templates (`template` decorator + `template<…>` signature prefix), constructors / destructors / operator overloads (tagged `ctor` / `dtor` / `operator`), out-of-class definitions (`Foo::bar`, `Cache<K, V>::put`) joined back to the in-class declaration, `using foo::bar;` (named imports) vs `using namespace foo;` (wildcard), alias declarations (`using Vec = std::vector<int>;`) as `type` symbols. Tree-sitter AST outlines. |\n| Java | [`@reponova/lang-java`](https://www.npmjs.com/package/@reponova/lang-java) | `.java` | Classes, interfaces, enums, records, annotation interfaces, methods, constructors, fields, package declarations, imports (incl. `static` and wildcard), annotations and modifier keywords (`public`, `static`, `final`, `abstract`, …) as decorators, Javadoc as docstrings, `extends` / `implements` heritage, method calls. Package-aware import resolution maps `com.foo.Bar` to repo-relative paths. Tree-sitter AST outlines. |\n| JavaScript | [`@reponova/lang-javascript`](https://www.npmjs.com/package/@reponova/lang-javascript) | `.js`, `.mjs`, `.cjs`, `.jsx` | Functions, classes, methods, arrow-function components, class fields / getters / setters, decorators (`async` / `generator` / `static`), JSDoc docstrings, ES `import` + CommonJS `require`, calls (incl. JSX components and React hooks), `extends` heritage. Tree-sitter AST outlines. |\n| Python | [`@reponova/lang-python`](https://www.npmjs.com/package/@reponova/lang-python) | `.py`, `.pyw` | Functions, classes, methods, decorators, docstrings, top-level constants, `TypeVar` / `NewType` / type aliases, imports (incl. `TYPE_CHECKING` and aliased), heritage (incl. generics), calls, `__all__` exports. Tree-sitter AST outlines. |\n| TypeScript | [`@reponova/lang-typescript`](https://www.npmjs.com/package/@reponova/lang-typescript) | `.ts`, `.mts`, `.cts` | Functions, classes (incl. `abstract`), methods, interfaces, type aliases, enums, namespaces / modules, class fields with full modifier markers, getters / setters, exported `const` bindings, JSDoc docstrings, imports, `extends` / `implements` heritage, calls. Tree-sitter AST outlines. |\n| TSX | [`@reponova/lang-tsx`](https://www.npmjs.com/package/@reponova/lang-tsx) | `.tsx` | Same shape as `lang-typescript` against the JSX-aware grammar. Captures React functional components, JSX-element calls, hooks, plus all TS symbols (interfaces, type aliases, enums, namespaces, …). Tree-sitter AST outlines. |\n| JSON / JSONC | [`@reponova/lang-json`](https://www.npmjs.com/package/@reponova/lang-json) | `.json`, `.jsonc` | Schema-aware extraction for canonical JS/TS configs: `package.json` (name, `scripts.*`, `bin`, dependencies as imports), `tsconfig*.json` (`extends`, `references[].path`, `compilerOptions.paths` aliases), `nx.json` and `project.json` (targets, `namedInputs`, tags, `implicitDependencies`), `turbo.json` (`pipeline.*` / `tasks.*`), npm / `lerna.json` workspaces. Generic JSON / JSONC fallback surfaces top-level keys (capped via `maxGenericKeys`). Uses `jsonc-parser` — supports trailing commas and `//` / `/* */` comments. |\n| SQL | [`@reponova/lang-sql`](https://www.npmjs.com/package/@reponova/lang-sql) | `.sql`, `.ddl`, `.dml`, `.psql`, `.pgsql`, `.tsql` | Multi-dialect DDL extraction (PostgreSQL, MySQL, SQLite, T-SQL, BigQuery): tables (columns + PK/FK + checks), views (with `SELECT`-based references), functions / procedures (incl. PL/pgSQL `BEGIN…END` blocks and MySQL `DELIMITER` switches), triggers (with target table), indexes, sequences, custom types / enums. Foreign keys emit `references` edges; SELECTs inside view definitions and routine bodies surface `references` to read tables. String literals and comments are stripped before scanning to avoid false positives. |\n| Mermaid | [`@reponova/lang-mermaid`](https://www.npmjs.com/package/@reponova/lang-mermaid) | `.mmd`, `.mermaid` | 13+ Mermaid diagram families: `flowchart` (nodes, subgraphs, edges with labels), `sequenceDiagram` (participants + messages as `calls`), `classDiagram` (classes, methods, relationships incl. inheritance as `extends`), `stateDiagram-v2`, `erDiagram` (entities + cardinality), `gantt`, `journey`, `gitGraph`, `pie`, `mindmap`, `timeline`, C4 (`C4Context` / `C4Container` / `C4Component`), `requirement`, `zenuml`. YAML front-matter (`title`, `config`) and `%% …` comments captured as docstrings. |\n| PlantUML | [`@reponova/lang-plantuml`](https://www.npmjs.com/package/@reponova/lang-plantuml) | `.puml`, `.plantuml` | Classes / interfaces / enums, sequence-diagram participants (actor, boundary, control, entity, …), state diagrams (incl. implicit states), components / deployment nodes, C4-DSL macros (`Person`, `System`, `Container`, `Component`, …), relationships (extends, association, aggregation, composition). |\n| SVG | [`@reponova/lang-svg`](https://www.npmjs.com/package/@reponova/lang-svg) | `.svg` | File `<title>` as docstring, plus up to 20 labels per file from `<text>` / `<title>` / `<desc>` / `aria-label` (essential for path-only icon SVGs). Source kind preserved per symbol. Useful for design assets, hand-authored diagrams, icon libraries, rendered Mermaid / PlantUML output. |\n\n```bash\nreponova lang suggest                         # scan repos + propose plugins (interactive)\nreponova lang add @reponova/lang-python\nreponova lang add @reponova/lang-typescript\nreponova lang add @reponova/lang-tsx\nreponova lang add @exampleorg/lang-rust       # community plugins work too\nreponova lang list                            # show declared plugins\nreponova lang remove svg                      # uninstall by plugin id\n```\n\nSee the [`reponova lang`](#reponova-lang) reference for the full subcommand and flag list.\n\n### Edge Types\n\n| Edge Type | Description |\n|-----------|-------------|\n| `calls` | Function/method invocation |\n| `imports` | Module-level import |\n| `imports_from` | Named import of a specific symbol |\n| `extends` | Class inheritance |\n| `contains` | Parent contains child (module→symbol, class→method, document→section) |\n\n---\n\n## Configuration\n\n### Config Resolution\n\nAuto-detected from (first match wins):\n\n1. `--config` argument\n2. `reponova.yml` in project root\n3. `.opencode/reponova.yml`\n4. `.cursor/reponova.yml`\n5. `.claude/reponova.yml`\n6. `.vscode/reponova.yml`\n\nAll paths are **relative to the config file's location**.\n\n### Full Config Reference\n\n```yaml\n# ──────────────────────────────────────────────────────────────────────────────\n# reponova.yml — Full Configuration Reference\n# ──────────────────────────────────────────────────────────────────────────────\n\n# Where to write build output\n# Default: \"reponova-out\"\noutput: ../reponova-out\n\n# ── Repositories ──────────────────────────────────────────────────────────────\nrepos:\n  - name: api-service           # unique identifier\n    path: ../services/api       # path relative to this file\n  - name: core-lib\n    path: ../services/core\n\n# ── Providers (optional — AI backends) ────────────────────────────────────────\n# Default (no provider) = fully algorithmic. No downloads, no API keys.\nproviders:\n  my-openai:\n    type: openai                  # \"openai\" | \"llama-cpp\" | \"onnx\"\n    base_url: https://api.openai.com/v1\n    model: text-embedding-3-small\n    api_key: ${OPENAI_API_KEY}    # env var (resolved at runtime)\n    timeout: 30                   # seconds (default: 30)\n  local-llm:\n    type: llama-cpp\n    model: \"hf:Qwen/Qwen2.5-0.5B-Instruct-GGUF:Q4_K_M\"\n    context_size: 512\n  local-embeddings:\n    type: onnx\n    model: all-MiniLM-L6-v2\n  ollama:\n    type: openai\n    base_url: http://localhost:11434/v1\n    model: nomic-embed-text\n\n# ── Model Management ─────────────────────────────────────────────────────────\nmodels:\n  cache_dir: ~/.cache/reponova/models   # default\n  gpu: auto                             # \"auto\" | \"cpu\" | \"cuda\" | \"metal\" | \"vulkan\"\n  threads: 0                            # 0 = auto-detect\n  download_on_first_use: true\n\n# ── Source Code Filters ───────────────────────────────────────────────────────\npatterns: []                    # empty = auto-detect by extension\nexclude: []                     # e.g. [\"**/generated/**\", \"**/*.test.ts\"]\nexclude_common: true            # skip node_modules, __pycache__, .git, venv, dist, build, ...\nincremental: true               # SHA256 file hashing — only re-parse changed files\n\n# ── Documentation ─────────────────────────────────────────────────────────────\ndocs:\n  enabled: true\n  patterns: []                  # empty = auto-detect (.md, .txt, .rst)\n  exclude: []\n  max_file_size_kb: 500\n\n# ── Language Plugins ──────────────────────────────────────────────────────────\n# Declare plugins here. Installed via `reponova lang add <package>`.\n# If `package` is omitted, resolved as @reponova/lang-<key>.\nplugins:\n  python:                          # shorthand → @reponova/lang-python\n    enabled: true\n  rust:                            # community plugin → explicit package\n    package: \"@exampleorg/lang-rust\"\n    enabled: true\n  plantuml:\n    enabled: true\n    parse: true                    # plugin-specific option\n\n# ── Embeddings ────────────────────────────────────────────────────────────────\n# Default: TF-IDF (fast, no download). Set provider for ONNX or remote embeddings.\nembeddings:\n  enabled: true\n  provider: my-openai              # enables llm embeddings\n  batch_size: 128\n\n# ── Enrich ────────────────────────────────────────────────────────────────────\n# Default (no provider): algorithmic (rule-based summaries + descriptions)\n# With provider: intelligent multi-step LLM enrichment pipeline\nenrich:\n  enabled: true\n  provider: local-llm             # enables intelligent enrichment\n  threshold: 0.8                  # top 20% of nodes by degree get descriptions\n  max_communities: 0              # 0 = no limit\n  candidate_threshold: 0.3        # boundary ratio for routing candidates\n  description_batch_tokens: 40000 # token budget per description batch\n  routing_batch_size: 30\n  concurrency: 4                  # max parallel LLM calls\n  max_retry_depth: 3\n  max_tokens:                     # per-step LLM output token limits\n    descriptions: 32768\n    profiles: 2048\n    routing: 8192\n    restructure: 4096\n  profile:                        # community profile prompt limits\n    max_nodes: 80\n    max_edges: 50\n  restructure_max_pairs: 20       # max cross-community pairs for merge/split analysis\n\n# ── HTML ──────────────────────────────────────────────────────────────────────\nhtml: true\n# html_min_degree: 3\n\n# ── Outlines ──────────────────────────────────────────────────────────────────\noutlines:\n  enabled: true\n\n# ── Server ────────────────────────────────────────────────────────────────────\nserver: {}\n```\n\n### Config Examples\n\n**Minimal (single repo, algorithmic):**\n```yaml\noutput: ../reponova-out\nrepos:\n  - name: my-project\n    path: ..\n```\n\n**Multi-repo:**\n```yaml\noutput: ../reponova-out\nrepos:\n  - name: api\n    path: ../services/api\n  - name: core\n    path: ../services/core\n```\n\n**With LLM provider (automated enrichment via `reponova build`):**\n```yaml\noutput: ../reponova-out\nrepos:\n  - name: my-project\n    path: ..\nproviders:\n  local-llm:\n    type: openai\n    base_url: http://localhost:11434/v1\n    model: llama3.2\nenrich:\n  provider: local-llm\n```\n\n---\n\n## Models & Providers\n\nBy default, everything is algorithmic — no downloads, no API keys. Providers enable richer AI features.\n\n| Type | Purpose | Size | Requires |\n|------|---------|------|----------|\n| `onnx` | Local embeddings (sentence-transformers) | ~86 MB | Nothing (bundled runtime) |\n| `llama-cpp` | Local LLM (GGUF) for enrichment | ~350 MB | `node-llama-cpp` (optional peer dep) |\n| `openai` | Remote OpenAI-compatible API | None | API key or local server (Ollama, LM Studio, etc.) |\n\n**Retry policy:** Embeddings — 3 retries with exponential backoff on HTTP 429. Enrichment — configurable via `enrich.max_retry_depth` (default 3).\n\n---\n\n## Build Output\n\nAfter building the graph, the output directory contains:\n\n```\nreponova-out/\n├── graph.json                    # Full graph: nodes, edges, community assignments\n├── graph-enriched.json           # Enriched graph (after intelligent enrichment)\n├── graph-nodes.json              # Intermediate (pre-community detection)\n├── detected-files.json           # Detected file list\n├── graph.html                    # Interactive visualization (vis.js)\n├── graph_communities.html        # Community-focused visualization\n├── graph_search.db               # SQLite search index\n├── report.md                     # Build report: stats, hotspots, communities\n├── community_summaries.json      # Community summaries\n├── node_descriptions.json        # Node descriptions\n├── tfidf_idf.json                # TF-IDF vocabulary weights\n├── vectors/                      # LanceDB vector store\n├── outlines/                     # Code outlines per file\n├── .enrich/                      # Enrichment intermediates (intelligent mode)\n│   ├── candidates.json           #   boundary node classification\n│   ├── edge-density.json         #   inter-community density\n│   ├── descriptions.json         #   merged descriptions\n│   ├── profiles.json             #   merged community profiles\n│   ├── routing.json              #   merged routing decisions\n│   ├── restructure.json          #   merge/split proposals\n│   ├── graph-applied.json        #   graph after mutations\n│   └── updated-profiles.json     #   re-profiled communities\n└── .cache/                       # Incremental build cache\n```\n\n---\n\n## Programmatic API\n\n### Build\n\n```typescript\nimport { build } from \"reponova\";\n\nconst result = await build(\"./reponova.yml\");\n// result.outputDir, result.phases, result.totalProcessed\n```\n\n### Runtime Registration + Build\n\n```typescript\nimport { build, registerExtractor, registerOutlineLanguage } from \"reponova\";\nimport type { LanguageExtractor, LanguageSupport } from \"reponova\";\n\nregisterExtractor(myExtractor);\nregisterOutlineLanguage(\"rust\", [\"rs\"], myOutline);\nconst result = await build(\"./reponova.yml\");\n```\n\n### Query\n\n```typescript\nimport {\n  openDatabase, initializeSchema, populateDatabase,\n  loadGraphData, searchNodes, analyzeImpact, findShortestPath,\n} from \"reponova\";\n\nconst graphData = loadGraphData(\"./reponova-out/graph.json\");\nconst db = await openDatabase(\":memory:\");\ninitializeSchema(db);\npopulateDatabase(db, graphData);\n\nconst results = searchNodes(db, \"authentication\", { top_k: 5, type: \"function\" });\nconst impact = analyzeImpact(db, \"Function:authenticate_user\", { max_depth: 3 });\nconst path = findShortestPath(db, graphData, \"ModuleA\", \"ModuleB\");\n```\n\n### Smart Context\n\n```typescript\nimport { ContextBuilder, loadConfig } from \"reponova\";\n\nconst { config } = loadConfig(\"./reponova.yml\");\nconst builder = new ContextBuilder(db, graphData, \"./reponova-out\");\nawait builder.initialize(config.embeddings);\nconst context = await builder.buildContext({ query: \"authentication flow\", maxTokens: 4000 });\n```\n\n---\n\n## FAQ\n\n### Do I need an API key?\n\nNo. By default, RepoNova is fully algorithmic. For agent-driven enrichment (`/reponova-enrich`), the agent's own reasoning is the \"model\" — no external services needed. API keys are only needed if you configure a remote `openai` provider.\n\n### How long does a build take?\n\nAlgorithmic mode (no LLM):\n- Small (500 files): ~5-10s\n- Medium (5,000 files): ~30-60s\n- Large monorepo (20,000+ files): 2-5 min\n\nIntelligent enrichment adds 1-10 minutes depending on graph size, LLM speed, and concurrency.\n\n### Can I use it without an editor?\n\nYes. `reponova build` and the programmatic API work standalone. The MCP server is just one way to query the graph.\n\n---\n\n## Contributing\n\n### Adding Language Support (Plugin)\n\n**Any npm package can be a RepoNova language plugin**. Community plugins like `@exampleorg/lang-rust` or `reponova-lang-kotlin` work exactly like official ones.\n\n#### Plugin manifest spec\n\nEvery language plugin lives at the intersection of two contracts: what makes it **installable** (loaded at runtime by reponova) and what makes it **discoverable** (returned by `reponova lang suggest` querying the npm registry). The two are deliberately layered — a plugin installed manually (`lang add <pkg>` or `npm link`) only has to satisfy the runtime contract.\n\n| `package.json` field | Required for |\n|---|---|---|\n| `reponova.type: \"language\"` | install + discovery |\n| `reponova.extensions: string[]` (non-empty) | install + discovery |\n| `keywords` includes `\"reponova-language\"` | discovery only |\n| Scope `@reponova/lang-*` | nothing — ranking only |\n| Entry exports `LanguagePlugin` with `id` + `extractor` | install only |\n\n#### Creating a new language plugin\n\n1. **Create a new npm package** (any name, any scope).\n2. **In `package.json`** add:\n   - `\"reponova\": { \"type\": \"language\", \"extensions\": [\".rs\"] }`\n   - `\"keywords\": [\"reponova-language\"]` (so `reponova lang suggest` can find it)\n3. **Export** a `plugin` object conforming to `LanguagePlugin`.\n4. **Optionally** include a tree-sitter WASM grammar in `grammars/`.\n5. **Publish** to npm (or use locally via `npm link`).\n\nUsers install it with:\n```bash\nreponova lang add @exampleorg/lang-rust\n```\n\nThis installs the package and declares it in `reponova.yml`:\n```yaml\nplugins:\n  rust:\n    package: \"@exampleorg/lang-rust\"\n    enabled: true\n```\n\n#### `LanguagePlugin` Interface\n\n```typescript\ninterface LanguagePlugin {\n  readonly id: string;              // e.g. \"python\", \"plantuml\"\n  readonly fileType?: string;       // category label in detected-files.json (default: id)\n  readonly grammarPath?: string;    // absolute path to tree-sitter WASM grammar\n  readonly extractor: LanguageExtractor;\n  readonly outline?: LanguageSupport;\n  readonly configDefaults?: Record<string, unknown>;  // default plugin config values\n}\n```\n\n#### `LanguageExtractor` Interface\n\n```typescript\ninterface LanguageExtractor {\n  readonly languageId: string;\n  readonly wasmFile?: string;\n  extract(\n    tree: SyntaxTree | null,\n    sourceCode: string,\n    filePath: string,\n    pluginConfig?: Readonly<Record<string, unknown>>,\n  ): FileExtraction;\n  resolveImportPath(importModule: string, currentFilePath: string): string[];\n}\n```\n\n#### `FileExtraction` Return Type\n\n```typescript\ninterface FileExtraction {\n  filePath: string;\n  language: string;\n  symbols: SymbolNode[];\n  imports: ImportDeclaration[];\n  references: SymbolReference[];\n}\n```\n\n| Type | Key Fields | Purpose |\n|------|-----------|---------|\n| `SymbolNode` | `name`, `qualifiedName`, `kind`, `signature?`, `decorators`, `docstring?`, `startLine`, `endLine`, `parent?`, `bases?`, `calls` | A symbol in the file |\n| `ImportDeclaration` | `module`, `names`, `isWildcard`, `isExport?`, `line` | An import/export statement |\n| `SymbolReference` | `name`, `fromSymbol`, `kind`, `line` | A reference to another symbol |\n| `SymbolKind` | `\"function\"` \\| `\"class\"` \\| `\"method\"` \\| `\"variable\"` \\| `\"constant\"` \\| `\"interface\"` \\| `\"enum\"` \\| `\"module\"` \\| `\"document\"` \\| `\"section\"` | Symbol classification |\n\nSee `src/extract/types.ts` for full definitions.\n\n#### Example: Official plugin (`@reponova/lang-python`)\n\n```typescript\nimport type { LanguagePlugin } from \"reponova\";\nimport { PythonExtractor } from \"./extractor.js\";\nimport { python as pythonOutline } from \"./outline.js\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst grammarPath = resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"../grammars/tree-sitter-python.wasm\");\n\nexport const plugin: LanguagePlugin = {\n  id: \"python\",\n  fileType: \"python\",\n  grammarPath,\n  extractor: new PythonExtractor(),\n  outline: pythonOutline,\n};\n```\n\n#### Example: Minimal community plugin\n\n```typescript\nimport type { LanguagePlugin } from \"reponova\";\nimport { RustExtractor } from \"./extractor.js\";\n\nexport const plugin: LanguagePlugin = {\n  id: \"rust\",\n  fileType: \"rust\",\n  extractor: new RustExtractor(),\n};\n```\n\n#### Plugin `package.json`\n\n```json\n{\n  \"name\": \"@exampleorg/lang-rust\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"exports\": { \".\": \"./dist/index.js\" },\n  \"keywords\": [\"reponova-language\"],\n  \"peerDependencies\": { \"reponova\": \">=0.5.0\" },\n  \"reponova\": {\n    \"type\": \"language\",\n    \"extensions\": [\".rs\"]\n  }\n}\n```\n\n#### Plugin config\n\nUsers configure plugins in `reponova.yml` under the `plugins:` key:\n\n```yaml\nplugins:\n  rust:\n    package: \"@exampleorg/lang-rust\"\n    enabled: true\n    exclude: [\"**/target/**\"]\n```\n\nIf the package follows the `@reponova/lang-<id>` convention, the `package` field can be omitted:\n\n```yaml\nplugins:\n  python:\n    enabled: true       # resolves to @reponova/lang-python\n```\n\nCommon properties (all optional): `package`, `enabled` (default: true), `patterns`, `exclude`.\nCustom properties are defined by the plugin via `configDefaults`.\n\n### Adding Outline Support\n\nOutlines (`graph_outline`) are provided by plugins alongside extraction. A plugin exports an optional `outline` field implementing `LanguageSupport`:\n\n```typescript\ninterface LanguageSupport {\n  readonly wasmFile: string;\n  treeSitterExtract(\n    rootNode: SyntaxNode,\n    filePath: string,\n    lineCount: number,\n    pluginConfig?: Readonly<Record<string, unknown>>,\n  ): FileOutline;\n  regexExtract(\n    filePath: string,\n    source: string,\n    lineCount: number,\n    pluginConfig?: Readonly<Record<string, unknown>>,\n  ): FileOutline;\n}\n```\n\nReference implementations live in the [`reponova-langs`](https://github.com/CristianoCiuti/reponova-langs) monorepo — e.g. [`packages/lang-python`](https://github.com/CristianoCiuti/reponova-langs/tree/main/packages/lang-python) (regex + tree-sitter outline) and [`packages/lang-typescript`](https://github.com/CristianoCiuti/reponova-langs/tree/main/packages/lang-typescript) (shared core reused by `lang-tsx` and `lang-javascript`).\n\n---\n\n## License\n\nMIT — [CristianoCiuti/reponova](https://github.com/CristianoCiuti/reponova)\n","readmeFilename":"README.md"}