code-context-control 2.102.0__tar.gz → 2.109.0__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.102.0 → code_context_control-2.109.0}/PKG-INFO +3 -1
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/c3.py +53 -16
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/commands/common.py +26 -3
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/commands/parser.py +24 -1
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/mcp_server.py +19 -4
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/federate.py +6 -3
- code_context_control-2.109.0/cli/tools/search.py +659 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/code_context_control.egg-info/PKG-INFO +3 -1
- {code_context_control-2.102.0 → code_context_control-2.109.0}/code_context_control.egg-info/SOURCES.txt +12 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/code_context_control.egg-info/requires.txt +3 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/pyproject.toml +7 -1
- code_context_control-2.109.0/services/bench/search_eval.py +708 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/embedding_index.py +129 -4
- code_context_control-2.109.0/services/index_store.py +366 -0
- code_context_control-2.109.0/services/indexer.py +1387 -0
- code_context_control-2.109.0/services/lexical_index.py +245 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/parser.py +27 -1
- code_context_control-2.109.0/services/reranker.py +126 -0
- code_context_control-2.109.0/services/retrieval.py +58 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/runtime.py +16 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/subprojects.py +12 -1
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/watcher.py +14 -2
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_cooccurrence_bounds.py +3 -1
- code_context_control-2.109.0/tests/test_index_cap_not_hardcoded.py +131 -0
- code_context_control-2.109.0/tests/test_search_eval.py +162 -0
- code_context_control-2.109.0/tests/test_search_p1.py +276 -0
- code_context_control-2.109.0/tests/test_search_p2.py +296 -0
- code_context_control-2.109.0/tests/test_search_p2b.py +244 -0
- code_context_control-2.109.0/tests/test_search_p3.py +358 -0
- code_context_control-2.109.0/tests/test_search_p4.py +200 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/index_view.py +13 -4
- code_context_control-2.102.0/cli/tools/search.py +0 -417
- code_context_control-2.102.0/services/indexer.py +0 -845
- {code_context_control-2.102.0 → code_context_control-2.109.0}/LICENSE +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/README.md +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/_hook_utils.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/_shell_writes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/commands/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/docs.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/edits.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/access.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/credentials.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/index.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/masking.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/oracle.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/shared.css +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/tools.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/guide/workflow.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_access_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_artifact.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_c3read.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_filter.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_read.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_server.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_access.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_ci.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_cred_audit.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_credentials.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_locks.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/hub_tokens.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/hub_ui.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/progress.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/server.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/_grants.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/agent.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/ci.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/compress.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/delegate.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/edit.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/edit_verify.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/edits.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/filter.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/impact.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/jira.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/locks.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/memory.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/override.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/project.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/read.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/session.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/shell.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/status.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/tasks.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/tools/validate.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/api.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/app.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/access.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/credentials.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/enforcement.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/icons.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/shared.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui/theme.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui_legacy.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/cli/ui_nano.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/core/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/core/config.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/core/ide.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/core/mcp_toml.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/core/web_security.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/config.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/oracle_server.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/chat_poll.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/discovery_audit.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/local_session.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/mobile_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/activity.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/agents.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/app.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/busy.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/core.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/header.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/insights.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/projects.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/qrcode.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/settings.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/access_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/access_telemetry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/activity_log.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/agent_base.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/agent_locks.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/agents.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/artifact_defs.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/artifact_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/auto_memory.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/background_service.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/bench/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/bitbucket_client.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_act.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_cache.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_expr.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_failures.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_github.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_impact.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_intel.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_runner.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ci_workflow.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/circuit_breaker.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/claude_md.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/compressor.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/context_snapshot.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/conversation_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/cred_audit.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/cred_telemetry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/credential_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/doc_index.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/e2e_tasks.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/edit_ledger.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/enforcement_policy.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/error_reporting.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/file_memory.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/git_context.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/hub_service.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/jira_client.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/jira_cloud.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/jira_credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/jira_data_center.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/jira_links.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/mask_activation.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/mask_mirror.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/mask_presets.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory_consolidator.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory_distiller.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory_graph.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory_grounder.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory_queue.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/memory_scorer.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/metrics.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/notifications.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ollama_bridge.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ollama_client.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/ollama_credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/oracle_service.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/output_filter.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/override_grants.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/override_policy.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/override_requests.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/override_wake.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/project_manager.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/project_runtime.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/protocol.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/proxy_state.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/repo_map.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/repo_shape.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/retention.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/retrieval_broker.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/router.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/scanner.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/session_benchmark.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/session_manager.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/session_preloader.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/task_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/telemetry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/text_index.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/time_tracker.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/tool_classifier.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/transcript_index.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/validation_cache.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/vector_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/services/win_subprocess.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/setup.cfg +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_access_builtin_optout.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_access_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_access_guard_meta.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_access_guard_shell_project.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_access_guard_surfaces.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_access_guard_wiring.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_agent_locks.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_background_service.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_builtin_modes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_chat_poll.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_act.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_cache.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_expr.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_impact.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_intel.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_runner.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ci_workflow.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_confirm_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_confirm_guard_wiring.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_cred_audit.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_cred_telemetry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_credential_login_kind.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_credential_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_credential_ui_parity.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_delegate_version_probe.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_edit_ledger_deadline.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_edit_locking.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_edit_verify.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_embedding_index_deadlock.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_enforcement_policy.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_enforcement_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_env_parser.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_failed_calls_do_not_unlock.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_access_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_codex_compat.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_state.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_enforcement_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_locks_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_oracle_service_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_override_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ide_workflow_adaptation.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_init_clear_preserves_user_content.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_init_scan.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_client.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_links.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mask_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mask_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mask_surfaces.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_memory_system.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mobile_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mobile_extras.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mobile_override_routes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_mobile_security_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_no_stale_model_pins.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_chat_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_discovery_audit.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_health_probe.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_session_bootstrap.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_output_filter.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_override_grants.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_override_grants_mcp.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_override_requests.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_override_wake.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_permissions.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_pm_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_project_manager.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_project_tool.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_related_facts.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_repo_map.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_repo_shape.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_retention.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_review_digest.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_service_durability.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_session_budget.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_shell_write_ledger.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_shell_writes.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_subproject_clear_scope.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_subproject_depth_consumers.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_subproject_linkage_api.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_subprojects.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_task_store.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_task_tool.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_token_tracking.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_ui_jsx_syntax.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_validate.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_vault_write_guard.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_version_sync.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_web_security.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/backend.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/main.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/__init__.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/init_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/search_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/session_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/stats.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.102.0 → code_context_control-2.109.0}/tui/theme.tcss +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.109.0
|
|
4
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
5
|
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -47,6 +47,8 @@ Provides-Extra: vector
|
|
|
47
47
|
Requires-Dist: scikit-learn>=1.3.0; extra == "vector"
|
|
48
48
|
Requires-Dist: numpy>=1.24.0; extra == "vector"
|
|
49
49
|
Requires-Dist: chromadb>=0.4.24; extra == "vector"
|
|
50
|
+
Provides-Extra: rerank
|
|
51
|
+
Requires-Dist: flashrank>=0.2.10; extra == "rerank"
|
|
50
52
|
Provides-Extra: tui
|
|
51
53
|
Requires-Dist: textual>=0.50.0; extra == "tui"
|
|
52
54
|
Provides-Extra: telemetry
|
|
@@ -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.
|
|
95
|
+
__version__ = "2.109.0"
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
def _compress_file_cli(compressor, path, mode="smart", **kw):
|
|
@@ -591,21 +591,21 @@ def _check_c3_health(project_path: str) -> dict:
|
|
|
591
591
|
issues.append(f"missing directories: {', '.join(missing_dirs)}")
|
|
592
592
|
info["missing_dirs"] = missing_dirs
|
|
593
593
|
|
|
594
|
-
# Index presence and basic stats
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
issues.append("code index
|
|
607
|
-
|
|
608
|
-
|
|
594
|
+
# Index presence and basic stats (services/index_store; index.json is
|
|
595
|
+
# the pre-2.107.0 layout and counts as "present, needs a rebuild").
|
|
596
|
+
try:
|
|
597
|
+
from services.index_store import IndexStore
|
|
598
|
+
store = IndexStore(c3_dir / "index")
|
|
599
|
+
n_docs, n_chunks = store.counts()
|
|
600
|
+
except Exception:
|
|
601
|
+
store, n_docs, n_chunks = None, 0, 0
|
|
602
|
+
info["index_files"] = n_docs
|
|
603
|
+
info["index_chunks"] = n_chunks
|
|
604
|
+
if n_docs == 0:
|
|
605
|
+
if (c3_dir / "index" / "index.json").exists():
|
|
606
|
+
issues.append("code index in the pre-2.107.0 layout; run `c3 index` to migrate")
|
|
607
|
+
else:
|
|
608
|
+
issues.append("code index not built")
|
|
609
609
|
|
|
610
610
|
# Stale file changes (tracked by the watcher inside CodeIndex)
|
|
611
611
|
# The watcher writes pending changes to .c3/index/changes.json
|
|
@@ -1500,6 +1500,42 @@ def cmd_stats(args):
|
|
|
1500
1500
|
return common_cmd_stats(args, _command_deps())
|
|
1501
1501
|
|
|
1502
1502
|
|
|
1503
|
+
def cmd_search_eval(args):
|
|
1504
|
+
"""Run the c3_search relevance suite and compare it to its baseline.
|
|
1505
|
+
|
|
1506
|
+
Exit status 1 when the baseline is violated (a must_pass case failed, a
|
|
1507
|
+
canary leaked, or an aggregate fell under its floor), so the command can
|
|
1508
|
+
stand in a pre-push gate. See docs/search-eval.md.
|
|
1509
|
+
"""
|
|
1510
|
+
from services.bench import search_eval as se
|
|
1511
|
+
|
|
1512
|
+
try:
|
|
1513
|
+
report = se.run_suite(args.suite, repo=args.repo, rebuild=args.rebuild,
|
|
1514
|
+
semantic=args.semantic, baseline=args.baseline,
|
|
1515
|
+
rerank=getattr(args, "rerank", "off"))
|
|
1516
|
+
except FileNotFoundError as e:
|
|
1517
|
+
raise RuntimeError(str(e))
|
|
1518
|
+
|
|
1519
|
+
if args.update_baseline:
|
|
1520
|
+
path = args.baseline or se.BUNDLED_BASELINES.get(report.suite)
|
|
1521
|
+
if not path:
|
|
1522
|
+
raise RuntimeError(
|
|
1523
|
+
f"suite {report.suite!r} has no bundled baseline; pass --baseline PATH")
|
|
1524
|
+
floors = json.loads(args.floors) if args.floors else None
|
|
1525
|
+
se.write_baseline(report, path, floors=floors)
|
|
1526
|
+
# Re-compare so the printed verdict reflects the file just written.
|
|
1527
|
+
report.baseline_violations, report.baseline_warnings = se.compare_to_baseline(
|
|
1528
|
+
report, se.load_baseline(path))
|
|
1529
|
+
print(f"baseline written: {path}")
|
|
1530
|
+
|
|
1531
|
+
if args.json:
|
|
1532
|
+
print(json.dumps(report.to_dict(), indent=2))
|
|
1533
|
+
else:
|
|
1534
|
+
print(report.render())
|
|
1535
|
+
if report.baseline_violations:
|
|
1536
|
+
sys.exit(1)
|
|
1537
|
+
|
|
1538
|
+
|
|
1503
1539
|
def _benchmark_extract_preview(full_path: Path, compressor: CodeCompressor, pattern: str = "", max_lines: int = 50) -> str:
|
|
1504
1540
|
"""Approximate c3_filter behavior for local benchmarking without MCP startup."""
|
|
1505
1541
|
import re as _re
|
|
@@ -9163,6 +9199,7 @@ def main():
|
|
|
9163
9199
|
"claudemd": cmd_claudemd,
|
|
9164
9200
|
"map": cmd_map,
|
|
9165
9201
|
"stats": cmd_stats,
|
|
9202
|
+
"search-eval": cmd_search_eval,
|
|
9166
9203
|
"benchmark": cmd_benchmark,
|
|
9167
9204
|
"session-benchmark": cmd_session_benchmark,
|
|
9168
9205
|
"benchmark-e2e": cmd_benchmark_e2e,
|
|
@@ -26,25 +26,48 @@ class CommandDeps:
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def cmd_index(args, deps: CommandDeps):
|
|
29
|
-
"""Rebuild the code index.
|
|
29
|
+
"""Rebuild the code index.
|
|
30
|
+
|
|
31
|
+
``--max-files`` defaults to None so an unset flag falls through to
|
|
32
|
+
``CodeIndex.build_index``, which reads ``index_max_files`` from
|
|
33
|
+
``.c3/config.json`` (2000 by default). Passing a hard-coded number here
|
|
34
|
+
would shadow that config for every caller who did not type the flag.
|
|
35
|
+
|
|
36
|
+
A truncated index is reported, never silent: the caller who sees only
|
|
37
|
+
"Files Indexed: 500" has no way to know 1400 files were skipped, and a
|
|
38
|
+
partial index answers searches with confident absences.
|
|
39
|
+
"""
|
|
30
40
|
config = deps.load_config()
|
|
31
41
|
project_path = config.get("project_path", ".")
|
|
32
42
|
|
|
33
43
|
deps.print_header("Rebuilding Code Index")
|
|
34
44
|
indexer = deps.CodeIndex(project_path)
|
|
35
|
-
result = indexer.build_index(max_files=args.max_files
|
|
45
|
+
result = indexer.build_index(max_files=args.max_files)
|
|
46
|
+
|
|
47
|
+
capped = result.get("files_capped", 0) or 0
|
|
48
|
+
candidates = result["files_indexed"] + capped
|
|
36
49
|
|
|
37
50
|
if deps.HAS_RICH:
|
|
38
51
|
table = deps.Table(title="Index Results")
|
|
39
52
|
table.add_column("Metric", style="cyan")
|
|
40
53
|
table.add_column("Value", style="green")
|
|
41
|
-
|
|
54
|
+
files_cell = str(result["files_indexed"])
|
|
55
|
+
if capped:
|
|
56
|
+
files_cell = f"{result['files_indexed']} of {candidates}"
|
|
57
|
+
table.add_row("Files Indexed", files_cell)
|
|
42
58
|
table.add_row("Chunks Created", str(result["chunks_created"]))
|
|
43
59
|
table.add_row("Unique Symbols", str(result["unique_symbols"]))
|
|
60
|
+
if capped:
|
|
61
|
+
table.add_row("Files Skipped (cap)", str(capped))
|
|
44
62
|
deps.console.print(table)
|
|
45
63
|
else:
|
|
46
64
|
print(f" Files: {result['files_indexed']}, Chunks: {result['chunks_created']}, Symbols: {result['unique_symbols']}")
|
|
47
65
|
|
|
66
|
+
if capped:
|
|
67
|
+
print(f" [!] Indexed {result['files_indexed']} of {candidates} candidate files "
|
|
68
|
+
f"(cap: index_max_files={result.get('max_files')}). {capped} skipped.")
|
|
69
|
+
print(" Raise index_max_files in .c3/config.json for full coverage.")
|
|
70
|
+
|
|
48
71
|
|
|
49
72
|
def cmd_compress(args, deps: CommandDeps):
|
|
50
73
|
"""Compress a file and show results."""
|
|
@@ -34,7 +34,30 @@ def build_parser(version: str, parse_cli_ide_arg):
|
|
|
34
34
|
help="Only report whether a newer version exists; don't install")
|
|
35
35
|
|
|
36
36
|
p_index = subparsers.add_parser("index", help="Rebuild code index")
|
|
37
|
-
p_index.add_argument("--max-files", type=int, default=
|
|
37
|
+
p_index.add_argument("--max-files", type=int, default=None,
|
|
38
|
+
help="Cap files indexed this run. Unset reads "
|
|
39
|
+
"index_max_files from .c3/config.json (2000).")
|
|
40
|
+
|
|
41
|
+
p_search_eval = subparsers.add_parser(
|
|
42
|
+
"search-eval", help="Run the c3_search relevance suite (docs/search-eval.md)")
|
|
43
|
+
p_search_eval.add_argument("--suite", default="fixture",
|
|
44
|
+
help="'fixture' (synthetic repo, CI gate), 'golden' (this repo), or a .jsonl path")
|
|
45
|
+
p_search_eval.add_argument("--repo", default=None,
|
|
46
|
+
help="Project to evaluate; overrides the suite header (real repos only)")
|
|
47
|
+
p_search_eval.add_argument("--semantic", choices=["off", "auto", "on"], default="auto",
|
|
48
|
+
help="off: skip semantic cases; auto: run when embeddings are ready; "
|
|
49
|
+
"on: build embeddings first (needs Ollama)")
|
|
50
|
+
p_search_eval.add_argument("--rerank", choices=["off", "on"], default="off",
|
|
51
|
+
help="on: attach the FlashRank reranker (needs the `rerank` extra) to measure it "
|
|
52
|
+
"against the same suite; off: the project's own config decides")
|
|
53
|
+
p_search_eval.add_argument("--rebuild", action="store_true",
|
|
54
|
+
help="Rebuild the code index before running (real repos; fixtures always rebuild)")
|
|
55
|
+
p_search_eval.add_argument("--baseline", default=None, help="Baseline JSON to compare against / write")
|
|
56
|
+
p_search_eval.add_argument("--update-baseline", action="store_true",
|
|
57
|
+
help="Write aggregates + per-query status to the baseline (floors are kept)")
|
|
58
|
+
p_search_eval.add_argument("--floors", default=None,
|
|
59
|
+
help='With --update-baseline: JSON object of metric floors, e.g. \'{"mrr": 0.85}\'')
|
|
60
|
+
p_search_eval.add_argument("--json", action="store_true", help="Emit the full report as JSON")
|
|
38
61
|
|
|
39
62
|
p_compress = subparsers.add_parser("compress", help="Compress a file")
|
|
40
63
|
p_compress.add_argument("file", help="File to compress")
|
|
@@ -121,7 +121,10 @@ async def lifespan(server):
|
|
|
121
121
|
transcript_index._load_index()
|
|
122
122
|
transcript_index._load_manifest()
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
# No store yet, or only a pre-2.107.0 layout (index.json / lexical.sqlite)
|
|
125
|
+
# that a load would rebuild: either way the ~10 s build must stay off the
|
|
126
|
+
# MCP handshake path.
|
|
127
|
+
if (not services.indexer.index_exists()) or services.indexer.needs_migration():
|
|
125
128
|
import threading
|
|
126
129
|
|
|
127
130
|
def _bg_build():
|
|
@@ -479,9 +482,20 @@ def _finalize_response(ctx: Context, tool_name: str, args: dict,
|
|
|
479
482
|
@mcp.tool()
|
|
480
483
|
async def c3_search(query: str, action: str = "code", top_k: int = 3,
|
|
481
484
|
max_tokens: int = 1200, prefetch: bool = False,
|
|
482
|
-
scope: str = "",
|
|
485
|
+
scope: str = "", ignore_case: bool = False,
|
|
486
|
+
path: str = "", lang: str = "", kind: str = "",
|
|
487
|
+
ctx: Context = None) -> str:
|
|
483
488
|
"""FIND candidates. Use to discover which files/symbols are relevant (read-only, plan-mode safe).
|
|
484
|
-
action: 'code' (
|
|
489
|
+
action: 'code' (default: BM25 over identifiers and their parts, digits kept, fused with the embedding
|
|
490
|
+
index by reciprocal rank when one is ready; a query that IS a symbol name puts its definition first;
|
|
491
|
+
an oversized chunk comes back as a window), 'lexical' (the BM25 ranking alone), 'exact' (regex over
|
|
492
|
+
every indexed file; ignore_case=True for case-insensitive), 'files' (by filename: exact name, glob
|
|
493
|
+
like 'configs/*.yml', or substring), 'semantic' (embeddings alone; falls back to code search when
|
|
494
|
+
empty), 'transcript'.
|
|
495
|
+
Filters (all actions but transcript, comma-separated): path='src/**,*.go' (globs or substrings),
|
|
496
|
+
lang='python,go' (names or extensions), kind='test,doc,config,source' and/or chunk types
|
|
497
|
+
'function,class,method,heading'. A query that names tests or asks a how-to question already
|
|
498
|
+
leans that way; filters make it exact.
|
|
485
499
|
scope: '' current project | 'all' also searches linked sub-projects | '<name>' one sub-project.
|
|
486
500
|
prefetch: auto-compress top results. Next step: c3_compress/c3_read on hits."""
|
|
487
501
|
svc = _svc(ctx)
|
|
@@ -491,7 +505,8 @@ async def c3_search(query: str, action: str = "code", top_k: int = 3,
|
|
|
491
505
|
|
|
492
506
|
return await asyncio.to_thread(handle_search, query, action, top_k, max_tokens, svc,
|
|
493
507
|
finalize, maybe_related_facts, prefetch=prefetch,
|
|
494
|
-
scope=scope
|
|
508
|
+
scope=scope, ignore_case=ignore_case,
|
|
509
|
+
path=path, lang=lang, kind=kind)
|
|
495
510
|
|
|
496
511
|
|
|
497
512
|
@mcp.tool()
|
|
@@ -63,7 +63,9 @@ def subproject_scopes(svc, scope: str = "all") -> list:
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def federated_search(query: str, action: str, top_k: int, max_tokens: int,
|
|
66
|
-
svc, finalize, maybe_facts, scope: str
|
|
66
|
+
svc, finalize, maybe_facts, scope: str,
|
|
67
|
+
ignore_case: bool = False, path: str = "", lang: str = "",
|
|
68
|
+
kind: str = "") -> str:
|
|
67
69
|
"""Sectioned fan-out search: parent (scope='all') + linked children.
|
|
68
70
|
|
|
69
71
|
A child failure renders as a one-line error inside its section — it never
|
|
@@ -73,11 +75,12 @@ def federated_search(query: str, action: str, top_k: int, max_tokens: int,
|
|
|
73
75
|
|
|
74
76
|
targets = subproject_scopes(svc, scope)
|
|
75
77
|
parts = []
|
|
78
|
+
extra = {"ignore_case": ignore_case, "path": path, "lang": lang, "kind": kind}
|
|
76
79
|
|
|
77
80
|
if scope == "all":
|
|
78
81
|
parent_budget = max(200, int(max_tokens * _PARENT_BUDGET_SHARE)) if targets else max_tokens
|
|
79
82
|
parts.append(handle_search(query, action, top_k, parent_budget, svc,
|
|
80
|
-
_noop_finalize, maybe_facts))
|
|
83
|
+
_noop_finalize, maybe_facts, **extra))
|
|
81
84
|
|
|
82
85
|
if not targets:
|
|
83
86
|
if scope != "all":
|
|
@@ -92,7 +95,7 @@ def federated_search(query: str, action: str, top_k: int, max_tokens: int,
|
|
|
92
95
|
try:
|
|
93
96
|
fsvc = _child_runtime(t["path"])
|
|
94
97
|
body = handle_search(query, action, child_k, child_budget, fsvc,
|
|
95
|
-
_noop_finalize, _noop_facts)
|
|
98
|
+
_noop_finalize, _noop_facts, **extra)
|
|
96
99
|
except Exception as e:
|
|
97
100
|
body = f"[error] {type(e).__name__}: {e}"
|
|
98
101
|
parts.append(f"=== [sub:{t['name']}] ===\n{body}")
|