code-context-control 2.49.0__tar.gz → 2.49.2__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.49.0/code_context_control.egg-info → code_context_control-2.49.2}/PKG-INFO +10 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/README.md +8 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/c3.py +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/commands/parser.py +5 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/bitbucket.html +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/getting-started.html +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/index.html +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/oracle.html +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/tools.html +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/workflow.html +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/topbar.js +3 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/app.js +9 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/icons.js +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2/code_context_control.egg-info}/PKG-INFO +10 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/code_context_control.egg-info/SOURCES.txt +0 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/config.py +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/oracle_server.py +2 -11
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/oracle_ui.html +3 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/local_session.py +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/app.js +2 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/header.js +6 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/theme_tabs.js +16 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/pyproject.toml +2 -1
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_ui_bundle.py +12 -15
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/main.py +5 -0
- code_context_control-2.49.0/oracle/oracle.html +0 -4181
- {code_context_control-2.49.0 → code_context_control-2.49.2}/LICENSE +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/_hook_utils.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/commands/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/commands/common.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/docs.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/edits.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/guide/shared.css +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_artifact.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_c3read.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_read.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_server.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/hub_ui.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/mcp_server.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/server.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/agent.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/compress.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/delegate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/edit.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/edits.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/federate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/impact.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/project.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/read.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/search.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/session.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/shell.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/status.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/tasks.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/tools/validate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/api.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/shared.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui/theme.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui_legacy.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/cli/ui_nano.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/core/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/core/config.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/core/ide.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/core/mcp_toml.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/core/web_security.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/ollama_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/activity.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/agents.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/busy.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/core.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/insights.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/projects.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/settings.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/activity_log.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/agent_base.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/agents.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/artifact_defs.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/artifact_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/auto_memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/bench/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/bitbucket_client.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/circuit_breaker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/claude_md.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/compressor.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/context_snapshot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/conversation_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/doc_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/e2e_tasks.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/edit_ledger.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/embedding_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/error_reporting.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/file_memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/git_context.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/hub_service.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/indexer.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/memory_consolidator.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/memory_graph.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/memory_grounder.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/memory_scorer.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/metrics.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/notifications.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/ollama_client.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/output_filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/parser.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/project_manager.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/project_runtime.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/protocol.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/proxy_state.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/retention.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/retrieval_broker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/router.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/runtime.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/session_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/session_manager.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/session_preloader.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/subprojects.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/task_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/telemetry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/text_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/tool_classifier.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/transcript_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/validation_cache.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/vector_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/watcher.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/services/win_subprocess.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/setup.cfg +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_hook_state.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_memory_system.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_output_filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_permissions.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_pm_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_project_manager.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_project_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_retention.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_review_digest.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_service_durability.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_session_budget.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_subprojects.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_task_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_task_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_validate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_web_security.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/backend.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/index_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/init_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/search_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/session_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/stats.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.2}/tui/theme.tcss +0 -0
{code_context_control-2.49.0/code_context_control.egg-info → code_context_control-2.49.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.49.
|
|
3
|
+
Version: 2.49.2
|
|
4
4
|
Summary: Local code-intelligence layer for AI coding tools (Claude Code, Codex, Gemini, Copilot). Retrieve less, read less, edit safer — and version the configs that shape your agent (CLAUDE.md, skills, hooks, MCP).
|
|
5
5
|
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -9,6 +9,7 @@ Project-URL: Documentation, https://github.com/drknowhow/code-context-control#re
|
|
|
9
9
|
Project-URL: Repository, https://github.com/drknowhow/code-context-control
|
|
10
10
|
Project-URL: Changelog, https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md
|
|
11
11
|
Project-URL: Issues, https://github.com/drknowhow/code-context-control/issues
|
|
12
|
+
Project-URL: Funding, https://github.com/sponsors/drknowhow
|
|
12
13
|
Keywords: claude,claude-code,mcp,ai,code-intelligence,code-context,developer-tools,llm-tools
|
|
13
14
|
Classifier: Development Status :: 4 - Beta
|
|
14
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -74,6 +75,7 @@ Dynamic: license-file
|
|
|
74
75
|
<img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
75
76
|
<img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
|
|
76
77
|
<img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
|
|
78
|
+
<a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
|
|
77
79
|
</p>
|
|
78
80
|
|
|
79
81
|
<p align="center">
|
|
@@ -423,6 +425,12 @@ Reports include token deltas, cost deltas, win rates, tool-usage analysis, and p
|
|
|
423
425
|
|
|
424
426
|
---
|
|
425
427
|
|
|
428
|
+
## Support C3
|
|
429
|
+
|
|
430
|
+
C3 is free, open source, and built by one person. If it saves you tokens (it should — that's the whole point), consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship directly funds API costs for cross-model test runs and dedicated development time.
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
426
434
|
## License
|
|
427
435
|
|
|
428
436
|
- **Current OSS license** — Apache License 2.0 ([`LICENSE`](LICENSE)). Free for any use, including commercial. Modify, fork, redistribute — all permitted under Apache-2.0 terms.
|
|
@@ -440,3 +448,4 @@ The author may introduce a paid offering or relicense future major versions; no
|
|
|
440
448
|
- **Security policy:** [`SECURITY.md`](SECURITY.md)
|
|
441
449
|
- **Licensing FAQ:** [`LICENSING.md`](LICENSING.md)
|
|
442
450
|
- **Issues:** https://github.com/drknowhow/code-context-control/issues
|
|
451
|
+
- **Sponsor:** https://github.com/sponsors/drknowhow
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
<img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
13
13
|
<img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
|
|
14
14
|
<img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
|
|
15
|
+
<a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
|
|
15
16
|
</p>
|
|
16
17
|
|
|
17
18
|
<p align="center">
|
|
@@ -361,6 +362,12 @@ Reports include token deltas, cost deltas, win rates, tool-usage analysis, and p
|
|
|
361
362
|
|
|
362
363
|
---
|
|
363
364
|
|
|
365
|
+
## Support C3
|
|
366
|
+
|
|
367
|
+
C3 is free, open source, and built by one person. If it saves you tokens (it should — that's the whole point), consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship directly funds API costs for cross-model test runs and dedicated development time.
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
364
371
|
## License
|
|
365
372
|
|
|
366
373
|
- **Current OSS license** — Apache License 2.0 ([`LICENSE`](LICENSE)). Free for any use, including commercial. Modify, fork, redistribute — all permitted under Apache-2.0 terms.
|
|
@@ -378,3 +385,4 @@ The author may introduce a paid offering or relicense future major versions; no
|
|
|
378
385
|
- **Security policy:** [`SECURITY.md`](SECURITY.md)
|
|
379
386
|
- **Licensing FAQ:** [`LICENSING.md`](LICENSING.md)
|
|
380
387
|
- **Issues:** https://github.com/drknowhow/code-context-control/issues
|
|
388
|
+
- **Sponsor:** https://github.com/sponsors/drknowhow
|
|
@@ -9,8 +9,12 @@ def build_parser(version: str, parse_cli_ide_arg):
|
|
|
9
9
|
parser = argparse.ArgumentParser(
|
|
10
10
|
prog="c3",
|
|
11
11
|
description="Claude Code Companion - Reduce token usage with local intelligence",
|
|
12
|
+
epilog="Support C3 development: https://github.com/sponsors/drknowhow",
|
|
13
|
+
)
|
|
14
|
+
parser.add_argument(
|
|
15
|
+
"--version", "-v", action="version",
|
|
16
|
+
version=f"c3 version {version} | support C3: https://github.com/sponsors/drknowhow",
|
|
12
17
|
)
|
|
13
|
-
parser.add_argument("--version", "-v", action="version", version=f"c3 version {version}")
|
|
14
18
|
subparsers = parser.add_subparsers(dest="command")
|
|
15
19
|
|
|
16
20
|
p_init = subparsers.add_parser("init", help="Initialize C3 for a project")
|
|
@@ -79,6 +79,7 @@
|
|
|
79
79
|
<a href="tools.html">Tools</a>
|
|
80
80
|
<a href="bitbucket.html" class="active">Bitbucket</a>
|
|
81
81
|
<a href="oracle.html">Oracle</a>
|
|
82
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|
|
82
83
|
</nav>
|
|
83
84
|
<span class="header-version">v2.30.0</span>
|
|
84
85
|
</header>
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
<a href="tools.html">Tools</a>
|
|
23
23
|
<a href="bitbucket.html">Bitbucket</a>
|
|
24
24
|
<a href="oracle.html">Oracle</a>
|
|
25
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|
|
25
26
|
</nav>
|
|
26
27
|
<span class="header-version">v2.x</span>
|
|
27
28
|
</header>
|
|
@@ -224,6 +224,7 @@
|
|
|
224
224
|
<a href="tools.html">Tools</a>
|
|
225
225
|
<a href="bitbucket.html">Bitbucket</a>
|
|
226
226
|
<a href="oracle.html">Oracle</a>
|
|
227
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|
|
227
228
|
</nav>
|
|
228
229
|
<span class="header-version">v2.x</span>
|
|
229
230
|
</header>
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
<a href="tools.html">Tools</a>
|
|
78
78
|
<a href="bitbucket.html">Bitbucket</a>
|
|
79
79
|
<a href="oracle.html" class="active">Oracle</a>
|
|
80
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|
|
80
81
|
</nav>
|
|
81
82
|
<span class="header-version">v2.32.0</span>
|
|
82
83
|
</header>
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
<a href="tools.html" class="active">Tools</a>
|
|
82
82
|
<a href="bitbucket.html">Bitbucket</a>
|
|
83
83
|
<a href="oracle.html">Oracle</a>
|
|
84
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|
|
84
85
|
</nav>
|
|
85
86
|
<span class="header-version">v2.x</span>
|
|
86
87
|
</header>
|
|
@@ -224,6 +224,7 @@
|
|
|
224
224
|
<a href="tools.html">Tools</a>
|
|
225
225
|
<a href="bitbucket.html">Bitbucket</a>
|
|
226
226
|
<a href="oracle.html">Oracle</a>
|
|
227
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|
|
227
228
|
</nav>
|
|
228
229
|
<span class="header-version">v2.x</span>
|
|
229
230
|
</header>
|
|
@@ -64,6 +64,9 @@ function TopBar({ version, activeCount, darkMode, hubConfig, mainView, setMainVi
|
|
|
64
64
|
<a href="/guide/" target="_blank" rel="noopener" title="Open the C3 guide" style={ctrl}>
|
|
65
65
|
<I name="fileText" size={13} color={T.textMuted} />
|
|
66
66
|
</a>
|
|
67
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" title="Sponsor C3 development" style={ctrl}>
|
|
68
|
+
<I name="heart" size={13} color="#EA4AAA" />
|
|
69
|
+
</a>
|
|
67
70
|
{hubConfig && hubConfig.oracle_url && (
|
|
68
71
|
<a href={hubConfig.oracle_url} target="_blank" rel="noopener" title="Open Oracle" style={ctrl}>
|
|
69
72
|
<I name="external" size={13} color={T.textMuted} />
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// ─── Main App ─────────────────────────────
|
|
2
|
-
const BUILD_TIME = "2026-
|
|
2
|
+
const BUILD_TIME = "2026-07-02 UI-v2";
|
|
3
3
|
const { useState, useEffect, useCallback, useRef } = React;
|
|
4
4
|
|
|
5
5
|
const tabs = [
|
|
@@ -191,6 +191,14 @@ function App() {
|
|
|
191
191
|
}}>
|
|
192
192
|
Ledger
|
|
193
193
|
</a>
|
|
194
|
+
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" title="Sponsor C3 development"
|
|
195
|
+
style={{
|
|
196
|
+
width: 28, height: 28, borderRadius: 6, border: "1px solid #EA4AAA40",
|
|
197
|
+
background: "#EA4AAA12", textDecoration: "none", display: "flex",
|
|
198
|
+
alignItems: "center", justifyContent: "center"
|
|
199
|
+
}}>
|
|
200
|
+
<I name="heart" size={13} color="#EA4AAA" />
|
|
201
|
+
</a>
|
|
194
202
|
<button onClick={() => setDarkMode(!darkMode)} title="Toggle theme"
|
|
195
203
|
style={{
|
|
196
204
|
width: 28, height: 28, borderRadius: 6, border: `1px solid ${T.border}`,
|
|
@@ -18,6 +18,7 @@ const icons = {
|
|
|
18
18
|
refresh: "M1 4v6h6M23 20v-6h-6M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15",
|
|
19
19
|
copy: "M20 9h-9a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2zM5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",
|
|
20
20
|
check: "M20 6L9 17l-5-5",
|
|
21
|
+
heart: "M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z",
|
|
21
22
|
layers: "M12 2l10 6.5v7L12 22 2 15.5v-7zM12 22v-7M22 8.5l-10 7-10-7",
|
|
22
23
|
brain: "M12 2a7 7 0 0 0-7 7c0 3 2 5.5 5 7v4h4v-4c3-1.5 5-4 5-7a7 7 0 0 0-7-7z",
|
|
23
24
|
chevron: "M9 18l6-6-6-6",
|
{code_context_control-2.49.0 → code_context_control-2.49.2/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.49.
|
|
3
|
+
Version: 2.49.2
|
|
4
4
|
Summary: Local code-intelligence layer for AI coding tools (Claude Code, Codex, Gemini, Copilot). Retrieve less, read less, edit safer — and version the configs that shape your agent (CLAUDE.md, skills, hooks, MCP).
|
|
5
5
|
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -9,6 +9,7 @@ Project-URL: Documentation, https://github.com/drknowhow/code-context-control#re
|
|
|
9
9
|
Project-URL: Repository, https://github.com/drknowhow/code-context-control
|
|
10
10
|
Project-URL: Changelog, https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md
|
|
11
11
|
Project-URL: Issues, https://github.com/drknowhow/code-context-control/issues
|
|
12
|
+
Project-URL: Funding, https://github.com/sponsors/drknowhow
|
|
12
13
|
Keywords: claude,claude-code,mcp,ai,code-intelligence,code-context,developer-tools,llm-tools
|
|
13
14
|
Classifier: Development Status :: 4 - Beta
|
|
14
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -74,6 +75,7 @@ Dynamic: license-file
|
|
|
74
75
|
<img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
75
76
|
<img alt="Platforms" src="https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey">
|
|
76
77
|
<img alt="Status: Beta" src="https://img.shields.io/badge/status-beta-yellow">
|
|
78
|
+
<a href="https://github.com/sponsors/drknowhow"><img alt="Sponsor" src="https://img.shields.io/badge/sponsor-%E2%9D%A4-EA4AAA?logo=githubsponsors&logoColor=white"></a>
|
|
77
79
|
</p>
|
|
78
80
|
|
|
79
81
|
<p align="center">
|
|
@@ -423,6 +425,12 @@ Reports include token deltas, cost deltas, win rates, tool-usage analysis, and p
|
|
|
423
425
|
|
|
424
426
|
---
|
|
425
427
|
|
|
428
|
+
## Support C3
|
|
429
|
+
|
|
430
|
+
C3 is free, open source, and built by one person. If it saves you tokens (it should — that's the whole point), consider [sponsoring on GitHub](https://github.com/sponsors/drknowhow). Sponsorship directly funds API costs for cross-model test runs and dedicated development time.
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
426
434
|
## License
|
|
427
435
|
|
|
428
436
|
- **Current OSS license** — Apache License 2.0 ([`LICENSE`](LICENSE)). Free for any use, including commercial. Modify, fork, redistribute — all permitted under Apache-2.0 terms.
|
|
@@ -440,3 +448,4 @@ The author may introduce a paid offering or relicense future major versions; no
|
|
|
440
448
|
- **Security policy:** [`SECURITY.md`](SECURITY.md)
|
|
441
449
|
- **Licensing FAQ:** [`LICENSING.md`](LICENSING.md)
|
|
442
450
|
- **Issues:** https://github.com/drknowhow/code-context-control/issues
|
|
451
|
+
- **Sponsor:** https://github.com/sponsors/drknowhow
|
|
@@ -32,6 +32,7 @@ DEFAULTS = {
|
|
|
32
32
|
"digest_retention_days": 14, # prune stored digests
|
|
33
33
|
"auto_open_browser": True,
|
|
34
34
|
"theme": "dark",
|
|
35
|
+
"ui_last_tab": "chat", # persisted UI preference (hub parity)
|
|
35
36
|
"max_facts_per_analysis": 100,
|
|
36
37
|
"insight_confidence_threshold": 0.5,
|
|
37
38
|
"log_level": "INFO",
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import atexit
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
|
-
import os
|
|
7
6
|
import socket
|
|
8
7
|
import sys
|
|
9
8
|
import threading
|
|
@@ -16,7 +15,7 @@ _PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
|
|
16
15
|
if str(_PROJECT_ROOT) not in sys.path:
|
|
17
16
|
sys.path.insert(0, str(_PROJECT_ROOT))
|
|
18
17
|
|
|
19
|
-
from flask import Flask, Response, jsonify, request
|
|
18
|
+
from flask import Flask, Response, jsonify, request # noqa: E402
|
|
20
19
|
|
|
21
20
|
from oracle.config import ORACLE_DIR, load_config, save_config # noqa: E402
|
|
22
21
|
from oracle.mcp_oracle import mcp_url, start_mcp_thread # noqa: E402
|
|
@@ -248,15 +247,6 @@ def index():
|
|
|
248
247
|
return resp
|
|
249
248
|
|
|
250
249
|
|
|
251
|
-
@app.route("/legacy")
|
|
252
|
-
def index_legacy():
|
|
253
|
-
"""Frozen pre-bundle Oracle UI — escape hatch for one release, then removed."""
|
|
254
|
-
resp = send_from_directory(os.path.dirname(__file__), "oracle.html")
|
|
255
|
-
if local_session.is_loopback(request.remote_addr):
|
|
256
|
-
local_session.attach_cookie(resp)
|
|
257
|
-
return resp
|
|
258
|
-
|
|
259
|
-
|
|
260
250
|
# ── Health ────────────────────────────────────────────────
|
|
261
251
|
@app.route("/api/health")
|
|
262
252
|
def api_health():
|
|
@@ -272,6 +262,7 @@ def api_health():
|
|
|
272
262
|
return jsonify({
|
|
273
263
|
"status": "ok",
|
|
274
264
|
"service": "c3-oracle",
|
|
265
|
+
"version": _c3_version(),
|
|
275
266
|
"model": _cfg.get("model", "gemma4:31b-cloud"),
|
|
276
267
|
"ollama_available": ollama_ok,
|
|
277
268
|
"model_verified": _model_verified,
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
}
|
|
45
45
|
.logo { font-size: 17px; font-weight: 700; letter-spacing: .5px; display: flex; align-items: center; gap: 10px; }
|
|
46
46
|
.logo span { color: var(--accent); }
|
|
47
|
+
.version-badge { font-size: 10px; font-weight: 500; font-family: monospace; color: var(--text2); background: var(--bg3); border: 1px solid var(--border); border-radius: 4px; padding: 1px 6px; }
|
|
47
48
|
.header-right { display: flex; align-items: center; gap: 8px; }
|
|
48
49
|
.badge { background: var(--bg3); border: 1px solid var(--border); border-radius: 9999px; padding: 3px 12px; font-size: 11px; color: var(--text2); }
|
|
49
50
|
.badge .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 5px; }
|
|
@@ -797,6 +798,7 @@
|
|
|
797
798
|
<header>
|
|
798
799
|
<div class="logo">
|
|
799
800
|
<span>Oracle</span> Memory Agent
|
|
801
|
+
<span class="version-badge" id="oracleVersion" style="display:none"></span>
|
|
800
802
|
<div class="activity-spinner" id="activitySpinner"></div>
|
|
801
803
|
<div class="activity-label" id="activityLabel"></div>
|
|
802
804
|
</div>
|
|
@@ -825,6 +827,7 @@
|
|
|
825
827
|
</div>
|
|
826
828
|
</div>
|
|
827
829
|
</div>
|
|
830
|
+
<a class="header-btn" href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" title="Sponsor C3 development"><span style="color:#EA4AAA">♥</span> Sponsor</a>
|
|
828
831
|
<a class="header-btn" id="hubLink" href="#" target="_blank" style="display:none">Open Hub</a>
|
|
829
832
|
<button class="header-btn" id="themeToggle" onclick="toggleTheme()">Theme: Dark</button>
|
|
830
833
|
</div>
|
{code_context_control-2.49.0 → code_context_control-2.49.2}/oracle/services/local_session.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Per-boot local dashboard session for the Oracle server.
|
|
2
2
|
|
|
3
|
-
The Oracle dashboard (
|
|
3
|
+
The Oracle dashboard (oracle_ui.html bundle) runs in a local browser and calls mutating
|
|
4
4
|
``/api/*`` endpoints without a Bearer token. Rather than injecting the durable
|
|
5
5
|
Discovery token into page JS (readable by any XSS) or trusting every loopback
|
|
6
6
|
process (exactly the attacker the write gate exists to stop), the server
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
// ═══════════════════════════════════════════════════════════
|
|
5
5
|
(async function init() {
|
|
6
6
|
await Promise.all([refreshHeader(), loadProjects(), loadInsights(), loadSuggestions(), loadSettings(), loadDiscoveryKey(), chatLoadConversations(), chatLoadCommands()]);
|
|
7
|
+
// Restore persisted UI preferences (loadSettings cached the config).
|
|
8
|
+
restoreLastTab(window.oracleConfig || {});
|
|
7
9
|
// Auto-refresh every 60s
|
|
8
10
|
setInterval(() => { refreshHeader(); loadProjects(); }, 60000);
|
|
9
11
|
})();
|
|
@@ -24,6 +24,12 @@ async function refreshHeader() {
|
|
|
24
24
|
api('/api/review/status').catch(() => ({})),
|
|
25
25
|
]);
|
|
26
26
|
|
|
27
|
+
// Version badge (hub topbar parity)
|
|
28
|
+
if (health.version) {
|
|
29
|
+
const vEl = document.getElementById('oracleVersion');
|
|
30
|
+
if (vEl) { vEl.textContent = 'v' + health.version; vEl.style.display = ''; }
|
|
31
|
+
}
|
|
32
|
+
|
|
27
33
|
// Ollama
|
|
28
34
|
ollamaOk = !!health.ollama_available;
|
|
29
35
|
model = health.model || '?';
|
|
@@ -25,6 +25,18 @@ function toggleTheme() {
|
|
|
25
25
|
// ═══════════════════════════════════════════════════════════
|
|
26
26
|
// ── Tab switching ──
|
|
27
27
|
// ═══════════════════════════════════════════════════════════
|
|
28
|
+
let _restoringTab = false;
|
|
29
|
+
|
|
30
|
+
function restoreLastTab(cfg) {
|
|
31
|
+
// Re-open the tab from the persisted UI preference (hub parity).
|
|
32
|
+
const last = (cfg && cfg.ui_last_tab) || 'chat';
|
|
33
|
+
if (last === 'chat') return; // chat is the default active tab
|
|
34
|
+
const tab = document.querySelector(`.tab[data-tab="${last}"]`);
|
|
35
|
+
if (!tab) return;
|
|
36
|
+
_restoringTab = true;
|
|
37
|
+
try { tab.click(); } finally { _restoringTab = false; }
|
|
38
|
+
}
|
|
39
|
+
|
|
28
40
|
document.querySelectorAll('.tab').forEach(tab => {
|
|
29
41
|
tab.addEventListener('click', () => {
|
|
30
42
|
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
|
@@ -46,6 +58,10 @@ document.querySelectorAll('.tab').forEach(tab => {
|
|
|
46
58
|
if (tab.dataset.tab === 'activity' && !window._actLoaded) {
|
|
47
59
|
loadActivity(); window._actLoaded = true;
|
|
48
60
|
}
|
|
61
|
+
// Persist the UI preference (hub parity) — skip during restore.
|
|
62
|
+
if (!_restoringTab) {
|
|
63
|
+
api('/api/config', { method: 'POST', body: { ui_last_tab: tab.dataset.tab } }).catch(() => {});
|
|
64
|
+
}
|
|
49
65
|
});
|
|
50
66
|
});
|
|
51
67
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-context-control"
|
|
7
|
-
version = "2.49.
|
|
7
|
+
version = "2.49.2"
|
|
8
8
|
description = "Local code-intelligence layer for AI coding tools (Claude Code, Codex, Gemini, Copilot). Retrieve less, read less, edit safer — and version the configs that shape your agent (CLAUDE.md, skills, hooks, MCP)."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -81,6 +81,7 @@ Documentation = "https://github.com/drknowhow/code-context-control#readme"
|
|
|
81
81
|
Repository = "https://github.com/drknowhow/code-context-control"
|
|
82
82
|
Changelog = "https://github.com/drknowhow/code-context-control/blob/main/CHANGELOG.md"
|
|
83
83
|
Issues = "https://github.com/drknowhow/code-context-control/issues"
|
|
84
|
+
Funding = "https://github.com/sponsors/drknowhow"
|
|
84
85
|
|
|
85
86
|
[project.scripts]
|
|
86
87
|
c3 = "cli.c3:main"
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Mirrors the hub bundle smoke tests: every listed module exists on disk, the
|
|
4
4
|
build replaces the script token and stamps per-file markers, app.js (the init
|
|
5
|
-
IIFE) stays last, / serves the bundle with the session cookie
|
|
6
|
-
serves the frozen monolith.
|
|
5
|
+
IIFE) stays last, and / serves the bundle with the session cookie.
|
|
7
6
|
"""
|
|
8
7
|
from __future__ import annotations
|
|
9
8
|
|
|
@@ -28,9 +27,10 @@ class TestBundleFiles(unittest.TestCase):
|
|
|
28
27
|
def test_app_js_is_last(self):
|
|
29
28
|
self.assertEqual(_ORACLE_JS_FILES[-1], "ui/app.js")
|
|
30
29
|
|
|
31
|
-
def
|
|
30
|
+
def test_shell_exists_and_legacy_monolith_is_gone(self):
|
|
32
31
|
self.assertTrue((ORACLE_DIR / "oracle_ui.html").is_file())
|
|
33
|
-
|
|
32
|
+
# The one-release /legacy escape hatch expired with v2.49.0.
|
|
33
|
+
self.assertFalse((ORACLE_DIR / "oracle.html").exists())
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class TestBundleBuild(unittest.TestCase):
|
|
@@ -71,18 +71,15 @@ class TestBundleRoutes(unittest.TestCase):
|
|
|
71
71
|
cookies = r.headers.getlist("Set-Cookie")
|
|
72
72
|
self.assertTrue(any(c.startswith("c3_oracle_session=") for c in cookies))
|
|
73
73
|
|
|
74
|
-
def
|
|
75
|
-
|
|
76
|
-
self.assertEqual(r.status_code, 200)
|
|
77
|
-
body = r.get_data(as_text=True)
|
|
78
|
-
# The monolith carries its inline script, not concat markers.
|
|
79
|
-
self.assertNotIn("═══ ui/app.js ═══", body)
|
|
80
|
-
self.assertIn("async function init()", body)
|
|
81
|
-
cookies = r.headers.getlist("Set-Cookie")
|
|
82
|
-
self.assertTrue(any(c.startswith("c3_oracle_session=") for c in cookies))
|
|
74
|
+
def test_legacy_route_removed(self):
|
|
75
|
+
self.assertEqual(self.client.get("/legacy").status_code, 404)
|
|
83
76
|
|
|
84
|
-
def
|
|
85
|
-
self.
|
|
77
|
+
def test_health_carries_version(self):
|
|
78
|
+
r = self.client.get("/api/health")
|
|
79
|
+
self.assertEqual(r.status_code, 200)
|
|
80
|
+
# Header version badge (hub parity) reads this field.
|
|
81
|
+
version = r.get_json().get("version", "")
|
|
82
|
+
self.assertRegex(version, r"^\d+\.\d+")
|
|
86
83
|
|
|
87
84
|
|
|
88
85
|
if __name__ == "__main__":
|
|
@@ -21,6 +21,7 @@ class C3App(App):
|
|
|
21
21
|
Binding("q", "quit", "Quit", show=True),
|
|
22
22
|
Binding("tab", "toggle_focus", "Focus: NAV/CONTENT", show=True),
|
|
23
23
|
Binding("ctrl+t", "toggle_theme", "Theme", show=True),
|
|
24
|
+
Binding("s", "sponsor", "Sponsor \u2665", show=True),
|
|
24
25
|
]
|
|
25
26
|
|
|
26
27
|
def compose(self) -> ComposeResult:
|
|
@@ -71,6 +72,10 @@ class C3App(App):
|
|
|
71
72
|
else:
|
|
72
73
|
nav_list.focus()
|
|
73
74
|
|
|
75
|
+
def action_sponsor(self) -> None:
|
|
76
|
+
import webbrowser
|
|
77
|
+
webbrowser.open("https://github.com/sponsors/drknowhow")
|
|
78
|
+
|
|
74
79
|
def action_toggle_theme(self) -> None:
|
|
75
80
|
if self.theme_mode == "dark":
|
|
76
81
|
self.theme_mode = "light"
|