code-context-control 2.76.2__tar.gz → 2.76.3__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.76.2/code_context_control.egg-info → code_context_control-2.76.3}/PKG-INFO +1 -1
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/c3.py +1 -1
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_access_guard.py +60 -37
- {code_context_control-2.76.2 → code_context_control-2.76.3/code_context_control.egg-info}/PKG-INFO +1 -1
- {code_context_control-2.76.2 → code_context_control-2.76.3}/pyproject.toml +1 -1
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_access_guard.py +46 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/LICENSE +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/README.md +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/_hook_utils.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/commands/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/commands/common.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/commands/parser.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/docs.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/edits.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/access.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/credentials.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/index.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/masking.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/oracle.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/shared.css +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/tools.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/guide/workflow.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_artifact.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_c3read.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_filter.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_read.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_server.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/hub_credentials.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/hub_enforcement.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/hub_locks.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/mcp_server.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/progress.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/server.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/_grants.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/agent.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/compress.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/delegate.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/edit.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/edit_verify.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/edits.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/federate.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/filter.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/impact.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/jira.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/locks.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/memory.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/override.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/project.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/read.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/search.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/session.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/shell.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/status.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/tasks.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/tools/validate.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/api.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/app.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/access.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/credentials.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/enforcement.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/icons.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/shared.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/theme.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui_legacy.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui_nano.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/code_context_control.egg-info/SOURCES.txt +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/core/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/core/config.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/core/ide.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/core/mcp_toml.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/core/web_security.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/config.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/oracle_server.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/chat_poll.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/discovery_audit.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/local_session.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/mobile_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/activity.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/agents.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/app.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/busy.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/core.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/header.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/insights.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/projects.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/qrcode.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/settings.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/access_guard.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/access_telemetry.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/activity_log.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/agent_base.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/agent_locks.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/agents.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/artifact_defs.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/artifact_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/auto_memory.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/bench/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/bitbucket_client.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/circuit_breaker.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/claude_md.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/compressor.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/context_snapshot.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/conversation_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/credential_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/doc_index.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/e2e_tasks.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/edit_ledger.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/embedding_index.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/enforcement_policy.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/error_reporting.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/file_memory.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/git_context.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/hub_service.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/indexer.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/jira_client.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/jira_cloud.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/jira_credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/jira_data_center.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/jira_links.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/mask_activation.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/mask_mirror.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/mask_presets.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory_consolidator.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory_distiller.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory_graph.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory_grounder.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory_queue.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/memory_scorer.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/metrics.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/notifications.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/ollama_bridge.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/ollama_client.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/ollama_credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/output_filter.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/override_grants.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/override_policy.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/override_requests.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/override_wake.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/parser.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/project_manager.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/project_runtime.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/protocol.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/proxy_state.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/repo_map.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/retention.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/retrieval_broker.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/router.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/runtime.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/scanner.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/session_benchmark.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/session_manager.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/session_preloader.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/subprojects.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/task_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/telemetry.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/text_index.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/time_tracker.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/tool_classifier.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/transcript_index.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/validation_cache.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/vector_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/watcher.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/services/win_subprocess.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/setup.cfg +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_access_builtin_optout.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_access_guard.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_access_guard_meta.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_access_guard_shell_project.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_access_guard_surfaces.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_access_guard_wiring.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_agent_locks.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_chat_poll.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_credential_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_delegate_version_probe.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_edit_ledger_deadline.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_edit_locking.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_edit_verify.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_embedding_index_deadlock.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_enforcement_policy.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_enforcement_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_state.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_enforcement_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_locks_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_ide_workflow_adaptation.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_init_scan.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_client.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_links.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mask_guard.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mask_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mask_surfaces.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_memory_system.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mobile_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mobile_extras.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mobile_override_routes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_mobile_security_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_no_stale_model_pins.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_chat_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_discovery_audit.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_session_bootstrap.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_output_filter.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_override_grants.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_override_grants_mcp.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_override_requests.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_override_wake.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_permissions.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_pm_api.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_project_manager.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_project_tool.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_related_facts.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_repo_map.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_retention.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_review_digest.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_service_durability.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_session_budget.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_subprojects.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_task_store.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_task_tool.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_validate.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_vault_write_guard.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_version_sync.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_web_security.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/backend.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/main.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/__init__.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/index_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/init_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/search_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/session_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/stats.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.76.2 → code_context_control-2.76.3}/tui/theme.tcss +0 -0
{code_context_control-2.76.2/code_context_control.egg-info → code_context_control-2.76.3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.76.
|
|
3
|
+
Version: 2.76.3
|
|
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
|
|
@@ -84,6 +84,15 @@ _DOUBLE_COLON_RE = re.compile(r"::(?!\$)")
|
|
|
84
84
|
_GIT_REVSPEC_RE = re.compile(r"^(?P<rev>[^:\s]+):(?P<path>[^:\s]+)$")
|
|
85
85
|
_GIT_CMD_RE = re.compile(r"^\s*(?:[\w.\-]*[/\\])?git(?:\.exe)?\b", re.IGNORECASE)
|
|
86
86
|
|
|
87
|
+
# Where one command ends and the next begins. Anchoring "is this git?" to the
|
|
88
|
+
# start of the whole string was wrong in the most ordinary way possible:
|
|
89
|
+
# `cd /repo && git show origin/main:pyproject.toml` starts with `cd`, so the
|
|
90
|
+
# revspec rewrite never fired for the shape people actually type. Caught by a
|
|
91
|
+
# live probe after release, not by the unit tests — which passed the command as
|
|
92
|
+
# `git show …` because that is how the test author writes it, not how a shell
|
|
93
|
+
# call arrives.
|
|
94
|
+
_SEGMENT_SPLIT = re.compile(r"&&|\|\||[;|\n]")
|
|
95
|
+
|
|
87
96
|
|
|
88
97
|
def _is_network_token(tok: str) -> bool:
|
|
89
98
|
"""True for URLs and IPv6 literals/CIDRs — never for an ADS spelling."""
|
|
@@ -201,44 +210,58 @@ def _scan_shell(cmd: str, base: str):
|
|
|
201
210
|
outright, as are URLs and IPv6 literals: all of them trip the ADS spelling
|
|
202
211
|
check, which is exempt from existence-gating, so a token naming nothing on
|
|
203
212
|
disk would otherwise hard-deny (#50).
|
|
213
|
+
|
|
214
|
+
Scanning is per **command segment**, not per whole string. A segment is what
|
|
215
|
+
sits between `&&`, `||`, `;`, `|` or a newline, and each one answers "am I a
|
|
216
|
+
git command?" for itself — so the revspec rewrite applies to the tokens of
|
|
217
|
+
the git segment and to no others. `cat notes.txt:hidden && git status` must
|
|
218
|
+
not have its first token reinterpreted just because a later segment is git.
|
|
204
219
|
"""
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
if
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
220
|
+
budget = _MAX_TOKENS
|
|
221
|
+
for segment in _SEGMENT_SPLIT.split(cmd or ""):
|
|
222
|
+
if budget <= 0:
|
|
223
|
+
break
|
|
224
|
+
is_git = bool(_GIT_CMD_RE.match(segment))
|
|
225
|
+
for raw in _TOKEN_SPLIT.split(segment)[:budget]:
|
|
226
|
+
budget -= 1
|
|
227
|
+
tok = raw.strip("\"'`;,()")
|
|
228
|
+
if not tok or tok.startswith("-"):
|
|
229
|
+
continue
|
|
230
|
+
if "/" not in tok and "\\" not in tok and not tok.startswith("."):
|
|
231
|
+
continue
|
|
232
|
+
# Order matters only for readability: a URL is also syntax-free, so
|
|
233
|
+
# either check alone would skip 'https://x'. Both are kept because
|
|
234
|
+
# they answer different questions — "is this a network literal" and
|
|
235
|
+
# "is this a path at all" — and the second is the one that
|
|
236
|
+
# generalizes.
|
|
237
|
+
if not _looks_like_a_path(tok) or _is_network_token(tok):
|
|
238
|
+
continue
|
|
239
|
+
# `tests/x.py::TestThing` is a node id, not a stream spelling.
|
|
240
|
+
if _is_scope_token(tok):
|
|
241
|
+
continue
|
|
242
|
+
# `git show <rev>:<path>` — judge the PATH, not the whole token.
|
|
243
|
+
# This is the one place the scan rewrites what it checks rather than
|
|
244
|
+
# skipping it, because skipping would let `git show HEAD:.env`
|
|
245
|
+
# through.
|
|
246
|
+
revspec_path = _git_revspec_path(segment, tok) if is_git else None
|
|
247
|
+
from_revspec = revspec_path is not None
|
|
248
|
+
if from_revspec:
|
|
249
|
+
tok = revspec_path
|
|
250
|
+
if re.match(r"^/[a-z]/", tok): # MSYS /c/foo → C:/foo
|
|
251
|
+
tok = f"{tok[1]}:{tok[2:]}"
|
|
252
|
+
denial = ag.check(tok, "read", base)
|
|
253
|
+
if denial and denial.kind == "deny":
|
|
254
|
+
try:
|
|
255
|
+
p = Path(tok)
|
|
256
|
+
exists = (p if p.is_absolute() else Path(base) / p).exists()
|
|
257
|
+
except OSError:
|
|
258
|
+
exists = False
|
|
259
|
+
# A revspec names a path in HISTORY, so the working tree is the
|
|
260
|
+
# wrong place to ask whether it is real. `git show HEAD~5:.env`
|
|
261
|
+
# reads a denied file whether or not that file exists today, and
|
|
262
|
+
# existence-gating it would be a hole this rewrite opened.
|
|
263
|
+
if exists or from_revspec or denial.rule.startswith("<"):
|
|
264
|
+
return denial, tok
|
|
242
265
|
return None, ""
|
|
243
266
|
|
|
244
267
|
|
{code_context_control-2.76.2 → code_context_control-2.76.3/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.76.
|
|
3
|
+
Version: 2.76.3
|
|
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.76.
|
|
7
|
+
version = "2.76.3"
|
|
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"
|
|
@@ -323,6 +323,52 @@ class TestShellScanSyntaxTokens(HookGuardBase):
|
|
|
323
323
|
self.assertIsNotNone(denial)
|
|
324
324
|
self.assertEqual(tok, "secrets/gone.txt")
|
|
325
325
|
|
|
326
|
+
def test_a_git_command_is_recognised_after_a_shell_separator(self):
|
|
327
|
+
"""`cd /repo && git show <rev>:<path>` — the shape people actually type.
|
|
328
|
+
|
|
329
|
+
The first cut anchored "is this git?" to the start of the whole command
|
|
330
|
+
string, so a leading `cd` disabled the rewrite entirely. Every unit test
|
|
331
|
+
passed, because a test author writes the command as `git show …`. A live
|
|
332
|
+
probe after release is what caught it.
|
|
333
|
+
"""
|
|
334
|
+
for cmd in (
|
|
335
|
+
"cd /tmp/repo && git show origin/main:pyproject.toml",
|
|
336
|
+
"git fetch -q; git show origin/main:pyproject.toml",
|
|
337
|
+
"cd x || git show HEAD:setup.py",
|
|
338
|
+
):
|
|
339
|
+
with self.subTest(cmd=cmd):
|
|
340
|
+
denial, tok = hag._scan_shell(cmd, str(self.proj))
|
|
341
|
+
self.assertIsNone(denial, f"{cmd!r} denied on {tok!r}")
|
|
342
|
+
|
|
343
|
+
def test_a_denied_revspec_is_still_caught_after_a_separator(self):
|
|
344
|
+
denial, tok = hag._scan_shell(
|
|
345
|
+
"cd /tmp/repo && git show HEAD:secrets/key.txt", str(self.proj))
|
|
346
|
+
self.assertIsNotNone(denial)
|
|
347
|
+
self.assertEqual(tok, "secrets/key.txt")
|
|
348
|
+
|
|
349
|
+
def test_a_git_segment_does_not_license_rewrites_in_other_segments(self):
|
|
350
|
+
"""Per-segment, not per-string: `cat a:b && git status` is two commands.
|
|
351
|
+
|
|
352
|
+
Attributing the whole string to git would let a non-git token be
|
|
353
|
+
reinterpreted — the scan would check `hidden` instead of the real
|
|
354
|
+
spelling, which is a hole rather than a false positive.
|
|
355
|
+
"""
|
|
356
|
+
self.assertIsNone(
|
|
357
|
+
hag._git_revspec_path("cat ./notes.txt:hidden", "./notes.txt:hidden"))
|
|
358
|
+
|
|
359
|
+
@unittest.skipUnless(WIN, "NTFS ADS semantics")
|
|
360
|
+
def test_a_non_git_segment_beside_a_git_one_still_denies(self):
|
|
361
|
+
"""The end-to-end half of the above, and Windows-only for a reason.
|
|
362
|
+
|
|
363
|
+
`<ads>` is an NTFS spelling rule, so on POSIX this command denies
|
|
364
|
+
nothing and the assertion would be about the platform rather than the
|
|
365
|
+
code. Shipping it undecorated turned six of nine CI jobs red — the
|
|
366
|
+
matrix caught in a minute what a Windows-only local run could not.
|
|
367
|
+
"""
|
|
368
|
+
denial, _ = hag._scan_shell(
|
|
369
|
+
"cat ./secrets/key.txt:hidden && git status", str(self.proj))
|
|
370
|
+
self.assertIsNotNone(denial)
|
|
371
|
+
|
|
326
372
|
def test_revspec_rewriting_only_applies_to_git(self):
|
|
327
373
|
"""`<word>:<word>` means something else in every other command."""
|
|
328
374
|
path = hag._git_revspec_path("cat HEAD:secrets/key.txt", "HEAD:secrets/key.txt")
|
|
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.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/add_project.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/config_editor.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_artifacts.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_health.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_panel.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_tasks.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/drill_views.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/global_search.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/hub_credentials.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/hub_enforcement.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/hub_locks.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/mcp_manager.js
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/project_card.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/project_tree.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/session_drawer.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/settings_modal.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/sidebar.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/hub_ui/components/summary_bar.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/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
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/credentials.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/cli/ui/components/enforcement.js
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/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.76.2 → code_context_control-2.76.3}/oracle/services/activity_reporter.py
RENAMED
|
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.76.2 → code_context_control-2.76.3}/oracle/services/discovery_audit.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/federated_graph.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/health_checker.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/insight_engine.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/local_session.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/memory_reader.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/memory_writer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/project_scanner.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/tool_executor.py
RENAMED
|
File without changes
|
{code_context_control-2.76.2 → code_context_control-2.76.3}/oracle/services/tool_registry.py
RENAMED
|
File without changes
|