code-context-control 2.59.0__tar.gz → 2.61.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_context_control-2.59.0 → code_context_control-2.61.0}/PKG-INFO +27 -7
- {code_context_control-2.59.0 → code_context_control-2.61.0}/README.md +26 -6
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/c3.py +30 -12
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/commands/common.py +51 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/commands/parser.py +4 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/bitbucket.html +1 -0
- code_context_control-2.61.0/cli/guide/credentials.html +554 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/getting-started.html +37 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/index.html +10 -1
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/oracle.html +1 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/tools.html +57 -1
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/workflow.html +49 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_edit_ledger.py +9 -0
- code_context_control-2.61.0/cli/hub_ui/components/hub_credentials.js +1546 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/mcp_server.py +27 -1
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/agent.py +4 -4
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/delegate.py +35 -20
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/credentials.js +3 -3
- {code_context_control-2.59.0 → code_context_control-2.61.0}/code_context_control.egg-info/PKG-INFO +27 -7
- {code_context_control-2.59.0 → code_context_control-2.61.0}/code_context_control.egg-info/SOURCES.txt +4 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/pyproject.toml +1 -1
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/agents.py +1 -1
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/claude_md.py +44 -14
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/edit_ledger.py +7 -0
- code_context_control-2.61.0/services/repo_map.py +584 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/session_manager.py +29 -13
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_install_mcp_entrypoint.py +34 -0
- code_context_control-2.61.0/tests/test_no_stale_model_pins.py +60 -0
- code_context_control-2.61.0/tests/test_repo_map.py +365 -0
- code_context_control-2.59.0/cli/hub_ui/components/hub_credentials.js +0 -516
- {code_context_control-2.59.0 → code_context_control-2.61.0}/LICENSE +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/_hook_utils.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/commands/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/docs.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/edits.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/guide/shared.css +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_artifact.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_auto_snapshot.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_c3_signal.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_c3read.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_dispatch.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_edit_unlock.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_filter.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_ghost_files.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_pretool_enforce.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_prompt_recall.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_read.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_session_stats.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hook_terse_advisor.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_server.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/app.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/add_project.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/config_editor.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/drill_health.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/drill_panel.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/drill_tasks.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/drill_views.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/global_search.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/mcp_manager.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/modals.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/project_card.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/project_tree.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/session_drawer.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/settings_modal.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/sidebar.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/summary_bar.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/task_board.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/toasts.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/components/topbar.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui/state.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/hub_ui.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/mcp_proxy.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/progress.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/server.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/_helpers.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/artifacts.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/bitbucket.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/compress.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/edit.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/edits.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/federate.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/filter.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/impact.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/jira.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/memory.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/project.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/read.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/search.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/session.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/shell.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/status.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/tasks.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/tools/validate.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/api.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/app.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/bitbucket.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/chat.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/dashboard.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/edits.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/instructions.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/jira.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/memory.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/sessions.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/settings.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/sidebar.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/components/tasks.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/icons.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/pm_shared.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/shared.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui/theme.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui_legacy.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/cli/ui_nano.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/code_context_control.egg-info/dependency_links.txt +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/code_context_control.egg-info/entry_points.txt +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/code_context_control.egg-info/requires.txt +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/code_context_control.egg-info/top_level.txt +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/core/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/core/config.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/core/ide.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/core/mcp_toml.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/core/web_security.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/config.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/mcp_oracle.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/oracle_server.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/oracle_ui.html +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/activity_reporter.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/api_auth.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/c3_bridge.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/chat_engine.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/chat_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/cross_memory.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/federated_graph.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/health_checker.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/insight_engine.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/local_session.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/memory_reader.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/memory_writer.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/project_scanner.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/review_agent.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/tool_executor.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/services/tool_registry.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/activity.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/agents.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/app.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/busy.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/chat/conversations.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/chat/input.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/chat/markdown.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/chat/send.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/chat/stream_renderer.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/chat/toolbar.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/core.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/crossgraph.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/header.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/insights.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/projects.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/settings.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/suggestions.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/oracle/ui/theme_tabs.js +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/activity_log.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/agent_base.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/artifact_defs.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/artifact_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/auto_memory.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/bench/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/bench/external/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/bench/external/aider_polyglot.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/bench/external/swe_bench.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/benchmark_dashboard.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/bitbucket_client.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/bitbucket_credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/circuit_breaker.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/compressor.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/context_snapshot.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/conversation_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/credential_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/doc_index.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/e2e_benchmark.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/e2e_evaluator.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/e2e_tasks.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/embedding_index.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/error_reporting.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/file_memory.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/git_context.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/hub_service.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/indexer.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/jira_client.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/jira_cloud.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/jira_credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/jira_data_center.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/jira_links.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory_consolidator.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory_distiller.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory_graph.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory_grounder.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory_queue.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/memory_scorer.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/metrics.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/notifications.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/ollama_bridge.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/ollama_client.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/ollama_credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/output_filter.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/parser.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/project_manager.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/project_runtime.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/protocol.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/proxy_state.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/retention.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/retrieval_broker.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/router.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/runtime.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/scanner.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/session_benchmark.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/session_preloader.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/subprojects.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/task_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/telemetry.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/text_index.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/time_tracker.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/tool_classifier.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/transcript_index.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/validation_cache.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/vector_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/watcher.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/services/win_subprocess.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/setup.cfg +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_activity_reporter.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_aider_polyglot.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_antigravity_transition.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_artifact_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_artifact_tool.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_bitbucket_cli_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_bitbucket_client.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_bitbucket_config_fallback.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_bitbucket_credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_bitbucket_tool.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_c3_shell.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_circuit_breaker.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_claude_md_merge.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_cli_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_compressor_large_file.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_credential_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_credentials_routes.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_credentials_tool.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_creds_cli_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_delegate_cascade.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_e2e_benchmark.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_edit_ledger_hook.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_edit_normalization.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_enforcement_flip.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_federated_graph.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_filter_backoff.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_ghost_files.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_ghost_generation.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_git_branch_awareness.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hook_dispatch.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hook_pretool_enforce.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hook_prompt_recall.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hook_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hook_state.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hook_utf8_stdio.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hub_credentials_route.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hub_credentials_routes_write.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hub_inspect_api.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hub_server_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_hub_subproject_links.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_init_scan.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_cli_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_client.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_config_fallback.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_links.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_routes.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_jira_tool.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_lazy_store_init.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_mcp_host_guard.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_mcp_memory_timeout.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_mcp_server_smoke.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_mcp_toml.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_memory_distiller.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_memory_graph_api.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_memory_queue.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_memory_system.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_notification_dedup.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_notification_discipline.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_ollama_credentials.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_api_auth.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_apikey_api.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_c3_bridge.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_chat_engine.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_discovery_api.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_local_auth.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_ollama_bridge.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_scanner_cache.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_security_fixes.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_subproject_awareness.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_oracle_ui_bundle.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_output_filter.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_permissions.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_pm_api.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_project_manager.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_project_manager_merge.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_project_tool.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_read_coercion.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_read_edit_parity.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_related_facts.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_response_boilerplate.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_retention.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_review_digest.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_service_durability.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_session_benchmark.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_session_budget.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_shell_creds.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_shell_robustness.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_subproject_exclusion.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_subproject_federation.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_subprojects.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_swe_bench.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_task_store.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_task_tool.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_time_tracker.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_token_telemetry.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_tool_registry.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_upgrade_and_version.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_validate.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_version_sync.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_web_security.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tests/test_windows_reliability.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/backend.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/main.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/__init__.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/benchmark_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/claudemd_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/compress_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/index_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/init_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/mcp_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/optimize_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/pipe_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/projects_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/search_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/session_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/stats.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/screens/ui_view.py +0 -0
- {code_context_control-2.59.0 → code_context_control-2.61.0}/tui/theme.tcss +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-context-control
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.61.0
|
|
4
4
|
Summary: Local code-intelligence layer for AI coding tools (Claude Code, Codex, Copilot, Cursor, Antigravity). Retrieve less, read less, edit safer — version the configs that shape your agent (CLAUDE.md, skills, hooks, MCP), and manage multi-project + sub-project hierarchies from a local hub.
|
|
5
5
|
Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -243,6 +243,8 @@ Manage `CLAUDE.md`, `AGENTS.md` (Codex), `GEMINI.md`, and `.github/copilot-instr
|
|
|
243
243
|
|
|
244
244
|
C3-generated content is wrapped in a `<!-- C3:BEGIN … -->` / `<!-- C3:END -->` block. Regenerating (or `Compact`) only rewrites that block — **anything you write outside it is preserved**, so it's safe to keep your own notes in the same file.
|
|
245
245
|
|
|
246
|
+
**Live repo map (v2.60.0):** generated docs no longer embed a frozen project tree. They carry a stable pointer to `.c3/MAP.md` — a machine-owned, byte-stable map (commands, entry points, module one-liners, tree) that C3 refreshes automatically via edit hooks and a first-tool-call freshness check. Manage it with `c3 map status|ensure|refresh`; set `map.enabled=false` in `.c3/config.json` to restore the embedded tree.
|
|
247
|
+
|
|
246
248
|
### 7. Chat — browse prior AI conversations
|
|
247
249
|
|
|
248
250
|
<p align="center">
|
|
@@ -359,12 +361,30 @@ with credentials disabled, and the vault is hard-excluded from the Oracle
|
|
|
359
361
|
Discovery API.
|
|
360
362
|
|
|
361
363
|
Since **v2.59.0** the Hub has a top-level **Credentials** view: manage the
|
|
362
|
-
global vault (`~/.c3`) and every registered project's entries from one place
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
364
|
+
global vault (`~/.c3`) and every registered project's entries from one place,
|
|
365
|
+
with overriding shown both ways ("overrides global" on project entries,
|
|
366
|
+
"overridden ×N" on globals). **v2.61.0** makes it navigable at scale:
|
|
367
|
+
|
|
368
|
+
- **Cross-project search** — <kbd>/</kbd> or <kbd>Ctrl/⌘-K</kbd>. Free words
|
|
369
|
+
match name / description / env var / project; `project:` `scope:` `type:`
|
|
370
|
+
`storage:` `name:` `env:` `inject:` `agent:` `shadow:` qualifiers narrow
|
|
371
|
+
further. Results are **grouped by credential name**, so "where is
|
|
372
|
+
`STRIPE_KEY` defined and which one wins?" is one glance instead of forty
|
|
373
|
+
accordions. `agent:true` and `inject:true` are one-key exposure audits.
|
|
374
|
+
- **Per-credential settings drawer** — metadata, the two exposure switches
|
|
375
|
+
with their blast radius written out, an on-demand resolution check +
|
|
376
|
+
fingerprint, write-only value replacement, usage and override
|
|
377
|
+
relationships, and a separated danger zone.
|
|
378
|
+
- **Right-click context menu** on any row (also `⋯` and <kbd>Shift</kbd>+<kbd>F10</kbd>),
|
|
379
|
+
with typed confirmations replacing `window.confirm`: deleting or granting
|
|
380
|
+
agent-read access requires typing the credential's name.
|
|
381
|
+
|
|
382
|
+
The write-only wire contract extends to the hub: values are submitted
|
|
383
|
+
inbound-only, **no hub route ever returns a stored value** (there is no
|
|
384
|
+
`reveal` on the hub at all), and search indexes metadata only.
|
|
385
|
+
|
|
386
|
+
Full documentation: [`cli/guide/credentials.html`](cli/guide/credentials.html)
|
|
387
|
+
— open it in the app at `/guide/credentials.html`.
|
|
368
388
|
|
|
369
389
|
### Jira — Cloud + Data Center (v2.56.0)
|
|
370
390
|
|
|
@@ -180,6 +180,8 @@ Manage `CLAUDE.md`, `AGENTS.md` (Codex), `GEMINI.md`, and `.github/copilot-instr
|
|
|
180
180
|
|
|
181
181
|
C3-generated content is wrapped in a `<!-- C3:BEGIN … -->` / `<!-- C3:END -->` block. Regenerating (or `Compact`) only rewrites that block — **anything you write outside it is preserved**, so it's safe to keep your own notes in the same file.
|
|
182
182
|
|
|
183
|
+
**Live repo map (v2.60.0):** generated docs no longer embed a frozen project tree. They carry a stable pointer to `.c3/MAP.md` — a machine-owned, byte-stable map (commands, entry points, module one-liners, tree) that C3 refreshes automatically via edit hooks and a first-tool-call freshness check. Manage it with `c3 map status|ensure|refresh`; set `map.enabled=false` in `.c3/config.json` to restore the embedded tree.
|
|
184
|
+
|
|
183
185
|
### 7. Chat — browse prior AI conversations
|
|
184
186
|
|
|
185
187
|
<p align="center">
|
|
@@ -296,12 +298,30 @@ with credentials disabled, and the vault is hard-excluded from the Oracle
|
|
|
296
298
|
Discovery API.
|
|
297
299
|
|
|
298
300
|
Since **v2.59.0** the Hub has a top-level **Credentials** view: manage the
|
|
299
|
-
global vault (`~/.c3`) and every registered project's entries from one place
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
301
|
+
global vault (`~/.c3`) and every registered project's entries from one place,
|
|
302
|
+
with overriding shown both ways ("overrides global" on project entries,
|
|
303
|
+
"overridden ×N" on globals). **v2.61.0** makes it navigable at scale:
|
|
304
|
+
|
|
305
|
+
- **Cross-project search** — <kbd>/</kbd> or <kbd>Ctrl/⌘-K</kbd>. Free words
|
|
306
|
+
match name / description / env var / project; `project:` `scope:` `type:`
|
|
307
|
+
`storage:` `name:` `env:` `inject:` `agent:` `shadow:` qualifiers narrow
|
|
308
|
+
further. Results are **grouped by credential name**, so "where is
|
|
309
|
+
`STRIPE_KEY` defined and which one wins?" is one glance instead of forty
|
|
310
|
+
accordions. `agent:true` and `inject:true` are one-key exposure audits.
|
|
311
|
+
- **Per-credential settings drawer** — metadata, the two exposure switches
|
|
312
|
+
with their blast radius written out, an on-demand resolution check +
|
|
313
|
+
fingerprint, write-only value replacement, usage and override
|
|
314
|
+
relationships, and a separated danger zone.
|
|
315
|
+
- **Right-click context menu** on any row (also `⋯` and <kbd>Shift</kbd>+<kbd>F10</kbd>),
|
|
316
|
+
with typed confirmations replacing `window.confirm`: deleting or granting
|
|
317
|
+
agent-read access requires typing the credential's name.
|
|
318
|
+
|
|
319
|
+
The write-only wire contract extends to the hub: values are submitted
|
|
320
|
+
inbound-only, **no hub route ever returns a stored value** (there is no
|
|
321
|
+
`reveal` on the hub at all), and search indexes metadata only.
|
|
322
|
+
|
|
323
|
+
Full documentation: [`cli/guide/credentials.html`](cli/guide/credentials.html)
|
|
324
|
+
— open it in the app at `/guide/credentials.html`.
|
|
305
325
|
|
|
306
326
|
### Jira — Cloud + Data Center (v2.56.0)
|
|
307
327
|
|
|
@@ -92,7 +92,7 @@ console = Console() if HAS_RICH else None
|
|
|
92
92
|
# Config
|
|
93
93
|
CONFIG_DIR = ".c3"
|
|
94
94
|
CONFIG_FILE = ".c3/config.json"
|
|
95
|
-
__version__ = "2.
|
|
95
|
+
__version__ = "2.61.0"
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
def _command_deps() -> CommandDeps:
|
|
@@ -1313,6 +1313,12 @@ def cmd_claudemd(args):
|
|
|
1313
1313
|
return common_cmd_claudemd(args, _command_deps())
|
|
1314
1314
|
|
|
1315
1315
|
|
|
1316
|
+
def cmd_map(args):
|
|
1317
|
+
"""Live repo map (.c3/MAP.md) commands."""
|
|
1318
|
+
from cli.commands.common import cmd_map as common_cmd_map
|
|
1319
|
+
return common_cmd_map(args, _command_deps())
|
|
1320
|
+
|
|
1321
|
+
|
|
1316
1322
|
def cmd_stats(args):
|
|
1317
1323
|
"""Show comprehensive stats."""
|
|
1318
1324
|
return common_cmd_stats(args, _command_deps())
|
|
@@ -5122,22 +5128,33 @@ def cmd_install_mcp(args):
|
|
|
5122
5128
|
settings = _safe_read_json(settings_path, str(settings_path))
|
|
5123
5129
|
|
|
5124
5130
|
# Build hook commands using the Python executable that runs c3.
|
|
5125
|
-
# On Windows, Claude Code executes hooks via /usr/bin/bash (Git Bash), which cannot
|
|
5126
|
-
# parse Windows absolute paths containing parentheses (e.g. "(C3)"). Prefix with
|
|
5127
|
-
# cmd.exe so it handles path resolution instead of bash.
|
|
5128
5131
|
#
|
|
5129
|
-
#
|
|
5130
|
-
#
|
|
5131
|
-
#
|
|
5132
|
-
#
|
|
5133
|
-
#
|
|
5134
|
-
|
|
5132
|
+
# Windows: do NOT wrap in cmd.exe. Claude Code runs hooks through Git Bash,
|
|
5133
|
+
# whose MSYS argument conversion rewrites a standalone "/c" into "C:/" before
|
|
5134
|
+
# cmd.exe ever sees it — so cmd.exe starts INTERACTIVELY, prints its banner,
|
|
5135
|
+
# and reads the hook's stdin JSON payload as console commands. The hook never
|
|
5136
|
+
# runs, and any ">" token in the payload becomes a shell redirect that silently
|
|
5137
|
+
# creates junk files in the repo root.
|
|
5138
|
+
#
|
|
5139
|
+
# Verified 2026-07-26 under Git Bash on Windows 11:
|
|
5140
|
+
# python -c "import sys;print(sys.argv)" /c foo -> ['-c', 'C:/', 'foo']
|
|
5141
|
+
# cmd.exe /c '<py>' -c "print('x')" -> banner, no execution
|
|
5142
|
+
# '<py>' '<hook>' posttool -> runs, stdin intact
|
|
5143
|
+
# Both "cmd /c" (bash cannot resolve bare "cmd") and "cmd.exe /c" are broken;
|
|
5144
|
+
# the wrapper was never needed. A double-quoted forward-slash path is parsed
|
|
5145
|
+
# correctly by bash AND cmd, including paths containing spaces or parentheses
|
|
5146
|
+
# (e.g. "Claude Code Companion (C3)"), which is why the wrapper was added.
|
|
5147
|
+
def _hook_arg(raw: str) -> str:
|
|
5148
|
+
if sys.platform == "win32":
|
|
5149
|
+
return '"' + str(raw).replace("\\", "/") + '"'
|
|
5150
|
+
return shlex.quote(str(raw))
|
|
5151
|
+
|
|
5135
5152
|
# v2.42: single dispatcher script per hook event instead of N separate
|
|
5136
5153
|
# per-hook commands. One interpreter spawn per event; the dispatcher
|
|
5137
5154
|
# (cli/hook_dispatch.py) runs all applicable sub-hooks in-process.
|
|
5138
5155
|
_dispatch_base = (
|
|
5139
|
-
f"{
|
|
5140
|
-
f"{
|
|
5156
|
+
f"{_hook_arg(sys.executable)} "
|
|
5157
|
+
f"{_hook_arg(str(cli_dir / 'hook_dispatch.py'))}"
|
|
5141
5158
|
)
|
|
5142
5159
|
hook_pretool_cmd = f"{_dispatch_base} pretool"
|
|
5143
5160
|
hook_posttool_cmd = f"{_dispatch_base} posttool"
|
|
@@ -7162,6 +7179,7 @@ def main():
|
|
|
7162
7179
|
"decode": cmd_decode,
|
|
7163
7180
|
"session": cmd_session,
|
|
7164
7181
|
"claudemd": cmd_claudemd,
|
|
7182
|
+
"map": cmd_map,
|
|
7165
7183
|
"stats": cmd_stats,
|
|
7166
7184
|
"benchmark": cmd_benchmark,
|
|
7167
7185
|
"session-benchmark": cmd_session_benchmark,
|
|
@@ -159,6 +159,57 @@ def cmd_session(args, deps: CommandDeps):
|
|
|
159
159
|
print(context)
|
|
160
160
|
|
|
161
161
|
|
|
162
|
+
def cmd_map(args, deps: CommandDeps):
|
|
163
|
+
"""Live repo map (.c3/MAP.md): status | ensure | refresh."""
|
|
164
|
+
config = deps.load_config()
|
|
165
|
+
project_path = config.get("project_path", ".")
|
|
166
|
+
|
|
167
|
+
from services.repo_map import RepoMapService
|
|
168
|
+
|
|
169
|
+
sm = deps.SessionManager(project_path)
|
|
170
|
+
svc = RepoMapService(project_path, session_mgr=sm)
|
|
171
|
+
|
|
172
|
+
if args.map_cmd == "status":
|
|
173
|
+
result = svc.status()
|
|
174
|
+
elif args.map_cmd == "ensure":
|
|
175
|
+
result = svc.ensure()
|
|
176
|
+
else:
|
|
177
|
+
result = svc.refresh()
|
|
178
|
+
|
|
179
|
+
if getattr(args, "json", False):
|
|
180
|
+
print(json.dumps(result, indent=2))
|
|
181
|
+
return
|
|
182
|
+
|
|
183
|
+
if args.map_cmd == "status":
|
|
184
|
+
state = "STALE" if result["stale"] else ("FRESH" if result["exists"] else "MISSING")
|
|
185
|
+
deps.print_header(f"Repo Map — {state}")
|
|
186
|
+
print(f" Path: {svc.map_path}")
|
|
187
|
+
if result.get("generated_at"):
|
|
188
|
+
print(f" Generated: {result['generated_at']}")
|
|
189
|
+
if result.get("tokens"):
|
|
190
|
+
print(f" Tokens: {result['tokens']}")
|
|
191
|
+
if result.get("reasons"):
|
|
192
|
+
print(f" Stale reasons: {', '.join(result['reasons'])}")
|
|
193
|
+
if result.get("truncated"):
|
|
194
|
+
print(" [WARN] Map is truncated (file cap or token budget hit)")
|
|
195
|
+
else:
|
|
196
|
+
action = result.get("action", "?")
|
|
197
|
+
label = {
|
|
198
|
+
"regenerated": "Map regenerated",
|
|
199
|
+
"meta_only": "Content unchanged (meta refreshed)",
|
|
200
|
+
"fresh": "Already fresh — nothing to do",
|
|
201
|
+
"locked": "Another process is regenerating — skipped",
|
|
202
|
+
"disabled": "Repo map disabled (map.enabled=false in .c3/config.json)",
|
|
203
|
+
}.get(action, action)
|
|
204
|
+
deps.print_header(f"Repo Map — {label}")
|
|
205
|
+
if result.get("tokens"):
|
|
206
|
+
print(f" Tokens: {result['tokens']}, duration: {result.get('duration_ms', '?')}ms")
|
|
207
|
+
if result.get("reasons"):
|
|
208
|
+
print(f" Triggered by: {', '.join(result['reasons'])}")
|
|
209
|
+
if result.get("truncated"):
|
|
210
|
+
print(" [WARN] Map is truncated (file cap or token budget hit)")
|
|
211
|
+
|
|
212
|
+
|
|
162
213
|
def cmd_claudemd(args, deps: CommandDeps):
|
|
163
214
|
"""Instructions file generation commands."""
|
|
164
215
|
config = deps.load_config()
|
|
@@ -61,6 +61,10 @@ def build_parser(version: str, parse_cli_ide_arg):
|
|
|
61
61
|
p_claudemd.add_argument("claudemd_cmd", choices=["generate", "save", "check"])
|
|
62
62
|
p_claudemd.add_argument("--nano", action="store_true", help="Generate nano mode (~250 tokens) instead of full compact mode")
|
|
63
63
|
|
|
64
|
+
p_map = subparsers.add_parser("map", help="Live repo map (.c3/MAP.md) management")
|
|
65
|
+
p_map.add_argument("map_cmd", choices=["status", "ensure", "refresh"])
|
|
66
|
+
p_map.add_argument("--json", action="store_true", help="Emit JSON result")
|
|
67
|
+
|
|
64
68
|
subparsers.add_parser("stats", help="Show statistics")
|
|
65
69
|
|
|
66
70
|
p_benchmark = subparsers.add_parser("benchmark", help="Run with/without-C3 workflow benchmark")
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
<a href="getting-started.html">Get Started</a>
|
|
78
78
|
<a href="workflow.html">Workflow</a>
|
|
79
79
|
<a href="tools.html">Tools</a>
|
|
80
|
+
<a href="credentials.html">Credentials</a>
|
|
80
81
|
<a href="bitbucket.html" class="active">Bitbucket</a>
|
|
81
82
|
<a href="oracle.html">Oracle</a>
|
|
82
83
|
<a href="https://github.com/sponsors/drknowhow" target="_blank" rel="noopener" style="color:#EA4AAA">♥ Sponsor</a>
|