code-context-control 2.28.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/__init__.py +1 -0
- cli/_hook_utils.py +99 -0
- cli/c3.py +6152 -0
- cli/commands/__init__.py +1 -0
- cli/commands/common.py +312 -0
- cli/commands/parser.py +286 -0
- cli/docs.html +3178 -0
- cli/edits.html +878 -0
- cli/hook_auto_snapshot.py +142 -0
- cli/hook_c3_signal.py +61 -0
- cli/hook_c3read.py +116 -0
- cli/hook_edit_ledger.py +213 -0
- cli/hook_edit_unlock.py +170 -0
- cli/hook_filter.py +130 -0
- cli/hook_ghost_files.py +238 -0
- cli/hook_pretool_enforce.py +334 -0
- cli/hook_read.py +200 -0
- cli/hook_session_stats.py +62 -0
- cli/hook_terse_advisor.py +190 -0
- cli/hub.html +3764 -0
- cli/hub_server.py +1619 -0
- cli/mcp_proxy.py +428 -0
- cli/mcp_server.py +660 -0
- cli/server.py +2985 -0
- cli/tools/__init__.py +4 -0
- cli/tools/_helpers.py +65 -0
- cli/tools/agent.py +1165 -0
- cli/tools/compress.py +215 -0
- cli/tools/delegate.py +1184 -0
- cli/tools/edit.py +313 -0
- cli/tools/edits.py +118 -0
- cli/tools/filter.py +285 -0
- cli/tools/impact.py +163 -0
- cli/tools/memory.py +469 -0
- cli/tools/read.py +224 -0
- cli/tools/search.py +337 -0
- cli/tools/session.py +95 -0
- cli/tools/shell.py +193 -0
- cli/tools/status.py +306 -0
- cli/tools/validate.py +310 -0
- cli/ui/api.js +36 -0
- cli/ui/app.js +207 -0
- cli/ui/components/chat.js +758 -0
- cli/ui/components/dashboard.js +689 -0
- cli/ui/components/edits.js +220 -0
- cli/ui/components/instructions.js +481 -0
- cli/ui/components/memory.js +626 -0
- cli/ui/components/sessions.js +606 -0
- cli/ui/components/settings.js +1404 -0
- cli/ui/components/sidebar.js +156 -0
- cli/ui/icons.js +51 -0
- cli/ui/shared.js +119 -0
- cli/ui/theme.js +22 -0
- cli/ui.html +168 -0
- cli/ui_legacy.html +6797 -0
- cli/ui_nano.html +503 -0
- code_context_control-2.28.0.dist-info/METADATA +248 -0
- code_context_control-2.28.0.dist-info/RECORD +150 -0
- code_context_control-2.28.0.dist-info/WHEEL +5 -0
- code_context_control-2.28.0.dist-info/entry_points.txt +4 -0
- code_context_control-2.28.0.dist-info/licenses/LICENSE +201 -0
- code_context_control-2.28.0.dist-info/top_level.txt +5 -0
- core/__init__.py +75 -0
- core/config.py +269 -0
- core/ide.py +188 -0
- oracle/__init__.py +1 -0
- oracle/config.py +75 -0
- oracle/oracle.html +3900 -0
- oracle/oracle_server.py +663 -0
- oracle/services/__init__.py +1 -0
- oracle/services/c3_bridge.py +210 -0
- oracle/services/chat_engine.py +1103 -0
- oracle/services/chat_store.py +155 -0
- oracle/services/cross_memory.py +154 -0
- oracle/services/federated_graph.py +463 -0
- oracle/services/health_checker.py +117 -0
- oracle/services/insight_engine.py +307 -0
- oracle/services/memory_reader.py +106 -0
- oracle/services/memory_writer.py +182 -0
- oracle/services/ollama_bridge.py +332 -0
- oracle/services/project_scanner.py +87 -0
- oracle/services/review_agent.py +206 -0
- services/__init__.py +1 -0
- services/activity_log.py +93 -0
- services/agent_base.py +124 -0
- services/agents.py +1529 -0
- services/auto_memory.py +407 -0
- services/bench/__init__.py +6 -0
- services/bench/external/__init__.py +29 -0
- services/bench/external/aider_polyglot.py +405 -0
- services/bench/external/swe_bench.py +485 -0
- services/benchmark_dashboard.py +596 -0
- services/claude_md.py +785 -0
- services/compressor.py +592 -0
- services/context_snapshot.py +356 -0
- services/conversation_store.py +870 -0
- services/doc_index.py +537 -0
- services/e2e_benchmark.py +2884 -0
- services/e2e_evaluator.py +396 -0
- services/e2e_tasks.py +743 -0
- services/edit_ledger.py +459 -0
- services/embedding_index.py +341 -0
- services/error_reporting.py +123 -0
- services/file_memory.py +734 -0
- services/hub_service.py +585 -0
- services/indexer.py +712 -0
- services/memory.py +318 -0
- services/memory_consolidator.py +538 -0
- services/memory_graph.py +382 -0
- services/memory_grounder.py +304 -0
- services/memory_scorer.py +246 -0
- services/metrics.py +86 -0
- services/notifications.py +209 -0
- services/ollama_client.py +201 -0
- services/output_filter.py +488 -0
- services/parser.py +1238 -0
- services/project_manager.py +579 -0
- services/protocol.py +306 -0
- services/proxy_state.py +152 -0
- services/retrieval_broker.py +129 -0
- services/router.py +414 -0
- services/runtime.py +326 -0
- services/session_benchmark.py +1945 -0
- services/session_manager.py +1026 -0
- services/session_preloader.py +251 -0
- services/text_index.py +90 -0
- services/tool_classifier.py +176 -0
- services/transcript_index.py +340 -0
- services/validation_cache.py +155 -0
- services/vector_store.py +299 -0
- services/version_tracker.py +271 -0
- services/watcher.py +192 -0
- tui/__init__.py +0 -0
- tui/backend.py +59 -0
- tui/main.py +145 -0
- tui/screens/__init__.py +1 -0
- tui/screens/benchmark_view.py +109 -0
- tui/screens/claudemd_view.py +46 -0
- tui/screens/compress_view.py +52 -0
- tui/screens/index_view.py +74 -0
- tui/screens/init_view.py +82 -0
- tui/screens/mcp_view.py +73 -0
- tui/screens/optimize_view.py +41 -0
- tui/screens/pipe_view.py +46 -0
- tui/screens/projects_view.py +355 -0
- tui/screens/search_view.py +55 -0
- tui/screens/session_view.py +143 -0
- tui/screens/stats.py +158 -0
- tui/screens/ui_view.py +54 -0
- tui/theme.tcss +335 -0
cli/tools/__init__.py
ADDED
cli/tools/_helpers.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Shared helpers for tool handlers."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def maybe_related_facts(svc, topic: str, top_k: int = 3, width: int = 100) -> str:
|
|
7
|
+
"""Append related facts if enabled. Currently disabled — adds noise."""
|
|
8
|
+
return ""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# ── Ghost-file path validation ───────────────────────────────────────────────
|
|
12
|
+
|
|
13
|
+
# Python builtin / typing names that should never be file paths
|
|
14
|
+
_GHOST_NAMES = {
|
|
15
|
+
"dict", "str", "int", "float", "bool", "list", "set", "tuple",
|
|
16
|
+
"bytes", "bytearray", "complex", "frozenset", "memoryview",
|
|
17
|
+
"type", "object", "range", "slice", "property", "classmethod",
|
|
18
|
+
"staticmethod", "super", "None", "True", "False", "Ellipsis",
|
|
19
|
+
"Any", "Union", "Optional", "List", "Dict", "Set", "Tuple",
|
|
20
|
+
"Callable", "Iterator", "Generator", "Sequence", "Mapping",
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def validate_file_path(file_path: str) -> str | None:
|
|
25
|
+
"""Return an error message if file_path looks like a ghost-file path, else None.
|
|
26
|
+
|
|
27
|
+
Catches common hallucinations where an LLM passes a Python type name,
|
|
28
|
+
shell redirect artifact, or other non-path string as a file_path parameter.
|
|
29
|
+
"""
|
|
30
|
+
if not file_path:
|
|
31
|
+
return None
|
|
32
|
+
|
|
33
|
+
# Support comma-separated paths: validate each individually
|
|
34
|
+
paths = [p.strip() for p in file_path.split(",") if p.strip()]
|
|
35
|
+
for p in paths:
|
|
36
|
+
err = _check_single_path(p)
|
|
37
|
+
if err:
|
|
38
|
+
return err
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _check_single_path(p: str) -> str | None:
|
|
43
|
+
"""Validate a single file path segment."""
|
|
44
|
+
name = Path(p).name
|
|
45
|
+
|
|
46
|
+
# Bare Python type name (e.g., file_path="dict")
|
|
47
|
+
if name in _GHOST_NAMES:
|
|
48
|
+
return (
|
|
49
|
+
f"Rejected file_path={p!r} — looks like a Python type name, not a file path. "
|
|
50
|
+
f"Pass the actual file path (e.g., 'src/models.py')."
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Partial type annotation (e.g., "tuple[float", "dict[str, int]")
|
|
54
|
+
if "[" in name and not Path(p).suffix:
|
|
55
|
+
return (
|
|
56
|
+
f"Rejected file_path={p!r} — looks like a type annotation fragment, not a file path."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Shell redirect artifact (e.g., "=3.0.0" from >=3.0.0)
|
|
60
|
+
if name.startswith("=") or name.startswith(">") or name.startswith("<"):
|
|
61
|
+
return (
|
|
62
|
+
f"Rejected file_path={p!r} — looks like a shell redirect artifact, not a file path."
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return None
|