code-context-engine 0.4.17__tar.gz → 0.4.19__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/PKG-INFO +47 -11
  2. code_context_engine-0.4.17/src/code_context_engine.egg-info/PKG-INFO → code_context_engine-0.4.19/README.md +43 -57
  3. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/pyproject.toml +33 -3
  4. code_context_engine-0.4.17/README.md → code_context_engine-0.4.19/src/code_context_engine.egg-info/PKG-INFO +93 -8
  5. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/code_context_engine.egg-info/SOURCES.txt +1 -0
  6. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/code_context_engine.egg-info/requires.txt +1 -0
  7. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/cli.py +52 -35
  8. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/editors.py +13 -1
  9. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/event_bus.py +0 -1
  10. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/embedder.py +5 -1
  11. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/embedding_cache.py +2 -1
  12. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/git_hooks.py +7 -3
  13. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/pipeline.py +0 -1
  14. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/integration/bootstrap.py +1 -1
  15. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/integration/mcp_server.py +0 -1
  16. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/compressor.py +70 -1
  17. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/db.py +6 -4
  18. code_context_engine-0.4.19/src/context_engine/memory/decision_extractor.py +91 -0
  19. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/hooks.py +0 -1
  20. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/backend.py +1 -1
  21. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/fts_store.py +2 -1
  22. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/graph_store.py +4 -3
  23. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/remote_backend.py +1 -1
  24. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/vector_store.py +9 -7
  25. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/utils.py +20 -10
  26. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_savings_e2e.py +1 -2
  27. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_smoke.py +2 -2
  28. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_uninstall.py +0 -1
  29. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_config.py +0 -3
  30. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_e2e.py +1 -2
  31. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_event_bus.py +0 -1
  32. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_project_commands.py +0 -3
  33. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_real_life.py +0 -4
  34. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_services.py +0 -2
  35. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_token_efficiency.py +0 -1
  36. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_token_packing.py +0 -1
  37. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/LICENSE +0 -0
  38. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/setup.cfg +0 -0
  39. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/code_context_engine.egg-info/dependency_links.txt +0 -0
  40. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/code_context_engine.egg-info/entry_points.txt +0 -0
  41. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/code_context_engine.egg-info/top_level.txt +0 -0
  42. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/__init__.py +0 -0
  43. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/cli_style.py +0 -0
  44. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/compression/__init__.py +0 -0
  45. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/compression/compressor.py +0 -0
  46. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/compression/ollama_client.py +0 -0
  47. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/compression/output_rules.py +0 -0
  48. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/compression/prompts.py +0 -0
  49. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/compression/quality.py +0 -0
  50. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/config.py +0 -0
  51. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/dashboard/__init__.py +0 -0
  52. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/dashboard/_page.py +0 -0
  53. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/dashboard/server.py +0 -0
  54. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/__init__.py +0 -0
  55. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/chunker.py +0 -0
  56. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/git_indexer.py +0 -0
  57. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/ignorefile.py +0 -0
  58. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/manifest.py +0 -0
  59. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/secrets.py +0 -0
  60. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/indexer/watcher.py +0 -0
  61. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/integration/__init__.py +0 -0
  62. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/integration/git_context.py +0 -0
  63. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/integration/session_capture.py +0 -0
  64. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/__init__.py +0 -0
  65. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/extractive.py +0 -0
  66. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/grammar.py +0 -0
  67. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/hook_installer.py +0 -0
  68. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/hook_server.py +0 -0
  69. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/memory/migrate.py +0 -0
  70. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/models.py +0 -0
  71. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/pricing.py +0 -0
  72. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/project_commands.py +0 -0
  73. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/retrieval/__init__.py +0 -0
  74. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/retrieval/confidence.py +0 -0
  75. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/retrieval/query_parser.py +0 -0
  76. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/retrieval/retriever.py +0 -0
  77. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/serve_http.py +0 -0
  78. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/services.py +0 -0
  79. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/__init__.py +0 -0
  80. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/src/context_engine/storage/local_backend.py +0 -0
  81. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_init_probe.py +0 -0
  82. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_mcp_config.py +0 -0
  83. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_safe_cwd.py +0 -0
  84. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_savings.py +0 -0
  85. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_savings_buckets.py +0 -0
  86. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_serve.py +0 -0
  87. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_sessions_export.py +0 -0
  88. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_cli_sessions_status.py +0 -0
  89. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_editors_codex.py +0 -0
  90. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_editors_opencode.py +0 -0
  91. {code_context_engine-0.4.17 → code_context_engine-0.4.19}/tests/test_models.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-engine
3
- Version: 0.4.17
4
- Summary: Index your codebase. AI searches instead of re-reading files. 94% token savings, benchmarked on FastAPI. Works with Claude Code, Cursor, VS Code, Gemini CLI, Codex, and OpenCode.
3
+ Version: 0.4.19
4
+ Summary: Save 94% on Claude Code tokens. Index your codebase locally, AI agents search instead of reading files. Reduce Claude API costs, save tokens on Cursor, VS Code, Gemini CLI. Free, open source MCP server.
5
5
  Author-email: Fazle Elahee <felahee@gmail.com>, Raj <rajkumar.sakti@gmail.com>
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/elara-labs/code-context-engine
8
8
  Project-URL: Repository, https://github.com/elara-labs/code-context-engine
9
9
  Project-URL: Issues, https://github.com/elara-labs/code-context-engine/issues
10
- Keywords: claude,context,mcp,llm,code-indexing,vector-search
10
+ Keywords: claude-code,save-tokens,token-savings,mcp-server,claude,cursor,code-indexing,reduce-ai-costs,llm,vector-search,ai-coding
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Programming Language :: Python :: 3
@@ -44,6 +44,7 @@ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
44
44
  Requires-Dist: pytest-aiohttp>=1.0; extra == "dev"
45
45
  Requires-Dist: pytest-cov>=5.0; extra == "dev"
46
46
  Requires-Dist: pytest-xdist>=3.5; extra == "dev"
47
+ Requires-Dist: ruff>=0.13; extra == "dev"
47
48
  Provides-Extra: http
48
49
  Dynamic: license-file
49
50
 
@@ -57,6 +58,10 @@ Dynamic: license-file
57
58
  <strong>Index your codebase. AI searches instead of re-reading files.<br>94% token savings, reproducibly benchmarked.</strong>
58
59
  </p>
59
60
 
61
+ <p align="center">
62
+ <a href="https://elara-labs.github.io/code-context-engine/">Website</a> · <a href="https://elara-labs.github.io/code-context-engine/blog/what-is-code-context-engine.html">Guide</a> · <a href="https://elara-labs.github.io/code-context-engine/blog/benchmark-fastapi.html">Benchmark</a> · <a href="https://github.com/elara-labs/code-context-engine">GitHub</a>
63
+ </p>
64
+
60
65
  <br>
61
66
 
62
67
  <p align="center">
@@ -80,7 +85,8 @@ Dynamic: license-file
80
85
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Cursor-000?style=for-the-badge" alt="Cursor"></a>&nbsp;
81
86
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Gemini_CLI-4285F4?style=for-the-badge&logo=google&logoColor=white" alt="Gemini CLI"></a>&nbsp;
82
87
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Codex_CLI-412991?style=for-the-badge" alt="Codex CLI"></a>&nbsp;
83
- <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/OpenCode-22C55E?style=for-the-badge&logo=gnometerminal&logoColor=white" alt="OpenCode"></a>
88
+ <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/OpenCode-22C55E?style=for-the-badge&logo=gnometerminal&logoColor=white" alt="OpenCode"></a>&nbsp;
89
+ <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Tabnine-4B32C3?style=for-the-badge&logo=tabnine&logoColor=white" alt="Tabnine"></a>
84
90
  </p>
85
91
 
86
92
  <p align="center">
@@ -154,6 +160,7 @@ Restart your editor. Done. Every question now hits the index instead of re-readi
154
160
  | Gemini CLI | `.gemini/settings.json` | `GEMINI.md` |
155
161
  | OpenAI Codex | `~/.codex/config.toml` (user-global, per-project section) | |
156
162
  | OpenCode | `opencode.json` | |
163
+ | Tabnine | `.tabnine/agent/settings.json` | `TABNINE.md` |
157
164
 
158
165
  Multiple editors in the same project? All get configured in one command.
159
166
 
@@ -196,7 +203,9 @@ With CCE: context_search "payment flow" = 800 tokens
196
203
 
197
204
  We benchmarked CCE against [FastAPI](https://github.com/fastapi/fastapi) (53 source files, 180K tokens) with 20 real coding questions. No cherry-picking, no synthetic queries.
198
205
 
199
- **Methodology:** For each query, "without CCE" means reading the full content of every file the query touches. "With CCE" means the relevant chunks after compression. This is conservative (agents often read more files than needed).
206
+ **Methodology:** For each query, "without CCE" means reading the full content of every file the query touches. "With CCE" means the relevant chunks after compression.
207
+
208
+ **Important baseline note:** The 94% number is measured against full-file reads, not against what Claude Code actually does. In practice, Claude Code already uses grep, partial file reads, and targeted tools, so the real-world savings compared to normal Claude Code behavior will be lower than 94%. We use full-file as the baseline because it's reproducible and deterministic (no agent behavior variability). The benchmark measures CCE's retrieval efficiency, not a head-to-head comparison with Claude Code's built-in exploration.
200
209
 
201
210
  | Metric | Result |
202
211
  |--------|--------|
@@ -216,14 +225,25 @@ We benchmarked CCE against [FastAPI](https://github.com/fastapi/fastapi) (53 sou
216
225
 
217
226
  Output compression (reducing Claude's reply length) provides additional savings (~65% estimated) but is not included in the headline number above.
218
227
 
228
+ ### Multi-language benchmarks
229
+
230
+ | Repo | Language | Files | Retrieval savings | Recall@10 |
231
+ |------|----------|-------|-------------------|-----------|
232
+ | [FastAPI](benchmarks/results/fastapi.md) | Python | 53 | **94%** | 0.90 |
233
+ | [chi](benchmarks/results/chi.md) | Go | 94 | **76%** | 0.67 |
234
+ | [fiber](benchmarks/results/fiber.md) | Go (monorepo) | 396 | **93%** | 0.07 |
235
+
236
+ Go's shorter files reduce the retrieval headroom (smaller baseline). Monorepos dilute recall at top-10 (fiber). Middleware queries with one-feature-per-file hit R=1.00 consistently.
237
+
219
238
  **Reproduce it yourself:**
220
239
 
221
240
  ```bash
222
241
  pip install code-context-engine
223
242
  python benchmarks/run_benchmark.py --repo https://github.com/fastapi/fastapi.git --source-dir fastapi
243
+ python benchmarks/run_benchmark.py --repo https://github.com/go-chi/chi.git --source-dir .
224
244
  ```
225
245
 
226
- Full results in [`benchmarks/results/fastapi.md`](benchmarks/results/fastapi.md). Queries and methodology in [`benchmarks/`](benchmarks/).
246
+ Full results in [`benchmarks/results/`](benchmarks/results/). Queries and methodology in [`benchmarks/`](benchmarks/).
227
247
 
228
248
  ---
229
249
 
@@ -415,7 +435,7 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
415
435
 
416
436
  ## Supported Languages
417
437
 
418
- **AST-aware chunking (10 extensions):**
438
+ **AST-aware chunking (tree-sitter parsed, 10 extensions):**
419
439
 
420
440
  | Language | Extensions |
421
441
  |----------|-----------|
@@ -427,7 +447,20 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
427
447
  | Rust | `.rs` |
428
448
  | Java | `.java` |
429
449
 
430
- **Fallback chunking:** All other text files (Markdown, YAML, config, etc.) chunked by line range.
450
+ **Language-aware fallback chunking (40+ extensions):**
451
+
452
+ | Category | Languages |
453
+ |----------|-----------|
454
+ | Web | HTML, CSS, SCSS, LESS, Vue, Svelte |
455
+ | Systems | C, C++, C#, Zig, Nim |
456
+ | Mobile | Swift, Kotlin, Dart |
457
+ | Functional | Haskell, Scala, Clojure, Elixir, Erlang, F# |
458
+ | Scripting | Ruby, Perl, Lua, R, Bash/Zsh |
459
+ | Data/Config | JSON, YAML, TOML, XML, SQL, GraphQL, Protobuf |
460
+ | DevOps | Terraform, HCL, Dockerfile |
461
+ | Docs | Markdown |
462
+
463
+ All other text files are chunked by line range. Binary files are skipped.
431
464
 
432
465
  ---
433
466
 
@@ -435,18 +468,21 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
435
468
 
436
469
  | Page | Content |
437
470
  |------|---------|
471
+ | [What is CCE? (Complete Guide)](https://elara-labs.github.io/code-context-engine/blog/what-is-code-context-engine.html) | Setup, tools, how it works, FAQ |
472
+ | [How to Save Claude Code Tokens](https://elara-labs.github.io/code-context-engine/blog/save-claude-code-tokens.html) | Cost breakdown and savings guide |
473
+ | [Benchmark Deep Dive](https://elara-labs.github.io/code-context-engine/blog/benchmark-fastapi.html) | Full FastAPI benchmark methodology |
474
+ | [Comparison with Alternatives](https://elara-labs.github.io/code-context-engine/comparison.html) | CCE vs Cursor, Aider, Continue, Greptile |
438
475
  | [Examples](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Examples.md) | Real conversations with Claude |
439
476
  | [How It Works](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/How-It-Works.md) | Full 9-stage pipeline |
440
477
  | [CLI Reference](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/CLI-Reference.md) | Every command with output |
441
478
  | [Configuration](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Configuration.md) | All config options |
442
- | [Project Commands](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Project-Commands.md) | Rules and preferences for Claude |
443
- | [Tech Stack](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Tech-Stack.md) | Every library and why |
444
479
 
445
480
  ---
446
481
 
447
482
  ## Roadmap
448
483
 
449
- - [ ] Multi-repo benchmarks (Django, Express, a Go project)
484
+ - [x] Multi-repo benchmarks (FastAPI, chi, fiber)
485
+ - [ ] More benchmarks (Django, Express)
450
486
  - [ ] Tree-sitter support for C, C++, Ruby, Swift, Kotlin
451
487
  - [ ] Docker support for remote mode
452
488
 
@@ -1,52 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: code-context-engine
3
- Version: 0.4.17
4
- Summary: Index your codebase. AI searches instead of re-reading files. 94% token savings, benchmarked on FastAPI. Works with Claude Code, Cursor, VS Code, Gemini CLI, Codex, and OpenCode.
5
- Author-email: Fazle Elahee <felahee@gmail.com>, Raj <rajkumar.sakti@gmail.com>
6
- License-Expression: MIT
7
- Project-URL: Homepage, https://github.com/elara-labs/code-context-engine
8
- Project-URL: Repository, https://github.com/elara-labs/code-context-engine
9
- Project-URL: Issues, https://github.com/elara-labs/code-context-engine/issues
10
- Keywords: claude,context,mcp,llm,code-indexing,vector-search
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Intended Audience :: Developers
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.11
15
- Classifier: Programming Language :: Python :: 3.12
16
- Classifier: Programming Language :: Python :: 3.13
17
- Classifier: Topic :: Software Development :: Libraries
18
- Requires-Python: >=3.11
19
- Description-Content-Type: text/markdown
20
- License-File: LICENSE
21
- Requires-Dist: click>=8.1
22
- Requires-Dist: pyyaml>=6.0
23
- Requires-Dist: sqlite-vec>=0.1.6
24
- Requires-Dist: fastembed>=0.4
25
- Requires-Dist: numpy>=1.24
26
- Requires-Dist: tree-sitter>=0.22
27
- Requires-Dist: tree-sitter-python>=0.21
28
- Requires-Dist: tree-sitter-javascript>=0.21
29
- Requires-Dist: tree-sitter-typescript>=0.21
30
- Requires-Dist: tree-sitter-php>=0.23
31
- Requires-Dist: tree-sitter-go>=0.23
32
- Requires-Dist: tree-sitter-rust>=0.23
33
- Requires-Dist: tree-sitter-java>=0.23
34
- Requires-Dist: watchdog>=4.0
35
- Requires-Dist: mcp>=1.0
36
- Requires-Dist: httpx>=0.27
37
- Requires-Dist: fastapi>=0.110
38
- Requires-Dist: uvicorn>=0.29
39
- Requires-Dist: aiohttp>=3.9
40
- Requires-Dist: psutil>=5.9
41
- Provides-Extra: dev
42
- Requires-Dist: pytest>=8.0; extra == "dev"
43
- Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
44
- Requires-Dist: pytest-aiohttp>=1.0; extra == "dev"
45
- Requires-Dist: pytest-cov>=5.0; extra == "dev"
46
- Requires-Dist: pytest-xdist>=3.5; extra == "dev"
47
- Provides-Extra: http
48
- Dynamic: license-file
49
-
50
1
  <p align="center">
51
2
  <img src="https://raw.githubusercontent.com/elara-labs/code-context-engine/main/docs/logo.svg" alt="Code Context Engine" width="140">
52
3
  </p>
@@ -57,6 +8,10 @@ Dynamic: license-file
57
8
  <strong>Index your codebase. AI searches instead of re-reading files.<br>94% token savings, reproducibly benchmarked.</strong>
58
9
  </p>
59
10
 
11
+ <p align="center">
12
+ <a href="https://elara-labs.github.io/code-context-engine/">Website</a> · <a href="https://elara-labs.github.io/code-context-engine/blog/what-is-code-context-engine.html">Guide</a> · <a href="https://elara-labs.github.io/code-context-engine/blog/benchmark-fastapi.html">Benchmark</a> · <a href="https://github.com/elara-labs/code-context-engine">GitHub</a>
13
+ </p>
14
+
60
15
  <br>
61
16
 
62
17
  <p align="center">
@@ -80,7 +35,8 @@ Dynamic: license-file
80
35
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Cursor-000?style=for-the-badge" alt="Cursor"></a>&nbsp;
81
36
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Gemini_CLI-4285F4?style=for-the-badge&logo=google&logoColor=white" alt="Gemini CLI"></a>&nbsp;
82
37
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Codex_CLI-412991?style=for-the-badge" alt="Codex CLI"></a>&nbsp;
83
- <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/OpenCode-22C55E?style=for-the-badge&logo=gnometerminal&logoColor=white" alt="OpenCode"></a>
38
+ <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/OpenCode-22C55E?style=for-the-badge&logo=gnometerminal&logoColor=white" alt="OpenCode"></a>&nbsp;
39
+ <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Tabnine-4B32C3?style=for-the-badge&logo=tabnine&logoColor=white" alt="Tabnine"></a>
84
40
  </p>
85
41
 
86
42
  <p align="center">
@@ -154,6 +110,7 @@ Restart your editor. Done. Every question now hits the index instead of re-readi
154
110
  | Gemini CLI | `.gemini/settings.json` | `GEMINI.md` |
155
111
  | OpenAI Codex | `~/.codex/config.toml` (user-global, per-project section) | |
156
112
  | OpenCode | `opencode.json` | |
113
+ | Tabnine | `.tabnine/agent/settings.json` | `TABNINE.md` |
157
114
 
158
115
  Multiple editors in the same project? All get configured in one command.
159
116
 
@@ -196,7 +153,9 @@ With CCE: context_search "payment flow" = 800 tokens
196
153
 
197
154
  We benchmarked CCE against [FastAPI](https://github.com/fastapi/fastapi) (53 source files, 180K tokens) with 20 real coding questions. No cherry-picking, no synthetic queries.
198
155
 
199
- **Methodology:** For each query, "without CCE" means reading the full content of every file the query touches. "With CCE" means the relevant chunks after compression. This is conservative (agents often read more files than needed).
156
+ **Methodology:** For each query, "without CCE" means reading the full content of every file the query touches. "With CCE" means the relevant chunks after compression.
157
+
158
+ **Important baseline note:** The 94% number is measured against full-file reads, not against what Claude Code actually does. In practice, Claude Code already uses grep, partial file reads, and targeted tools, so the real-world savings compared to normal Claude Code behavior will be lower than 94%. We use full-file as the baseline because it's reproducible and deterministic (no agent behavior variability). The benchmark measures CCE's retrieval efficiency, not a head-to-head comparison with Claude Code's built-in exploration.
200
159
 
201
160
  | Metric | Result |
202
161
  |--------|--------|
@@ -216,14 +175,25 @@ We benchmarked CCE against [FastAPI](https://github.com/fastapi/fastapi) (53 sou
216
175
 
217
176
  Output compression (reducing Claude's reply length) provides additional savings (~65% estimated) but is not included in the headline number above.
218
177
 
178
+ ### Multi-language benchmarks
179
+
180
+ | Repo | Language | Files | Retrieval savings | Recall@10 |
181
+ |------|----------|-------|-------------------|-----------|
182
+ | [FastAPI](benchmarks/results/fastapi.md) | Python | 53 | **94%** | 0.90 |
183
+ | [chi](benchmarks/results/chi.md) | Go | 94 | **76%** | 0.67 |
184
+ | [fiber](benchmarks/results/fiber.md) | Go (monorepo) | 396 | **93%** | 0.07 |
185
+
186
+ Go's shorter files reduce the retrieval headroom (smaller baseline). Monorepos dilute recall at top-10 (fiber). Middleware queries with one-feature-per-file hit R=1.00 consistently.
187
+
219
188
  **Reproduce it yourself:**
220
189
 
221
190
  ```bash
222
191
  pip install code-context-engine
223
192
  python benchmarks/run_benchmark.py --repo https://github.com/fastapi/fastapi.git --source-dir fastapi
193
+ python benchmarks/run_benchmark.py --repo https://github.com/go-chi/chi.git --source-dir .
224
194
  ```
225
195
 
226
- Full results in [`benchmarks/results/fastapi.md`](benchmarks/results/fastapi.md). Queries and methodology in [`benchmarks/`](benchmarks/).
196
+ Full results in [`benchmarks/results/`](benchmarks/results/). Queries and methodology in [`benchmarks/`](benchmarks/).
227
197
 
228
198
  ---
229
199
 
@@ -415,7 +385,7 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
415
385
 
416
386
  ## Supported Languages
417
387
 
418
- **AST-aware chunking (10 extensions):**
388
+ **AST-aware chunking (tree-sitter parsed, 10 extensions):**
419
389
 
420
390
  | Language | Extensions |
421
391
  |----------|-----------|
@@ -427,7 +397,20 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
427
397
  | Rust | `.rs` |
428
398
  | Java | `.java` |
429
399
 
430
- **Fallback chunking:** All other text files (Markdown, YAML, config, etc.) chunked by line range.
400
+ **Language-aware fallback chunking (40+ extensions):**
401
+
402
+ | Category | Languages |
403
+ |----------|-----------|
404
+ | Web | HTML, CSS, SCSS, LESS, Vue, Svelte |
405
+ | Systems | C, C++, C#, Zig, Nim |
406
+ | Mobile | Swift, Kotlin, Dart |
407
+ | Functional | Haskell, Scala, Clojure, Elixir, Erlang, F# |
408
+ | Scripting | Ruby, Perl, Lua, R, Bash/Zsh |
409
+ | Data/Config | JSON, YAML, TOML, XML, SQL, GraphQL, Protobuf |
410
+ | DevOps | Terraform, HCL, Dockerfile |
411
+ | Docs | Markdown |
412
+
413
+ All other text files are chunked by line range. Binary files are skipped.
431
414
 
432
415
  ---
433
416
 
@@ -435,18 +418,21 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
435
418
 
436
419
  | Page | Content |
437
420
  |------|---------|
421
+ | [What is CCE? (Complete Guide)](https://elara-labs.github.io/code-context-engine/blog/what-is-code-context-engine.html) | Setup, tools, how it works, FAQ |
422
+ | [How to Save Claude Code Tokens](https://elara-labs.github.io/code-context-engine/blog/save-claude-code-tokens.html) | Cost breakdown and savings guide |
423
+ | [Benchmark Deep Dive](https://elara-labs.github.io/code-context-engine/blog/benchmark-fastapi.html) | Full FastAPI benchmark methodology |
424
+ | [Comparison with Alternatives](https://elara-labs.github.io/code-context-engine/comparison.html) | CCE vs Cursor, Aider, Continue, Greptile |
438
425
  | [Examples](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Examples.md) | Real conversations with Claude |
439
426
  | [How It Works](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/How-It-Works.md) | Full 9-stage pipeline |
440
427
  | [CLI Reference](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/CLI-Reference.md) | Every command with output |
441
428
  | [Configuration](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Configuration.md) | All config options |
442
- | [Project Commands](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Project-Commands.md) | Rules and preferences for Claude |
443
- | [Tech Stack](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Tech-Stack.md) | Every library and why |
444
429
 
445
430
  ---
446
431
 
447
432
  ## Roadmap
448
433
 
449
- - [ ] Multi-repo benchmarks (Django, Express, a Go project)
434
+ - [x] Multi-repo benchmarks (FastAPI, chi, fiber)
435
+ - [ ] More benchmarks (Django, Express)
450
436
  - [ ] Tree-sitter support for C, C++, Ruby, Swift, Kotlin
451
437
  - [ ] Docker support for remote mode
452
438
 
@@ -1,14 +1,14 @@
1
1
  [project]
2
2
  name = "code-context-engine"
3
- version = "0.4.17"
4
- description = "Index your codebase. AI searches instead of re-reading files. 94% token savings, benchmarked on FastAPI. Works with Claude Code, Cursor, VS Code, Gemini CLI, Codex, and OpenCode."
3
+ version = "0.4.19"
4
+ description = "Save 94% on Claude Code tokens. Index your codebase locally, AI agents search instead of reading files. Reduce Claude API costs, save tokens on Cursor, VS Code, Gemini CLI. Free, open source MCP server."
5
5
  readme = {file = "README.md", content-type = "text/markdown"}
6
6
  license = "MIT"
7
7
  authors = [
8
8
  {name = "Fazle Elahee", email = "felahee@gmail.com"},
9
9
  {name = "Raj", email = "rajkumar.sakti@gmail.com"},
10
10
  ]
11
- keywords = ["claude", "context", "mcp", "llm", "code-indexing", "vector-search"]
11
+ keywords = ["claude-code", "save-tokens", "token-savings", "mcp-server", "claude", "cursor", "code-indexing", "reduce-ai-costs", "llm", "vector-search", "ai-coding"]
12
12
  classifiers = [
13
13
  "Development Status :: 4 - Beta",
14
14
  "Intended Audience :: Developers",
@@ -57,6 +57,7 @@ dev = [
57
57
  "pytest-aiohttp>=1.0",
58
58
  "pytest-cov>=5.0",
59
59
  "pytest-xdist>=3.5",
60
+ "ruff>=0.13",
60
61
  ]
61
62
  http = [] # back-compat: aiohttp is now a core dependency
62
63
 
@@ -94,4 +95,33 @@ dev = [
94
95
  "pytest-asyncio>=1.3.0",
95
96
  "pytest-aiohttp>=1.0",
96
97
  "pytest-xdist>=3.5",
98
+ "ruff>=0.13",
97
99
  ]
100
+
101
+ [tool.ruff]
102
+ line-length = 100
103
+ target-version = "py311"
104
+ extend-exclude = ["dist", "build", ".venv"]
105
+
106
+ [tool.ruff.lint]
107
+ # Default ruleset — pycodestyle errors (E) + pyflakes (F). Conservative
108
+ # starting point; can be expanded later (I/imports, B/bugbear, UP/pyupgrade)
109
+ # once the team is comfortable with the baseline. Selected rules are the
110
+ # ones that catch real bugs (unused imports, undefined names, redefined
111
+ # symbols) rather than stylistic preferences.
112
+ select = ["E", "F", "W"]
113
+ # E501 (line-too-long) is enforced via `line-length` above; default is 88
114
+ # but we use 100 to match the existing codebase. Ignore a few rules that
115
+ # are noisy in async/test code:
116
+ ignore = [
117
+ "E501", # line-too-long: handled by formatter, not all old code wrapped
118
+ "E402", # module-import-not-at-top: legitimate inside conditional imports
119
+ "E741", # ambiguous-variable-name (l/I/O): one-off in third-party-style code
120
+ ]
121
+
122
+ [tool.ruff.lint.per-file-ignores]
123
+ # Tests import fixtures and helpers that look unused but trigger collection.
124
+ "tests/**" = ["F811"]
125
+ # __init__.py files are allowed to re-export (those imports look unused but
126
+ # are part of the public surface of the package).
127
+ "**/__init__.py" = ["F401"]
@@ -1,3 +1,53 @@
1
+ Metadata-Version: 2.4
2
+ Name: code-context-engine
3
+ Version: 0.4.19
4
+ Summary: Save 94% on Claude Code tokens. Index your codebase locally, AI agents search instead of reading files. Reduce Claude API costs, save tokens on Cursor, VS Code, Gemini CLI. Free, open source MCP server.
5
+ Author-email: Fazle Elahee <felahee@gmail.com>, Raj <rajkumar.sakti@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/elara-labs/code-context-engine
8
+ Project-URL: Repository, https://github.com/elara-labs/code-context-engine
9
+ Project-URL: Issues, https://github.com/elara-labs/code-context-engine/issues
10
+ Keywords: claude-code,save-tokens,token-savings,mcp-server,claude,cursor,code-indexing,reduce-ai-costs,llm,vector-search,ai-coding
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development :: Libraries
18
+ Requires-Python: >=3.11
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: click>=8.1
22
+ Requires-Dist: pyyaml>=6.0
23
+ Requires-Dist: sqlite-vec>=0.1.6
24
+ Requires-Dist: fastembed>=0.4
25
+ Requires-Dist: numpy>=1.24
26
+ Requires-Dist: tree-sitter>=0.22
27
+ Requires-Dist: tree-sitter-python>=0.21
28
+ Requires-Dist: tree-sitter-javascript>=0.21
29
+ Requires-Dist: tree-sitter-typescript>=0.21
30
+ Requires-Dist: tree-sitter-php>=0.23
31
+ Requires-Dist: tree-sitter-go>=0.23
32
+ Requires-Dist: tree-sitter-rust>=0.23
33
+ Requires-Dist: tree-sitter-java>=0.23
34
+ Requires-Dist: watchdog>=4.0
35
+ Requires-Dist: mcp>=1.0
36
+ Requires-Dist: httpx>=0.27
37
+ Requires-Dist: fastapi>=0.110
38
+ Requires-Dist: uvicorn>=0.29
39
+ Requires-Dist: aiohttp>=3.9
40
+ Requires-Dist: psutil>=5.9
41
+ Provides-Extra: dev
42
+ Requires-Dist: pytest>=8.0; extra == "dev"
43
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
44
+ Requires-Dist: pytest-aiohttp>=1.0; extra == "dev"
45
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
46
+ Requires-Dist: pytest-xdist>=3.5; extra == "dev"
47
+ Requires-Dist: ruff>=0.13; extra == "dev"
48
+ Provides-Extra: http
49
+ Dynamic: license-file
50
+
1
51
  <p align="center">
2
52
  <img src="https://raw.githubusercontent.com/elara-labs/code-context-engine/main/docs/logo.svg" alt="Code Context Engine" width="140">
3
53
  </p>
@@ -8,6 +58,10 @@
8
58
  <strong>Index your codebase. AI searches instead of re-reading files.<br>94% token savings, reproducibly benchmarked.</strong>
9
59
  </p>
10
60
 
61
+ <p align="center">
62
+ <a href="https://elara-labs.github.io/code-context-engine/">Website</a> · <a href="https://elara-labs.github.io/code-context-engine/blog/what-is-code-context-engine.html">Guide</a> · <a href="https://elara-labs.github.io/code-context-engine/blog/benchmark-fastapi.html">Benchmark</a> · <a href="https://github.com/elara-labs/code-context-engine">GitHub</a>
63
+ </p>
64
+
11
65
  <br>
12
66
 
13
67
  <p align="center">
@@ -31,7 +85,8 @@
31
85
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Cursor-000?style=for-the-badge" alt="Cursor"></a>&nbsp;
32
86
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Gemini_CLI-4285F4?style=for-the-badge&logo=google&logoColor=white" alt="Gemini CLI"></a>&nbsp;
33
87
  <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Codex_CLI-412991?style=for-the-badge" alt="Codex CLI"></a>&nbsp;
34
- <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/OpenCode-22C55E?style=for-the-badge&logo=gnometerminal&logoColor=white" alt="OpenCode"></a>
88
+ <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/OpenCode-22C55E?style=for-the-badge&logo=gnometerminal&logoColor=white" alt="OpenCode"></a>&nbsp;
89
+ <a href="#install-and-see-savings-in-60-seconds"><img src="https://img.shields.io/badge/Tabnine-4B32C3?style=for-the-badge&logo=tabnine&logoColor=white" alt="Tabnine"></a>
35
90
  </p>
36
91
 
37
92
  <p align="center">
@@ -105,6 +160,7 @@ Restart your editor. Done. Every question now hits the index instead of re-readi
105
160
  | Gemini CLI | `.gemini/settings.json` | `GEMINI.md` |
106
161
  | OpenAI Codex | `~/.codex/config.toml` (user-global, per-project section) | |
107
162
  | OpenCode | `opencode.json` | |
163
+ | Tabnine | `.tabnine/agent/settings.json` | `TABNINE.md` |
108
164
 
109
165
  Multiple editors in the same project? All get configured in one command.
110
166
 
@@ -147,7 +203,9 @@ With CCE: context_search "payment flow" = 800 tokens
147
203
 
148
204
  We benchmarked CCE against [FastAPI](https://github.com/fastapi/fastapi) (53 source files, 180K tokens) with 20 real coding questions. No cherry-picking, no synthetic queries.
149
205
 
150
- **Methodology:** For each query, "without CCE" means reading the full content of every file the query touches. "With CCE" means the relevant chunks after compression. This is conservative (agents often read more files than needed).
206
+ **Methodology:** For each query, "without CCE" means reading the full content of every file the query touches. "With CCE" means the relevant chunks after compression.
207
+
208
+ **Important baseline note:** The 94% number is measured against full-file reads, not against what Claude Code actually does. In practice, Claude Code already uses grep, partial file reads, and targeted tools, so the real-world savings compared to normal Claude Code behavior will be lower than 94%. We use full-file as the baseline because it's reproducible and deterministic (no agent behavior variability). The benchmark measures CCE's retrieval efficiency, not a head-to-head comparison with Claude Code's built-in exploration.
151
209
 
152
210
  | Metric | Result |
153
211
  |--------|--------|
@@ -167,14 +225,25 @@ We benchmarked CCE against [FastAPI](https://github.com/fastapi/fastapi) (53 sou
167
225
 
168
226
  Output compression (reducing Claude's reply length) provides additional savings (~65% estimated) but is not included in the headline number above.
169
227
 
228
+ ### Multi-language benchmarks
229
+
230
+ | Repo | Language | Files | Retrieval savings | Recall@10 |
231
+ |------|----------|-------|-------------------|-----------|
232
+ | [FastAPI](benchmarks/results/fastapi.md) | Python | 53 | **94%** | 0.90 |
233
+ | [chi](benchmarks/results/chi.md) | Go | 94 | **76%** | 0.67 |
234
+ | [fiber](benchmarks/results/fiber.md) | Go (monorepo) | 396 | **93%** | 0.07 |
235
+
236
+ Go's shorter files reduce the retrieval headroom (smaller baseline). Monorepos dilute recall at top-10 (fiber). Middleware queries with one-feature-per-file hit R=1.00 consistently.
237
+
170
238
  **Reproduce it yourself:**
171
239
 
172
240
  ```bash
173
241
  pip install code-context-engine
174
242
  python benchmarks/run_benchmark.py --repo https://github.com/fastapi/fastapi.git --source-dir fastapi
243
+ python benchmarks/run_benchmark.py --repo https://github.com/go-chi/chi.git --source-dir .
175
244
  ```
176
245
 
177
- Full results in [`benchmarks/results/fastapi.md`](benchmarks/results/fastapi.md). Queries and methodology in [`benchmarks/`](benchmarks/).
246
+ Full results in [`benchmarks/results/`](benchmarks/results/). Queries and methodology in [`benchmarks/`](benchmarks/).
178
247
 
179
248
  ---
180
249
 
@@ -366,7 +435,7 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
366
435
 
367
436
  ## Supported Languages
368
437
 
369
- **AST-aware chunking (10 extensions):**
438
+ **AST-aware chunking (tree-sitter parsed, 10 extensions):**
370
439
 
371
440
  | Language | Extensions |
372
441
  |----------|-----------|
@@ -378,7 +447,20 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
378
447
  | Rust | `.rs` |
379
448
  | Java | `.java` |
380
449
 
381
- **Fallback chunking:** All other text files (Markdown, YAML, config, etc.) chunked by line range.
450
+ **Language-aware fallback chunking (40+ extensions):**
451
+
452
+ | Category | Languages |
453
+ |----------|-----------|
454
+ | Web | HTML, CSS, SCSS, LESS, Vue, Svelte |
455
+ | Systems | C, C++, C#, Zig, Nim |
456
+ | Mobile | Swift, Kotlin, Dart |
457
+ | Functional | Haskell, Scala, Clojure, Elixir, Erlang, F# |
458
+ | Scripting | Ruby, Perl, Lua, R, Bash/Zsh |
459
+ | Data/Config | JSON, YAML, TOML, XML, SQL, GraphQL, Protobuf |
460
+ | DevOps | Terraform, HCL, Dockerfile |
461
+ | Docs | Markdown |
462
+
463
+ All other text files are chunked by line range. Binary files are skipped.
382
464
 
383
465
  ---
384
466
 
@@ -386,18 +468,21 @@ No GPU required. Embedding model runs on CPU via ONNX Runtime.
386
468
 
387
469
  | Page | Content |
388
470
  |------|---------|
471
+ | [What is CCE? (Complete Guide)](https://elara-labs.github.io/code-context-engine/blog/what-is-code-context-engine.html) | Setup, tools, how it works, FAQ |
472
+ | [How to Save Claude Code Tokens](https://elara-labs.github.io/code-context-engine/blog/save-claude-code-tokens.html) | Cost breakdown and savings guide |
473
+ | [Benchmark Deep Dive](https://elara-labs.github.io/code-context-engine/blog/benchmark-fastapi.html) | Full FastAPI benchmark methodology |
474
+ | [Comparison with Alternatives](https://elara-labs.github.io/code-context-engine/comparison.html) | CCE vs Cursor, Aider, Continue, Greptile |
389
475
  | [Examples](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Examples.md) | Real conversations with Claude |
390
476
  | [How It Works](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/How-It-Works.md) | Full 9-stage pipeline |
391
477
  | [CLI Reference](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/CLI-Reference.md) | Every command with output |
392
478
  | [Configuration](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Configuration.md) | All config options |
393
- | [Project Commands](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Project-Commands.md) | Rules and preferences for Claude |
394
- | [Tech Stack](https://github.com/elara-labs/code-context-engine/blob/main/docs/wiki/Tech-Stack.md) | Every library and why |
395
479
 
396
480
  ---
397
481
 
398
482
  ## Roadmap
399
483
 
400
- - [ ] Multi-repo benchmarks (Django, Express, a Go project)
484
+ - [x] Multi-repo benchmarks (FastAPI, chi, fiber)
485
+ - [ ] More benchmarks (Django, Express)
401
486
  - [ ] Tree-sitter support for C, C++, Ruby, Swift, Kotlin
402
487
  - [ ] Docker support for remote mode
403
488
 
@@ -47,6 +47,7 @@ src/context_engine/integration/session_capture.py
47
47
  src/context_engine/memory/__init__.py
48
48
  src/context_engine/memory/compressor.py
49
49
  src/context_engine/memory/db.py
50
+ src/context_engine/memory/decision_extractor.py
50
51
  src/context_engine/memory/extractive.py
51
52
  src/context_engine/memory/grammar.py
52
53
  src/context_engine/memory/hook_installer.py
@@ -25,5 +25,6 @@ pytest-asyncio>=0.23
25
25
  pytest-aiohttp>=1.0
26
26
  pytest-cov>=5.0
27
27
  pytest-xdist>=3.5
28
+ ruff>=0.13
28
29
 
29
30
  [http]