code-context-control 2.49.0__tar.gz → 2.49.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_context_control-2.49.0/code_context_control.egg-info → code_context_control-2.49.1}/PKG-INFO +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/c3.py +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.1/code_context_control.egg-info}/PKG-INFO +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.1}/code_context_control.egg-info/SOURCES.txt +0 -1
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/config.py +1 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/oracle_server.py +2 -11
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/oracle_ui.html +2 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/local_session.py +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/app.js +2 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/header.js +6 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/theme_tabs.js +16 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/pyproject.toml +1 -1
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_ui_bundle.py +12 -15
- code_context_control-2.49.0/oracle/oracle.html +0 -4181
- {code_context_control-2.49.0 → code_context_control-2.49.1}/LICENSE +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/README.md +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/_hook_utils.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/commands/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/commands/common.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/commands/parser.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/docs.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/edits.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/bitbucket.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/getting-started.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/index.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/oracle.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/shared.css +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/tools.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/guide/workflow.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_artifact.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_c3read.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_edit_ledger.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_read.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_server.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/hub_ui.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/mcp_server.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/server.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/agent.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/compress.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/delegate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/edit.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/edits.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/federate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/impact.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/project.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/read.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/search.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/session.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/shell.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/status.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/tasks.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/tools/validate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/api.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/app.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/icons.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/shared.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui/theme.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui_legacy.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/cli/ui_nano.html +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/core/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/core/config.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/core/ide.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/core/mcp_toml.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/core/web_security.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/ollama_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/activity.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/agents.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/busy.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/core.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/insights.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/projects.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/settings.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/activity_log.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/agent_base.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/agents.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/artifact_defs.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/artifact_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/auto_memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/bench/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/bitbucket_client.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/circuit_breaker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/claude_md.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/compressor.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/context_snapshot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/conversation_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/doc_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/e2e_tasks.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/edit_ledger.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/embedding_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/error_reporting.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/file_memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/git_context.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/hub_service.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/indexer.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/memory.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/memory_consolidator.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/memory_graph.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/memory_grounder.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/memory_scorer.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/metrics.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/notifications.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/ollama_client.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/output_filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/parser.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/project_manager.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/project_runtime.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/protocol.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/proxy_state.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/retention.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/retrieval_broker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/router.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/runtime.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/session_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/session_manager.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/session_preloader.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/subprojects.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/task_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/telemetry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/text_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/tool_classifier.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/transcript_index.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/validation_cache.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/vector_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/watcher.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/services/win_subprocess.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/setup.cfg +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_hook_state.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_install_mcp_entrypoint.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_memory_system.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_output_filter.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_permissions.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_pm_api.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_project_manager.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_project_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_retention.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_review_digest.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_service_durability.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_session_budget.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_subprojects.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_task_store.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_task_tool.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_validate.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_web_security.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/backend.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/main.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/__init__.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/index_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/init_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/search_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/session_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/stats.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.49.0 → code_context_control-2.49.1}/tui/theme.tcss +0 -0
{code_context_control-2.49.0/code_context_control.egg-info → code_context_control-2.49.1}/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.1
|
|
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
|
{code_context_control-2.49.0 → code_context_control-2.49.1/code_context_control.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.49.
|
|
3
|
+
Version: 2.49.1
|
|
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
|
|
@@ -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>
|
{code_context_control-2.49.0 → code_context_control-2.49.1}/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.1"
|
|
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"
|
|
@@ -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__":
|