code-context-control 2.96.0__tar.gz → 2.96.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.96.0/code_context_control.egg-info → code_context_control-2.96.1}/PKG-INFO +1 -1
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/c3.py +1 -1
- {code_context_control-2.96.0 → code_context_control-2.96.1/code_context_control.egg-info}/PKG-INFO +1 -1
- {code_context_control-2.96.0 → code_context_control-2.96.1}/code_context_control.egg-info/SOURCES.txt +1 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/pyproject.toml +1 -1
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/subprojects.py +5 -1
- code_context_control-2.96.1/tests/test_subproject_clear_scope.py +118 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ui_jsx_syntax.py +49 -3
- {code_context_control-2.96.0 → code_context_control-2.96.1}/LICENSE +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/README.md +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/_hook_utils.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/_shell_writes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/commands/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/commands/common.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/commands/parser.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/docs.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/edits.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/access.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/credentials.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/index.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/masking.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/oracle.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/shared.css +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/tools.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/guide/workflow.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_access_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_artifact.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_c3read.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_filter.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_read.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_server.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_ci.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_cred_audit.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_credentials.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_enforcement.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_locks.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_tokens.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/mcp_server.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/progress.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/server.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/_grants.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/agent.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/ci.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/compress.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/delegate.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/edit.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/edit_verify.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/edits.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/federate.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/filter.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/impact.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/jira.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/locks.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/memory.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/override.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/project.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/read.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/search.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/session.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/shell.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/status.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/tasks.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/tools/validate.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/api.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/app.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/access.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/credentials.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/enforcement.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/icons.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/shared.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/theme.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui_legacy.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui_nano.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/core/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/core/config.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/core/ide.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/core/mcp_toml.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/core/web_security.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/config.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/oracle_server.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/chat_poll.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/discovery_audit.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/local_session.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/mobile_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/activity.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/agents.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/app.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/busy.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/core.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/header.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/insights.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/projects.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/qrcode.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/settings.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/access_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/access_telemetry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/activity_log.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/agent_base.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/agent_locks.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/agents.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/artifact_defs.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/artifact_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/auto_memory.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/background_service.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/bench/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/bitbucket_client.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_act.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_cache.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_expr.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_failures.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_github.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_impact.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_intel.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_runner.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ci_workflow.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/circuit_breaker.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/claude_md.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/compressor.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/context_snapshot.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/conversation_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/cred_audit.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/cred_telemetry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/credential_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/doc_index.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/e2e_tasks.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/edit_ledger.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/embedding_index.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/enforcement_policy.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/error_reporting.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/file_memory.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/git_context.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/hub_service.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/indexer.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/jira_client.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/jira_cloud.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/jira_credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/jira_data_center.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/jira_links.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/mask_activation.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/mask_mirror.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/mask_presets.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory_consolidator.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory_distiller.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory_graph.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory_grounder.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory_queue.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/memory_scorer.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/metrics.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/notifications.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ollama_bridge.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ollama_client.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/ollama_credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/oracle_service.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/output_filter.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/override_grants.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/override_policy.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/override_requests.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/override_wake.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/parser.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/project_manager.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/project_runtime.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/protocol.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/proxy_state.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/repo_map.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/repo_shape.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/retention.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/retrieval_broker.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/router.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/runtime.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/scanner.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/session_benchmark.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/session_manager.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/session_preloader.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/task_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/telemetry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/text_index.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/time_tracker.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/tool_classifier.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/transcript_index.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/validation_cache.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/vector_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/watcher.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/services/win_subprocess.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/setup.cfg +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_access_builtin_optout.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_access_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_access_guard_meta.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_access_guard_shell_project.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_access_guard_surfaces.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_access_guard_wiring.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_agent_locks.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_background_service.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_chat_poll.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_act.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_cache.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_expr.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_impact.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_intel.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_runner.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ci_workflow.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_cooccurrence_bounds.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_cred_audit.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_cred_telemetry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_credential_login_kind.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_credential_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_credential_ui_parity.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_delegate_version_probe.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_edit_ledger_deadline.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_edit_locking.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_edit_verify.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_embedding_index_deadlock.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_enforcement_policy.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_enforcement_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_env_parser.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_failed_calls_do_not_unlock.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_access_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_codex_compat.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_state.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_enforcement_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_locks_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_oracle_service_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ide_workflow_adaptation.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_init_clear_preserves_user_content.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_init_scan.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_client.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_links.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mask_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mask_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mask_surfaces.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_memory_system.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mobile_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mobile_extras.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mobile_override_routes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_mobile_security_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_no_stale_model_pins.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_chat_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_discovery_audit.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_health_probe.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_session_bootstrap.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_output_filter.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_override_grants.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_override_grants_mcp.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_override_requests.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_override_wake.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_permissions.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_pm_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_project_manager.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_project_tool.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_related_facts.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_repo_map.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_repo_shape.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_retention.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_review_digest.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_service_durability.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_session_budget.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_shell_write_ledger.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_shell_writes.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_subproject_depth_consumers.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_subproject_linkage_api.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_subprojects.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_task_store.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_task_tool.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_token_tracking.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_validate.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_vault_write_guard.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_version_sync.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_web_security.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/backend.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/main.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/__init__.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/index_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/init_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/search_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/session_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/stats.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.96.0 → code_context_control-2.96.1}/tui/theme.tcss +0 -0
{code_context_control-2.96.0/code_context_control.egg-info → code_context_control-2.96.1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.96.
|
|
3
|
+
Version: 2.96.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
|
{code_context_control-2.96.0 → code_context_control-2.96.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.96.
|
|
3
|
+
Version: 2.96.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
|
|
@@ -421,6 +421,7 @@ tests/test_shell_creds.py
|
|
|
421
421
|
tests/test_shell_robustness.py
|
|
422
422
|
tests/test_shell_write_ledger.py
|
|
423
423
|
tests/test_shell_writes.py
|
|
424
|
+
tests/test_subproject_clear_scope.py
|
|
424
425
|
tests/test_subproject_depth_consumers.py
|
|
425
426
|
tests/test_subproject_exclusion.py
|
|
426
427
|
tests/test_subproject_federation.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-context-control"
|
|
7
|
-
version = "2.96.
|
|
7
|
+
version = "2.96.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"
|
|
@@ -629,7 +629,11 @@ class SubprojectManager:
|
|
|
629
629
|
# Same cleanup helpers merge_projects uses (lazy cli import).
|
|
630
630
|
from cli.c3 import _instruction_documents_for_project, _uninstall_mcp_all
|
|
631
631
|
try:
|
|
632
|
-
|
|
632
|
+
# Project cleanup only. ~/.codex and Antigravity's
|
|
633
|
+
# mcp_config.json are machine-wide and serve every other
|
|
634
|
+
# C3 project, so removing ONE sub-project must not
|
|
635
|
+
# deregister C3 from the box.
|
|
636
|
+
_uninstall_mcp_all(str(abs_path), include_global=False)
|
|
633
637
|
except Exception as e:
|
|
634
638
|
warnings.append(f"uninstall_mcp failed: {e}")
|
|
635
639
|
c3_dir = abs_path / ".c3"
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""``c3 sub remove --clear`` must not deregister C3 from the whole machine.
|
|
2
|
+
|
|
3
|
+
2.89.1 fixed exactly this for the Hub's Merge action: ``cleanup='clear'``
|
|
4
|
+
called ``_uninstall_mcp_all(src)`` — the MACHINE uninstall — which walks
|
|
5
|
+
``Path.home()`` and strips C3 from ``~/.codex/config.toml`` and Antigravity's
|
|
6
|
+
``mcp_config.json``. Those files are shared by every C3 project on the box, so
|
|
7
|
+
cleaning up ONE project silently broke all of them. ``merge_projects`` was
|
|
8
|
+
given ``include_global=False``; ``SubprojectManager.remove(mode='clear')``
|
|
9
|
+
was not, and kept the bug until 2.96.1.
|
|
10
|
+
|
|
11
|
+
Why no test caught it: ``SubprojectBase`` in ``test_subprojects.py`` patches
|
|
12
|
+
``cli.c3._uninstall_mcp_all`` with a lambda that swallows every argument, so
|
|
13
|
+
the one argument that mattered could not be observed. These tests deliberately
|
|
14
|
+
run the REAL helper against a fake home, and assert on the files rather than on
|
|
15
|
+
the call — a stub that ignores its kwargs cannot fail the way this bug did.
|
|
16
|
+
"""
|
|
17
|
+
import json
|
|
18
|
+
import sys
|
|
19
|
+
import tempfile
|
|
20
|
+
import unittest
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from unittest import mock
|
|
23
|
+
|
|
24
|
+
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
25
|
+
|
|
26
|
+
from services import project_manager as pm_mod # noqa: E402
|
|
27
|
+
from services import subprojects as sp # noqa: E402
|
|
28
|
+
|
|
29
|
+
CODEX_BODY = '[mcp_servers.c3]\ncommand = "c3-mcp"\n'
|
|
30
|
+
AG_BODY = json.dumps({"mcpServers": {"c3": {"command": "c3-mcp"}}})
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _seed_c3_project(path: Path, name: str) -> Path:
|
|
34
|
+
(path / ".c3").mkdir(parents=True, exist_ok=True)
|
|
35
|
+
(path / ".c3" / "config.json").write_text(
|
|
36
|
+
json.dumps({"meta": {"name": name}}), encoding="utf-8")
|
|
37
|
+
return path
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class TestSubprojectClearScope(unittest.TestCase):
|
|
41
|
+
def setUp(self):
|
|
42
|
+
self._tmp = tempfile.TemporaryDirectory()
|
|
43
|
+
self.base = Path(self._tmp.name)
|
|
44
|
+
|
|
45
|
+
self.parent = _seed_c3_project(self.base / "parent", "parent")
|
|
46
|
+
# Deliberately OUTSIDE the parent: the external-link path is the one
|
|
47
|
+
# 2.96.0 made reachable, so it is the one that must be regression-proof.
|
|
48
|
+
self.child = _seed_c3_project(self.base / "elsewhere" / "child", "child")
|
|
49
|
+
|
|
50
|
+
self.reg_file = self.base / "projects.json"
|
|
51
|
+
self.reg_file.write_text(json.dumps({"projects": []}), encoding="utf-8")
|
|
52
|
+
|
|
53
|
+
self.home = self.base / "fakehome"
|
|
54
|
+
self.codex_cfg = self.home / ".codex" / "config.toml"
|
|
55
|
+
self.codex_cfg.parent.mkdir(parents=True)
|
|
56
|
+
self.codex_cfg.write_text(CODEX_BODY, encoding="utf-8")
|
|
57
|
+
self.ag_cfg = self.home / ".gemini" / "antigravity" / "mcp_config.json"
|
|
58
|
+
self.ag_cfg.parent.mkdir(parents=True)
|
|
59
|
+
self.ag_cfg.write_text(AG_BODY, encoding="utf-8")
|
|
60
|
+
|
|
61
|
+
self._patches = [
|
|
62
|
+
mock.patch.object(pm_mod, "_PROJECTS_FILE", self.reg_file),
|
|
63
|
+
mock.patch.object(pm_mod, "_REGISTRY_FILE", self.base / "registry.json"),
|
|
64
|
+
mock.patch("cli.c3._do_init", lambda *a, **k: None),
|
|
65
|
+
]
|
|
66
|
+
for p in self._patches:
|
|
67
|
+
p.start()
|
|
68
|
+
|
|
69
|
+
def tearDown(self):
|
|
70
|
+
for p in self._patches:
|
|
71
|
+
p.stop()
|
|
72
|
+
self._tmp.cleanup()
|
|
73
|
+
|
|
74
|
+
def _link_child(self):
|
|
75
|
+
mgr = sp.SubprojectManager(str(self.parent))
|
|
76
|
+
res = mgr.add(str(self.child), run_init=False, reindex_parent=False)
|
|
77
|
+
self.assertTrue(res.get("added"), msg=res)
|
|
78
|
+
return mgr
|
|
79
|
+
|
|
80
|
+
def test_clear_leaves_machine_wide_mcp_configs_alone(self):
|
|
81
|
+
mgr = self._link_child()
|
|
82
|
+
with mock.patch("pathlib.Path.home", return_value=self.home):
|
|
83
|
+
res = mgr.remove("child", mode="clear", reindex_parent=False)
|
|
84
|
+
self.assertTrue(res.get("removed"), msg=res)
|
|
85
|
+
|
|
86
|
+
self.assertEqual(
|
|
87
|
+
self.codex_cfg.read_text(encoding="utf-8"), CODEX_BODY,
|
|
88
|
+
msg="~/.codex/config.toml serves every C3 project on the box; "
|
|
89
|
+
"removing one sub-project must not touch it")
|
|
90
|
+
self.assertTrue(
|
|
91
|
+
self.ag_cfg.exists(),
|
|
92
|
+
msg="Antigravity mcp_config.json must survive a sub-project clear")
|
|
93
|
+
self.assertEqual(self.ag_cfg.read_text(encoding="utf-8"), AG_BODY)
|
|
94
|
+
|
|
95
|
+
def test_clear_still_removes_the_childs_own_files(self):
|
|
96
|
+
"""The narrowed scope must not turn --clear into a no-op."""
|
|
97
|
+
mgr = self._link_child()
|
|
98
|
+
(self.child / "CLAUDE.md").write_text("x", encoding="utf-8")
|
|
99
|
+
with mock.patch("pathlib.Path.home", return_value=self.home):
|
|
100
|
+
res = mgr.remove("child", mode="clear", reindex_parent=False)
|
|
101
|
+
self.assertTrue(res.get("removed"), msg=res)
|
|
102
|
+
self.assertFalse((self.child / ".c3").exists(),
|
|
103
|
+
msg="--clear must still wipe the child's own .c3")
|
|
104
|
+
self.assertFalse((self.child / "CLAUDE.md").exists(),
|
|
105
|
+
msg="--clear must still remove the child's instruction docs")
|
|
106
|
+
|
|
107
|
+
def test_unlink_never_reaches_the_uninstall_helper_at_all(self):
|
|
108
|
+
mgr = self._link_child()
|
|
109
|
+
with mock.patch("cli.c3._uninstall_mcp_all") as spy:
|
|
110
|
+
res = mgr.remove("child", mode="unlink", reindex_parent=False)
|
|
111
|
+
self.assertTrue(res.get("removed"), msg=res)
|
|
112
|
+
spy.assert_not_called()
|
|
113
|
+
self.assertTrue((self.child / ".c3").exists(),
|
|
114
|
+
msg="unlink keeps the child's .c3")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
if __name__ == "__main__":
|
|
118
|
+
unittest.main()
|
|
@@ -14,6 +14,12 @@ be a plain `/* ... */`, or move above the conditional.
|
|
|
14
14
|
The existing bundle tests check the SHAPE of the build (files listed, markers
|
|
15
15
|
stamped, order kept) and passed the whole time the broken file was shipping.
|
|
16
16
|
This one checks the property that actually broke.
|
|
17
|
+
|
|
18
|
+
The transpile checks need node + `@babel/standalone`, and skip without them.
|
|
19
|
+
That skip is correct on a dev box and dangerous in CI, because a summary line
|
|
20
|
+
reading "2 passed, 2 skipped" is indistinguishable from a green run — so
|
|
21
|
+
`C3_REQUIRE_JSX_TOOLCHAIN=1` turns a missing toolchain into a FAILURE. CI sets
|
|
22
|
+
it; locally, `npm install --no-save @babel/standalone` makes the real parse run.
|
|
17
23
|
"""
|
|
18
24
|
from __future__ import annotations
|
|
19
25
|
|
|
@@ -107,17 +113,56 @@ def _bundle_files(server_rel, const_name):
|
|
|
107
113
|
return [REPO_ROOT / "cli" / rel for rel in _JS_STR.findall(match.group(1))]
|
|
108
114
|
|
|
109
115
|
|
|
116
|
+
def _node_env():
|
|
117
|
+
"""Environment for every node call, with the repo's own node_modules on it.
|
|
118
|
+
|
|
119
|
+
node resolves `require` relative to the SCRIPT's directory, and the parse
|
|
120
|
+
script below is written to a temp dir. A local `npm install` in the repo
|
|
121
|
+
root is therefore invisible to it, while a global install plus NODE_PATH
|
|
122
|
+
works — so the probe and the real run can disagree, the probe passing while
|
|
123
|
+
the run dies on MODULE_NOT_FOUND. Putting the repo's node_modules on
|
|
124
|
+
NODE_PATH makes both resolution paths agree and supports either install.
|
|
125
|
+
"""
|
|
126
|
+
env = dict(os.environ)
|
|
127
|
+
local = REPO_ROOT / "node_modules"
|
|
128
|
+
existing = env.get("NODE_PATH", "")
|
|
129
|
+
if local.is_dir():
|
|
130
|
+
env["NODE_PATH"] = (str(local) + os.pathsep + existing) if existing else str(local)
|
|
131
|
+
return env
|
|
132
|
+
|
|
133
|
+
|
|
110
134
|
def _toolchain_ready():
|
|
111
135
|
try:
|
|
112
136
|
probe = subprocess.run(
|
|
113
137
|
["node", "-e", "require.resolve('@babel/standalone'); console.log('y')"],
|
|
114
|
-
capture_output=True, text=True, timeout=60)
|
|
138
|
+
capture_output=True, text=True, timeout=60, env=_node_env())
|
|
115
139
|
except (OSError, subprocess.SubprocessError):
|
|
116
140
|
return False
|
|
117
141
|
return probe.returncode == 0
|
|
118
142
|
|
|
119
143
|
|
|
120
|
-
|
|
144
|
+
# Skipping is right on a dev box with no node, and WRONG anywhere the
|
|
145
|
+
# toolchain is supposed to be installed: "2 passed, 2 skipped" reads exactly
|
|
146
|
+
# like a green run, so a broken `npm install` step would silently return CI to
|
|
147
|
+
# the state that let 2.92.0-2.92.3 ship. Where the toolchain is promised, set
|
|
148
|
+
# C3_REQUIRE_JSX_TOOLCHAIN=1 and a missing one FAILS instead of skipping.
|
|
149
|
+
_TOOLCHAIN = _toolchain_ready()
|
|
150
|
+
_REQUIRED = os.environ.get("C3_REQUIRE_JSX_TOOLCHAIN", "") not in ("", "0", "false")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class TestToolchainAvailability(unittest.TestCase):
|
|
154
|
+
def test_toolchain_present_when_required(self):
|
|
155
|
+
if not _REQUIRED:
|
|
156
|
+
self.skipTest("C3_REQUIRE_JSX_TOOLCHAIN not set (local dev)")
|
|
157
|
+
self.assertTrue(
|
|
158
|
+
_TOOLCHAIN,
|
|
159
|
+
"C3_REQUIRE_JSX_TOOLCHAIN=1 but node + @babel/standalone did not "
|
|
160
|
+
"resolve, so the bundle transpile checks below would have SKIPPED "
|
|
161
|
+
"and the run would still have looked green. Install the toolchain "
|
|
162
|
+
"(`npm install --no-save @babel/standalone`) or unset the variable.")
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
@unittest.skipUnless(_TOOLCHAIN,
|
|
121
166
|
"node + @babel/standalone unavailable (see module comment)")
|
|
122
167
|
class TestBundlesActuallyTranspile(unittest.TestCase):
|
|
123
168
|
def _check(self, server_rel, const_name):
|
|
@@ -129,7 +174,8 @@ class TestBundlesActuallyTranspile(unittest.TestCase):
|
|
|
129
174
|
script = fh.name
|
|
130
175
|
try:
|
|
131
176
|
proc = subprocess.run(["node", script] + [str(f) for f in files],
|
|
132
|
-
capture_output=True, text=True, timeout=300
|
|
177
|
+
capture_output=True, text=True, timeout=300,
|
|
178
|
+
env=_node_env())
|
|
133
179
|
finally:
|
|
134
180
|
os.unlink(script)
|
|
135
181
|
self.assertEqual(
|
|
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.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/add_project.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/config_editor.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_artifacts.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_health.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_panel.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_tasks.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/drill_views.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/global_search.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_cred_audit.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_credentials.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_enforcement.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_locks.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/hub_tokens.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/mcp_manager.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/project_card.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/project_tree.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/session_drawer.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/settings_modal.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/sidebar.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/hub_ui/components/summary_bar.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.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.96.0 → code_context_control-2.96.1}/cli/ui/components/credentials.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.1}/cli/ui/components/enforcement.js
RENAMED
|
File without changes
|
{code_context_control-2.96.0 → code_context_control-2.96.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
|