code-context-control 2.63.0__tar.gz → 2.63.2__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.
- code_context_control-2.63.2/PKG-INFO +344 -0
- code_context_control-2.63.2/README.md +281 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/c3.py +1 -1
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/dashboard.js +2 -2
- code_context_control-2.63.2/code_context_control.egg-info/PKG-INFO +344 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/pyproject.toml +2 -2
- code_context_control-2.63.0/PKG-INFO +0 -604
- code_context_control-2.63.0/README.md +0 -541
- code_context_control-2.63.0/code_context_control.egg-info/PKG-INFO +0 -604
- {code_context_control-2.63.0 → code_context_control-2.63.2}/LICENSE +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/_hook_utils.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/commands/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/commands/common.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/commands/parser.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/docs.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/edits.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/access.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/credentials.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/index.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/masking.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/oracle.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/shared.css +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/tools.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/guide/workflow.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_access_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_artifact.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_c3read.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_filter.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_read.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_server.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/hub_credentials.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/hub_ui.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/mcp_server.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/progress.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/server.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/agent.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/compress.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/delegate.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/edit.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/edits.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/federate.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/filter.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/impact.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/jira.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/memory.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/project.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/read.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/search.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/session.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/shell.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/status.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/tasks.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/tools/validate.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/api.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/app.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/access.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/credentials.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/icons.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/shared.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui/theme.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui_legacy.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/cli/ui_nano.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/code_context_control.egg-info/SOURCES.txt +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/core/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/core/config.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/core/ide.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/core/mcp_toml.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/core/web_security.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/config.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/oracle_server.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/local_session.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/activity.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/agents.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/app.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/busy.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/core.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/header.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/insights.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/projects.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/settings.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/access_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/activity_log.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/agent_base.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/agents.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/artifact_defs.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/artifact_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/auto_memory.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/bench/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/bitbucket_client.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/circuit_breaker.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/claude_md.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/compressor.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/context_snapshot.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/conversation_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/credential_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/doc_index.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/e2e_tasks.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/edit_ledger.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/embedding_index.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/error_reporting.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/file_memory.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/git_context.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/hub_service.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/indexer.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/jira_client.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/jira_cloud.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/jira_credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/jira_data_center.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/jira_links.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/mask_activation.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/mask_mirror.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/mask_presets.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory_consolidator.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory_distiller.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory_graph.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory_grounder.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory_queue.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/memory_scorer.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/metrics.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/notifications.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/ollama_bridge.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/ollama_client.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/ollama_credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/output_filter.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/parser.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/project_manager.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/project_runtime.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/protocol.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/proxy_state.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/repo_map.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/retention.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/retrieval_broker.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/router.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/runtime.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/scanner.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/session_benchmark.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/session_manager.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/session_preloader.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/subprojects.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/task_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/telemetry.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/text_index.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/time_tracker.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/tool_classifier.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/transcript_index.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/validation_cache.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/vector_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/watcher.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/services/win_subprocess.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/setup.cfg +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_access_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_access_guard_meta.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_access_guard_shell_project.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_access_guard_surfaces.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_access_guard_wiring.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_credential_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_access_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_state.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_init_scan.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_client.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_links.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mask_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mask_routes.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mask_surfaces.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_memory_system.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_no_stale_model_pins.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_output_filter.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_permissions.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_pm_api.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_project_manager.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_project_tool.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_related_facts.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_repo_map.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_retention.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_review_digest.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_service_durability.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_session_budget.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_subprojects.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_task_store.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_task_tool.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_validate.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_vault_write_guard.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_version_sync.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_web_security.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/backend.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/main.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/__init__.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/index_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/init_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/search_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/session_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/stats.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.63.0 → code_context_control-2.63.2}/tui/theme.tcss +0 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: code-context-control
|
|
3
|
+
Version: 2.63.2
|
|
4
|
+
Summary: Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub.
|
|
5
|
+
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/drknowhow/code-context-control
|
|
8
|
+
Project-URL: Documentation, https://github.com/drknowhow/code-context-control#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/drknowhow/code-context-control
|
|
10
|
+
Project-URL: Changelog, https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Issues, https://github.com/drknowhow/code-context-control/issues
|
|
12
|
+
Project-URL: Funding, https://github.com/sponsors/drknowhow
|
|
13
|
+
Keywords: claude,claude-code,mcp,ai,code-intelligence,code-context,developer-tools,llm-tools
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: tiktoken>=0.7.0
|
|
28
|
+
Requires-Dist: fastmcp>=2.0.0
|
|
29
|
+
Requires-Dist: watchdog>=4.0.0
|
|
30
|
+
Requires-Dist: tree-sitter>=0.22.0
|
|
31
|
+
Requires-Dist: tree-sitter-python>=0.21.0
|
|
32
|
+
Requires-Dist: tree-sitter-javascript>=0.21.0
|
|
33
|
+
Requires-Dist: tree-sitter-typescript>=0.21.0
|
|
34
|
+
Requires-Dist: tree-sitter-html>=0.21.0
|
|
35
|
+
Requires-Dist: tree-sitter-markdown>=0.3.2
|
|
36
|
+
Requires-Dist: tree-sitter-css>=0.21.0
|
|
37
|
+
Requires-Dist: tree-sitter-go>=0.21.0
|
|
38
|
+
Requires-Dist: tree-sitter-rust>=0.21.0
|
|
39
|
+
Requires-Dist: tree-sitter-json>=0.21.0
|
|
40
|
+
Requires-Dist: tree-sitter-yaml>=0.6.0
|
|
41
|
+
Requires-Dist: flask>=3.0.0
|
|
42
|
+
Requires-Dist: rich>=13.0.0
|
|
43
|
+
Requires-Dist: click>=8.0.0
|
|
44
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
45
|
+
Requires-Dist: keyring>=24.0
|
|
46
|
+
Provides-Extra: vector
|
|
47
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "vector"
|
|
48
|
+
Requires-Dist: numpy>=1.24.0; extra == "vector"
|
|
49
|
+
Requires-Dist: chromadb>=0.4.24; extra == "vector"
|
|
50
|
+
Provides-Extra: tui
|
|
51
|
+
Requires-Dist: textual>=0.50.0; extra == "tui"
|
|
52
|
+
Provides-Extra: telemetry
|
|
53
|
+
Requires-Dist: sentry-sdk>=2.0.0; extra == "telemetry"
|
|
54
|
+
Provides-Extra: dev
|
|
55
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
56
|
+
Requires-Dist: pyright>=1.1.350; extra == "dev"
|
|
57
|
+
Requires-Dist: ruff>=0.6.0; extra == "dev"
|
|
58
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
59
|
+
Requires-Dist: twine>=5.0.0; extra == "dev"
|
|
60
|
+
Requires-Dist: numpy>=1.24.0; extra == "dev"
|
|
61
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "dev"
|
|
62
|
+
Dynamic: license-file
|
|
63
|
+
|
|
64
|
+
<h1 align="center">Code Context Control</h1>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<strong>The local code-intelligence layer for AI coding tools.</strong><br>
|
|
68
|
+
Retrieve less, read less, edit safer — and control what an agent may read, write, or see.<br>
|
|
69
|
+
Works with Claude Code, Codex, Copilot, Cursor, and Antigravity.
|
|
70
|
+
</p>
|
|
71
|
+
|
|
72
|
+
<p align="center">
|
|
73
|
+
<a href="https://pypi.org/project/code-context-control/"><img alt="PyPI" src="https://img.shields.io/pypi/v/code-context-control?color=blue&logo=pypi&logoColor=white"></a>
|
|
74
|
+
<a href="https://github.com/drknowhow/code-context-control/blob/main/LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
|
|
75
|
+
<img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
76
|
+
<img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
|
|
77
|
+
<img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
|
|
78
|
+
<a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_dashboard.png" alt="C3 per-project dashboard" width="900">
|
|
83
|
+
</p>
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## The problem
|
|
88
|
+
|
|
89
|
+
LLM-driven coding tools have one expensive failure mode: **they read too much.** They `cat` whole files, regex the entire repo, dump 10k-line logs into context, edit-and-pray, and burn through budget before they touch a single line of code. On a half-day session you can spend $20+ on token waste that adds zero value.
|
|
90
|
+
|
|
91
|
+
And they read too *widely*: the same agent that greps your source also greps your `.env`, your customer CSV, and your production dumps.
|
|
92
|
+
|
|
93
|
+
## What C3 does about it
|
|
94
|
+
|
|
95
|
+
A thin **local** layer between your IDE and your repo. Every AI tool call is routed through a narrow, surgical operation instead of a broad, wasteful one:
|
|
96
|
+
|
|
97
|
+
| Without C3 | With C3 |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `Read` the whole 2,000-line file | `c3_compress` returns a structural map at 40-70% of the original token count → `c3_read(symbols=...)` for the exact function |
|
|
100
|
+
| `Grep` the whole repo blindly | `c3_search` returns ranked candidates with TF-IDF + symbol awareness |
|
|
101
|
+
| Dump full `pytest` output into the prompt | `c3_filter` distills 500 lines → 30 actionable ones |
|
|
102
|
+
| Edit, hope it compiled | `c3_edit` writes via a ledger + `c3_validate` runs `pyright`/`tsc` automatically |
|
|
103
|
+
| `Bash` test runs that hang on Windows | `c3_shell` returns structured `{exit_code, stdout, stderr, duration}` with auto-filter |
|
|
104
|
+
| Lose all context on `/clear` | `c3_session(snapshot)` + `c3_memory` persist decisions across sessions |
|
|
105
|
+
| Re-explain the project every session | Auto-synced `CLAUDE.md` / `AGENTS.md` / `copilot-instructions.md` from one source of truth |
|
|
106
|
+
| Agent reads `.env`, a customer CSV, a prod dump | **Access Guard** denies the path outright, or **Mask Guard** serves a redacted view |
|
|
107
|
+
|
|
108
|
+
Everything runs **locally**. No source code, prompts, or model output leaves your machine unless you explicitly opt into a third-party model API.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Install
|
|
113
|
+
|
|
114
|
+
Requires Python 3.10+. Recommended via [pipx](https://pipx.pypa.io):
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pipx install code-context-control
|
|
118
|
+
c3 init /path/to/your/project
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Or `pip install "code-context-control[tui]"` for the optional Textual UI.
|
|
122
|
+
|
|
123
|
+
`c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
c3 init /path/to/project --force --ide claude --mcp-mode direct --permissions standard
|
|
127
|
+
c3 init /path/to/huge-repo --force --no-embed # skip the embedding index on large repos
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Upgrade with `c3 upgrade` (or `pipx upgrade code-context-control`). MCP is wired through the `c3-mcp` entry point, so upgrading needs no per-project reconfiguration.
|
|
131
|
+
|
|
132
|
+
> **Upgrading from before v2.60.1 on Windows:** existing projects are *not* repaired by upgrading — re-run `c3 init` once per project to fix hook registration.
|
|
133
|
+
|
|
134
|
+
Full notes: [Upgrading](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md) · [Contributing](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md#from-source-contributors)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## The UI
|
|
139
|
+
|
|
140
|
+
Three local web apps, no Electron — pure Flask + vanilla JS: the **Hub** (`c3 hub`, port 3330), the **per-project UI** (`c3 ui`), and the optional **Oracle** (`c3 oracle serve`).
|
|
141
|
+
|
|
142
|
+
### Project Hub — multi-project mission control
|
|
143
|
+
|
|
144
|
+
<p align="center">
|
|
145
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/hub_projects.png" alt="C3 Project Hub" width="900">
|
|
146
|
+
</p>
|
|
147
|
+
|
|
148
|
+
Every C3-initialized project registers itself here on `c3 init`. Filter by active/idle, see IDE / version / port / last activity per row, and launch your IDE or the project UI in one click. <kbd>Ctrl</kbd>+<kbd>K</kbd> searches code and memory across *every* registered project.
|
|
149
|
+
|
|
150
|
+
Three top-level views — **Projects**, **Tasks** (a cross-project kanban), and **Credentials** — plus a drill-in panel per project covering Overview, Sub-projects, Tasks, Artifacts, Memory, Ledger, Sessions, Health, Budget, Credentials, Config, and MCP.
|
|
151
|
+
|
|
152
|
+
**Sub-projects** make a nested repo a first-class child with its own `.c3`: the parent's index excludes the child's subtree, and `c3_search` / `c3_memory` fan out on demand (`scope='all'`, or one child by name). → [Sub-projects guide](https://github.com/drknowhow/code-context-control/blob/main/docs/sub-projects.md)
|
|
153
|
+
|
|
154
|
+
### Per-project UI
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
c3 ui # binds the first free port from 3333
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Twelve tabs. The dashboard above shows token savings, indexed files, the live session, and a stream of recent tool calls and file changes.
|
|
161
|
+
|
|
162
|
+
| Tab | What it's for |
|
|
163
|
+
|---|---|
|
|
164
|
+
| **Dashboard** | Token savings, codebase breakdown, live session counters, recent activity |
|
|
165
|
+
| **Chat** | Browse and search indexed IDE chat transcripts |
|
|
166
|
+
| **Sessions** | Every session with duration, decisions, files, tool calls, token cost |
|
|
167
|
+
| **Memory** | Durable facts across sessions — categories, semantic search, list ↔ graph |
|
|
168
|
+
| **Tasks** | Per-project PM: dependencies, milestones, time tracking, health |
|
|
169
|
+
| **Edits** | The Edit Ledger — every AI-driven change, versioned and restorable |
|
|
170
|
+
| **Bitbucket** | PRs, branches, activity, admin against Bitbucket Data Center |
|
|
171
|
+
| **Jira** | My Work board, JQL search, transitions, comments |
|
|
172
|
+
| **Credentials** | Named secrets — metadata only, values are never returned to the browser |
|
|
173
|
+
| **Access Guard** | Path rules: deny / read-only / mask, plus the path tester |
|
|
174
|
+
| **Instructions** | One editor for `CLAUDE.md`, `AGENTS.md`, `copilot-instructions.md` |
|
|
175
|
+
| **Settings** | Budgets, feature flags, background agents, delegate routing, MCP |
|
|
176
|
+
|
|
177
|
+
<p align="center">
|
|
178
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_tasks.png" alt="C3 Tasks" width="900">
|
|
179
|
+
</p>
|
|
180
|
+
|
|
181
|
+
**Tasks** (v2.45.0, extended v2.53.0) is a durable per-project tracker — dependencies and subtasks, milestones, decision notes, full event history, health reports, and both automatic and manual time tracking. It rolls up into the Hub's cross-project board.
|
|
182
|
+
|
|
183
|
+
**Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves both Codex and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## The MCP tool suite
|
|
188
|
+
|
|
189
|
+
C3 exposes **20 tools** as a native MCP server. Your IDE calls them directly:
|
|
190
|
+
|
|
191
|
+
| Tool | What it does |
|
|
192
|
+
|---|---|
|
|
193
|
+
| `c3_search` | TF-IDF / regex / semantic search, ranked; fans out to sub-projects with `scope=` |
|
|
194
|
+
| `c3_compress` | AST-based file map (`map`, `dense_map`, `smart`, `diff`, `bug_scan`, `ast`) |
|
|
195
|
+
| `c3_read` | Surgical reads — by symbol name, regex, or line ranges |
|
|
196
|
+
| `c3_edit` | Atomic patch with ledger logging + content-addressable history |
|
|
197
|
+
| `c3_validate` | Type / syntax check (pyright, tsc, ruff — auto-detected) |
|
|
198
|
+
| `c3_filter` | Distill long terminal/log output via pattern + LLM summarization |
|
|
199
|
+
| `c3_shell` | Shell commands with structured returns + auto-filtered stdout |
|
|
200
|
+
| `c3_status` | Views: `budget`, `health`, `notifications`, `sessions`, `ghost_files`, `access` |
|
|
201
|
+
| `c3_memory` | Fact store with categories, recall, graph queries, `index`→`fetch` two-step |
|
|
202
|
+
| `c3_session` | Snapshot, restore, log decisions, compact history |
|
|
203
|
+
| `c3_impact` | Blast-radius analysis before editing shared symbols |
|
|
204
|
+
| `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
|
|
205
|
+
| `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
|
|
206
|
+
| `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter |
|
|
207
|
+
| `c3_task` | Per-project PM — tasks, dependencies, milestones, time tracking (v2.53.0) |
|
|
208
|
+
| `c3_artifacts` | Agent-config version history, diff & restore (v2.46.0) |
|
|
209
|
+
| `c3_credentials` | Named-secret vault; values never enter model context (v2.58.0) |
|
|
210
|
+
| `c3_bitbucket` | Bitbucket Data Center — PRs, branches, builds, admin (v2.30.0) |
|
|
211
|
+
| `c3_jira` | Jira Cloud + Data Center — JQL, issues, transitions (v2.56.0) |
|
|
212
|
+
| `c3_project` | Cross-project discovery & operations; guarded writes (v2.31.0) |
|
|
213
|
+
|
|
214
|
+
Every tool is **read-only safe in plan mode** except `c3_edit`, `c3_shell`, `c3_artifacts(action='restore')`, `c3_delegate` with write delegation enabled, and write actions on `c3_bitbucket` / `c3_jira` / `c3_credentials` / `c3_project` / `c3_task`.
|
|
215
|
+
|
|
216
|
+
On Windows `c3_shell` uses Git Bash when available. Git Bash bundles no `jq`; use `python -m json.tool` for portable JSON formatting.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Guards — what the agent may touch, and what it sees
|
|
221
|
+
|
|
222
|
+
<p align="center">
|
|
223
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_access_guard.png" alt="C3 Access Guard and Mask Guard" width="900">
|
|
224
|
+
</p>
|
|
225
|
+
|
|
226
|
+
Two questions, two answers. **Access Guard** (v2.62.0) answers *may the agent touch this path?* **Mask Guard** (v2.63.0) answers *what should it see when it does?*
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
c3 access add "secrets/**" --kind deny # never read, never write
|
|
230
|
+
c3 access add "migrations/**" --kind read_only # readable, never written
|
|
231
|
+
c3 access mask add "data/*.csv" --preset sample_rows --params "count=20,strategy=first"
|
|
232
|
+
c3 access mask activate # purge pre-mask artifacts, build views
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
```diff
|
|
236
|
+
- AWS_KEY = "AKIAIOSFODNN7EXAMPLE" # your file
|
|
237
|
+
+ AWS_KEY = "«c3:redacted:aws_access_key»" # what the agent sees
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
- **Tighten-only.** No allow list exists; global and project scopes merge as a union, so a cloned repo's config can only *add* protection.
|
|
241
|
+
- **`deny` means deny-enumerate too** — denied paths never appear in search results, maps, or the vector index.
|
|
242
|
+
- **Masked means read-only, always.** Cropped rows have no inverse, so an edit in transformed coordinates would corrupt the one file you protected.
|
|
243
|
+
- **Four deterministic presets, no LLM in the read path:** `redact_secrets`, `redact_columns` (salted one-way pseudonyms — joins survive, no reverse dictionary), `sample_rows`, `signatures_only`.
|
|
244
|
+
- **Rule changes are human-only** (UI tab or CLI) and ledger-logged. Agents have no mutation surface.
|
|
245
|
+
- **Honest coverage.** This guards *cooperative* agents against mistakes and prompt injection. It is not a sandbox — a raw shell outside C3's tools still sees the real bytes.
|
|
246
|
+
|
|
247
|
+
→ [Access Guard](https://github.com/drknowhow/code-context-control/blob/main/docs/access-guard.md) · [Mask Guard](https://github.com/drknowhow/code-context-control/blob/main/docs/mask-guard.md)
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Integrations
|
|
252
|
+
|
|
253
|
+
| | What you get | Guide |
|
|
254
|
+
|---|---|---|
|
|
255
|
+
| **Credential vault** (v2.58.0) | Named secrets, global + per-project, in the OS keyring. Agents use them by name — `env_creds='NPM_TOKEN'` or `{{cred:NAME}}` — and values are decoded only at the subprocess boundary, never in model context. Hub-wide Credentials view since v2.59.0. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#credential-vault) |
|
|
256
|
+
| **Bitbucket DC/Server** (v2.30.0) | PRs, branches, builds, repo admin over REST + PAT. Merges and branch deletes land in the edit ledger. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#bitbucket-data-center--server) |
|
|
257
|
+
| **Jira** (v2.56.0) | Cloud (REST v3) and Data Center (REST v2) behind one tool: raw JQL, My Work board, transitions, comments, and an Activity view linking ledger work to issue keys. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#jira--cloud--data-center) |
|
|
258
|
+
| **Oracle Discovery API** (v2.32.0) | Expose cross-project code + memory intelligence as tools for an external LLM, over MCP (`:3332/mcp`) or OpenAPI REST (`:3331/api/discovery`). Read + safe-action tools only, Bearer token in the keyring. | [guide](https://github.com/drknowhow/code-context-control/blob/main/oracle-guide/discovery-api.md) |
|
|
259
|
+
|
|
260
|
+
All tokens live in the **OS keyring** (Windows Credential Manager, macOS Keychain, Linux Secret Service) — never in `.c3/config.json`. Each supports `login --global` so one login is reusable across every C3 project.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Tiered local AI (optional)
|
|
265
|
+
|
|
266
|
+
Optional Ollama integration so the primary model doesn't spend context on grunt work:
|
|
267
|
+
|
|
268
|
+
| Tier | Model class | Used for | Latency target |
|
|
269
|
+
|---|---|---|---|
|
|
270
|
+
| **Nano** | `qwen2:0.5b` | Intent routing, classification | <100 ms |
|
|
271
|
+
| **Micro** | `deepseek-r1:1.5b` | Last-turn Q&A, summarization | <1 s |
|
|
272
|
+
| **Base** | `llama3.2:3b`+ | Code analysis, technical reasoning | <5 s |
|
|
273
|
+
|
|
274
|
+
```text
|
|
275
|
+
c3_delegate(task="summarize this 4k-line stacktrace", backend="ollama")
|
|
276
|
+
c3_delegate(task="rate-limit refactor", backend="auto") # picks the right tier
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Ollama is fully optional. C3 works without it.
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Permissions (Claude Code)
|
|
284
|
+
|
|
285
|
+
C3 manages `.claude/settings.local.json` with three tiers:
|
|
286
|
+
|
|
287
|
+
| Tier | What it allows |
|
|
288
|
+
|---|---|
|
|
289
|
+
| `read-only` | Exploration only — no file writes, no git writes, no installs |
|
|
290
|
+
| `standard` | Normal dev workflow — edit, build, test, local git **(recommended)** |
|
|
291
|
+
| `permissive` | Full trust — everything except destructive ops |
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
c3 permissions show
|
|
295
|
+
c3 permissions standard
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
All tiers allow C3's MCP tools and include a hard deny list (`rm -rf`, `sudo`, `git push --force`). Switching a tier **preserves your own `allow`/`deny` rules** — only C3-managed entries are replaced. The same applies to `.mcp.json` and your hooks.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Benchmarks
|
|
303
|
+
|
|
304
|
+
Every number C3 advertises is reproducible on your own machine, against your own project:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
c3 bench session # six realistic workflow scenarios, A/B with vs without C3
|
|
308
|
+
c3 benchmark /path/to/project # per-operation micro-benchmarks
|
|
309
|
+
c3 bench aider # Aider Polyglot suite (external; burns real API tokens)
|
|
310
|
+
c3 bench swe # SWE-bench Lite (external)
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
The session benchmark's baseline models a *competent* agent working without C3 — one targeted search, each file read once — and scores answer quality alongside tokens. Runs against C3's own repository land around **~50% token savings (2×)** at quality parity — 51.8% at v2.43.0, 49.9% at v2.63.2, with C3 scoring 98.8% on answer quality against the baseline's 96.5% in both. File sampling is deterministic (largest files first, no RNG), so a given commit reproduces the same figure. Your numbers will differ with your project's shape; that's why the harness ships with the tool.
|
|
314
|
+
|
|
315
|
+
C3 also records real per-tool usage to `.c3/tool_telemetry.jsonl`, so estimates can be checked against what actually happened.
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Security & privacy
|
|
320
|
+
|
|
321
|
+
- **All web servers bind `127.0.0.1` by default** and are guarded against browser-based attacks even on loopback — a Host-header allowlist (defeats DNS rebinding) plus an Origin/Referer check on every request (defeats cross-origin CSRF), with scoped, non-wildcard CORS. There is still **no user authentication**, so do not expose these servers to an untrusted network without auth/TLS in front. Binding to a non-loopback interface is opt-in and warned at startup. *(Hardening added in v2.33.0.)*
|
|
322
|
+
- **No telemetry by default.** The OSS package collects nothing. Opt-in Sentry crash reporting requires the `[telemetry]` extra plus both `SENTRY_DSN` and `C3_TELEMETRY_OPT_IN=1`; even then request bodies, local variables, and prompts are stripped.
|
|
323
|
+
- **LLM memory distillation is local-first.** Cloud distillation (v2.51.0) is off by default and opt-in per project.
|
|
324
|
+
- **API keys** for third-party providers are read from the environment and never persisted by C3.
|
|
325
|
+
- Full hardening guide and disclosure policy: [`SECURITY.md`](https://github.com/drknowhow/code-context-control/blob/main/SECURITY.md)
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Support C3
|
|
330
|
+
|
|
331
|
+
C3 is free, open source, and built by one person. If it saves you tokens — that's the whole point — consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship funds API costs for cross-model test runs and dedicated development time.
|
|
332
|
+
|
|
333
|
+
## License
|
|
334
|
+
|
|
335
|
+
Apache License 2.0 ([`LICENSE`](https://github.com/drknowhow/code-context-control/blob/main/LICENSE)) — free for any use, including commercial. Third-party deps: [`THIRD_PARTY_LICENSES.md`](https://github.com/drknowhow/code-context-control/blob/main/THIRD_PARTY_LICENSES.md).
|
|
336
|
+
|
|
337
|
+
The author may introduce a paid offering or relicense future major versions; no commitment either way. Releases already published under Apache-2.0 (including all 2.x versions) keep that grant irrevocably. Background: [`LICENSING.md`](https://github.com/drknowhow/code-context-control/blob/main/LICENSING.md).
|
|
338
|
+
|
|
339
|
+
## Links
|
|
340
|
+
|
|
341
|
+
- **PyPI:** https://pypi.org/project/code-context-control/
|
|
342
|
+
- **Changelog:** [`CHANGELOG.md`](https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md)
|
|
343
|
+
- **Issues:** https://github.com/drknowhow/code-context-control/issues
|
|
344
|
+
- **Sponsor:** https://github.com/sponsors/drknowhow
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
<h1 align="center">Code Context Control</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<strong>The local code-intelligence layer for AI coding tools.</strong><br>
|
|
5
|
+
Retrieve less, read less, edit safer — and control what an agent may read, write, or see.<br>
|
|
6
|
+
Works with Claude Code, Codex, Copilot, Cursor, and Antigravity.
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://pypi.org/project/code-context-control/"><img alt="PyPI" src="https://img.shields.io/pypi/v/code-context-control?color=blue&logo=pypi&logoColor=white"></a>
|
|
11
|
+
<a href="https://github.com/drknowhow/code-context-control/blob/main/LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
|
|
12
|
+
<img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
13
|
+
<img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
|
|
14
|
+
<img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
|
|
15
|
+
<a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_dashboard.png" alt="C3 per-project dashboard" width="900">
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## The problem
|
|
25
|
+
|
|
26
|
+
LLM-driven coding tools have one expensive failure mode: **they read too much.** They `cat` whole files, regex the entire repo, dump 10k-line logs into context, edit-and-pray, and burn through budget before they touch a single line of code. On a half-day session you can spend $20+ on token waste that adds zero value.
|
|
27
|
+
|
|
28
|
+
And they read too *widely*: the same agent that greps your source also greps your `.env`, your customer CSV, and your production dumps.
|
|
29
|
+
|
|
30
|
+
## What C3 does about it
|
|
31
|
+
|
|
32
|
+
A thin **local** layer between your IDE and your repo. Every AI tool call is routed through a narrow, surgical operation instead of a broad, wasteful one:
|
|
33
|
+
|
|
34
|
+
| Without C3 | With C3 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `Read` the whole 2,000-line file | `c3_compress` returns a structural map at 40-70% of the original token count → `c3_read(symbols=...)` for the exact function |
|
|
37
|
+
| `Grep` the whole repo blindly | `c3_search` returns ranked candidates with TF-IDF + symbol awareness |
|
|
38
|
+
| Dump full `pytest` output into the prompt | `c3_filter` distills 500 lines → 30 actionable ones |
|
|
39
|
+
| Edit, hope it compiled | `c3_edit` writes via a ledger + `c3_validate` runs `pyright`/`tsc` automatically |
|
|
40
|
+
| `Bash` test runs that hang on Windows | `c3_shell` returns structured `{exit_code, stdout, stderr, duration}` with auto-filter |
|
|
41
|
+
| Lose all context on `/clear` | `c3_session(snapshot)` + `c3_memory` persist decisions across sessions |
|
|
42
|
+
| Re-explain the project every session | Auto-synced `CLAUDE.md` / `AGENTS.md` / `copilot-instructions.md` from one source of truth |
|
|
43
|
+
| Agent reads `.env`, a customer CSV, a prod dump | **Access Guard** denies the path outright, or **Mask Guard** serves a redacted view |
|
|
44
|
+
|
|
45
|
+
Everything runs **locally**. No source code, prompts, or model output leaves your machine unless you explicitly opt into a third-party model API.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Install
|
|
50
|
+
|
|
51
|
+
Requires Python 3.10+. Recommended via [pipx](https://pipx.pypa.io):
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pipx install code-context-control
|
|
55
|
+
c3 init /path/to/your/project
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Or `pip install "code-context-control[tui]"` for the optional Textual UI.
|
|
59
|
+
|
|
60
|
+
`c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
c3 init /path/to/project --force --ide claude --mcp-mode direct --permissions standard
|
|
64
|
+
c3 init /path/to/huge-repo --force --no-embed # skip the embedding index on large repos
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Upgrade with `c3 upgrade` (or `pipx upgrade code-context-control`). MCP is wired through the `c3-mcp` entry point, so upgrading needs no per-project reconfiguration.
|
|
68
|
+
|
|
69
|
+
> **Upgrading from before v2.60.1 on Windows:** existing projects are *not* repaired by upgrading — re-run `c3 init` once per project to fix hook registration.
|
|
70
|
+
|
|
71
|
+
Full notes: [Upgrading](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md) · [Contributing](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md#from-source-contributors)
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## The UI
|
|
76
|
+
|
|
77
|
+
Three local web apps, no Electron — pure Flask + vanilla JS: the **Hub** (`c3 hub`, port 3330), the **per-project UI** (`c3 ui`), and the optional **Oracle** (`c3 oracle serve`).
|
|
78
|
+
|
|
79
|
+
### Project Hub — multi-project mission control
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/hub_projects.png" alt="C3 Project Hub" width="900">
|
|
83
|
+
</p>
|
|
84
|
+
|
|
85
|
+
Every C3-initialized project registers itself here on `c3 init`. Filter by active/idle, see IDE / version / port / last activity per row, and launch your IDE or the project UI in one click. <kbd>Ctrl</kbd>+<kbd>K</kbd> searches code and memory across *every* registered project.
|
|
86
|
+
|
|
87
|
+
Three top-level views — **Projects**, **Tasks** (a cross-project kanban), and **Credentials** — plus a drill-in panel per project covering Overview, Sub-projects, Tasks, Artifacts, Memory, Ledger, Sessions, Health, Budget, Credentials, Config, and MCP.
|
|
88
|
+
|
|
89
|
+
**Sub-projects** make a nested repo a first-class child with its own `.c3`: the parent's index excludes the child's subtree, and `c3_search` / `c3_memory` fan out on demand (`scope='all'`, or one child by name). → [Sub-projects guide](https://github.com/drknowhow/code-context-control/blob/main/docs/sub-projects.md)
|
|
90
|
+
|
|
91
|
+
### Per-project UI
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
c3 ui # binds the first free port from 3333
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Twelve tabs. The dashboard above shows token savings, indexed files, the live session, and a stream of recent tool calls and file changes.
|
|
98
|
+
|
|
99
|
+
| Tab | What it's for |
|
|
100
|
+
|---|---|
|
|
101
|
+
| **Dashboard** | Token savings, codebase breakdown, live session counters, recent activity |
|
|
102
|
+
| **Chat** | Browse and search indexed IDE chat transcripts |
|
|
103
|
+
| **Sessions** | Every session with duration, decisions, files, tool calls, token cost |
|
|
104
|
+
| **Memory** | Durable facts across sessions — categories, semantic search, list ↔ graph |
|
|
105
|
+
| **Tasks** | Per-project PM: dependencies, milestones, time tracking, health |
|
|
106
|
+
| **Edits** | The Edit Ledger — every AI-driven change, versioned and restorable |
|
|
107
|
+
| **Bitbucket** | PRs, branches, activity, admin against Bitbucket Data Center |
|
|
108
|
+
| **Jira** | My Work board, JQL search, transitions, comments |
|
|
109
|
+
| **Credentials** | Named secrets — metadata only, values are never returned to the browser |
|
|
110
|
+
| **Access Guard** | Path rules: deny / read-only / mask, plus the path tester |
|
|
111
|
+
| **Instructions** | One editor for `CLAUDE.md`, `AGENTS.md`, `copilot-instructions.md` |
|
|
112
|
+
| **Settings** | Budgets, feature flags, background agents, delegate routing, MCP |
|
|
113
|
+
|
|
114
|
+
<p align="center">
|
|
115
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_tasks.png" alt="C3 Tasks" width="900">
|
|
116
|
+
</p>
|
|
117
|
+
|
|
118
|
+
**Tasks** (v2.45.0, extended v2.53.0) is a durable per-project tracker — dependencies and subtasks, milestones, decision notes, full event history, health reports, and both automatic and manual time tracking. It rolls up into the Hub's cross-project board.
|
|
119
|
+
|
|
120
|
+
**Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves both Codex and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## The MCP tool suite
|
|
125
|
+
|
|
126
|
+
C3 exposes **20 tools** as a native MCP server. Your IDE calls them directly:
|
|
127
|
+
|
|
128
|
+
| Tool | What it does |
|
|
129
|
+
|---|---|
|
|
130
|
+
| `c3_search` | TF-IDF / regex / semantic search, ranked; fans out to sub-projects with `scope=` |
|
|
131
|
+
| `c3_compress` | AST-based file map (`map`, `dense_map`, `smart`, `diff`, `bug_scan`, `ast`) |
|
|
132
|
+
| `c3_read` | Surgical reads — by symbol name, regex, or line ranges |
|
|
133
|
+
| `c3_edit` | Atomic patch with ledger logging + content-addressable history |
|
|
134
|
+
| `c3_validate` | Type / syntax check (pyright, tsc, ruff — auto-detected) |
|
|
135
|
+
| `c3_filter` | Distill long terminal/log output via pattern + LLM summarization |
|
|
136
|
+
| `c3_shell` | Shell commands with structured returns + auto-filtered stdout |
|
|
137
|
+
| `c3_status` | Views: `budget`, `health`, `notifications`, `sessions`, `ghost_files`, `access` |
|
|
138
|
+
| `c3_memory` | Fact store with categories, recall, graph queries, `index`→`fetch` two-step |
|
|
139
|
+
| `c3_session` | Snapshot, restore, log decisions, compact history |
|
|
140
|
+
| `c3_impact` | Blast-radius analysis before editing shared symbols |
|
|
141
|
+
| `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
|
|
142
|
+
| `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
|
|
143
|
+
| `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter |
|
|
144
|
+
| `c3_task` | Per-project PM — tasks, dependencies, milestones, time tracking (v2.53.0) |
|
|
145
|
+
| `c3_artifacts` | Agent-config version history, diff & restore (v2.46.0) |
|
|
146
|
+
| `c3_credentials` | Named-secret vault; values never enter model context (v2.58.0) |
|
|
147
|
+
| `c3_bitbucket` | Bitbucket Data Center — PRs, branches, builds, admin (v2.30.0) |
|
|
148
|
+
| `c3_jira` | Jira Cloud + Data Center — JQL, issues, transitions (v2.56.0) |
|
|
149
|
+
| `c3_project` | Cross-project discovery & operations; guarded writes (v2.31.0) |
|
|
150
|
+
|
|
151
|
+
Every tool is **read-only safe in plan mode** except `c3_edit`, `c3_shell`, `c3_artifacts(action='restore')`, `c3_delegate` with write delegation enabled, and write actions on `c3_bitbucket` / `c3_jira` / `c3_credentials` / `c3_project` / `c3_task`.
|
|
152
|
+
|
|
153
|
+
On Windows `c3_shell` uses Git Bash when available. Git Bash bundles no `jq`; use `python -m json.tool` for portable JSON formatting.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Guards — what the agent may touch, and what it sees
|
|
158
|
+
|
|
159
|
+
<p align="center">
|
|
160
|
+
<img src="https://raw.githubusercontent.com/drknowhow/code-context-control/main/docs/screenshots/2026-07/ui_access_guard.png" alt="C3 Access Guard and Mask Guard" width="900">
|
|
161
|
+
</p>
|
|
162
|
+
|
|
163
|
+
Two questions, two answers. **Access Guard** (v2.62.0) answers *may the agent touch this path?* **Mask Guard** (v2.63.0) answers *what should it see when it does?*
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
c3 access add "secrets/**" --kind deny # never read, never write
|
|
167
|
+
c3 access add "migrations/**" --kind read_only # readable, never written
|
|
168
|
+
c3 access mask add "data/*.csv" --preset sample_rows --params "count=20,strategy=first"
|
|
169
|
+
c3 access mask activate # purge pre-mask artifacts, build views
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
```diff
|
|
173
|
+
- AWS_KEY = "AKIAIOSFODNN7EXAMPLE" # your file
|
|
174
|
+
+ AWS_KEY = "«c3:redacted:aws_access_key»" # what the agent sees
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
- **Tighten-only.** No allow list exists; global and project scopes merge as a union, so a cloned repo's config can only *add* protection.
|
|
178
|
+
- **`deny` means deny-enumerate too** — denied paths never appear in search results, maps, or the vector index.
|
|
179
|
+
- **Masked means read-only, always.** Cropped rows have no inverse, so an edit in transformed coordinates would corrupt the one file you protected.
|
|
180
|
+
- **Four deterministic presets, no LLM in the read path:** `redact_secrets`, `redact_columns` (salted one-way pseudonyms — joins survive, no reverse dictionary), `sample_rows`, `signatures_only`.
|
|
181
|
+
- **Rule changes are human-only** (UI tab or CLI) and ledger-logged. Agents have no mutation surface.
|
|
182
|
+
- **Honest coverage.** This guards *cooperative* agents against mistakes and prompt injection. It is not a sandbox — a raw shell outside C3's tools still sees the real bytes.
|
|
183
|
+
|
|
184
|
+
→ [Access Guard](https://github.com/drknowhow/code-context-control/blob/main/docs/access-guard.md) · [Mask Guard](https://github.com/drknowhow/code-context-control/blob/main/docs/mask-guard.md)
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Integrations
|
|
189
|
+
|
|
190
|
+
| | What you get | Guide |
|
|
191
|
+
|---|---|---|
|
|
192
|
+
| **Credential vault** (v2.58.0) | Named secrets, global + per-project, in the OS keyring. Agents use them by name — `env_creds='NPM_TOKEN'` or `{{cred:NAME}}` — and values are decoded only at the subprocess boundary, never in model context. Hub-wide Credentials view since v2.59.0. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#credential-vault) |
|
|
193
|
+
| **Bitbucket DC/Server** (v2.30.0) | PRs, branches, builds, repo admin over REST + PAT. Merges and branch deletes land in the edit ledger. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#bitbucket-data-center--server) |
|
|
194
|
+
| **Jira** (v2.56.0) | Cloud (REST v3) and Data Center (REST v2) behind one tool: raw JQL, My Work board, transitions, comments, and an Activity view linking ledger work to issue keys. | [guide](https://github.com/drknowhow/code-context-control/blob/main/docs/integrations.md#jira--cloud--data-center) |
|
|
195
|
+
| **Oracle Discovery API** (v2.32.0) | Expose cross-project code + memory intelligence as tools for an external LLM, over MCP (`:3332/mcp`) or OpenAPI REST (`:3331/api/discovery`). Read + safe-action tools only, Bearer token in the keyring. | [guide](https://github.com/drknowhow/code-context-control/blob/main/oracle-guide/discovery-api.md) |
|
|
196
|
+
|
|
197
|
+
All tokens live in the **OS keyring** (Windows Credential Manager, macOS Keychain, Linux Secret Service) — never in `.c3/config.json`. Each supports `login --global` so one login is reusable across every C3 project.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Tiered local AI (optional)
|
|
202
|
+
|
|
203
|
+
Optional Ollama integration so the primary model doesn't spend context on grunt work:
|
|
204
|
+
|
|
205
|
+
| Tier | Model class | Used for | Latency target |
|
|
206
|
+
|---|---|---|---|
|
|
207
|
+
| **Nano** | `qwen2:0.5b` | Intent routing, classification | <100 ms |
|
|
208
|
+
| **Micro** | `deepseek-r1:1.5b` | Last-turn Q&A, summarization | <1 s |
|
|
209
|
+
| **Base** | `llama3.2:3b`+ | Code analysis, technical reasoning | <5 s |
|
|
210
|
+
|
|
211
|
+
```text
|
|
212
|
+
c3_delegate(task="summarize this 4k-line stacktrace", backend="ollama")
|
|
213
|
+
c3_delegate(task="rate-limit refactor", backend="auto") # picks the right tier
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Ollama is fully optional. C3 works without it.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Permissions (Claude Code)
|
|
221
|
+
|
|
222
|
+
C3 manages `.claude/settings.local.json` with three tiers:
|
|
223
|
+
|
|
224
|
+
| Tier | What it allows |
|
|
225
|
+
|---|---|
|
|
226
|
+
| `read-only` | Exploration only — no file writes, no git writes, no installs |
|
|
227
|
+
| `standard` | Normal dev workflow — edit, build, test, local git **(recommended)** |
|
|
228
|
+
| `permissive` | Full trust — everything except destructive ops |
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
c3 permissions show
|
|
232
|
+
c3 permissions standard
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
All tiers allow C3's MCP tools and include a hard deny list (`rm -rf`, `sudo`, `git push --force`). Switching a tier **preserves your own `allow`/`deny` rules** — only C3-managed entries are replaced. The same applies to `.mcp.json` and your hooks.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Benchmarks
|
|
240
|
+
|
|
241
|
+
Every number C3 advertises is reproducible on your own machine, against your own project:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
c3 bench session # six realistic workflow scenarios, A/B with vs without C3
|
|
245
|
+
c3 benchmark /path/to/project # per-operation micro-benchmarks
|
|
246
|
+
c3 bench aider # Aider Polyglot suite (external; burns real API tokens)
|
|
247
|
+
c3 bench swe # SWE-bench Lite (external)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
The session benchmark's baseline models a *competent* agent working without C3 — one targeted search, each file read once — and scores answer quality alongside tokens. Runs against C3's own repository land around **~50% token savings (2×)** at quality parity — 51.8% at v2.43.0, 49.9% at v2.63.2, with C3 scoring 98.8% on answer quality against the baseline's 96.5% in both. File sampling is deterministic (largest files first, no RNG), so a given commit reproduces the same figure. Your numbers will differ with your project's shape; that's why the harness ships with the tool.
|
|
251
|
+
|
|
252
|
+
C3 also records real per-tool usage to `.c3/tool_telemetry.jsonl`, so estimates can be checked against what actually happened.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Security & privacy
|
|
257
|
+
|
|
258
|
+
- **All web servers bind `127.0.0.1` by default** and are guarded against browser-based attacks even on loopback — a Host-header allowlist (defeats DNS rebinding) plus an Origin/Referer check on every request (defeats cross-origin CSRF), with scoped, non-wildcard CORS. There is still **no user authentication**, so do not expose these servers to an untrusted network without auth/TLS in front. Binding to a non-loopback interface is opt-in and warned at startup. *(Hardening added in v2.33.0.)*
|
|
259
|
+
- **No telemetry by default.** The OSS package collects nothing. Opt-in Sentry crash reporting requires the `[telemetry]` extra plus both `SENTRY_DSN` and `C3_TELEMETRY_OPT_IN=1`; even then request bodies, local variables, and prompts are stripped.
|
|
260
|
+
- **LLM memory distillation is local-first.** Cloud distillation (v2.51.0) is off by default and opt-in per project.
|
|
261
|
+
- **API keys** for third-party providers are read from the environment and never persisted by C3.
|
|
262
|
+
- Full hardening guide and disclosure policy: [`SECURITY.md`](https://github.com/drknowhow/code-context-control/blob/main/SECURITY.md)
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Support C3
|
|
267
|
+
|
|
268
|
+
C3 is free, open source, and built by one person. If it saves you tokens — that's the whole point — consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship funds API costs for cross-model test runs and dedicated development time.
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
Apache License 2.0 ([`LICENSE`](https://github.com/drknowhow/code-context-control/blob/main/LICENSE)) — free for any use, including commercial. Third-party deps: [`THIRD_PARTY_LICENSES.md`](https://github.com/drknowhow/code-context-control/blob/main/THIRD_PARTY_LICENSES.md).
|
|
273
|
+
|
|
274
|
+
The author may introduce a paid offering or relicense future major versions; no commitment either way. Releases already published under Apache-2.0 (including all 2.x versions) keep that grant irrevocably. Background: [`LICENSING.md`](https://github.com/drknowhow/code-context-control/blob/main/LICENSING.md).
|
|
275
|
+
|
|
276
|
+
## Links
|
|
277
|
+
|
|
278
|
+
- **PyPI:** https://pypi.org/project/code-context-control/
|
|
279
|
+
- **Changelog:** [`CHANGELOG.md`](https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md)
|
|
280
|
+
- **Issues:** https://github.com/drknowhow/code-context-control/issues
|
|
281
|
+
- **Sponsor:** https://github.com/sponsors/drknowhow
|