code-context-control 2.53.0__py3-none-any.whl → 2.55.0__py3-none-any.whl

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.
cli/c3.py CHANGED
@@ -92,7 +92,7 @@ console = Console() if HAS_RICH else None
92
92
  # Config
93
93
  CONFIG_DIR = ".c3"
94
94
  CONFIG_FILE = ".c3/config.json"
95
- __version__ = "2.53.0"
95
+ __version__ = "2.55.0"
96
96
 
97
97
 
98
98
  def _command_deps() -> CommandDeps:
@@ -165,6 +165,7 @@ def _build_init_config(project_path: str) -> dict:
165
165
  "project_path": project_path,
166
166
  "version": __version__,
167
167
  "index_auto_update": True,
168
+ "index_max_files": 2000,
168
169
  "compression_mode": "smart",
169
170
  "mcp": {"mode": "direct"},
170
171
  "hybrid": deepcopy(HYBRID_DEFAULTS),
@@ -890,7 +891,7 @@ def _parse_cli_ide_arg(value: str) -> str:
890
891
  return normalized
891
892
 
892
893
 
893
- def _do_init(project_path: str, ide_name: str = None):
894
+ def _do_init(project_path: str, ide_name: str = None, no_embed: bool = False):
894
895
  """Run the core init steps (shared by new install and re-init after clear/reset)."""
895
896
  config = _build_init_config(project_path)
896
897
  save_config(config, project_path)
@@ -898,10 +899,27 @@ def _do_init(project_path: str, ide_name: str = None):
898
899
  for subdir in _C3_INIT_SUBDIRS:
899
900
  (Path(project_path) / CONFIG_DIR / subdir).mkdir(parents=True, exist_ok=True)
900
901
 
902
+ import time as _t
903
+
904
+ from cli.progress import ProgressLine
905
+
901
906
  print("Building code index...")
907
+ _prog = ProgressLine()
908
+ _t0 = _t.perf_counter()
902
909
  indexer = CodeIndex(project_path)
903
- result = indexer.build_index()
904
- print(f" Indexed {result['files_indexed']} files, {result['chunks_created']} chunks")
910
+ result = indexer.build_index(
911
+ on_progress=lambda entries, files, chunks: _prog.update(
912
+ f" scanning: {entries:,} entries | {files:,} files | {chunks:,} chunks"))
913
+ _prog.done()
914
+ entries = result.get("entries_scanned", 0)
915
+ print(f" Indexed {result['files_indexed']} files, {result['chunks_created']} chunks "
916
+ f"in {_t.perf_counter() - _t0:.1f}s ({entries:,} entries scanned)")
917
+ capped = result.get("files_capped", 0)
918
+ if capped:
919
+ total = result["files_indexed"] + capped
920
+ print(f" [!] Indexed {result['files_indexed']} of {total} candidate files "
921
+ f"(cap: index_max_files={result.get('max_files')}).")
922
+ print(" Raise index_max_files in .c3/config.json for full coverage.")
905
923
 
906
924
  # Build embedding index if Ollama is available (non-blocking on failure)
907
925
  try:
@@ -912,13 +930,24 @@ def _do_init(project_path: str, ide_name: str = None):
912
930
  ollama = OllamaClient(ollama_url)
913
931
  embed_model = config.get("embed_model", "nomic-embed-text")
914
932
  ei = EmbeddingIndex(project_path, ollama, embed_model=embed_model)
915
- if ei.ready:
933
+ if no_embed:
934
+ print(" Embedding index skipped (--no-embed)")
935
+ elif ei.probe()["ready"]:
936
+ # probe() initializes the lazy backends; checking .ready on a
937
+ # fresh instance is always False and silently skipped the build.
916
938
  print("Building embedding index...")
917
- ei_result = ei.build(indexer)
939
+ _t0 = _t.perf_counter()
940
+ _eprog = ProgressLine()
941
+ ei_result = ei.build(
942
+ indexer,
943
+ on_progress=lambda done, total, chunks: _eprog.update(
944
+ f" embedding: file {done}/{total} | {chunks:,} chunks"))
945
+ _eprog.done()
918
946
  print(f" Embedded {ei_result.get('chunks_embedded', 0)} chunks "
919
- f"({ei_result.get('files_processed', 0)} files)")
947
+ f"({ei_result.get('files_processed', 0)} files) "
948
+ f"in {_t.perf_counter() - _t0:.1f}s")
920
949
  else:
921
- print(" Embedding index skipped (Ollama not available or model not pulled)")
950
+ print(f" Embedding index skipped ({ei.unavailable_reason()})")
922
951
  except Exception:
923
952
  _log.debug("Embedding index build failed", exc_info=True)
924
953
 
@@ -926,15 +955,22 @@ def _do_init(project_path: str, ide_name: str = None):
926
955
  try:
927
956
  from services.doc_index import DocIndex
928
957
  print("Building doc index...")
958
+ _t0 = _t.perf_counter()
959
+ _dprog = ProgressLine()
929
960
  di = DocIndex(project_path)
930
- di_result = di.build()
931
- print(f" Indexed {di_result['docs_indexed']} docs, {di_result['chunks_created']} chunks")
961
+ di_result = di.build(
962
+ on_progress=lambda done, total: _dprog.update(
963
+ f" docs: {done}/{total}"))
964
+ _dprog.done()
965
+ print(f" Indexed {di_result['docs_indexed']} docs, "
966
+ f"{di_result['chunks_created']} chunks in {_t.perf_counter() - _t0:.1f}s")
932
967
  except Exception:
933
968
  _log.debug("Doc index build failed", exc_info=True)
934
969
 
935
970
  print("Building compression dictionary...")
936
971
  protocol = CompressionProtocol(project_path)
937
- new_terms = protocol.build_project_dictionary()
972
+ # Mine the in-memory index instead of re-reading the whole tree.
973
+ new_terms = protocol.build_project_dictionary(code_index=indexer)
938
974
  print(f" Added {len(new_terms)} project-specific terms")
939
975
 
940
976
  from core.ide import detect_ide, load_ide_config
@@ -966,11 +1002,12 @@ def cmd_init(args):
966
1002
  if requested_ide != "auto":
967
1003
  requested_ide = normalize_ide_name(requested_ide)
968
1004
  git_requested = getattr(args, "git", False)
1005
+ no_embed = bool(getattr(args, "no_embed", False))
969
1006
 
970
1007
  # ── Brand-new install ──────────────────────────────────────
971
1008
  if not c3_dir.exists() or not (c3_dir / "config.json").exists():
972
1009
  print_header(f"Initializing C3 for: {project_path}")
973
- _do_init(project_path, ide_name=requested_ide)
1010
+ _do_init(project_path, ide_name=requested_ide, no_embed=no_embed)
974
1011
  try:
975
1012
  from services.project_manager import ProjectManager
976
1013
  ProjectManager().add_project(project_path)
@@ -1123,7 +1160,7 @@ def cmd_init(args):
1123
1160
  ti_manifest = c3_dir / "transcript_index" / "manifest.json"
1124
1161
  if ti_manifest.exists():
1125
1162
  ti_manifest.write_text("{}", encoding="utf-8")
1126
- _do_init(project_path, ide_name=requested_ide)
1163
+ _do_init(project_path, ide_name=requested_ide, no_embed=no_embed)
1127
1164
  if git_requested:
1128
1165
  _init_local_git_repo(project_path)
1129
1166
  _run_install_mcp(project_path, requested_ide, mcp_mode=getattr(args, "mcp_mode", "direct"), banner="Updating MCP tools...")
@@ -1152,7 +1189,7 @@ def cmd_init(args):
1152
1189
  # ── Non-interactive (--force) ──────────────────────────────
1153
1190
  if getattr(args, "force", False):
1154
1191
  print("\n[--force] Applying update...")
1155
- _do_init(project_path, ide_name=requested_ide)
1192
+ _do_init(project_path, ide_name=requested_ide, no_embed=no_embed)
1156
1193
  if git_requested:
1157
1194
  _init_local_git_repo(project_path)
1158
1195
  _run_install_mcp(project_path, requested_ide, mcp_mode=getattr(args, "mcp_mode", "direct"), banner="Updating MCP tools...")
@@ -1176,7 +1213,7 @@ def cmd_init(args):
1176
1213
 
1177
1214
  if selected.startswith("Update"):
1178
1215
  print()
1179
- _do_init(project_path, ide_name=requested_ide)
1216
+ _do_init(project_path, ide_name=requested_ide, no_embed=no_embed)
1180
1217
  if git_requested:
1181
1218
  _init_local_git_repo(project_path)
1182
1219
  _prompt_install_mcp(project_path, requested_ide, default_mode=getattr(args, "mcp_mode", "direct"), banner="Updating MCP tools...")
@@ -1192,7 +1229,7 @@ def cmd_init(args):
1192
1229
  shutil.rmtree(target)
1193
1230
  print(f" Removed .c3/{subdir}/")
1194
1231
  print()
1195
- _do_init(project_path, ide_name=requested_ide)
1232
+ _do_init(project_path, ide_name=requested_ide, no_embed=no_embed)
1196
1233
  if git_requested:
1197
1234
  _init_local_git_repo(project_path)
1198
1235
  _prompt_install_mcp(project_path, requested_ide, default_mode=getattr(args, "mcp_mode", "direct"), banner="Updating MCP tools...")
@@ -1209,7 +1246,7 @@ def cmd_init(args):
1209
1246
  shutil.rmtree(c3_dir)
1210
1247
  print(" Deleted .c3/")
1211
1248
  print()
1212
- _do_init(project_path, ide_name=requested_ide)
1249
+ _do_init(project_path, ide_name=requested_ide, no_embed=no_embed)
1213
1250
  if git_requested:
1214
1251
  _init_local_git_repo(project_path)
1215
1252
  _prompt_install_mcp(project_path, requested_ide, default_mode=getattr(args, "mcp_mode", "direct"), banner="Re-installing MCP tools...")
cli/commands/parser.py CHANGED
@@ -24,6 +24,7 @@ def build_parser(version: str, parse_cli_ide_arg):
24
24
  p_init.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity}", help="Target IDE for MCP config (default: auto-detect)")
25
25
  p_init.add_argument("--mcp-mode", choices=["direct", "proxy"], default="direct", help="Default MCP mode if install is selected during init (default: direct)")
26
26
  p_init.add_argument("--git", action="store_true", help="Initialize a local Git repository during init/update")
27
+ p_init.add_argument("--no-embed", action="store_true", help="Skip building the semantic embedding index during init")
27
28
  p_init.add_argument("--permissions", choices=["read-only", "c3-strict", "standard", "permissive"], default=None, help="Apply Claude Code permission tier (Claude Code only, used with --force)")
28
29
  p_init.add_argument("--include-mcp-wildcard", action="store_true", help="Add mcp__* wildcard so non-C3 MCP servers don't prompt per-call")
29
30
 
cli/hub_server.py CHANGED
@@ -1027,8 +1027,10 @@ def api_run_component():
1027
1027
  ollama = OllamaClient(ollama_url)
1028
1028
  embed_model = cfg.get("embed_model", "nomic-embed-text")
1029
1029
  ei = EmbeddingIndex(resolved, ollama, embed_model=embed_model)
1030
- if not ei.ready:
1031
- return jsonify({"success": True, "output": "Embedding index skipped (Ollama not available or model not pulled)."})
1030
+ # probe() initializes lazy backends; a fresh instance's .ready
1031
+ # is always False and would skip the build unconditionally.
1032
+ if not ei.probe()["ready"]:
1033
+ return jsonify({"success": True, "output": f"Embedding index skipped ({ei.unavailable_reason()})."})
1032
1034
  indexer = CodeIndex(resolved)
1033
1035
  if not indexer.chunks:
1034
1036
  indexer._load_index()
cli/progress.py ADDED
@@ -0,0 +1,49 @@
1
+ """
2
+ Single-line TTY progress for long CLI phases (index/embedding builds).
3
+
4
+ Quiet when stdout is piped - CI logs and command substitutions see only
5
+ the final summary lines, never carriage-return spam.
6
+ """
7
+ import sys
8
+ import time
9
+
10
+
11
+ class ProgressLine:
12
+ """Rewrites one status line in place; time-throttled; TTY-only."""
13
+
14
+ def __init__(self, stream=None, min_interval: float = 0.1):
15
+ self.stream = stream if stream is not None else sys.stdout
16
+ self.min_interval = min_interval
17
+ self._last = 0.0
18
+ self._width = 0
19
+ try:
20
+ self._tty = bool(self.stream.isatty())
21
+ except Exception:
22
+ self._tty = False
23
+
24
+ def update(self, text: str) -> None:
25
+ if not self._tty:
26
+ return
27
+ now = time.monotonic()
28
+ if now - self._last < self.min_interval:
29
+ return
30
+ self._last = now
31
+ pad = ' ' * max(0, self._width - len(text))
32
+ try:
33
+ self.stream.write('\r' + text + pad)
34
+ self.stream.flush()
35
+ except Exception:
36
+ self._tty = False
37
+ return
38
+ self._width = len(text)
39
+
40
+ def done(self) -> None:
41
+ """Clear the in-place line so the following prints start clean."""
42
+ if not self._tty or not self._width:
43
+ return
44
+ try:
45
+ self.stream.write('\r' + ' ' * self._width + '\r')
46
+ self.stream.flush()
47
+ except Exception:
48
+ pass
49
+ self._width = 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-control
3
- Version: 2.53.0
3
+ Version: 2.55.0
4
4
  Summary: Local code-intelligence layer for AI coding tools (Claude Code, Codex, Copilot, Cursor, Antigravity). Retrieve less, read less, edit safer — and version the configs that shape your agent (CLAUDE.md, skills, hooks, MCP).
5
5
  Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  cli/__init__.py,sha256=ec66drCZGNMRU4V6ov0zVhYZph1us12Vn8OvG_LJyRY,22
2
2
  cli/_hook_utils.py,sha256=tJ4ZmXD5Y-JjFWb0uoR7ycYklYFUMnnjF2G7BO-wyBI,12600
3
- cli/c3.py,sha256=ziZSc1n6ksQL_asFvZ4ErsQbT29DMA-WYh324AwTOII,307360
3
+ cli/c3.py,sha256=vH0SuIP9w6imPbFVi8y-veKrAKfNYrYC0KYiA8ydb54,309220
4
4
  cli/docs.html,sha256=bNymSz7LatnWHjxSXL92QSUtGvB3jBzNHbOV-bRpAOo,142507
5
5
  cli/edits.html,sha256=UjAhoCmBmQ89cklGvJqzC6eyNP2tc8H6T-e01DVkLvE,43418
6
6
  cli/hook_artifact.py,sha256=Se1CNBfoBFyvJQlRmYdNtdRXIkQp9zaF0O6ndRMo7ts,2198
@@ -18,17 +18,18 @@ cli/hook_read.py,sha256=ZWZldgqGSNz78COhlgETQ7yxdOW5vWIIHUet9gZKhxk,8176
18
18
  cli/hook_session_stats.py,sha256=hZiX0r1SLOstu1PXvygWae0cIqHCcC3mb0SbFL6nCic,2083
19
19
  cli/hook_terse_advisor.py,sha256=W_zaTfX2akgX-ifuUTsLu2H1atM8XmWt6jpPoeU7Pm0,6252
20
20
  cli/hub.html,sha256=Hl-XPZGT1mMiKrbX9c5OsEw6mXEumwIB3vp1WlWaplM,183966
21
- cli/hub_server.py,sha256=fZUw32ZNUrQgB9Jo82JSfPmDq02kFOcOwxgbtXFgLq0,105299
21
+ cli/hub_server.py,sha256=5y6jIs2qaz5HoBdLXBl2yPtqIZ2VM17rJ4bWUOfUcSs,105443
22
22
  cli/hub_ui.html,sha256=nnGqWhWGCLfNisGUnoAlQFcBr6wPNsq-AEOR7uFtVkE,2942
23
23
  cli/mcp_proxy.py,sha256=92htuT-p0j-cDTbyqlIJpGoQ85_Aw7UuB8L_Toi_u20,17511
24
24
  cli/mcp_server.py,sha256=YgzI2U1jW-ax9HCCVUwXeikMHDMlS4Qq-RdhnQuTvt4,40898
25
+ cli/progress.py,sha256=qTkNy0howOD3hXraMo4ok3dYTpBW5yG_tenKfF4UDM0,1470
25
26
  cli/server.py,sha256=WOEPgptkJSVtS25IwrPdOMdbKOh79Sm6-vdQlTOk-sA,136012
26
27
  cli/ui.html,sha256=xcdt74nlFEXx-0Bx6-Okw-WSVZPAXL0iukxU0ytI6CA,5694
27
28
  cli/ui_legacy.html,sha256=cI8tC6RKmE2NIJOcsu7CY-zT4VznjcbD6NTjxb_fvUY,378460
28
29
  cli/ui_nano.html,sha256=UAwQ6bbTOXAoGq191AZ7slhngR9edJSa3IhqpynveDg,27740
29
30
  cli/commands/__init__.py,sha256=0Z8MABNzwSFJGT4Xv9R5AJVR8XxraTsuVTz5b0bShmo,38
30
31
  cli/commands/common.py,sha256=fHZWzkd4OLl3vPWTTgaI5vaqMi3Ma3XqAu1Ds_-51_4,11299
31
- cli/commands/parser.py,sha256=dutcYYE7qImgZ1ZouobTRe2TyUMHii_r56vyQA7UVOw,25489
32
+ cli/commands/parser.py,sha256=0ym7T3xjsQPhj2jm0_aUHCQGx6Whcp1m50gH5JDSFHw,25611
32
33
  cli/guide/bitbucket.html,sha256=9vN1VPLmvTLrkqDSrqKmuy7z3BHEmQusY1jkAG0FjnI,33477
33
34
  cli/guide/getting-started.html,sha256=5iS-_iAP1PboU9pFbMsfh8C9Du9usqOfIyawOc-X4Hg,19070
34
35
  cli/guide/index.html,sha256=mUDUBX590TTappvrKT7_eXi0P8G-3YvHjGk9pCcwWzQ,21350
@@ -94,7 +95,7 @@ cli/ui/components/sessions.js,sha256=FIKtil76B8tCkAmcFV7hlj6GQ_DCJK2jCzvEmdK7NBE
94
95
  cli/ui/components/settings.js,sha256=ATbAjBlVIwCNpxq7s191b49a_INQV38iwmySqtJLYwY,79066
95
96
  cli/ui/components/sidebar.js,sha256=cAY_jwYB-o1X_wWn__VXlG4IegVObuE3NmVsuFWqxtg,7417
96
97
  cli/ui/components/tasks.js,sha256=vyKQ3uwoppMwvdEaHlhWXW4oWcAisx4NveqzMhsYqHo,38438
97
- code_context_control-2.53.0.dist-info/licenses/LICENSE,sha256=l8Kh5QCNWNvR6kIt8L0BUZvc2LAFiHv2c-FnsGnUZf4,11301
98
+ code_context_control-2.55.0.dist-info/licenses/LICENSE,sha256=l8Kh5QCNWNvR6kIt8L0BUZvc2LAFiHv2c-FnsGnUZf4,11301
98
99
  core/__init__.py,sha256=TSDCEcM4V7gcZVM3w2ykJaqEUch4Dkon-rivV17T73s,2501
99
100
  core/config.py,sha256=NUU1DuespWRotlJsv59CNnLiWTR4Bc7ysmD1UFA76RE,16429
100
101
  core/ide.py,sha256=V6VVMVsFdmmcsMyxikjQp7z9xa42CWiHKS-ya-MAcG4,6172
@@ -109,7 +110,7 @@ oracle/services/__init__.py,sha256=Nb4POd1_YIwLVYsGfr-DiK-iKTelkU0fh9m7wjeLQHA,2
109
110
  oracle/services/activity_reporter.py,sha256=ZAxNFyUy7QRP28anQLRbKEwm5SGG97KIQYFQDLjYqlM,11729
110
111
  oracle/services/api_auth.py,sha256=1PW3pG--1DJb_F6qMhP3gBTYHxxPE2bsHmVmIhC81Y8,3566
111
112
  oracle/services/c3_bridge.py,sha256=RqSw1tOoUDXA21fKDHmZ7s7qrIj3jiDYq8j8OvbxshA,17919
112
- oracle/services/chat_engine.py,sha256=y_1kQL4jvUw86R1lYWcvDGVyPk-YhG2Uj6Yj26bBrrM,66119
113
+ oracle/services/chat_engine.py,sha256=zvjyFsXGwqRHsvggBwQ6L0hcOovQe0AKyOy2ZdOU0No,55974
113
114
  oracle/services/chat_store.py,sha256=mizKwDyFGESKh63V-XgyNd3jQVrN2JCQc-7u8z3_1F4,6252
114
115
  oracle/services/cross_memory.py,sha256=F8JeYkEFSwQL3iGS9KV1onaMSFj3opr6f3nCxwvznV0,5484
115
116
  oracle/services/federated_graph.py,sha256=I9FWedcht6-FU2hoIlMHlXyjpwrspKueIN-jEYek6vg,19947
@@ -151,21 +152,21 @@ services/benchmark_dashboard.py,sha256=iR-DnqnoKbqHMJ4d-ZkIvJBYfzwTa7r-jzO6j2BYD
151
152
  services/bitbucket_client.py,sha256=JByovvtVZ6F4NcU611KVuTgKlT1rIsX2A2VlBDfvRV8,17509
152
153
  services/bitbucket_credentials.py,sha256=2qLA9pQMol4y95y4DJMNBsBBPUsJQCKbLFo2iiCnfvI,7364
153
154
  services/circuit_breaker.py,sha256=ES6PpjL40gfDhtK88GeS6GFzsz5EOEEkZsB-DzX_tbw,3179
154
- services/claude_md.py,sha256=vI2at-7DEsnRXYcSaE88uNTxCSxzhy8M77AM20VlYRc,42643
155
- services/compressor.py,sha256=urGF7CYv9BUWUhcf3tY64k-LCwE-LOq44BMl_NIMzU4,33337
155
+ services/claude_md.py,sha256=-OwAv8cQRY8_i6tSsK5X-9rayZSJN_rrZMMjqJf3oEM,42728
156
+ services/compressor.py,sha256=AK31TqHFpkOD_Lqbp9aEOkOx7zENUwpsQHQ9B2imEHo,33081
156
157
  services/context_snapshot.py,sha256=2f_bxY3xX4ZC653ncYno8YSeSTFSavwBjrorytHA0Ns,16879
157
158
  services/conversation_store.py,sha256=-E2H6f9pMSOHiBjsq7tFUjrFAwWYExf7LJkibi5MRMA,35650
158
- services/doc_index.py,sha256=LTMVFsxQY5pPynGuu787433xBKMhE8KYbOrbLHooZqs,19038
159
+ services/doc_index.py,sha256=ZEQD1kyGCAMm9AY4Kpi1zDWJTul-cAcAdi_4Md43Hpw,19205
159
160
  services/e2e_benchmark.py,sha256=4pDXkOFjq5b2ZwDvMK0CWdUXQli5OE4cOh_OJs7W36c,132970
160
161
  services/e2e_evaluator.py,sha256=FsB4vMzcFUcmicfIwRtA8JZ_XeMpuk2_-86F2iVNEDc,17783
161
162
  services/e2e_tasks.py,sha256=Ln5VbGDIcS3NY3aml5ERbgjfjLxEslmRZ8AyaYxpWEo,34524
162
163
  services/edit_ledger.py,sha256=LbFDAnqAWKXsc5pUdJ8zSk5-1MNUwJduK3MO8_HUm5E,29018
163
- services/embedding_index.py,sha256=-ThnMbyMSnmMN0-iKCsMYn9hXTDlGbk7Cm75h5NMadc,14129
164
+ services/embedding_index.py,sha256=WVAmQkpvwbu2GaQfg4iPWyWiW8zQNN0ldQAo9ibsyBc,15908
164
165
  services/error_reporting.py,sha256=HZ3ru8i5RLf8nq2R4iRnTs5sm1blUxknSbv5hdxuxs0,4139
165
166
  services/file_memory.py,sha256=ero1EY_42z0ORzZaOyvRK7Pc_OYxvgijf4BaKhEBPuY,34241
166
167
  services/git_context.py,sha256=FFdA8Y46op4DYsUnZsXLTqxIjgxb0q_d-hkFTbosC8Q,9518
167
168
  services/hub_service.py,sha256=Ta2ExJP1sePxb7zcHooroYXJKsylm5Ea8vQvts6-cAw,21876
168
- services/indexer.py,sha256=EIX7hu1x-hQIHiiUwG8R7bklZgWZu6BH5SuQsgvyyNs,27874
169
+ services/indexer.py,sha256=00y47xufHFEotljPDH4RBbWcqAHmCpTouafiggGcP7I,29511
169
170
  services/memory.py,sha256=UxlZ3BwYfTlq6Rlj5RPhNOw42bds-dSe5KAdA4TXBLE,13150
170
171
  services/memory_consolidator.py,sha256=hHMps-01cbbHSI-A1LEKCo3k2PoLOa8a7-vyYEf8DUs,19679
171
172
  services/memory_distiller.py,sha256=-07rtR3XhiZqKCUCFOcuAktfTJIbtcNqMj7rM35WXKg,26081
@@ -182,16 +183,17 @@ services/output_filter.py,sha256=lknQHs38JlRtXU4Ogoru6sveNokSKBQPfZXhf-fE0xM,217
182
183
  services/parser.py,sha256=CPoIN1FmX7kK-55FnC3jvRy3NLjlnf1armTaD6o7GBg,55203
183
184
  services/project_manager.py,sha256=LaNWqBeVMx6wcB6iiOQyRWSWhS-JXzfDApJmHFmTCy8,36477
184
185
  services/project_runtime.py,sha256=yyftX48BFjq4B2KcR4KGszDAAa4xR6gn6j0SgTyro1s,11603
185
- services/protocol.py,sha256=E0xxs43j-YSOBWalKHbX_wwqphQgDjqUjyyvTW0s6II,12247
186
+ services/protocol.py,sha256=XyUGjTHD9Zouw94IEqwH667pQ1TlroleLzlM3GRlEGk,12843
186
187
  services/proxy_state.py,sha256=u5rd0k6CrOsywZA8FpRu_hMLwhR0TAJhZjy5MdWbCGc,6107
187
188
  services/retention.py,sha256=I2_RV233kWBBXox5rc_w-1h1aPua93o9huuPf-pJVuE,18629
188
189
  services/retrieval_broker.py,sha256=9X67VZ_6AkbAzopHuuMFKmP4CGZLnW576kjSKMenBnw,5261
189
190
  services/router.py,sha256=Cz10nx2fKTbaGn14mSBePWIDrw5rdcs_1JFYXeik084,15626
190
191
  services/runtime.py,sha256=b79gN0dFlzBO4rPaUMWier8FZFamMZlwIM3aywLmbB4,12840
192
+ services/scanner.py,sha256=1wnsH6WAoarf4L0MskRb8CBfjaF0pPw6ZYDX_4y2q3A,5985
191
193
  services/session_benchmark.py,sha256=GX3H8OwKC0X9Kk5U-vfY6Y7qq9Qaz2HwadNA7mjO8RY,105047
192
- services/session_manager.py,sha256=qUo7ool6dDWXfVgFpokIRcWqkWh10OzMcp7aZTdmTHY,51632
194
+ services/session_manager.py,sha256=cVsL45nfkAZ5P-elwLMBoesQ9QGwZsCl4ND3tQJXMMI,51838
193
195
  services/session_preloader.py,sha256=DsTAXMKVtrX9yu1sEFojYDi9-jkSAj1Ylt9JTy57Dow,9883
194
- services/subprojects.py,sha256=DxD-3f4wCrwAg7F8znbvWFJf_lizgmulVDqozKGSztI,24965
196
+ services/subprojects.py,sha256=KNA-qGVPsd7Tg92Pt_kLWMLyER2YHmdQWO44sOelTIg,25123
195
197
  services/task_store.py,sha256=IHNeLipdyWtbWYu2-3ItIDeSDI9WoMKj6YwPPc1TgW0,46487
196
198
  services/telemetry.py,sha256=KbWCe7F8lGY9DufVPWGyGFo-IBcPgWh0kd3ySJnIgFE,11377
197
199
  services/text_index.py,sha256=r3o4CobTG9jAO9PWazgbWYLY9oi_FgEJ3xwEXrF4KM0,2783
@@ -224,8 +226,8 @@ tui/screens/search_view.py,sha256=MMHjVdlk3HZSuDBSvq8IGrqv_Mh5Us6YqXQ80bcWSMk,19
224
226
  tui/screens/session_view.py,sha256=eZ1eDwHTvPOck1wCCviixtOaCxIkBT_95ytNNNriGNA,5991
225
227
  tui/screens/stats.py,sha256=p81PjzdaIv7hllb8f45-rlVe4lJZwSdIMqu7e86_u5s,6223
226
228
  tui/screens/ui_view.py,sha256=1QJCgLh2YfgWIpvzRG1KOGXYEaOYX6ojN61Azjf2oX0,2125
227
- code_context_control-2.53.0.dist-info/METADATA,sha256=MzVfgzYwfiVSTJz_uGxsENFxI-DJh1ochyB59ewxcuY,24759
228
- code_context_control-2.53.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
229
- code_context_control-2.53.0.dist-info/entry_points.txt,sha256=7kX_WUsDCF2hbXzvbNyscyaBb9AeA-DJY5v_5hN0DlU,93
230
- code_context_control-2.53.0.dist-info/top_level.txt,sha256=wRt41zBybVF3qAiNXHz9BURbkKvUvfhmWWtKMhaw6eE,29
231
- code_context_control-2.53.0.dist-info/RECORD,,
229
+ code_context_control-2.55.0.dist-info/METADATA,sha256=t426vjB6vV4mHLBpU55F_4GZtuKXvIRZ-yLYqTsVGc8,24759
230
+ code_context_control-2.55.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
231
+ code_context_control-2.55.0.dist-info/entry_points.txt,sha256=7kX_WUsDCF2hbXzvbNyscyaBb9AeA-DJY5v_5hN0DlU,93
232
+ code_context_control-2.55.0.dist-info/top_level.txt,sha256=wRt41zBybVF3qAiNXHz9BURbkKvUvfhmWWtKMhaw6eE,29
233
+ code_context_control-2.55.0.dist-info/RECORD,,