code-context-control 2.80.0__tar.gz → 2.82.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_context_control-2.80.0/code_context_control.egg-info → code_context_control-2.82.0}/PKG-INFO +2 -2
- {code_context_control-2.80.0 → code_context_control-2.82.0}/README.md +1 -1
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/c3.py +12 -4
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/commands/parser.py +12 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_server.py +7 -3
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_ci.js +42 -8
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/mcp_server.py +5 -3
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/ci.py +62 -13
- {code_context_control-2.80.0 → code_context_control-2.82.0/code_context_control.egg-info}/PKG-INFO +2 -2
- {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/SOURCES.txt +2 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/pyproject.toml +1 -1
- code_context_control-2.82.0/services/ci_act.py +274 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_runner.py +160 -13
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_workflow.py +114 -25
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/claude_md.py +1 -1
- code_context_control-2.82.0/tests/test_ci_act.py +486 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ci_runner.py +11 -4
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ci_workflow.py +5 -1
- {code_context_control-2.80.0 → code_context_control-2.82.0}/LICENSE +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/_hook_utils.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/commands/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/commands/common.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/docs.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/edits.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/access.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/credentials.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/index.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/masking.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/oracle.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/shared.css +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/tools.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/workflow.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_access_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_artifact.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_c3read.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_filter.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_read.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_credentials.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_locks.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/progress.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/server.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/_grants.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/agent.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/compress.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/delegate.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/edit.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/edit_verify.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/edits.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/federate.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/filter.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/impact.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/jira.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/locks.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/memory.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/override.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/project.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/read.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/search.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/session.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/shell.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/status.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/tasks.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/validate.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/api.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/app.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/access.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/credentials.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/enforcement.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/icons.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/shared.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/theme.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui_legacy.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui_nano.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/core/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/core/config.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/core/ide.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/core/mcp_toml.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/core/web_security.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/config.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/oracle_server.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/chat_poll.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/discovery_audit.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/local_session.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/mobile_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/activity.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/agents.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/app.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/busy.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/core.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/header.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/insights.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/projects.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/qrcode.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/settings.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/access_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/access_telemetry.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/activity_log.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/agent_base.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/agent_locks.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/agents.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/artifact_defs.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/artifact_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/auto_memory.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bitbucket_client.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_expr.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_failures.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/circuit_breaker.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/compressor.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/context_snapshot.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/conversation_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/credential_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/doc_index.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/e2e_tasks.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/edit_ledger.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/embedding_index.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/enforcement_policy.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/error_reporting.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/file_memory.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/git_context.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/hub_service.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/indexer.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_client.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_cloud.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_data_center.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_links.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/mask_activation.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/mask_mirror.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/mask_presets.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_consolidator.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_distiller.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_graph.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_grounder.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_queue.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_scorer.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/metrics.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/notifications.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ollama_bridge.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ollama_client.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ollama_credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/output_filter.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_grants.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_policy.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_requests.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_wake.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/parser.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/project_manager.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/project_runtime.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/protocol.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/proxy_state.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/repo_map.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/retention.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/retrieval_broker.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/router.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/runtime.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/scanner.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/session_benchmark.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/session_manager.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/session_preloader.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/subprojects.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/task_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/telemetry.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/text_index.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/time_tracker.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/tool_classifier.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/transcript_index.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/validation_cache.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/vector_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/watcher.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/services/win_subprocess.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/setup.cfg +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_builtin_optout.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_meta.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_shell_project.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_surfaces.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_wiring.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_agent_locks.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_chat_poll.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ci_expr.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_credential_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_delegate_version_probe.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_ledger_deadline.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_locking.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_verify.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_embedding_index_deadlock.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_enforcement_policy.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_enforcement_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_access_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_codex_compat.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_state.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_enforcement_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_locks_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ide_workflow_adaptation.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_init_scan.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_client.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_links.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mask_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mask_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mask_surfaces.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_system.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_extras.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_override_routes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_security_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_no_stale_model_pins.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_chat_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_discovery_audit.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_session_bootstrap.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_output_filter.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_grants.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_grants_mcp.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_requests.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_wake.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_permissions.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_pm_api.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_project_manager.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_project_tool.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_related_facts.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_repo_map.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_retention.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_review_digest.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_service_durability.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_session_budget.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_subprojects.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_task_store.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_task_tool.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_validate.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_vault_write_guard.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_version_sync.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_web_security.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/backend.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/main.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/__init__.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/index_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/init_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/search_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/session_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/stats.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/theme.tcss +0 -0
{code_context_control-2.80.0/code_context_control.egg-info → code_context_control-2.82.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.82.0
|
|
4
4
|
Summary: Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub.
|
|
5
5
|
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -202,7 +202,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
|
|
|
202
202
|
| `c3_session` | Snapshot, restore, log decisions, compact history |
|
|
203
203
|
| `c3_impact` | Blast-radius analysis before editing shared symbols |
|
|
204
204
|
| `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
|
|
205
|
-
| `c3_ci` | Run this repo's real `.github/workflows` locally
|
|
205
|
+
| `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
|
|
206
206
|
| `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
|
|
207
207
|
| `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
|
|
208
208
|
| `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
|
|
@@ -139,7 +139,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
|
|
|
139
139
|
| `c3_session` | Snapshot, restore, log decisions, compact history |
|
|
140
140
|
| `c3_impact` | Blast-radius analysis before editing shared symbols |
|
|
141
141
|
| `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
|
|
142
|
-
| `c3_ci` | Run this repo's real `.github/workflows` locally
|
|
142
|
+
| `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
|
|
143
143
|
| `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
|
|
144
144
|
| `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
|
|
145
145
|
| `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
|
|
@@ -92,7 +92,7 @@ console = Console() if HAS_RICH else None
|
|
|
92
92
|
# Config
|
|
93
93
|
CONFIG_DIR = ".c3"
|
|
94
94
|
CONFIG_FILE = ".c3/config.json"
|
|
95
|
-
__version__ = "2.
|
|
95
|
+
__version__ = "2.82.0"
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
def _compress_file_cli(compressor, path, mode="smart", **kw):
|
|
@@ -6065,7 +6065,9 @@ def _ci_main(args) -> int:
|
|
|
6065
6065
|
from services import ci_runner as cr
|
|
6066
6066
|
from services.ci_workflow import inspect_project
|
|
6067
6067
|
if sub == "inspect":
|
|
6068
|
-
payload = inspect_project(
|
|
6068
|
+
payload = inspect_project(
|
|
6069
|
+
project_path, event=getattr(args, "event", "") or "",
|
|
6070
|
+
engine=getattr(args, "engine", "auto") or "auto")
|
|
6069
6071
|
elif sub in ("run", "rerun"):
|
|
6070
6072
|
only = None
|
|
6071
6073
|
if sub == "rerun":
|
|
@@ -6079,7 +6081,10 @@ def _ci_main(args) -> int:
|
|
|
6079
6081
|
allow_foreign=bool(getattr(args, "allow_foreign", False)),
|
|
6080
6082
|
only=only, timeout=getattr(args, "timeout", 0) or cr.DEFAULT_STEP_TIMEOUT,
|
|
6081
6083
|
workflow=getattr(args, "workflow", ""),
|
|
6082
|
-
event=getattr(args, "event", "") or ""
|
|
6084
|
+
event=getattr(args, "event", "") or "",
|
|
6085
|
+
engine=getattr(args, "engine", "auto") or "auto",
|
|
6086
|
+
allow_side_effects=bool(getattr(args, "allow_side_effects", False)),
|
|
6087
|
+
network=getattr(args, "network", "") or "").to_dict()
|
|
6083
6088
|
elif sub == "runs":
|
|
6084
6089
|
payload = {"runs": cr.list_runs(project_path)}
|
|
6085
6090
|
else:
|
|
@@ -6098,7 +6103,10 @@ def _ci_main(args) -> int:
|
|
|
6098
6103
|
bool(getattr(args, "allow_foreign", False)),
|
|
6099
6104
|
getattr(args, "workflow", "") or "", getattr(args, "tail", 200) or 200,
|
|
6100
6105
|
getattr(args, "timeout", 0) or 0, svc, finalize,
|
|
6101
|
-
getattr(args, "event", "") or ""
|
|
6106
|
+
getattr(args, "event", "") or "",
|
|
6107
|
+
getattr(args, "engine", "auto") or "auto",
|
|
6108
|
+
bool(getattr(args, "allow_side_effects", False)),
|
|
6109
|
+
getattr(args, "network", "") or "")
|
|
6102
6110
|
print(out)
|
|
6103
6111
|
# Exit code is the finding: a non-full verdict must not read as success to
|
|
6104
6112
|
# a shell script or a pre-push hook.
|
|
@@ -500,6 +500,16 @@ def build_parser(version: str, parse_cli_ide_arg):
|
|
|
500
500
|
"can never yield FULL_CI_PASS)")
|
|
501
501
|
ci_run.add_argument("--timeout", type=int, default=0,
|
|
502
502
|
help="Per-step timeout in seconds (default 900)")
|
|
503
|
+
ci_run.add_argument("--engine", choices=["auto", "native", "act"],
|
|
504
|
+
default="auto",
|
|
505
|
+
help="auto (default) uses act for Linux jobs when act + "
|
|
506
|
+
"Docker are present, native otherwise")
|
|
507
|
+
ci_run.add_argument("--allow-side-effects", action="store_true",
|
|
508
|
+
help="Let the act engine run jobs that look like they "
|
|
509
|
+
"publish or deploy. Refused by default.")
|
|
510
|
+
ci_run.add_argument("--network", default="",
|
|
511
|
+
help="Container network for the act engine (e.g. `none` "
|
|
512
|
+
"to cut egress). Default: act's own.")
|
|
503
513
|
|
|
504
514
|
ci_rerun = _ci_common(ci_subs.add_parser(
|
|
505
515
|
"rerun", help="Re-run only the jobs that failed in the last run"))
|
|
@@ -520,6 +530,8 @@ def build_parser(version: str, parse_cli_ide_arg):
|
|
|
520
530
|
ci_logs.add_argument("--tail", type=int, default=200)
|
|
521
531
|
|
|
522
532
|
_ci_common(ci_subs.add_parser("runs", help="Recent local CI runs"))
|
|
533
|
+
_ci_common(ci_subs.add_parser(
|
|
534
|
+
"doctor", help="Which execution engines are available on this machine"))
|
|
523
535
|
|
|
524
536
|
# ── Override Requests (v2.69.0, docs/override-requests.md) ──────────
|
|
525
537
|
# Human-only approval surface. A grant is single-use, session-bound,
|
|
@@ -1293,11 +1293,12 @@ _ci_runs: dict = {} # project path -> in-flight state
|
|
|
1293
1293
|
_ci_lock = threading.Lock()
|
|
1294
1294
|
|
|
1295
1295
|
|
|
1296
|
-
def _ci_worker(project: str, job: str, allow_foreign: bool, workflow: str
|
|
1296
|
+
def _ci_worker(project: str, job: str, allow_foreign: bool, workflow: str,
|
|
1297
|
+
engine: str = "auto") -> None:
|
|
1297
1298
|
from services import ci_runner as cr
|
|
1298
1299
|
try:
|
|
1299
1300
|
result = cr.run_ci(project, selector=job, allow_foreign=allow_foreign,
|
|
1300
|
-
workflow=workflow)
|
|
1301
|
+
workflow=workflow, engine=engine)
|
|
1301
1302
|
payload = {"running": False, "done": True, "error": None,
|
|
1302
1303
|
"run_id": result.run_id, "verdict": result.verdict,
|
|
1303
1304
|
"note": result.note}
|
|
@@ -1320,6 +1321,8 @@ def api_ci_inspect():
|
|
|
1320
1321
|
except ValueError as e:
|
|
1321
1322
|
return jsonify({"error": str(e)}), 404
|
|
1322
1323
|
try:
|
|
1324
|
+
# inspect_project owns the engine partition, so the Hub, the CLI
|
|
1325
|
+
# and the tool text can never disagree about what is runnable.
|
|
1323
1326
|
return jsonify(inspect_project(resolved))
|
|
1324
1327
|
except Exception as e:
|
|
1325
1328
|
return jsonify({"error": f"{type(e).__name__}: {e}"}), 500
|
|
@@ -1391,7 +1394,8 @@ def api_ci_run_start():
|
|
|
1391
1394
|
threading.Thread(
|
|
1392
1395
|
target=_ci_worker,
|
|
1393
1396
|
args=(resolved, str(data.get("job") or ""),
|
|
1394
|
-
bool(data.get("allow_foreign")), str(data.get("workflow") or "")
|
|
1397
|
+
bool(data.get("allow_foreign")), str(data.get("workflow") or ""),
|
|
1398
|
+
str(data.get("engine") or "auto")),
|
|
1395
1399
|
daemon=True,
|
|
1396
1400
|
).start()
|
|
1397
1401
|
return jsonify({"started": True})
|
|
@@ -18,6 +18,11 @@ const CI_STATUS_STYLE = {
|
|
|
18
18
|
unsupported: ['UNSUP', 'warn'],
|
|
19
19
|
foreign: ['OTHER-OS', 'blue'],
|
|
20
20
|
deselected: ['—', 'textDim'],
|
|
21
|
+
// capability labels, used by the job graph only
|
|
22
|
+
cap_native: ['NATIVE', 'accent'],
|
|
23
|
+
cap_container: ['CONTAINER', 'accent'],
|
|
24
|
+
cap_unreachable: ['OTHER-OS', 'blue'],
|
|
25
|
+
cap_unsupported: ['UNSUP', 'warn'],
|
|
21
26
|
};
|
|
22
27
|
|
|
23
28
|
function CiStatusPill({ status, title }) {
|
|
@@ -142,6 +147,10 @@ function HubCI({ projects, onOpenDrill }) {
|
|
|
142
147
|
};
|
|
143
148
|
|
|
144
149
|
const jobs = (inspect && inspect.jobs) || [];
|
|
150
|
+
const engines = inspect && inspect.engines;
|
|
151
|
+
const runnableNative = new Set((inspect && inspect.runnable_native) || []);
|
|
152
|
+
const runnableContainer = new Set((inspect && inspect.runnable_container) || []);
|
|
153
|
+
const unsupportedKeys = new Set(((inspect && inspect.unsupported) || []).map(u => u.key));
|
|
145
154
|
const runJobs = ((run && run.jobs) || []).filter(j => j.status !== 'deselected');
|
|
146
155
|
|
|
147
156
|
return (
|
|
@@ -151,7 +160,8 @@ function HubCI({ projects, onOpenDrill }) {
|
|
|
151
160
|
<span style={{ fontSize: 14, color: T.text }}>Local CI</span>
|
|
152
161
|
<span className="mono" style={{ fontSize: 11, color: T.textMuted }}>
|
|
153
162
|
{inspect
|
|
154
|
-
? `${(inspect.runnable || []).length} of ${jobs.length}
|
|
163
|
+
? `${(inspect.runnable || []).length} of ${jobs.length} runnable here`
|
|
164
|
+
+ ` (${runnableNative.size} native, ${runnableContainer.size} container)`
|
|
155
165
|
: 'loading…'}
|
|
156
166
|
</span>
|
|
157
167
|
<div style={{ flex: 1 }} />
|
|
@@ -172,8 +182,16 @@ function HubCI({ projects, onOpenDrill }) {
|
|
|
172
182
|
border: `1px solid ${T.border}`, borderRadius: 6, padding: '8px 10px', lineHeight: 1.5,
|
|
173
183
|
}}>
|
|
174
184
|
Runs the repository's real <span className="mono">.github/workflows</span> here —
|
|
175
|
-
C3 does not define a second CI config.
|
|
176
|
-
|
|
185
|
+
C3 does not define a second CI config.{' '}
|
|
186
|
+
{engines && engines.ok ? (
|
|
187
|
+
<span>Linux jobs run in a container via <span className="mono">act</span>{' '}
|
|
188
|
+
({engines.act_version}, docker {engines.docker_version}), real actions included.</span>
|
|
189
|
+
) : (
|
|
190
|
+
<span style={{ color: T.warn }}>
|
|
191
|
+
Container engine unavailable — {(engines && engines.reason) || 'checking…'}
|
|
192
|
+
</span>
|
|
193
|
+
)}{' '}
|
|
194
|
+
macOS jobs can never run locally: there are no macOS containers.
|
|
177
195
|
</div>
|
|
178
196
|
|
|
179
197
|
{err && (
|
|
@@ -236,8 +254,12 @@ function HubCI({ projects, onOpenDrill }) {
|
|
|
236
254
|
<span className="mono" style={{
|
|
237
255
|
color: T.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',
|
|
238
256
|
}}>{j.key}</span>
|
|
239
|
-
{j.
|
|
240
|
-
<span className="mono" title={`Ran
|
|
257
|
+
{j.status === 'passed' && j.fidelity === 'container' && (
|
|
258
|
+
<span className="mono" title={`Ran in a container of ${j.runs_on} via act — real actions included.`}
|
|
259
|
+
style={{ fontSize: 10, color: T.accent }}>container</span>
|
|
260
|
+
)}
|
|
261
|
+
{j.status === 'passed' && j.fidelity === 'cross-os' && (
|
|
262
|
+
<span className="mono" title={`Ran on this host, but targets ${j.runs_on}. Indicative, not equivalent.`}
|
|
241
263
|
style={{ fontSize: 10, color: T.blue }}>cross-OS</span>
|
|
242
264
|
)}
|
|
243
265
|
<div style={{ flex: 1 }} />
|
|
@@ -276,10 +298,22 @@ function HubCI({ projects, onOpenDrill }) {
|
|
|
276
298
|
display: 'flex', alignItems: 'center', gap: 9, padding: '5px 10px',
|
|
277
299
|
borderTop: `1px solid ${T.border}`, fontSize: 11,
|
|
278
300
|
}}>
|
|
301
|
+
{/* Read the server's partition; never re-derive it here. The
|
|
302
|
+
first attempt inferred runnability in JS from act_could_run,
|
|
303
|
+
which means "act has no blockers with this job" and NOT "act
|
|
304
|
+
can run it here" — act only does Linux. Every macOS cell
|
|
305
|
+
rendered as a green PASS it could never earn. */}
|
|
279
306
|
<CiStatusPill
|
|
280
|
-
status={
|
|
281
|
-
|
|
282
|
-
|
|
307
|
+
status={runnableNative.has(j.key) ? 'cap_native'
|
|
308
|
+
: runnableContainer.has(j.key) ? 'cap_container'
|
|
309
|
+
: unsupportedKeys.has(j.key) ? 'cap_unsupported'
|
|
310
|
+
: 'cap_unreachable'}
|
|
311
|
+
title={runnableNative.has(j.key) ? 'runnable natively on this host'
|
|
312
|
+
: runnableContainer.has(j.key)
|
|
313
|
+
? `runs in a container (${j.runs_on}) via act`
|
|
314
|
+
: unsupportedKeys.has(j.key)
|
|
315
|
+
? (j.blockers || []).join('; ')
|
|
316
|
+
: `targets ${j.runs_on} — no available engine can run it here`} />
|
|
283
317
|
<span className="mono" style={{ color: T.textMuted }}>{j.key}</span>
|
|
284
318
|
{!!(j.needs || []).length && (
|
|
285
319
|
<span className="mono" style={{ fontSize: 10, color: T.textDim }}>
|
|
@@ -770,10 +770,11 @@ async def c3_locks(action: str = "list", paths: str = "", intent: str = "",
|
|
|
770
770
|
async def c3_ci(action: str = "inspect", job: str = "", run_id: str = "",
|
|
771
771
|
allow_foreign: bool = False, workflow: str = "",
|
|
772
772
|
tail: int = 200, timeout: int = 0, event: str = "",
|
|
773
|
-
|
|
773
|
+
engine: str = "auto", allow_side_effects: bool = False,
|
|
774
|
+
network: str = "", ctx: Context = None) -> str:
|
|
774
775
|
"""RUN THIS REPO'S REAL CI LOCALLY — before pushing, not after.
|
|
775
776
|
Reads .github/workflows/*.yml as the source of truth (no second CI config).
|
|
776
|
-
actions: inspect
|
|
777
|
+
actions: inspect | run | rerun | status | failures | logs | runs | doctor.
|
|
777
778
|
inspect: workflows, the job DAG, and which jobs are runnable on THIS host.
|
|
778
779
|
run: execute in dependency order; job='lint' or 'test (ubuntu-latest, 3.12)'
|
|
779
780
|
selects one (bare job name = all its matrix cells). A job whose dependency
|
|
@@ -796,7 +797,8 @@ async def c3_ci(action: str = "inspect", job: str = "", run_id: str = "",
|
|
|
796
797
|
from cli.tools.ci import handle_ci
|
|
797
798
|
return await asyncio.to_thread(handle_ci, action, job, run_id,
|
|
798
799
|
allow_foreign, workflow, tail, timeout,
|
|
799
|
-
svc, finalize, event
|
|
800
|
+
svc, finalize, event, engine,
|
|
801
|
+
allow_side_effects, network)
|
|
800
802
|
|
|
801
803
|
|
|
802
804
|
@mcp.tool()
|
|
@@ -39,7 +39,12 @@ def _job_rows(jobs: list, include_deselected: bool = False) -> list:
|
|
|
39
39
|
if status == cr.DESELECTED and not include_deselected:
|
|
40
40
|
continue
|
|
41
41
|
mark = _MARK.get(status, status.upper())
|
|
42
|
-
|
|
42
|
+
fid = job.get("fidelity", "")
|
|
43
|
+
cross = ""
|
|
44
|
+
if status == cr.PASSED and fid == cr.FIDELITY_CONTAINER:
|
|
45
|
+
cross = " [container]"
|
|
46
|
+
elif status == cr.PASSED and fid == cr.FIDELITY_CROSS_OS:
|
|
47
|
+
cross = " [cross-OS]"
|
|
43
48
|
ms = job.get("duration_ms") or 0
|
|
44
49
|
timing = f" {ms / 1000:.1f}s" if ms else ""
|
|
45
50
|
line = f" {mark:<9} {job.get('key', '?')}{cross}{timing}"
|
|
@@ -75,7 +80,8 @@ def _failure_rows(jobs: list, limit: int = 25) -> list:
|
|
|
75
80
|
|
|
76
81
|
def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
|
|
77
82
|
workflow: str, tail: int, timeout: int, svc, finalize,
|
|
78
|
-
event: str = ""
|
|
83
|
+
event: str = "", engine: str = "auto",
|
|
84
|
+
allow_side_effects: bool = False, network: str = "") -> str:
|
|
79
85
|
"""Route c3_ci actions."""
|
|
80
86
|
project = str(svc.project_path)
|
|
81
87
|
action = (action or "inspect").strip().lower()
|
|
@@ -85,7 +91,7 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
|
|
|
85
91
|
|
|
86
92
|
# ── inspect ──────────────────────────────────────────────────────────
|
|
87
93
|
if action in ("", "inspect", "jobs"):
|
|
88
|
-
data = inspect_project(project, event=event)
|
|
94
|
+
data = inspect_project(project, event=event, engine=engine)
|
|
89
95
|
if not data["workflows"]:
|
|
90
96
|
return finalize(
|
|
91
97
|
"c3_ci", args,
|
|
@@ -99,26 +105,39 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
|
|
|
99
105
|
lines.append(f" {wf['name']} [{', '.join(wf['triggers']) or 'no triggers'}]"
|
|
100
106
|
f" jobs={len(wf['jobs'])}{err}")
|
|
101
107
|
|
|
108
|
+
native = set(data.get("runnable_native") or [])
|
|
109
|
+
container = set(data.get("runnable_container") or [])
|
|
110
|
+
|
|
102
111
|
lines.append("\nJob graph (dependency order):")
|
|
103
112
|
by_key = {j["key"]: j for j in data["jobs"]}
|
|
104
113
|
for key in data["order"]:
|
|
105
114
|
j = by_key[key]
|
|
106
115
|
needs = f" needs={','.join(j['needs'])}" if j["needs"] else ""
|
|
107
|
-
if
|
|
116
|
+
if key in native:
|
|
117
|
+
state = "runnable here"
|
|
118
|
+
elif key in container:
|
|
119
|
+
state = "runnable (container)"
|
|
120
|
+
elif not j["supported"] and not j.get("act_could_run"):
|
|
108
121
|
state = "UNSUPPORTED"
|
|
109
|
-
elif j["foreign_runner"]:
|
|
110
|
-
state = f"other-OS ({j['runs_on']})"
|
|
111
122
|
else:
|
|
112
|
-
state = "
|
|
123
|
+
state = f"other-OS ({j['runs_on']})"
|
|
113
124
|
lines.append(f" {key:<42} {state}{needs}")
|
|
114
125
|
|
|
126
|
+
engines = data.get("engines") or {}
|
|
115
127
|
lines.append(
|
|
116
|
-
f"\nRunnable
|
|
128
|
+
f"\nRunnable here: {len(data['runnable'])} of {len(data['jobs'])}"
|
|
129
|
+
f" ({len(native)} native, {len(container)} container)")
|
|
130
|
+
if engines.get("ok"):
|
|
131
|
+
lines.append(f" engines: native + act ({engines.get('act_version', '')})")
|
|
132
|
+
else:
|
|
133
|
+
lines.append(
|
|
134
|
+
f" engines: native only — {engines.get('reason', 'act unavailable')}")
|
|
117
135
|
if data["foreign"]:
|
|
118
136
|
lines.append(
|
|
119
|
-
f" other-OS ({len(data['foreign'])}): these target a
|
|
120
|
-
"
|
|
121
|
-
"anyway and labels
|
|
137
|
+
f" other-OS ({len(data['foreign'])}): these target a runner no "
|
|
138
|
+
"available engine can reproduce. c3_ci(action='run', "
|
|
139
|
+
"allow_foreign=true) attempts them on this OS anyway and labels "
|
|
140
|
+
"the result cross-OS.")
|
|
122
141
|
if data["unsupported"]:
|
|
123
142
|
lines.append(f" unsupported ({len(data['unsupported'])}):")
|
|
124
143
|
for item in data["unsupported"][:8]:
|
|
@@ -151,7 +170,9 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
|
|
|
151
170
|
|
|
152
171
|
result = cr.run_ci(project, selector=job, allow_foreign=allow_foreign,
|
|
153
172
|
only=only, timeout=timeout or cr.DEFAULT_STEP_TIMEOUT,
|
|
154
|
-
workflow=workflow, event=event
|
|
173
|
+
workflow=workflow, event=event, engine=engine,
|
|
174
|
+
allow_side_effects=allow_side_effects,
|
|
175
|
+
network=network)
|
|
155
176
|
run = result.to_dict()
|
|
156
177
|
lines = [_verdict_line(run), f"run {run['run_id']} host={run['host_os']}"]
|
|
157
178
|
fp = run.get("fingerprint") or {}
|
|
@@ -224,6 +245,34 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
|
|
|
224
245
|
f"{row.get('started_at', '')[:19]} {tally}")
|
|
225
246
|
return finalize("c3_ci", args, "\n".join(lines), f"{len(rows)} runs")
|
|
226
247
|
|
|
248
|
+
# ── doctor ───────────────────────────────────────────────────────────
|
|
249
|
+
if action == "doctor":
|
|
250
|
+
from services import ci_act
|
|
251
|
+
state = ci_act.availability()
|
|
252
|
+
lines = [
|
|
253
|
+
"Local CI execution engines:",
|
|
254
|
+
"",
|
|
255
|
+
f" native available — runs jobs whose runs-on matches "
|
|
256
|
+
f"{cr.host_os()}",
|
|
257
|
+
]
|
|
258
|
+
if state["ok"]:
|
|
259
|
+
lines += [
|
|
260
|
+
f" act available — {state['act_version']}, "
|
|
261
|
+
f"docker {state['docker_version']}",
|
|
262
|
+
f" runs Linux jobs in a container "
|
|
263
|
+
f"({ci_act.DEFAULT_IMAGE}), real `uses:` actions included",
|
|
264
|
+
]
|
|
265
|
+
else:
|
|
266
|
+
lines += [" act UNAVAILABLE", f" {state['reason']}"]
|
|
267
|
+
lines += [
|
|
268
|
+
"",
|
|
269
|
+
"macOS jobs cannot run locally on any engine — there are no macOS "
|
|
270
|
+
"containers, so a matrix containing them can never reach "
|
|
271
|
+
"FULL_CI_PASS here.",
|
|
272
|
+
]
|
|
273
|
+
return finalize("c3_ci", args, "\n".join(lines),
|
|
274
|
+
"act ready" if state["ok"] else "act unavailable")
|
|
275
|
+
|
|
227
276
|
return finalize("c3_ci", args,
|
|
228
277
|
f"Unknown action '{action}'. Use: inspect, run, rerun, "
|
|
229
|
-
"status, failures, logs, runs.", "unknown action")
|
|
278
|
+
"status, failures, logs, runs, doctor.", "unknown action")
|
{code_context_control-2.80.0 → code_context_control-2.82.0/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.
|
|
3
|
+
Version: 2.82.0
|
|
4
4
|
Summary: Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub.
|
|
5
5
|
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -202,7 +202,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
|
|
|
202
202
|
| `c3_session` | Snapshot, restore, log decisions, compact history |
|
|
203
203
|
| `c3_impact` | Blast-radius analysis before editing shared symbols |
|
|
204
204
|
| `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
|
|
205
|
-
| `c3_ci` | Run this repo's real `.github/workflows` locally
|
|
205
|
+
| `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
|
|
206
206
|
| `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
|
|
207
207
|
| `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
|
|
208
208
|
| `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
|
|
@@ -185,6 +185,7 @@ services/auto_memory.py
|
|
|
185
185
|
services/benchmark_dashboard.py
|
|
186
186
|
services/bitbucket_client.py
|
|
187
187
|
services/bitbucket_credentials.py
|
|
188
|
+
services/ci_act.py
|
|
188
189
|
services/ci_expr.py
|
|
189
190
|
services/ci_failures.py
|
|
190
191
|
services/ci_runner.py
|
|
@@ -281,6 +282,7 @@ tests/test_bitbucket_tool.py
|
|
|
281
282
|
tests/test_c3_bridge_project_artifacts.py
|
|
282
283
|
tests/test_c3_shell.py
|
|
283
284
|
tests/test_chat_poll.py
|
|
285
|
+
tests/test_ci_act.py
|
|
284
286
|
tests/test_ci_expr.py
|
|
285
287
|
tests/test_ci_runner.py
|
|
286
288
|
tests/test_ci_workflow.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-context-control"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.82.0"
|
|
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"
|