{"_id":"@aryaneelshivam/ribbit","_rev":"6-3d57b5c38d0eb4e78d116f13403d6702","name":"@aryaneelshivam/ribbit","dist-tags":{"latest":"1.1.5"},"versions":{"1.0.0":{"name":"@aryaneelshivam/ribbit","version":"1.0.0","keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"author":{"name":"Aryaneel Shivam"},"license":"MIT","_id":"@aryaneelshivam/ribbit@1.0.0","maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"bin":{"ribbit":"dist/cli.js"},"dist":{"shasum":"e0612cc95c11527c08d77d8bb308d1657ee2e9af","tarball":"https://registry.npmjs.org/@aryaneelshivam/ribbit/-/ribbit-1.0.0.tgz","fileCount":42,"integrity":"sha512-CdPvp9qvVfSlWQw09U0X7LnZ0whBVA3fkwWGnY4WRPCw1uD4Qk+JwvseIY0wV4P1yloZipDwwoI/c8Uy9ggkdw==","signatures":[{"sig":"MEYCIQCyBfemGua3O4XGVH9t4BAQUBcLIa1t/AUxhLvZnX69zQIhAIX69wm7B0CmOYrHR5vjhD0Ad2i10acFdlUO3+/jGvVn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201697},"main":"./dist/cli.js","types":"./dist/cli.d.ts","scripts":{"dev":"tsc --watch","build":"tsc","ribbit":"node ./dist/cli.js"},"_npmUser":{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"},"_npmVersion":"11.12.1","description":"Generate an AI-readable knowledge graph of your codebase","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^11.1.0","fast-glob":"^3.3.2","tree-sitter":"^0.21.1","xxhash-wasm":"^1.0.2","tree-sitter-python":"^0.21.0","tree-sitter-javascript":"^0.21.4","tree-sitter-typescript":"^0.21.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/ribbit_1.0.0_1778243649211_0.7537021966047701","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aryaneelshivam/ribbit","version":"1.1.0","keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"author":{"name":"Aryaneel Shivam"},"license":"MIT","_id":"@aryaneelshivam/ribbit@1.1.0","maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"bin":{"ribbit":"dist/cli.js"},"dist":{"shasum":"a3b653864f823e8dabb7bcb1f7957fe9efcb84d2","tarball":"https://registry.npmjs.org/@aryaneelshivam/ribbit/-/ribbit-1.1.0.tgz","fileCount":42,"integrity":"sha512-oCJqwbXkVKD42PoWuxnEkbF21OQaSStQxSlWnXqaRe3PL0AoPLHemg+HZ3Oak1MJzdkB6b9/hrxwPIXVEBsOnA==","signatures":[{"sig":"MEUCIQDpbYk3LwI8r2yEurIlJ2mqJcIsfzhwzJ0GU5ZAoRgxFwIgEpbgB7ZPiD2+uPKJ22MSMZI64bdnuIMsj+4WYbhD8dM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201697},"main":"./dist/cli.js","types":"./dist/cli.d.ts","scripts":{"dev":"tsc --watch","build":"tsc","ribbit":"node ./dist/cli.js"},"_npmUser":{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"},"_npmVersion":"11.12.1","description":"Generate an AI-readable knowledge graph of your codebase","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^11.1.0","fast-glob":"^3.3.2","tree-sitter":"^0.21.1","xxhash-wasm":"^1.0.2","tree-sitter-python":"^0.21.0","tree-sitter-javascript":"^0.21.4","tree-sitter-typescript":"^0.21.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/ribbit_1.1.0_1778243843013_0.6953715589431957","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@aryaneelshivam/ribbit","version":"1.1.2","keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"author":{"name":"Aryaneel Shivam"},"license":"MIT","_id":"@aryaneelshivam/ribbit@1.1.2","maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"homepage":"https://github.com/aryaneelshivam/ribbit#readme","bugs":{"url":"https://github.com/aryaneelshivam/ribbit/issues"},"bin":{"ribbit":"dist/cli.js"},"dist":{"shasum":"6ac77b558607a1e9ba44aafb3444275d4c2bb80f","tarball":"https://registry.npmjs.org/@aryaneelshivam/ribbit/-/ribbit-1.1.2.tgz","fileCount":42,"integrity":"sha512-e2Ks1OnYXZW8qTUvmpyjtRQekKkb7azrG4Dv3GCf0jzMqRKBalJlptcZlPrIAZqvp2cF2o18CmREZHawfpVuhA==","signatures":[{"sig":"MEQCIHo8HfjoSkyUql9f9xpAZHjZ/Gsjlzdjf3pNdaY4qn19AiAO1cMf/UuLX+pivYohyIwhfc39VCOFozimBVM4w7SKwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202284},"main":"./dist/cli.js","types":"./dist/cli.d.ts","gitHead":"3b32970df3b46522e66513bdff9684ed73e05f7a","scripts":{"dev":"tsc --watch","build":"tsc","ribbit":"node ./dist/cli.js"},"_npmUser":{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"},"repository":{"url":"git+https://github.com/aryaneelshivam/ribbit.git","type":"git"},"_npmVersion":"11.12.1","description":"Generate an AI-readable knowledge graph of your codebase","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^11.1.0","fast-glob":"^3.3.2","tree-sitter":"^0.21.1","xxhash-wasm":"^1.0.2","tree-sitter-python":"^0.21.0","tree-sitter-javascript":"^0.21.4","tree-sitter-typescript":"^0.21.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/ribbit_1.1.2_1778245256922_0.4707208250479278","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@aryaneelshivam/ribbit","version":"1.1.3","keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"author":{"name":"Aryaneel Shivam"},"license":"MIT","_id":"@aryaneelshivam/ribbit@1.1.3","maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"homepage":"https://github.com/aryaneelshivam/ribbit#readme","bugs":{"url":"https://github.com/aryaneelshivam/ribbit/issues"},"bin":{"ribbit":"dist/cli.js"},"dist":{"shasum":"6f41658f95afe615f3a67b5c97595282c9a137f5","tarball":"https://registry.npmjs.org/@aryaneelshivam/ribbit/-/ribbit-1.1.3.tgz","fileCount":42,"integrity":"sha512-miGGJmp+dtBM/w1w/Zw+KJMHgBNobGjMvmSKyOo730KySOz0uoCLn8vc2F5UOd368wsgVZX4OyjX2Xs0aM0nNA==","signatures":[{"sig":"MEQCIH3bCIjRIxAMmBS/O/y+eTMRudGarJMG24zqJGBp+pGjAiA6kPSaQLhPra35H6n6L3Bj9K1C7UiZLWSS9grX2FtbsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202710},"main":"./dist/cli.js","types":"./dist/cli.d.ts","gitHead":"1e72841e0064af547961c85f07eebfa86c86cd17","scripts":{"dev":"tsc --watch","build":"tsc","ribbit":"node ./dist/cli.js"},"_npmUser":{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"},"repository":{"url":"git+https://github.com/aryaneelshivam/ribbit.git","type":"git"},"_npmVersion":"11.12.1","description":"Generate an AI-readable knowledge graph of your codebase","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^11.1.0","fast-glob":"^3.3.2","tree-sitter":"^0.21.1","xxhash-wasm":"^1.0.2","tree-sitter-python":"^0.21.0","tree-sitter-javascript":"^0.21.4","tree-sitter-typescript":"^0.21.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/ribbit_1.1.3_1778245945643_0.7181899370624403","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@aryaneelshivam/ribbit","version":"1.1.4","keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"author":{"name":"Aryaneel Shivam"},"license":"MIT","_id":"@aryaneelshivam/ribbit@1.1.4","maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"homepage":"https://github.com/aryaneelshivam/ribbit#readme","bugs":{"url":"https://github.com/aryaneelshivam/ribbit/issues"},"bin":{"ribbit":"dist/cli.js"},"dist":{"shasum":"ab97f3b40968a61e6c7731b0a6218f778e1b736a","tarball":"https://registry.npmjs.org/@aryaneelshivam/ribbit/-/ribbit-1.1.4.tgz","fileCount":42,"integrity":"sha512-z/5IgyMos+s5hrjgDwtPzUYCFQyqmbzvsP1PU6HfbKakYryyBfIZRsGOnMIe121TFrt1k4CuhJxw5+w065AhmA==","signatures":[{"sig":"MEUCIQCX4aHkSN/afwa6Tbj9ilMdvCsfwQ2Rd+UUfxhrr6xs1QIgVO6DH/WRQsviQvEuM20a+nTFS1IXHXp71CS3jmBGJlY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202726},"main":"./dist/cli.js","types":"./dist/cli.d.ts","gitHead":"fdc9bd65b65a739707bf44271d4bc2526f74f64b","scripts":{"dev":"tsc --watch","build":"tsc","ribbit":"node ./dist/cli.js"},"_npmUser":{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"},"repository":{"url":"git+https://github.com/aryaneelshivam/ribbit.git","type":"git"},"_npmVersion":"11.12.1","description":"Generate an AI-readable knowledge graph of your codebase","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^11.1.0","fast-glob":"^3.3.2","tree-sitter":"^0.21.1","xxhash-wasm":"^1.0.2","tree-sitter-python":"^0.21.0","tree-sitter-javascript":"^0.21.4","tree-sitter-typescript":"^0.21.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/ribbit_1.1.4_1778246140781_0.46148634633476693","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@aryaneelshivam/ribbit","version":"1.1.5","description":"Generate an AI-readable knowledge graph of your codebase","main":"./dist/cli.js","bin":{"ribbit":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/aryaneelshivam/ribbit.git"},"bugs":{"url":"https://github.com/aryaneelshivam/ribbit/issues"},"homepage":"https://github.com/aryaneelshivam/ribbit#readme","scripts":{"build":"tsc","ribbit":"node ./dist/cli.js","dev":"tsc --watch"},"keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"author":{"name":"Aryaneel Shivam"},"license":"MIT","dependencies":{"commander":"^11.1.0","fast-glob":"^3.3.2","tree-sitter":"^0.21.1","tree-sitter-typescript":"^0.21.2","tree-sitter-javascript":"^0.21.4","tree-sitter-python":"^0.21.0","xxhash-wasm":"^1.0.2"},"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0"},"gitHead":"4dec88a1535db950cbb98af044ae8f3e1c6c23fb","types":"./dist/cli.d.ts","_id":"@aryaneelshivam/ribbit@1.1.5","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-GHNuCHlWG9S4jDzIi8XtNlN0r1BkRXnfXHTgJl29WrDnAK0lpwSU83mgOQXnU3wBrsDjuhbZW/7x7htEY4O/DA==","shasum":"4f1d24cbb46be9cd2c5ee372689094ea8b6225d1","tarball":"https://registry.npmjs.org/@aryaneelshivam/ribbit/-/ribbit-1.1.5.tgz","fileCount":45,"unpackedSize":251227,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDGJZKMZXYxryVzBBrx/zsNj8RL1FSGXA/Xys+54J2JfAiEA5/1wM256K0a5rqSO0Efm8zp99ImZywf54cPXnZpp4kc="}]},"_npmUser":{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"},"directories":{},"maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ribbit_1.1.5_1778308532958_0.9749617379325004"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-08T12:34:09.129Z","modified":"2026-05-09T06:35:33.266Z","1.0.0":"2026-05-08T12:34:09.342Z","1.1.0":"2026-05-08T12:37:23.223Z","1.1.2":"2026-05-08T13:00:57.090Z","1.1.3":"2026-05-08T13:12:25.778Z","1.1.4":"2026-05-08T13:15:40.939Z","1.1.5":"2026-05-09T06:35:33.138Z"},"bugs":{"url":"https://github.com/aryaneelshivam/ribbit/issues"},"author":{"name":"Aryaneel Shivam"},"license":"MIT","homepage":"https://github.com/aryaneelshivam/ribbit#readme","keywords":["codebase","knowledge-graph","ai","static-analysis","tree-sitter","code-intelligence"],"repository":{"type":"git","url":"git+https://github.com/aryaneelshivam/ribbit.git"},"description":"Generate an AI-readable knowledge graph of your codebase","maintainers":[{"name":"aryaneelshivam","email":"aryaneelshivam1234@gmail.com"}],"readme":"# Ribbit\n\n[![npm version](https://badge.fury.io/js/%40aryaneelshivam%2Fribbit.svg)](https://www.npmjs.com/package/@aryaneelshivam/ribbit)\n[![GitHub Repository](https://img.shields.io/badge/GitHub-Repository-blue.svg)](https://github.com/aryaneelshivam/ribbit)\n\n**Generate an AI-readable knowledge graph of your codebase.**\n\nRibbit scans your project, parses every file with [tree-sitter](https://tree-sitter.github.io/), and outputs a structured JSON graph of all files, symbols, and relationships — plus a **handoff file** summarising recent activity. Together they give any agent complete context: what the code *is*, and what just *happened* to it.\n\n## Features\n\n- ⚡️ **Blazing Fast Incremental Builds**: Uses `xxhash-wasm` to fingerprint files. On re-runs, only modified files are parsed, completing most updates in under 500ms.\n- 🧵 **Multi-Core Parallel Parsing**: Leverages Node.js `worker_threads` to parse your codebase concurrently across all available CPU cores.\n- 🌳 **Deep Semantic Understanding**: Powered by `tree-sitter` for flawless AST-based parsing of **TypeScript**, **JavaScript**, and **Python**.\n- 🧠 **AI-Optimized Output**: Automatically calculates \"centrality\" metrics so LLMs and coding agents know which files are the most critical in your architecture.\n- 📋 **Handoff File**: Auto-generates a human & agent readable summary of recent git activity, function-level diffs, and dependency impact analysis.\n- 📦 **Smart Auto-Chunking**: Small projects get a single `index.json`. Large projects (>200 files) are automatically split into a chunked module directory structure to prevent context window overflows.\n- ⚙️ **Highly Customizable**: Easily exclude directories, toggle test files, or focus on specific languages via `ribbit.config.js`.\n\n---\n\n## Quick Start\n\n```bash\n# Install\nnpm install @aryaneelshivam/ribbit\nnpx @aryaneelshivam/ribbit\n\n# Add the script to your package.json\n# \"scripts\": { \"ribbit\": \"ribbit\" }\n\n# Run\nnpm run ribbit\n```\n\nOr run directly:\n\n```bash\nnpx @aryaneelshivam/ribbit\n```\n\n## What Gets Generated\n\nRunning `ribbit` produces two outputs inside a `ribbit/` folder:\n\n```\nnpm run ribbit\n→ updates ribbit/index.json       (the structural graph)\n→ updates ribbit/handoff.md       (what changed recently)\n```\n\nHere's how it sits in your project:\n\n```text\nmy-project/\n├── src/\n│   ├── auth/\n│   │   └── middleware.ts\n│   ├── db/\n│   │   └── client.ts\n│   ├── routes/\n│   │   └── api.ts\n│   └── utils/\n│       └── logger.ts\n├── package.json\n├── ribbit.config.js\n└── ribbit/                      ← Generated by Ribbit\n    ├── index.json               ← full structural graph\n    └── handoff.md               ← recent activity summary\n```\n\n**Small codebases (< 200 files) → single file + handoff:**\n\n```\nribbit/\n  index.json          ← full graph: files, symbols, relationships\n  handoff.md          ← git activity, diffs, impact analysis\n```\n\n**Large codebases (≥ 200 files) → chunked + handoff:**\n\n```\nribbit/\n  index.json          ← meta + file map (always small)\n  handoff.md          ← git activity, diffs, impact analysis\n  modules/\n    auth.json         ← one file per top-level directory\n    payments.json\n    utils.json\n  relationships.json  ← cross-module edges\n```\n\n## Handoff File\n\nEvery time you run `ribbit`, alongside the graph it generates a `handoff.md` — a human and agent readable summary of recent activity in the codebase. It bridges the gap between the structural graph (what the code *is*) and the activity log (what *changed recently*).\n\n### What it captures\n\n| Section | Description |\n|---------|-------------|\n| **Recent activity** | Which files changed in the last N commits, who changed them, when, and commit messages |\n| **What changed** | Function-level diff — which functions were added, removed, or modified; import & export changes |\n| **Impact analysis** | Which files depend on changed files, high-centrality risk flags, broken edge detection |\n| **Agent context** | Plain-English summary an agent can read instantly to understand what happened since the last session |\n\n### Sample output\n\n```md\n# Ribbit Handoff — 2026-05-09T10:00:00Z\n\n## Recent activity (last 5 commits)\n\n| File | Changed by | When | Commit |\n|---|---|---|---|\n| src/auth/middleware.ts | @dan | 2h ago | refactor: JWT validation |\n| src/db/client.ts | @sara | 5h ago | feat: connection pooling |\n| src/routes/api.ts | @dan | 1d ago | feat: add /payments route |\n\n## What changed\n\n### src/auth/middleware.ts\n- Modified: `authMiddleware` (logic changed)\n- Added: `refreshToken`\n- Removed: `legacyAuth` ← still called by src/admin/panel.ts ⚠️\n\n### src/db/client.ts\n- Modified: `db.query` (now async pool)\n- Added: `db.pool`, `db.disconnect`\n\n## Impact\n- `authMiddleware` is depended on by 4 files — changes here are **high risk**\n- `legacyAuth` was removed from `src/auth/middleware.ts` but `src/admin/panel.ts` still references it ⚠️\n\n## Agent context\nAuth was refactored 2h ago — JWT now handled differently.\nDB client now uses connection pooling, all queries are async.\nNew /payments route added. Legacy auth removed but may cause\na broken import in admin panel — investigate before proceeding.\n```\n\n## Output Format\n\n```json\n{\n  \"meta\": {\n    \"generated\": \"2026-05-08T10:00:00Z\",\n    \"version\": \"1.0.0\",\n    \"files\": 847,\n    \"nodes\": 12453,\n    \"edges\": 34821,\n    \"parseTime\": 1200,\n    \"incremental\": true\n  },\n  \"files\": {\n    \"src/auth/middleware.ts\": {\n      \"exports\": [\"authMiddleware\", \"validateToken\"],\n      \"imports\": [\"src/db/client.ts\", \"src/utils/logger.ts\"],\n      \"language\": \"typescript\",\n      \"centrality\": 0.87,\n      \"hash\": \"a1b2c3d4\",\n      \"lastModified\": 1715000000,\n      \"size\": 4821\n    }\n  },\n  \"symbols\": {\n    \"authMiddleware\": {\n      \"file\": \"src/auth/middleware.ts\",\n      \"type\": \"function\",\n      \"calls\": [\"db.query\", \"logger.log\"],\n      \"calledBy\": [\"src/routes/api.ts\"]\n    }\n  },\n  \"relationships\": {\n    \"src/auth/middleware.ts\": {\n      \"dependsOn\": [\"src/db/client.ts\"],\n      \"dependedOnBy\": [\"src/routes/api.ts\"]\n    }\n  }\n}\n```\n\n## How to Reference in IDE Agents\n\nPoint your AI agent to both files for complete context:\n\n```\n@ribbit/index.json       ← full structural context\n@ribbit/handoff.md       ← what changed since last session\n```\n\n> [!IMPORTANT]\n> **Cursor & Copilot Workaround**\n> IDE AI agents will completely ignore files listed in your `.gitignore`. If you add `ribbit/` to your `.gitignore`, you **will not** be able to tag it with `@ribbit`. \n> \n> **To fix this:** Do not add `ribbit/` to your `.gitignore` file. Instead, manually ensure you do not `git commit` the folder, or add it to `.cursorignore` (if your IDE supports divergent ignore files).\n\nThe centrality scores tell agents which files and symbols are most important — entry points, shared utilities, and core models will have high centrality. The handoff file tells them what's been actively changing so they can prioritise accordingly.\n\n## CLI Options\n\n| Flag | Description |\n|------|-------------|\n| `ribbit` | Default: runs full or incremental build |\n| `--full` | Force complete re-parse, ignore previous graph |\n| `--stats` | Print graph stats to console, don't write files |\n| `--config <path>` | Path to custom `ribbit.config.js` |\n| `--version` | Print version |\n| `--help` | Show help |\n\n## Configuration\n\nCreate a `ribbit.config.js` in your project root (auto-created on first run):\n\n```javascript\nmodule.exports = {\n  // Glob patterns to ignore\n  ignore: [\n    \"**/*.test.ts\",\n    \"**/*.spec.ts\",\n    \"**/__tests__/**\",\n    \"**/dist/**\",\n  ],\n\n  // Languages to parse\n  languages: [\"typescript\", \"javascript\"],\n\n  // Output directory\n  output: \"ribbit/\",\n\n  // File count threshold for chunked output\n  chunkThreshold: 200,\n\n  // Include test files in the graph\n  includeTests: false,\n\n  // Include dotfiles\n  includeDotFiles: false,\n\n  // Handoff file generation\n  handoff: {\n    enabled: true,       // generate the handoff file\n    commits: 10,         // how many commits to look back\n    includeDiffs: true,  // include function-level diff analysis\n    includeImpact: true, // include dependency impact analysis\n    format: \"markdown\",  // \"markdown\" or \"json\"\n  },\n}\n```\n\n## Incremental Builds\n\nRibbit uses `xxhash` to fingerprint every file. On re-runs, only files whose content has changed are re-parsed — everything else is carried forward from the previous graph. This makes re-runs extremely fast even on large codebases.\n\n## Performance\n\n| Scenario | Target |\n|----------|--------|\n| First run — 10k lines | < 0.5s |\n| First run — 100k lines | < 3s |\n| First run — 1M lines | < 20s |\n| Re-run — 10 changed files | < 500ms |\n\n## Supported Languages\n\n- **TypeScript** (`.ts`, `.tsx`)\n- **JavaScript** (`.js`, `.jsx`, `.mjs`, `.cjs`)\n- **Python** (`.py`)\n\n## Roadmap\n\n- [x] **Handoff File**: Auto-generated activity summary with diff and impact analysis.\n- [ ] **Phase 2**: `--watch` mode for automatic re-runs on file changes.\n- [ ] **Phase 3**: MCP server for real-time graph queries.\n- [ ] **Phase 4**: Additional language support (Go, Rust, Java).\n\n## Author\n\n**Aryaneel Shivam**\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","readmeFilename":"README.md"}