code-context-control 2.89.0__tar.gz → 2.89.1__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.89.0/code_context_control.egg-info → code_context_control-2.89.1}/PKG-INFO +1 -1
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/c3.py +19 -8
- {code_context_control-2.89.0 → code_context_control-2.89.1/code_context_control.egg-info}/PKG-INFO +1 -1
- {code_context_control-2.89.0 → code_context_control-2.89.1}/pyproject.toml +1 -1
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/parser.py +11 -1
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/project_manager.py +3 -1
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_project_manager_merge.py +68 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_validate.py +28 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/LICENSE +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/README.md +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/_hook_utils.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/commands/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/commands/common.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/commands/parser.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/docs.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/edits.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/access.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/credentials.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/index.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/masking.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/oracle.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/shared.css +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/tools.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/guide/workflow.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_access_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_artifact.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_c3read.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_filter.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_read.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_server.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_ci.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_credentials.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_enforcement.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_locks.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/mcp_server.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/progress.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/server.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/_grants.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/agent.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/ci.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/compress.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/delegate.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/edit.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/edit_verify.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/edits.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/federate.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/filter.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/impact.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/jira.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/locks.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/memory.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/override.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/project.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/read.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/search.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/session.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/shell.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/status.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/tasks.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/tools/validate.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/api.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/app.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/access.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/credentials.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/enforcement.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/icons.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/shared.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/theme.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui_legacy.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui_nano.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/code_context_control.egg-info/SOURCES.txt +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/core/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/core/config.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/core/ide.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/core/mcp_toml.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/core/web_security.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/config.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/oracle_server.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/chat_poll.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/discovery_audit.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/local_session.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/mobile_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/activity.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/agents.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/app.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/busy.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/core.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/header.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/insights.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/projects.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/qrcode.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/settings.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/access_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/access_telemetry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/activity_log.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/agent_base.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/agent_locks.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/agents.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/artifact_defs.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/artifact_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/auto_memory.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/bench/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/bitbucket_client.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_act.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_cache.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_expr.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_failures.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_github.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_impact.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_intel.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_runner.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ci_workflow.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/circuit_breaker.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/claude_md.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/compressor.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/context_snapshot.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/conversation_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/cred_telemetry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/credential_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/doc_index.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/e2e_tasks.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/edit_ledger.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/embedding_index.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/enforcement_policy.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/error_reporting.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/file_memory.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/git_context.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/hub_service.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/indexer.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/jira_client.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/jira_cloud.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/jira_credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/jira_data_center.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/jira_links.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/mask_activation.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/mask_mirror.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/mask_presets.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory_consolidator.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory_distiller.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory_graph.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory_grounder.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory_queue.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/memory_scorer.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/metrics.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/notifications.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ollama_bridge.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ollama_client.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/ollama_credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/output_filter.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/override_grants.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/override_policy.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/override_requests.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/override_wake.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/project_runtime.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/protocol.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/proxy_state.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/repo_map.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/retention.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/retrieval_broker.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/router.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/runtime.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/scanner.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/session_benchmark.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/session_manager.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/session_preloader.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/subprojects.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/task_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/telemetry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/text_index.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/time_tracker.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/tool_classifier.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/transcript_index.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/validation_cache.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/vector_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/watcher.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/services/win_subprocess.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/setup.cfg +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_access_builtin_optout.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_access_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_access_guard_meta.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_access_guard_shell_project.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_access_guard_surfaces.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_access_guard_wiring.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_agent_locks.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_chat_poll.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_act.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_cache.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_expr.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_impact.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_intel.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_runner.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ci_workflow.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_cred_telemetry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_credential_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_delegate_version_probe.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_edit_ledger_deadline.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_edit_locking.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_edit_verify.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_embedding_index_deadlock.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_enforcement_policy.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_enforcement_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_access_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_codex_compat.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_state.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_enforcement_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_locks_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ide_workflow_adaptation.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_init_scan.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_client.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_links.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mask_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mask_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mask_surfaces.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_memory_system.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mobile_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mobile_extras.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mobile_override_routes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_mobile_security_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_no_stale_model_pins.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_chat_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_discovery_audit.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_session_bootstrap.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_output_filter.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_override_grants.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_override_grants_mcp.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_override_requests.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_override_wake.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_permissions.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_pm_api.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_project_manager.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_project_tool.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_related_facts.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_repo_map.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_retention.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_review_digest.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_service_durability.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_session_budget.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_subprojects.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_task_store.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_task_tool.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_vault_write_guard.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_version_sync.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_web_security.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/backend.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/main.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/__init__.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/index_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/init_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/search_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/session_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/stats.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.89.0 → code_context_control-2.89.1}/tui/theme.tcss +0 -0
{code_context_control-2.89.0/code_context_control.egg-info → code_context_control-2.89.1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.89.
|
|
3
|
+
Version: 2.89.1
|
|
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
|
|
@@ -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.89.
|
|
95
|
+
__version__ = "2.89.1"
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
def _compress_file_cli(compressor, path, mode="smart", **kw):
|
|
@@ -4555,14 +4555,22 @@ def _ensure_global_session_fallbacks(server_script: str, c3_mcp_exe: str | None
|
|
|
4555
4555
|
print(f"Warning: Could not update {antigravity_path} (global fallback skipped)")
|
|
4556
4556
|
|
|
4557
4557
|
|
|
4558
|
-
def _uninstall_mcp_all(project_path: str):
|
|
4559
|
-
"""Remove C3 MCP server configurations from all supported IDEs.
|
|
4558
|
+
def _uninstall_mcp_all(project_path: str, include_global: bool = True):
|
|
4559
|
+
"""Remove C3 MCP server configurations from all supported IDEs.
|
|
4560
|
+
|
|
4561
|
+
``include_global=False`` restricts removal to PROJECT-scoped config files
|
|
4562
|
+
(the project's .mcp.json, .codex/config.toml, settings/hooks). Home-level
|
|
4563
|
+
configs (~/.codex, Antigravity's mcp_config.json) are machine-wide and
|
|
4564
|
+
shared by every C3 project, so per-project cleanup — the merge action's
|
|
4565
|
+
``cleanup='clear'`` — must never touch them; only a real machine
|
|
4566
|
+
uninstall (the default) may."""
|
|
4560
4567
|
import shutil
|
|
4561
4568
|
from pathlib import Path
|
|
4562
4569
|
|
|
4563
4570
|
from core.ide import PROFILES
|
|
4564
4571
|
|
|
4565
|
-
|
|
4572
|
+
scope = "" if include_global else " (project-scoped only)"
|
|
4573
|
+
print(f"\nRemoving C3 MCP server configurations...{scope}")
|
|
4566
4574
|
target = Path(project_path).resolve()
|
|
4567
4575
|
|
|
4568
4576
|
# Remove .mcp.json if it exists (standard MCP config file)
|
|
@@ -4587,11 +4595,12 @@ def _uninstall_mcp_all(project_path: str):
|
|
|
4587
4595
|
# MCP Config paths to check
|
|
4588
4596
|
config_paths = []
|
|
4589
4597
|
if profile.config_path_global:
|
|
4590
|
-
|
|
4598
|
+
if include_global:
|
|
4599
|
+
config_paths.append(Path.home() / profile.config_path)
|
|
4591
4600
|
else:
|
|
4592
4601
|
config_paths.append(target / profile.config_path)
|
|
4593
4602
|
# For Codex, also check the global fallback in home dir
|
|
4594
|
-
if ide_name == "codex":
|
|
4603
|
+
if ide_name == "codex" and include_global:
|
|
4595
4604
|
config_paths.append(Path.home() / profile.config_path)
|
|
4596
4605
|
|
|
4597
4606
|
for mcp_config_path in config_paths:
|
|
@@ -4714,8 +4723,10 @@ def _uninstall_mcp_all(project_path: str):
|
|
|
4714
4723
|
print(f" Warning: Could not update {vscode_settings_path}: {e}")
|
|
4715
4724
|
|
|
4716
4725
|
# Legacy Gemini CLI configs (profile removed in v2.52) — still strip the c3 entry.
|
|
4717
|
-
|
|
4718
|
-
|
|
4726
|
+
legacy_cfgs = [target / ".gemini" / "settings.json"]
|
|
4727
|
+
if include_global:
|
|
4728
|
+
legacy_cfgs.append(Path.home() / ".gemini" / "settings.json")
|
|
4729
|
+
for legacy_cfg in legacy_cfgs:
|
|
4719
4730
|
if not legacy_cfg.exists():
|
|
4720
4731
|
continue
|
|
4721
4732
|
try:
|
{code_context_control-2.89.0 → code_context_control-2.89.1/code_context_control.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.89.
|
|
3
|
+
Version: 2.89.1
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-context-control"
|
|
7
|
-
version = "2.89.
|
|
7
|
+
version = "2.89.1"
|
|
8
8
|
description = "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."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -642,6 +642,7 @@ def check_syntax_ast(content: str, ext: str) -> List[Dict[str, Any]]:
|
|
|
642
642
|
|
|
643
643
|
# ── Native syntax checking (no tree-sitter, no AI) ──────────────────
|
|
644
644
|
import os as _os
|
|
645
|
+
import shutil as _shutil
|
|
645
646
|
import subprocess as _subprocess
|
|
646
647
|
import sys as _sys
|
|
647
648
|
import tempfile as _tempfile
|
|
@@ -715,6 +716,15 @@ def _result(status: str, checker: str, errors: List[Dict[str, Any]] | None = Non
|
|
|
715
716
|
|
|
716
717
|
def _subproc_check(cmd: List[str], content: str, suffix: str, checker: str, timeout: int = 8) -> Dict[str, Any]:
|
|
717
718
|
"""Write content to a temp file and run a checker subprocess."""
|
|
719
|
+
# Resolve the checker through PATH before Popen: npm-global tools on
|
|
720
|
+
# Windows are .cmd batch shims (tsc.cmd, eslint.cmd) that CreateProcess
|
|
721
|
+
# will not find by bare name — shutil.which returns the full shim path,
|
|
722
|
+
# which Popen can execute. Bare-name Popen made every npm checker report
|
|
723
|
+
# "not installed" on Windows even when it was on PATH.
|
|
724
|
+
exe = _shutil.which(cmd[0])
|
|
725
|
+
if exe is None:
|
|
726
|
+
return _result("checker_unavailable", checker,
|
|
727
|
+
detail=f"{cmd[0]} is not installed or not on PATH.")
|
|
718
728
|
fd, tmp = _tempfile.mkstemp(suffix=suffix)
|
|
719
729
|
try:
|
|
720
730
|
with _os.fdopen(fd, 'w', encoding='utf-8') as f:
|
|
@@ -728,7 +738,7 @@ def _subproc_check(cmd: List[str], content: str, suffix: str, checker: str, time
|
|
|
728
738
|
# the direct child, leaving any grandchild processes (e.g. Rscript -> R)
|
|
729
739
|
# running. encoding/errors avoid UnicodeDecodeError on non-UTF-8 output.
|
|
730
740
|
proc = _subprocess.Popen(
|
|
731
|
-
cmd + [tmp], stdin=_subprocess.DEVNULL,
|
|
741
|
+
[exe] + cmd[1:] + [tmp], stdin=_subprocess.DEVNULL,
|
|
732
742
|
stdout=_subprocess.PIPE, stderr=_subprocess.PIPE,
|
|
733
743
|
text=True, encoding="utf-8", errors="replace", **kwargs,
|
|
734
744
|
)
|
|
@@ -819,7 +819,9 @@ class ProjectManager:
|
|
|
819
819
|
# Lazy import to avoid services -> cli circular import at module load.
|
|
820
820
|
from cli.c3 import _instruction_documents_for_project, _uninstall_mcp_all
|
|
821
821
|
try:
|
|
822
|
-
|
|
822
|
+
# Project cleanup only — the machine-wide IDE registrations
|
|
823
|
+
# (~/.codex, Antigravity) serve every other C3 project.
|
|
824
|
+
_uninstall_mcp_all(str(src), include_global=False)
|
|
823
825
|
except Exception as e:
|
|
824
826
|
warnings.append(f"uninstall_mcp failed: {e}")
|
|
825
827
|
c3_dir = src / ".c3"
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/tests/test_project_manager_merge.py
RENAMED
|
@@ -10,6 +10,7 @@ import sys
|
|
|
10
10
|
import tempfile
|
|
11
11
|
import unittest
|
|
12
12
|
from pathlib import Path
|
|
13
|
+
from unittest import mock
|
|
13
14
|
|
|
14
15
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
15
16
|
if str(REPO_ROOT) not in sys.path:
|
|
@@ -188,6 +189,73 @@ class TestMergeClear(_SandboxedRegistry):
|
|
|
188
189
|
# Source directory itself still exists.
|
|
189
190
|
self.assertTrue(src.is_dir())
|
|
190
191
|
|
|
192
|
+
def test_merge_clear_never_touches_machine_global_ide_configs(self):
|
|
193
|
+
# Regression: cleanup='clear' once ran the full machine uninstall,
|
|
194
|
+
# stripping C3 from the REAL ~/.codex/config.toml and deleting
|
|
195
|
+
# Antigravity's mcp_config.json — configs shared by every project.
|
|
196
|
+
fake_home = self.tmp_root / "home"
|
|
197
|
+
codex_cfg = fake_home / ".codex" / "config.toml"
|
|
198
|
+
codex_cfg.parent.mkdir(parents=True)
|
|
199
|
+
codex_body = '[mcp_servers.c3]\ncommand = "c3-mcp"\nenabled = true\n'
|
|
200
|
+
codex_cfg.write_text(codex_body, encoding="utf-8")
|
|
201
|
+
ag_cfg = fake_home / ".gemini" / "antigravity" / "mcp_config.json"
|
|
202
|
+
ag_cfg.parent.mkdir(parents=True)
|
|
203
|
+
ag_body = json.dumps({"mcpServers": {"c3": {"command": "c3-mcp"}}})
|
|
204
|
+
ag_cfg.write_text(ag_body, encoding="utf-8")
|
|
205
|
+
|
|
206
|
+
pm = ProjectManager()
|
|
207
|
+
src = _seed_project(self.tmp_root, "src3")
|
|
208
|
+
tgt = _seed_project(self.tmp_root, "tgt3")
|
|
209
|
+
pm.add_project(str(src))
|
|
210
|
+
pm.add_project(str(tgt))
|
|
211
|
+
|
|
212
|
+
with mock.patch("pathlib.Path.home", return_value=fake_home):
|
|
213
|
+
result = pm.merge_projects(str(src), str(tgt), cleanup="clear")
|
|
214
|
+
self.assertTrue(result.get("merged"), msg=result)
|
|
215
|
+
self.assertEqual(codex_cfg.read_text(encoding="utf-8"), codex_body,
|
|
216
|
+
msg="~/.codex/config.toml must survive a project merge")
|
|
217
|
+
self.assertTrue(ag_cfg.exists(),
|
|
218
|
+
msg="Antigravity mcp_config.json must survive a project merge")
|
|
219
|
+
self.assertEqual(ag_cfg.read_text(encoding="utf-8"), ag_body)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class TestUninstallScope(_SandboxedRegistry):
|
|
223
|
+
"""_uninstall_mcp_all: include_global gates every Path.home() touch."""
|
|
224
|
+
|
|
225
|
+
def _fixture(self):
|
|
226
|
+
fake_home = self.tmp_root / "home2"
|
|
227
|
+
codex_cfg = fake_home / ".codex" / "config.toml"
|
|
228
|
+
codex_cfg.parent.mkdir(parents=True)
|
|
229
|
+
codex_cfg.write_text('[mcp_servers.c3]\ncommand = "c3-mcp"\n',
|
|
230
|
+
encoding="utf-8")
|
|
231
|
+
ag_cfg = fake_home / ".gemini" / "antigravity" / "mcp_config.json"
|
|
232
|
+
ag_cfg.parent.mkdir(parents=True)
|
|
233
|
+
ag_cfg.write_text(json.dumps({"mcpServers": {"c3": {"command": "x"}}}),
|
|
234
|
+
encoding="utf-8")
|
|
235
|
+
proj = _seed_project(self.tmp_root, "scoped")
|
|
236
|
+
return fake_home, codex_cfg, ag_cfg, proj
|
|
237
|
+
|
|
238
|
+
def test_project_scope_leaves_home_configs_alone(self):
|
|
239
|
+
from cli.c3 import _uninstall_mcp_all
|
|
240
|
+
fake_home, codex_cfg, ag_cfg, proj = self._fixture()
|
|
241
|
+
with mock.patch("pathlib.Path.home", return_value=fake_home):
|
|
242
|
+
_uninstall_mcp_all(str(proj), include_global=False)
|
|
243
|
+
self.assertIn("[mcp_servers.c3]", codex_cfg.read_text(encoding="utf-8"))
|
|
244
|
+
self.assertTrue(ag_cfg.exists())
|
|
245
|
+
|
|
246
|
+
def test_global_scope_still_cleans_home_configs(self):
|
|
247
|
+
from cli.c3 import _uninstall_mcp_all
|
|
248
|
+
fake_home, codex_cfg, ag_cfg, proj = self._fixture()
|
|
249
|
+
with mock.patch("pathlib.Path.home", return_value=fake_home):
|
|
250
|
+
_uninstall_mcp_all(str(proj), include_global=True)
|
|
251
|
+
self.assertNotIn(
|
|
252
|
+
"[mcp_servers.c3]",
|
|
253
|
+
codex_cfg.read_text(encoding="utf-8") if codex_cfg.exists() else "",
|
|
254
|
+
)
|
|
255
|
+
if ag_cfg.exists():
|
|
256
|
+
cfg = json.loads(ag_cfg.read_text(encoding="utf-8"))
|
|
257
|
+
self.assertNotIn("c3", cfg.get("mcpServers", {}))
|
|
258
|
+
|
|
191
259
|
|
|
192
260
|
class TestMergeValidation(_SandboxedRegistry):
|
|
193
261
|
def test_rejects_identical_paths(self):
|
|
@@ -98,6 +98,34 @@ class TestValidate(unittest.TestCase):
|
|
|
98
98
|
self.assertEqual(result["checker"], "node --check")
|
|
99
99
|
self.assertEqual(calls, ["node"])
|
|
100
100
|
|
|
101
|
+
def test_subproc_check_resolves_checker_through_which(self):
|
|
102
|
+
# npm-global tools on Windows are .cmd shims that a bare-name Popen
|
|
103
|
+
# cannot start — the checker must be launched by its resolved path.
|
|
104
|
+
seen = {}
|
|
105
|
+
|
|
106
|
+
class _FakeProc:
|
|
107
|
+
returncode = 0
|
|
108
|
+
def communicate(self, timeout=None):
|
|
109
|
+
return "", ""
|
|
110
|
+
|
|
111
|
+
def fake_popen(argv, **kw):
|
|
112
|
+
seen["argv0"] = argv[0]
|
|
113
|
+
return _FakeProc()
|
|
114
|
+
|
|
115
|
+
with patch("services.parser._shutil.which",
|
|
116
|
+
return_value=r"C:\Users\u\AppData\Roaming\npm\tsc.CMD"), \
|
|
117
|
+
patch("services.parser._subprocess.Popen", side_effect=fake_popen):
|
|
118
|
+
result = parser._subproc_check(["tsc", "--noEmit"], "x", ".jsx", "tsc")
|
|
119
|
+
self.assertEqual(result["status"], "ok")
|
|
120
|
+
self.assertEqual(seen["argv0"], r"C:\Users\u\AppData\Roaming\npm\tsc.CMD")
|
|
121
|
+
|
|
122
|
+
def test_subproc_check_unresolved_checker_is_unavailable_without_popen(self):
|
|
123
|
+
with patch("services.parser._shutil.which", return_value=None), \
|
|
124
|
+
patch("services.parser._subprocess.Popen") as popen:
|
|
125
|
+
result = parser._subproc_check(["tsc", "--noEmit"], "x", ".jsx", "tsc")
|
|
126
|
+
self.assertEqual(result["status"], "checker_unavailable")
|
|
127
|
+
popen.assert_not_called()
|
|
128
|
+
|
|
101
129
|
def test_timeout_wrapper_returns_timeout_status(self):
|
|
102
130
|
import time
|
|
103
131
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/add_project.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/config_editor.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_artifacts.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_health.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_panel.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_tasks.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/drill_views.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/global_search.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_credentials.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_enforcement.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/hub_locks.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/mcp_manager.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/project_card.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/project_tree.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/session_drawer.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/settings_modal.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/sidebar.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/summary_bar.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/hub_ui/components/task_board.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/credentials.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/enforcement.js
RENAMED
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/cli/ui/components/instructions.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_context_control-2.89.0 → code_context_control-2.89.1}/oracle/services/activity_reporter.py
RENAMED
|
File without changes
|
|
File without changes
|