codebase-retrieval-context-engine 2.0.5__tar.gz → 2.0.6__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 (75) hide show
  1. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/PKG-INFO +1 -1
  2. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/__init__.py +1 -1
  3. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/formatter.py +36 -4
  4. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/pyproject.toml +1 -1
  5. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/.env.example +0 -0
  6. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/.github/workflows/ci.yml +0 -0
  7. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/.gitignore +0 -0
  8. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/CONTRIBUTING.md +0 -0
  9. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/LICENSE +0 -0
  10. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/README.backup.md +0 -0
  11. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/README.md +0 -0
  12. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/assets/corbell_ui.png +0 -0
  13. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/assets/logo.png +0 -0
  14. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/assets/mermaid_diagram.png +0 -0
  15. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/assets/star_history.png +0 -0
  16. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/cli/__init__.py +0 -0
  17. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/cli/commands/__init__.py +0 -0
  18. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/cli/commands/debug.py +0 -0
  19. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/cli/commands/index.py +0 -0
  20. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/cli/commands/query.py +0 -0
  21. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/cli/main.py +0 -0
  22. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/__init__.py +0 -0
  23. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/constants.py +0 -0
  24. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/__init__.py +0 -0
  25. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/base.py +0 -0
  26. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/extractor.py +0 -0
  27. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/factory.py +0 -0
  28. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/model.py +0 -0
  29. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/search_cache.py +0 -0
  30. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/embeddings/sqlite_store.py +0 -0
  31. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/gitignore.py +0 -0
  32. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/__init__.py +0 -0
  33. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/builder.py +0 -0
  34. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/method_graph.py +0 -0
  35. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/providers/__init__.py +0 -0
  36. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/providers/aws_patterns.py +0 -0
  37. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/providers/azure_patterns.py +0 -0
  38. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/providers/gcp_patterns.py +0 -0
  39. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/schema.py +0 -0
  40. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/graph/sqlite_store.py +0 -0
  41. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/indexing/__init__.py +0 -0
  42. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/indexing/builder.py +0 -0
  43. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/indexing/lock.py +0 -0
  44. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/indexing/tracker.py +0 -0
  45. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/llm_client.py +0 -0
  46. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/mcp/__init__.py +0 -0
  47. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/mcp/server.py +0 -0
  48. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/__init__.py +0 -0
  49. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/diagnostics.py +0 -0
  50. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/engine.py +0 -0
  51. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/enhancer.py +0 -0
  52. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/graph_expander.py +0 -0
  53. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/merger.py +0 -0
  54. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/query/reranker.py +0 -0
  55. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/corbell/core/workspace.py +0 -0
  56. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/graph.json +0 -0
  57. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/requirements.txt +0 -0
  58. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/test_regex.py +0 -0
  59. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/__init__.py +0 -0
  60. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/conftest.py +0 -0
  61. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_builder.py +0 -0
  62. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_embeddings.py +0 -0
  63. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_graph_expander.py +0 -0
  64. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_graph_sqlite_store.py +0 -0
  65. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_llm_client.py +0 -0
  66. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_mcp.py +0 -0
  67. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_merger.py +0 -0
  68. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_method_graph_improvements.py +0 -0
  69. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_new_language_support.py +0 -0
  70. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_query_engine.py +0 -0
  71. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_reranker.py +0 -0
  72. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_search_cache.py +0 -0
  73. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_tracker.py +0 -0
  74. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/tests/test_workspace.py +0 -0
  75. {codebase_retrieval_context_engine-2.0.5 → codebase_retrieval_context_engine-2.0.6}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codebase-retrieval-context-engine
3
- Version: 2.0.5
3
+ Version: 2.0.6
4
4
  Summary: Code retrieval engine — hybrid embedding + graph search for LLM context injection.
5
5
  Project-URL: Homepage, https://github.com/nullmastermind/local-context-engine
6
6
  Project-URL: Repository, https://github.com/nullmastermind/local-context-engine
@@ -2,5 +2,5 @@
2
2
  Corbell — Code retrieval engine for LLM context injection.
3
3
  """
4
4
 
5
- __version__ = "2.0.5"
5
+ __version__ = "2.0.6"
6
6
  __all__ = ["__version__"]
@@ -12,6 +12,8 @@ if TYPE_CHECKING:
12
12
  def format_results(
13
13
  chunks: List["ScoredChunk"],
14
14
  repo_paths: Dict[str, str],
15
+ max_output_bytes: int = 80_000,
16
+ max_line_chars: int = 1000,
15
17
  ) -> str:
16
18
  """Format scored chunks as annotated code blocks for LLM context injection.
17
19
 
@@ -26,16 +28,24 @@ def format_results(
26
28
  chunks: Scored chunks to format (pre-sorted by score descending).
27
29
  repo_paths: Mapping of repo_id -> absolute repo path string.
28
30
  Used to resolve relative file paths to absolute paths.
31
+ max_output_bytes: Maximum total output size in bytes. Truncation stops at the
32
+ last complete chunk boundary that fits. Defaults to 80 000 (~20K tokens).
33
+ max_line_chars: Maximum characters per source line before inline truncation.
34
+ Defaults to 1000.
29
35
 
30
36
  Returns:
31
- Formatted string with all chunks, separated by blank lines.
37
+ Formatted string with all chunks, separated by blank lines. If the output
38
+ exceeds max_output_bytes, a trailing note reports how many results were shown.
32
39
  """
33
40
  if not chunks:
34
41
  return ""
35
42
 
43
+ total = len(chunks)
36
44
  blocks: List[str] = []
45
+ accumulated_bytes = 0
46
+ truncation_footer = ""
37
47
 
38
- for chunk in chunks:
48
+ for n, chunk in enumerate(chunks):
39
49
  abs_path = _resolve_absolute_path(chunk.file_path, chunk.repo_id, repo_paths)
40
50
 
41
51
  # Read the actual lines for this chunk range
@@ -47,16 +57,38 @@ def format_results(
47
57
  # Build the header: path#Lstart-end
48
58
  header = f"{abs_path}#L{chunk.start_line}-{chunk.end_line}"
49
59
 
50
- # Build numbered lines
60
+ # Build numbered lines with per-line truncation
51
61
  numbered_lines: List[str] = []
52
62
  for i, line in enumerate(lines):
53
63
  line_num = chunk.start_line + i
64
+ if len(line) > max_line_chars:
65
+ line = line[:max_line_chars] + " [truncated — use Read tool for full content]"
54
66
  numbered_lines.append(f"{line_num}: {line}")
55
67
 
56
68
  block = header + "\n" + "\n".join(numbered_lines)
69
+
70
+ # Per-output size gate: check if adding this block would exceed the limit
71
+ # Account for the separator ("\n\n") between blocks
72
+ separator_size = 2 if blocks else 0
73
+ block_bytes = len(block.encode("utf-8"))
74
+ if accumulated_bytes + separator_size + block_bytes > max_output_bytes:
75
+ # Collect remaining chunk headers so the agent knows what else is relevant
76
+ remaining_headers: List[str] = []
77
+ for remaining in chunks[n:]:
78
+ rp = _resolve_absolute_path(remaining.file_path, remaining.repo_id, repo_paths)
79
+ remaining_headers.append(f"{rp}#L{remaining.start_line}-{remaining.end_line}")
80
+ truncation_footer = (
81
+ f"\n\n[Showing {n}/{total} results. "
82
+ f"Remaining (use Read tool):\n"
83
+ + "\n".join(remaining_headers)
84
+ + "]"
85
+ )
86
+ break
87
+
57
88
  blocks.append(block)
89
+ accumulated_bytes += separator_size + block_bytes
58
90
 
59
- return "\n\n".join(blocks)
91
+ return "\n\n".join(blocks) + truncation_footer
60
92
 
61
93
 
62
94
  def _resolve_absolute_path(
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codebase-retrieval-context-engine"
7
- version = "2.0.5"
7
+ version = "2.0.6"
8
8
  description = "Code retrieval engine — hybrid embedding + graph search for LLM context injection."
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}