code-muse 0.0.1__py3-none-any.whl
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_muse/__init__.py +26 -0
- code_muse/__main__.py +10 -0
- code_muse/agents/__init__.py +31 -0
- code_muse/agents/_builder.py +214 -0
- code_muse/agents/_compaction.py +506 -0
- code_muse/agents/_diagnostics.py +171 -0
- code_muse/agents/_history.py +382 -0
- code_muse/agents/_key_listeners.py +148 -0
- code_muse/agents/_non_streaming_render.py +148 -0
- code_muse/agents/_runtime.py +596 -0
- code_muse/agents/agent_creator_agent.py +603 -0
- code_muse/agents/agent_helios.py +47 -0
- code_muse/agents/agent_manager.py +740 -0
- code_muse/agents/agent_muse.py +78 -0
- code_muse/agents/agent_planning.py +44 -0
- code_muse/agents/agent_qa_melpomene.py +207 -0
- code_muse/agents/base_agent.py +194 -0
- code_muse/agents/event_stream_handler.py +361 -0
- code_muse/agents/json_agent.py +201 -0
- code_muse/agents/prompt_v3.py +521 -0
- code_muse/agents/subagent_stream_handler.py +273 -0
- code_muse/callbacks.py +941 -0
- code_muse/chatgpt_codex_client.py +333 -0
- code_muse/claude_cache_client.py +853 -0
- code_muse/cli_runner/__init__.py +319 -0
- code_muse/cli_runner/args.py +63 -0
- code_muse/cli_runner/loop.py +510 -0
- code_muse/cli_runner/resume.py +72 -0
- code_muse/cli_runner/runner.py +161 -0
- code_muse/command_line/__init__.py +1 -0
- code_muse/command_line/add_model_menu.py +1331 -0
- code_muse/command_line/agent_menu.py +674 -0
- code_muse/command_line/attachments.py +397 -0
- code_muse/command_line/autosave_menu.py +709 -0
- code_muse/command_line/clipboard.py +528 -0
- code_muse/command_line/colors_menu.py +530 -0
- code_muse/command_line/command_handler.py +262 -0
- code_muse/command_line/command_registry.py +150 -0
- code_muse/command_line/config_commands.py +711 -0
- code_muse/command_line/core_commands.py +740 -0
- code_muse/command_line/diff_menu.py +865 -0
- code_muse/command_line/file_path_completion.py +73 -0
- code_muse/command_line/load_context_completion.py +57 -0
- code_muse/command_line/model_picker_completion.py +512 -0
- code_muse/command_line/model_settings_menu.py +983 -0
- code_muse/command_line/onboarding_slides.py +162 -0
- code_muse/command_line/onboarding_wizard.py +337 -0
- code_muse/command_line/pagination.py +41 -0
- code_muse/command_line/pin_command_completion.py +329 -0
- code_muse/command_line/prompt_toolkit_completion.py +886 -0
- code_muse/command_line/session_commands.py +304 -0
- code_muse/command_line/shell_passthrough.py +145 -0
- code_muse/command_line/skills_completion.py +158 -0
- code_muse/command_line/types.py +18 -0
- code_muse/command_line/uc_menu.py +908 -0
- code_muse/command_line/utils.py +105 -0
- code_muse/command_line/wiggum_state.py +77 -0
- code_muse/config.py +1138 -0
- code_muse/config_agent.py +168 -0
- code_muse/config_appearance.py +241 -0
- code_muse/config_model.py +357 -0
- code_muse/config_security.py +73 -0
- code_muse/error_logging.py +132 -0
- code_muse/evals/__init__.py +35 -0
- code_muse/evals/eval_helpers.py +81 -0
- code_muse/evals/eval_runner.py +299 -0
- code_muse/evals/sample_evals/__init__.py +1 -0
- code_muse/evals/sample_evals/eval_frugal_reads.py +59 -0
- code_muse/evals/sample_evals/eval_memory_planning.py +31 -0
- code_muse/evals/sample_evals/eval_shell_efficiency.py +39 -0
- code_muse/evals/sample_evals/eval_tool_masking.py +33 -0
- code_muse/fs_scan_cache/__init__.py +31 -0
- code_muse/fs_scan_cache/invalidation_hooks.py +89 -0
- code_muse/fs_scan_cache/scan_cache_core.cpython-314-darwin.so +0 -0
- code_muse/fs_scan_cache/scan_cache_core.pyx +203 -0
- code_muse/fs_scan_cache/tool_integration.py +309 -0
- code_muse/fs_scan_cache/ttl_policy.py +44 -0
- code_muse/gemini_code_assist.py +383 -0
- code_muse/gemini_model.py +838 -0
- code_muse/hook_engine/README.md +105 -0
- code_muse/hook_engine/__init__.py +21 -0
- code_muse/hook_engine/aliases.py +153 -0
- code_muse/hook_engine/engine.py +221 -0
- code_muse/hook_engine/executor.py +347 -0
- code_muse/hook_engine/matcher.py +154 -0
- code_muse/hook_engine/models.py +245 -0
- code_muse/hook_engine/registry.py +114 -0
- code_muse/hook_engine/trust.py +268 -0
- code_muse/hook_engine/validator.py +144 -0
- code_muse/http_utils.py +360 -0
- code_muse/keymap.py +128 -0
- code_muse/list_filtering.py +26 -0
- code_muse/main.py +10 -0
- code_muse/messaging/__init__.py +259 -0
- code_muse/messaging/bus.py +621 -0
- code_muse/messaging/commands.py +166 -0
- code_muse/messaging/markdown_patches.py +57 -0
- code_muse/messaging/message_queue.py +397 -0
- code_muse/messaging/messages.py +591 -0
- code_muse/messaging/queue_console.py +269 -0
- code_muse/messaging/renderers.py +308 -0
- code_muse/messaging/rich_renderer.py +1158 -0
- code_muse/messaging/shimmer.py +154 -0
- code_muse/messaging/spinner/__init__.py +87 -0
- code_muse/messaging/spinner/console_spinner.py +250 -0
- code_muse/messaging/spinner/spinner_base.py +82 -0
- code_muse/messaging/subagent_console.py +458 -0
- code_muse/model_factory.py +1203 -0
- code_muse/model_switching.py +59 -0
- code_muse/model_utils.py +156 -0
- code_muse/models.json +66 -0
- code_muse/models_cache/__init__.py +26 -0
- code_muse/models_cache/blocking_lru_cache.py +98 -0
- code_muse/models_cache/cache_writer.py +86 -0
- code_muse/models_cache/sha256_hash.cpython-314-darwin.so +0 -0
- code_muse/models_cache/sha256_hash.pyx +34 -0
- code_muse/models_cache/startup_integration.py +75 -0
- code_muse/models_dev_api.json +1 -0
- code_muse/models_dev_parser.py +590 -0
- code_muse/motion.py +126 -0
- code_muse/plugins/__init__.py +471 -0
- code_muse/plugins/agent_skills/__init__.py +32 -0
- code_muse/plugins/agent_skills/config.py +176 -0
- code_muse/plugins/agent_skills/discovery.py +309 -0
- code_muse/plugins/agent_skills/downloader.py +389 -0
- code_muse/plugins/agent_skills/installer.py +19 -0
- code_muse/plugins/agent_skills/metadata.py +293 -0
- code_muse/plugins/agent_skills/prompt_builder.py +66 -0
- code_muse/plugins/agent_skills/register_callbacks.py +298 -0
- code_muse/plugins/agent_skills/remote_catalog.py +320 -0
- code_muse/plugins/agent_skills/skill_catalog.py +254 -0
- code_muse/plugins/agent_skills/skills_install_menu.py +690 -0
- code_muse/plugins/agent_skills/skills_menu.py +791 -0
- code_muse/plugins/autonomous_memory/__init__.py +39 -0
- code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-darwin.so +0 -0
- code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/autonomous_memory/bm25_scorer.pyx +291 -0
- code_muse/plugins/autonomous_memory/consolidation.py +82 -0
- code_muse/plugins/autonomous_memory/extraction.py +382 -0
- code_muse/plugins/autonomous_memory/lease_lock.py +105 -0
- code_muse/plugins/autonomous_memory/memory_injection.py +59 -0
- code_muse/plugins/autonomous_memory/register_callbacks.py +268 -0
- code_muse/plugins/autonomous_memory/secret_scanner.py +62 -0
- code_muse/plugins/autonomous_memory/session_scanner.py +163 -0
- code_muse/plugins/aws_bedrock/__init__.py +14 -0
- code_muse/plugins/aws_bedrock/config.py +99 -0
- code_muse/plugins/aws_bedrock/register_callbacks.py +241 -0
- code_muse/plugins/aws_bedrock/utils.py +153 -0
- code_muse/plugins/azure_foundry/README.md +238 -0
- code_muse/plugins/azure_foundry/__init__.py +15 -0
- code_muse/plugins/azure_foundry/config.py +125 -0
- code_muse/plugins/azure_foundry/discovery.py +187 -0
- code_muse/plugins/azure_foundry/register_callbacks.py +495 -0
- code_muse/plugins/azure_foundry/token.py +180 -0
- code_muse/plugins/azure_foundry/utils.py +345 -0
- code_muse/plugins/build_filter/__init__.py +1 -0
- code_muse/plugins/build_filter/register_callbacks.py +201 -0
- code_muse/plugins/build_filter/strategies/__init__.py +1 -0
- code_muse/plugins/build_filter/strategies/build.py +397 -0
- code_muse/plugins/chatgpt_oauth/__init__.py +6 -0
- code_muse/plugins/chatgpt_oauth/config.py +52 -0
- code_muse/plugins/chatgpt_oauth/oauth_flow.py +338 -0
- code_muse/plugins/chatgpt_oauth/register_callbacks.py +172 -0
- code_muse/plugins/chatgpt_oauth/test_plugin.py +301 -0
- code_muse/plugins/chatgpt_oauth/utils.py +538 -0
- code_muse/plugins/checkpointing/__init__.py +29 -0
- code_muse/plugins/checkpointing/checkpoint_hook.py +51 -0
- code_muse/plugins/checkpointing/conversation_snapshots.py +117 -0
- code_muse/plugins/checkpointing/register_callbacks.py +51 -0
- code_muse/plugins/checkpointing/restore_command.py +263 -0
- code_muse/plugins/checkpointing/rewind_shortcut.py +88 -0
- code_muse/plugins/checkpointing/shadow_git.py +90 -0
- code_muse/plugins/claude_code_hooks/__init__.py +1 -0
- code_muse/plugins/claude_code_hooks/config.py +188 -0
- code_muse/plugins/claude_code_hooks/register_callbacks.py +208 -0
- code_muse/plugins/claude_code_oauth/README.md +167 -0
- code_muse/plugins/claude_code_oauth/SETUP.md +93 -0
- code_muse/plugins/claude_code_oauth/__init__.py +25 -0
- code_muse/plugins/claude_code_oauth/config.py +52 -0
- code_muse/plugins/claude_code_oauth/fast_mode.py +124 -0
- code_muse/plugins/claude_code_oauth/prompt_handler.py +63 -0
- code_muse/plugins/claude_code_oauth/register_callbacks.py +547 -0
- code_muse/plugins/claude_code_oauth/test_fast_mode.py +165 -0
- code_muse/plugins/claude_code_oauth/test_plugin.py +283 -0
- code_muse/plugins/claude_code_oauth/token_refresh_heartbeat.py +237 -0
- code_muse/plugins/claude_code_oauth/utils.py +664 -0
- code_muse/plugins/copilot_auth/__init__.py +11 -0
- code_muse/plugins/copilot_auth/config.py +91 -0
- code_muse/plugins/copilot_auth/reasoning_client.py +409 -0
- code_muse/plugins/copilot_auth/register_callbacks.py +461 -0
- code_muse/plugins/copilot_auth/utils.py +584 -0
- code_muse/plugins/custom_commands/__init__.py +14 -0
- code_muse/plugins/custom_commands/args_injection.py +82 -0
- code_muse/plugins/custom_commands/command_discovery.py +89 -0
- code_muse/plugins/custom_commands/command_toml_schema.py +71 -0
- code_muse/plugins/custom_commands/register_callbacks.py +176 -0
- code_muse/plugins/customizable_commands/__init__.py +0 -0
- code_muse/plugins/customizable_commands/register_callbacks.py +136 -0
- code_muse/plugins/destructive_command_guard/__init__.py +14 -0
- code_muse/plugins/destructive_command_guard/detector.py +375 -0
- code_muse/plugins/destructive_command_guard/register_callbacks.py +148 -0
- code_muse/plugins/example_custom_command/README.md +280 -0
- code_muse/plugins/example_custom_command/register_callbacks.py +51 -0
- code_muse/plugins/file_permission_handler/__init__.py +4 -0
- code_muse/plugins/file_permission_handler/register_callbacks.py +441 -0
- code_muse/plugins/filter_engine/__init__.py +30 -0
- code_muse/plugins/filter_engine/classifier.py +153 -0
- code_muse/plugins/filter_engine/content_detector.py +184 -0
- code_muse/plugins/filter_engine/dispatcher.py +244 -0
- code_muse/plugins/filter_engine/register_callbacks.py +188 -0
- code_muse/plugins/filter_engine/registry.py +279 -0
- code_muse/plugins/filter_engine/strategies/__init__.py +8 -0
- code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/ast_compressor.pyx +348 -0
- code_muse/plugins/filter_engine/strategies/ast_parser.py +167 -0
- code_muse/plugins/filter_engine/strategies/code.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/code.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/code.pyx +584 -0
- code_muse/plugins/filter_engine/strategies/git.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/git.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/git.pyx +438 -0
- code_muse/plugins/filter_engine/strategies/json_compressor.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/json_compressor.pyx +253 -0
- code_muse/plugins/filter_engine/strategies/json_patterns.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/json_patterns.pyx +178 -0
- code_muse/plugins/filter_engine/strategies/lint.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/lint.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/lint.pyx +626 -0
- code_muse/plugins/filter_engine/strategies/test.cpython-314-darwin.so +0 -0
- code_muse/plugins/filter_engine/strategies/test.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/plugins/filter_engine/strategies/test.pyx +431 -0
- code_muse/plugins/filter_engine/verbosity.py +63 -0
- code_muse/plugins/force_push_guard/__init__.py +5 -0
- code_muse/plugins/force_push_guard/detector.py +96 -0
- code_muse/plugins/force_push_guard/register_callbacks.py +144 -0
- code_muse/plugins/force_push_guard/test_detector.py +143 -0
- code_muse/plugins/frontend_emitter/__init__.py +25 -0
- code_muse/plugins/frontend_emitter/emitter.py +121 -0
- code_muse/plugins/frontend_emitter/register_callbacks.py +259 -0
- code_muse/plugins/gac/__init__.py +4 -0
- code_muse/plugins/gac/git_ops.py +136 -0
- code_muse/plugins/gac/prompt.py +191 -0
- code_muse/plugins/gac/register_callbacks.py +82 -0
- code_muse/plugins/hook_creator/__init__.py +1 -0
- code_muse/plugins/hook_creator/register_callbacks.py +34 -0
- code_muse/plugins/hook_manager/__init__.py +1 -0
- code_muse/plugins/hook_manager/config.py +289 -0
- code_muse/plugins/hook_manager/hooks_menu.py +563 -0
- code_muse/plugins/hook_manager/register_callbacks.py +227 -0
- code_muse/plugins/hook_monitor/register_callbacks.py +36 -0
- code_muse/plugins/mindpack/__init__.py +0 -0
- code_muse/plugins/mindpack/factory.py +930 -0
- code_muse/plugins/mindpack/judge.py +573 -0
- code_muse/plugins/mindpack/memory.py +100 -0
- code_muse/plugins/mindpack/mindpack_menu.py +1552 -0
- code_muse/plugins/mindpack/orchestration.py +605 -0
- code_muse/plugins/mindpack/register_callbacks.py +175 -0
- code_muse/plugins/mindpack/schemas.py +358 -0
- code_muse/plugins/mindpack/tools.py +387 -0
- code_muse/plugins/oauth_muse_html.py +226 -0
- code_muse/plugins/ollama_setup/__init__.py +5 -0
- code_muse/plugins/ollama_setup/completer.py +36 -0
- code_muse/plugins/ollama_setup/register_callbacks.py +410 -0
- code_muse/plugins/plan_command/__init__.py +0 -0
- code_muse/plugins/plan_command/register_callbacks.py +206 -0
- code_muse/plugins/plan_mode/__init__.py +37 -0
- code_muse/plugins/plan_mode/mode_cycling.py +40 -0
- code_muse/plugins/plan_mode/plan_generation.py +68 -0
- code_muse/plugins/plan_mode/plan_hooks.py +74 -0
- code_muse/plugins/plan_mode/plan_mode_tools.py +138 -0
- code_muse/plugins/plan_mode/register_callbacks.py +121 -0
- code_muse/plugins/plugin_trust/register_callbacks.py +140 -0
- code_muse/plugins/policy_engine/__init__.py +46 -0
- code_muse/plugins/policy_engine/approval_flow_integration.py +59 -0
- code_muse/plugins/policy_engine/policy_evaluator.py +75 -0
- code_muse/plugins/policy_engine/policy_file_discovery.py +90 -0
- code_muse/plugins/policy_engine/policy_toml_schema.py +115 -0
- code_muse/plugins/policy_engine/register_callbacks.py +112 -0
- code_muse/plugins/pop_command/__init__.py +1 -0
- code_muse/plugins/pop_command/register_callbacks.py +189 -0
- code_muse/plugins/prompt_newline/__init__.py +13 -0
- code_muse/plugins/prompt_newline/config.py +19 -0
- code_muse/plugins/prompt_newline/register_callbacks.py +159 -0
- code_muse/plugins/safety_status/__init__.py +0 -0
- code_muse/plugins/safety_status/register_callbacks.py +113 -0
- code_muse/plugins/semantic_compression/__init__.py +6 -0
- code_muse/plugins/semantic_compression/compressor.py +295 -0
- code_muse/plugins/semantic_compression/config.py +123 -0
- code_muse/plugins/semantic_compression/register_callbacks.py +320 -0
- code_muse/plugins/shell_minimizer/__init__.py +50 -0
- code_muse/plugins/shell_minimizer/builtin_filters.toml +393 -0
- code_muse/plugins/shell_minimizer/pipeline.py +556 -0
- code_muse/plugins/shell_minimizer/primitives.py +482 -0
- code_muse/plugins/shell_minimizer/register_callbacks.py +276 -0
- code_muse/plugins/shell_safety/__init__.py +6 -0
- code_muse/plugins/shell_safety/agent_shell_safety.py +69 -0
- code_muse/plugins/shell_safety/command_cache.py +149 -0
- code_muse/plugins/shell_safety/register_callbacks.py +202 -0
- code_muse/plugins/synthetic_status/__init__.py +1 -0
- code_muse/plugins/synthetic_status/register_callbacks.py +128 -0
- code_muse/plugins/synthetic_status/status_api.py +145 -0
- code_muse/plugins/token_caching/__init__.py +21 -0
- code_muse/plugins/token_caching/cache_hit_tracking.py +128 -0
- code_muse/plugins/token_caching/cacheable_prefix_detection.py +28 -0
- code_muse/plugins/token_caching/register_callbacks.py +54 -0
- code_muse/plugins/token_caching/stats_display.py +35 -0
- code_muse/plugins/token_tracking/__init__.py +26 -0
- code_muse/plugins/token_tracking/database.py +381 -0
- code_muse/plugins/token_tracking/edit_analyzer.py +97 -0
- code_muse/plugins/token_tracking/record.py +55 -0
- code_muse/plugins/token_tracking/register_callbacks.py +277 -0
- code_muse/plugins/token_tracking/reports.py +329 -0
- code_muse/plugins/universal_constructor/__init__.py +13 -0
- code_muse/plugins/universal_constructor/models.py +136 -0
- code_muse/plugins/universal_constructor/register_callbacks.py +47 -0
- code_muse/plugins/universal_constructor/registry.py +390 -0
- code_muse/plugins/universal_constructor/runner.py +474 -0
- code_muse/plugins/universal_constructor/safety.py +440 -0
- code_muse/plugins/universal_constructor/sandbox.py +584 -0
- code_muse/provider_identity.py +105 -0
- code_muse/pydantic_patches.py +410 -0
- code_muse/reopenable_async_client.py +233 -0
- code_muse/round_robin_model.py +151 -0
- code_muse/secret_storage.py +74 -0
- code_muse/security/__init__.py +1 -0
- code_muse/security/redaction.cpython-314-darwin.so +0 -0
- code_muse/security/redaction.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/security/redaction.pyx +135 -0
- code_muse/session_storage.py +565 -0
- code_muse/status_display.py +261 -0
- code_muse/stream_parser/__init__.py +76 -0
- code_muse/stream_parser/assistant_text_parser.py +90 -0
- code_muse/stream_parser/citation_parser.py +76 -0
- code_muse/stream_parser/inline_hidden_tag_parser.py +236 -0
- code_muse/stream_parser/proposed_plan_parser.py +158 -0
- code_muse/stream_parser/stream_text_chunk.py +23 -0
- code_muse/stream_parser/stream_text_parser.py +27 -0
- code_muse/stream_parser/tagged_line_parser.cpython-314-darwin.so +0 -0
- code_muse/stream_parser/tagged_line_parser.pyx +251 -0
- code_muse/stream_parser/utf8_stream_parser.cpython-314-darwin.so +0 -0
- code_muse/stream_parser/utf8_stream_parser.pyx +206 -0
- code_muse/summarization_agent.py +308 -0
- code_muse/terminal_utils.cpython-314-darwin.so +0 -0
- code_muse/terminal_utils.cpython-314-x86_64-linux-gnu.so +0 -0
- code_muse/terminal_utils.pyx +483 -0
- code_muse/tools/__init__.py +459 -0
- code_muse/tools/agent_tools.py +613 -0
- code_muse/tools/ask_user_question/__init__.py +26 -0
- code_muse/tools/ask_user_question/constants.py +73 -0
- code_muse/tools/ask_user_question/demo_tui.py +55 -0
- code_muse/tools/ask_user_question/handler.py +232 -0
- code_muse/tools/ask_user_question/models.py +302 -0
- code_muse/tools/ask_user_question/registration.py +37 -0
- code_muse/tools/ask_user_question/renderers.py +336 -0
- code_muse/tools/ask_user_question/terminal_ui.py +327 -0
- code_muse/tools/ask_user_question/theme.py +156 -0
- code_muse/tools/ask_user_question/tui_loop.py +422 -0
- code_muse/tools/background_jobs.py +99 -0
- code_muse/tools/browser/__init__.py +37 -0
- code_muse/tools/browser/browser_control.py +289 -0
- code_muse/tools/browser/browser_interactions.py +545 -0
- code_muse/tools/browser/browser_locators.py +640 -0
- code_muse/tools/browser/browser_manager.py +376 -0
- code_muse/tools/browser/browser_navigation.py +251 -0
- code_muse/tools/browser/browser_screenshot.py +180 -0
- code_muse/tools/browser/browser_scripts.py +462 -0
- code_muse/tools/browser/browser_workflows.py +222 -0
- code_muse/tools/chrome_cdp/__init__.py +1070 -0
- code_muse/tools/chrome_cdp/register_callbacks.py +61 -0
- code_muse/tools/command_runner.py +1401 -0
- code_muse/tools/common.py +1407 -0
- code_muse/tools/display.py +87 -0
- code_muse/tools/file_modifications.py +1099 -0
- code_muse/tools/file_operations.py +860 -0
- code_muse/tools/image_tools.py +185 -0
- code_muse/tools/meetin_proxy/__init__.py +243 -0
- code_muse/tools/meetin_proxy/capture_addon.py +82 -0
- code_muse/tools/meetin_proxy/proxy_manager.py +326 -0
- code_muse/tools/meetin_proxy/register_callbacks.py +45 -0
- code_muse/tools/path_policy.py +219 -0
- code_muse/tools/skills_tools.py +586 -0
- code_muse/tools/subagent_context.py +158 -0
- code_muse/tools/tools_content.py +50 -0
- code_muse/tools/universal_constructor.py +965 -0
- code_muse/uvx_detection.py +241 -0
- code_muse/version_checker.py +86 -0
- code_muse-0.0.1.data/data/code_muse/models.json +66 -0
- code_muse-0.0.1.data/data/code_muse/models_dev_api.json +1 -0
- code_muse-0.0.1.dist-info/METADATA +845 -0
- code_muse-0.0.1.dist-info/RECORD +394 -0
- code_muse-0.0.1.dist-info/WHEEL +4 -0
- code_muse-0.0.1.dist-info/entry_points.txt +2 -0
- code_muse-0.0.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Git operations for the GAC plugin.
|
|
2
|
+
|
|
3
|
+
Lightweight subprocess wrappers for the commands needed to inspect and stage
|
|
4
|
+
changes before an AI-generated commit.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
import subprocess
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _run_git(args: list[str]) -> subprocess.CompletedProcess[str]:
|
|
14
|
+
"""Run a git command, returning the CompletedProcess on failure as well."""
|
|
15
|
+
return subprocess.run(
|
|
16
|
+
["git", *args],
|
|
17
|
+
capture_output=True,
|
|
18
|
+
text=True,
|
|
19
|
+
check=False,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_staged_diff(context_lines: int = 5) -> str:
|
|
24
|
+
"""Return the staged diff with *context_lines* of context.
|
|
25
|
+
|
|
26
|
+
Returns an empty string when there are no staged changes or the command
|
|
27
|
+
fails (e.g. not inside a git repository).
|
|
28
|
+
"""
|
|
29
|
+
result = _run_git(["diff", f"-U{context_lines}", "--cached"])
|
|
30
|
+
if result.returncode != 0:
|
|
31
|
+
logger.debug("git diff --cached failed: %s", result.stderr.strip())
|
|
32
|
+
return ""
|
|
33
|
+
return result.stdout
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_git_status() -> str:
|
|
37
|
+
"""Return a formatted status of staged files only.
|
|
38
|
+
|
|
39
|
+
Returns an empty string on failure.
|
|
40
|
+
"""
|
|
41
|
+
result = _run_git(["diff", "--name-status", "--staged"])
|
|
42
|
+
if result.returncode != 0:
|
|
43
|
+
logger.debug(
|
|
44
|
+
"git diff --name-status --staged failed: %s", result.stderr.strip()
|
|
45
|
+
)
|
|
46
|
+
return ""
|
|
47
|
+
|
|
48
|
+
output = result.stdout.strip()
|
|
49
|
+
if not output:
|
|
50
|
+
return "No changes staged for commit."
|
|
51
|
+
|
|
52
|
+
status_map = {
|
|
53
|
+
"M": "modified",
|
|
54
|
+
"A": "new file",
|
|
55
|
+
"D": "deleted",
|
|
56
|
+
"R": "renamed",
|
|
57
|
+
"C": "copied",
|
|
58
|
+
"T": "typechange",
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
lines = ["Changes to be committed:"]
|
|
62
|
+
for line in output.splitlines():
|
|
63
|
+
line = line.strip()
|
|
64
|
+
if not line:
|
|
65
|
+
continue
|
|
66
|
+
parts = line.split("\t")
|
|
67
|
+
if len(parts) < 2:
|
|
68
|
+
continue
|
|
69
|
+
change_type = parts[0][0]
|
|
70
|
+
file_path = parts[-1]
|
|
71
|
+
label = status_map.get(change_type, "modified")
|
|
72
|
+
lines.append(f"\t{label}: {file_path}")
|
|
73
|
+
|
|
74
|
+
return "\n".join(lines)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def get_diff_stat() -> str:
|
|
78
|
+
"""Return ``git diff --cached --stat`` output.
|
|
79
|
+
|
|
80
|
+
Returns an empty string on failure.
|
|
81
|
+
"""
|
|
82
|
+
result = _run_git(["diff", "--cached", "--stat"])
|
|
83
|
+
if result.returncode != 0:
|
|
84
|
+
logger.debug("git diff --cached --stat failed: %s", result.stderr.strip())
|
|
85
|
+
return ""
|
|
86
|
+
return result.stdout
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def get_current_branch() -> str:
|
|
90
|
+
"""Return the current branch name.
|
|
91
|
+
|
|
92
|
+
Returns an empty string on failure.
|
|
93
|
+
"""
|
|
94
|
+
result = _run_git(["rev-parse", "--abbrev-ref", "HEAD"])
|
|
95
|
+
if result.returncode != 0:
|
|
96
|
+
logger.debug(
|
|
97
|
+
"git rev-parse --abbrev-ref HEAD failed: %s", result.stderr.strip()
|
|
98
|
+
)
|
|
99
|
+
return ""
|
|
100
|
+
return result.stdout.strip()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def get_repo_root() -> str:
|
|
104
|
+
"""Return the repository root absolute path.
|
|
105
|
+
|
|
106
|
+
Returns an empty string on failure.
|
|
107
|
+
"""
|
|
108
|
+
result = _run_git(["rev-parse", "--show-toplevel"])
|
|
109
|
+
if result.returncode != 0:
|
|
110
|
+
logger.debug("git rev-parse --show-toplevel failed: %s", result.stderr.strip())
|
|
111
|
+
return ""
|
|
112
|
+
return result.stdout.strip()
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def has_staged_changes() -> bool:
|
|
116
|
+
"""Return ``True`` if there are staged files."""
|
|
117
|
+
result = _run_git(["diff", "--cached", "--quiet"])
|
|
118
|
+
return result.returncode != 0
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def has_any_changes() -> bool:
|
|
122
|
+
"""Return ``True`` if there are any changes (staged or unstaged)."""
|
|
123
|
+
result = _run_git(["status", "--porcelain"])
|
|
124
|
+
if result.returncode != 0:
|
|
125
|
+
return False
|
|
126
|
+
return bool(result.stdout.strip())
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def stage_all() -> None:
|
|
130
|
+
"""Stage all changes with ``git add -A``.
|
|
131
|
+
|
|
132
|
+
Logs a warning on failure but does not raise.
|
|
133
|
+
"""
|
|
134
|
+
result = _run_git(["add", "-A"])
|
|
135
|
+
if result.returncode != 0:
|
|
136
|
+
logger.warning("git add -A failed: %s", result.stderr.strip())
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"""Prompt building for the GAC plugin.
|
|
2
|
+
|
|
3
|
+
Constructs the full prompt (system instructions + git context + execution
|
|
4
|
+
instructions) that is sent to the agent when a ``/gac`` command is issued.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from code_muse.plugins.gac.git_ops import (
|
|
8
|
+
get_current_branch,
|
|
9
|
+
get_diff_stat,
|
|
10
|
+
get_git_status,
|
|
11
|
+
get_repo_root,
|
|
12
|
+
get_staged_diff,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
GAC_SYSTEM_INSTRUCTIONS = """
|
|
16
|
+
<role>
|
|
17
|
+
You are an expert git commit message generator acting as GAC (Git Auto Commit).
|
|
18
|
+
Your task: analyze code changes, generate a conventional commit message,
|
|
19
|
+
then execute the commit using git shell commands.
|
|
20
|
+
</role>
|
|
21
|
+
|
|
22
|
+
<conventions>
|
|
23
|
+
You MUST start your commit message with a conventional commit prefix:
|
|
24
|
+
- feat: A new feature or functionality
|
|
25
|
+
- fix: A bug fix
|
|
26
|
+
- docs: Documentation only
|
|
27
|
+
- style: Code style/formatting (no logic change)
|
|
28
|
+
- refactor: Code restructuring (no behavior change)
|
|
29
|
+
- perf: Performance improvement
|
|
30
|
+
- test: Adding/modifying tests
|
|
31
|
+
- build: Build system/dependencies
|
|
32
|
+
- ci: CI configuration
|
|
33
|
+
- chore: Miscellaneous
|
|
34
|
+
|
|
35
|
+
Check file types FIRST:
|
|
36
|
+
- If ALL changes are docs (*.md, *.rst, *.txt in docs/, README*, CHANGELOG*), "
|
|
37
|
+
"use 'docs:'
|
|
38
|
+
- If mixed, use the prefix for the PRIMARY purpose
|
|
39
|
+
|
|
40
|
+
FORMAT:
|
|
41
|
+
- First line: type: concise summary (present tense, max 50 chars ideal)
|
|
42
|
+
- Line 2: BLANK
|
|
43
|
+
- Lines 3+: bullet points explaining WHAT and WHY
|
|
44
|
+
- DO NOT use markdown headers, code blocks, or formatting
|
|
45
|
+
</conventions>
|
|
46
|
+
|
|
47
|
+
<examples>
|
|
48
|
+
Good:
|
|
49
|
+
feat: add OAuth2 integration with Google and GitHub
|
|
50
|
+
fix: resolve race condition in user session management
|
|
51
|
+
docs: add troubleshooting section for installation
|
|
52
|
+
refactor: extract validation logic into reusable utilities
|
|
53
|
+
|
|
54
|
+
Bad:
|
|
55
|
+
fix stuff
|
|
56
|
+
update code
|
|
57
|
+
WIP: still working on this
|
|
58
|
+
Fixed bug
|
|
59
|
+
</examples>
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
EXECUTION_INSTRUCTIONS = """
|
|
63
|
+
<execution>
|
|
64
|
+
After generating the commit message, you MUST execute these shell commands:
|
|
65
|
+
|
|
66
|
+
STEP 1 — Stage all changes (if nothing is staged):
|
|
67
|
+
git add -A
|
|
68
|
+
|
|
69
|
+
STEP 2 — Commit with the generated message:
|
|
70
|
+
git commit -m "YOUR GENERATED MESSAGE"
|
|
71
|
+
|
|
72
|
+
{extra_steps}
|
|
73
|
+
|
|
74
|
+
CRITICAL:
|
|
75
|
+
- Use the EXACT commit message you generated. No modifications.
|
|
76
|
+
- Do NOT include reasoning, preamble, or explanations in your response — "
|
|
77
|
+
"just the commit message and confirmation.
|
|
78
|
+
- If nothing to commit, report that.
|
|
79
|
+
</execution>
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
EXECUTION_INSTRUCTIONS_PUSH = """
|
|
83
|
+
STEP 3 — Push to remote:
|
|
84
|
+
git push
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
EXECUTION_INSTRUCTIONS_BUMP = """
|
|
88
|
+
STEP 0 — Bump version FIRST (before staging):
|
|
89
|
+
Find the version file (__version__.py, pyproject.toml, package.json, Cargo.toml, etc.)
|
|
90
|
+
Determine the current version
|
|
91
|
+
Increment the PATCH version (e.g., 1.2.3 → 1.2.4)
|
|
92
|
+
Update the version file in place
|
|
93
|
+
|
|
94
|
+
STEP 1 — Stage the version change:
|
|
95
|
+
git add <version_file>
|
|
96
|
+
|
|
97
|
+
STEP 2 — Commit the bump:
|
|
98
|
+
git commit -m "chore: bump version to X.Y.Z"
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def build_gac_prompt(push: bool = False, bump: bool = False) -> str | None:
|
|
103
|
+
"""Build the full GAC prompt for the agent.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
push: Include ``git push`` instructions.
|
|
107
|
+
bump: Include version-bump instructions.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
The complete prompt string, or ``None`` when there is nothing to commit.
|
|
111
|
+
"""
|
|
112
|
+
status = get_git_status()
|
|
113
|
+
diff_stat = get_diff_stat()
|
|
114
|
+
diff = get_staged_diff(context_lines=5)
|
|
115
|
+
branch = get_current_branch()
|
|
116
|
+
repo_root = get_repo_root()
|
|
117
|
+
|
|
118
|
+
if not bump and not push and not diff and not diff_stat:
|
|
119
|
+
return None
|
|
120
|
+
|
|
121
|
+
extra_steps = ""
|
|
122
|
+
if bump:
|
|
123
|
+
extra_steps = EXECUTION_INSTRUCTIONS_BUMP
|
|
124
|
+
if push:
|
|
125
|
+
extra_steps = extra_steps + "\n" + EXECUTION_INSTRUCTIONS_PUSH
|
|
126
|
+
|
|
127
|
+
execution = EXECUTION_INSTRUCTIONS.format(extra_steps=extra_steps)
|
|
128
|
+
|
|
129
|
+
parts = [
|
|
130
|
+
GAC_SYSTEM_INSTRUCTIONS.strip(),
|
|
131
|
+
"",
|
|
132
|
+
"--- Git context ---",
|
|
133
|
+
f"Repository: {repo_root or 'unknown'}",
|
|
134
|
+
f"Branch: {branch or 'unknown'}",
|
|
135
|
+
"",
|
|
136
|
+
"<git_status>",
|
|
137
|
+
status,
|
|
138
|
+
"</git_status>",
|
|
139
|
+
"",
|
|
140
|
+
"<git_diff_stat>",
|
|
141
|
+
diff_stat,
|
|
142
|
+
"</git_diff_stat>",
|
|
143
|
+
"",
|
|
144
|
+
"<git_diff>",
|
|
145
|
+
diff,
|
|
146
|
+
"</git_diff>",
|
|
147
|
+
"",
|
|
148
|
+
execution.strip(),
|
|
149
|
+
]
|
|
150
|
+
|
|
151
|
+
return "\n".join(parts)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def build_gac_prompt_for_message_only() -> str | None:
|
|
155
|
+
"""Build a prompt that only generates the commit message (no execution).
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
The prompt string, or ``None`` when there is nothing to commit.
|
|
159
|
+
"""
|
|
160
|
+
status = get_git_status()
|
|
161
|
+
diff_stat = get_diff_stat()
|
|
162
|
+
diff = get_staged_diff(context_lines=5)
|
|
163
|
+
branch = get_current_branch()
|
|
164
|
+
repo_root = get_repo_root()
|
|
165
|
+
|
|
166
|
+
if not diff and not diff_stat:
|
|
167
|
+
return None
|
|
168
|
+
|
|
169
|
+
parts = [
|
|
170
|
+
GAC_SYSTEM_INSTRUCTIONS.strip(),
|
|
171
|
+
"",
|
|
172
|
+
"--- Git context ---",
|
|
173
|
+
f"Repository: {repo_root or 'unknown'}",
|
|
174
|
+
f"Branch: {branch or 'unknown'}",
|
|
175
|
+
"",
|
|
176
|
+
"<git_status>",
|
|
177
|
+
status,
|
|
178
|
+
"</git_status>",
|
|
179
|
+
"",
|
|
180
|
+
"<git_diff_stat>",
|
|
181
|
+
diff_stat,
|
|
182
|
+
"</git_diff_stat>",
|
|
183
|
+
"",
|
|
184
|
+
"<git_diff>",
|
|
185
|
+
diff,
|
|
186
|
+
"</git_diff>",
|
|
187
|
+
"",
|
|
188
|
+
"Generate ONLY the commit message. No shell commands. No preamble.",
|
|
189
|
+
]
|
|
190
|
+
|
|
191
|
+
return "\n".join(parts)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Register GAC slash commands: /gac, /gac push, /gac bump."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from code_muse.callbacks import register_callback
|
|
6
|
+
from code_muse.plugins.gac.git_ops import (
|
|
7
|
+
has_any_changes,
|
|
8
|
+
has_staged_changes,
|
|
9
|
+
stage_all,
|
|
10
|
+
)
|
|
11
|
+
from code_muse.plugins.gac.prompt import build_gac_prompt
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
# Import CustomCommandResult from the custom_commands plugin
|
|
16
|
+
try:
|
|
17
|
+
from code_muse.plugins.custom_commands.register_callbacks import (
|
|
18
|
+
CustomCommandResult,
|
|
19
|
+
)
|
|
20
|
+
except ImportError:
|
|
21
|
+
CustomCommandResult = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _on_custom_command(command: str, name: str):
|
|
25
|
+
"""Handle /gac, /gac push, /gac bump commands.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
command: Full command string (e.g. ``"/gac push"``).
|
|
29
|
+
name: Command name extracted by the handler (``"gac"``).
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
- ``CustomCommandResult(prompt)`` when the command is resolved and
|
|
33
|
+
should be sent to the agent as input.
|
|
34
|
+
- ``True`` when there is nothing to commit (already handled).
|
|
35
|
+
- ``None`` if the command is not recognised (passthrough).
|
|
36
|
+
"""
|
|
37
|
+
if name != "gac":
|
|
38
|
+
return None
|
|
39
|
+
|
|
40
|
+
parts = command.split()
|
|
41
|
+
rest = " ".join(parts[1:]).lower() if len(parts) > 1 else ""
|
|
42
|
+
|
|
43
|
+
push = "push" in rest
|
|
44
|
+
bump = "bump" in rest
|
|
45
|
+
|
|
46
|
+
# Check for changes (skip for bump — the agent creates the change)
|
|
47
|
+
if not bump and not has_any_changes():
|
|
48
|
+
from code_muse.messaging import emit_warning
|
|
49
|
+
|
|
50
|
+
emit_warning("No changes to commit.")
|
|
51
|
+
return True
|
|
52
|
+
|
|
53
|
+
# Stage all changes if nothing is staged
|
|
54
|
+
if not has_staged_changes():
|
|
55
|
+
stage_all()
|
|
56
|
+
|
|
57
|
+
# Build the prompt
|
|
58
|
+
prompt = build_gac_prompt(push=push, bump=bump)
|
|
59
|
+
if prompt is None:
|
|
60
|
+
from code_muse.messaging import emit_warning
|
|
61
|
+
|
|
62
|
+
emit_warning("No changes to commit.")
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
if CustomCommandResult is not None:
|
|
66
|
+
return CustomCommandResult(prompt)
|
|
67
|
+
|
|
68
|
+
# Fallback: return prompt as string (will be displayed, not sent to agent)
|
|
69
|
+
return prompt
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _on_custom_command_help():
|
|
73
|
+
"""Return help entries for GAC commands."""
|
|
74
|
+
return [
|
|
75
|
+
("gac", "Generate commit message and commit staged changes"),
|
|
76
|
+
("gac push", "Generate commit message, commit, and push to remote"),
|
|
77
|
+
("gac bump", "Bump patch version, commit, and push to remote"),
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
register_callback("custom_command", _on_custom_command)
|
|
82
|
+
register_callback("custom_command_help", _on_custom_command_help)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Hook Creator Plugin
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Hook Creator Plugin - Simple command that injects tool prompt
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from code_muse.callbacks import register_callback
|
|
6
|
+
from code_muse.messaging import emit_info
|
|
7
|
+
|
|
8
|
+
HOOK_CREATION_PROMPT = "Hook creation prompt placeholder - see Muse documentation for hook creation guidance."
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _custom_help():
|
|
12
|
+
"""Help entries for create-hook commands."""
|
|
13
|
+
return [
|
|
14
|
+
("create-hook", "Get help creating Muse hooks"),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _handle_custom_command(command: str, name: str):
|
|
19
|
+
"""Handle /create-hook command.
|
|
20
|
+
|
|
21
|
+
Displays hook creation documentation and sends to model with context.
|
|
22
|
+
"""
|
|
23
|
+
if name != "create-hook":
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
emit_info(HOOK_CREATION_PROMPT)
|
|
27
|
+
|
|
28
|
+
# Send the prompt to the model with the hook docs as context
|
|
29
|
+
return "I need help creating a hook for Muse. Here's the documentation above. Can you help me?"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Register the custom command
|
|
33
|
+
register_callback("custom_command_help", _custom_help)
|
|
34
|
+
register_callback("custom_command", _handle_custom_command)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Hook Manager plugin – interactive TUI for managing Claude Code hooks."""
|