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,319 @@
|
|
|
1
|
+
"""CLI runner for Muse.
|
|
2
|
+
|
|
3
|
+
Contains the main application logic, interactive mode, and entry point.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# Apply pydantic-ai patches BEFORE any pydantic-ai imports
|
|
7
|
+
from code_muse.pydantic_patches import apply_all_patches
|
|
8
|
+
|
|
9
|
+
apply_all_patches()
|
|
10
|
+
|
|
11
|
+
import asyncio
|
|
12
|
+
import os
|
|
13
|
+
import sys
|
|
14
|
+
import traceback
|
|
15
|
+
|
|
16
|
+
from rich.console import Console
|
|
17
|
+
|
|
18
|
+
from code_muse import __version__, callbacks, plugins
|
|
19
|
+
from code_muse.agents import get_available_agents, get_current_agent, set_current_agent
|
|
20
|
+
from code_muse.cli_runner.args import build_parser
|
|
21
|
+
from code_muse.cli_runner.loop import interactive_mode
|
|
22
|
+
from code_muse.cli_runner.resume import _resume_session_from_path
|
|
23
|
+
from code_muse.cli_runner.runner import (
|
|
24
|
+
execute_single_prompt,
|
|
25
|
+
run_prompt_with_attachments,
|
|
26
|
+
)
|
|
27
|
+
from code_muse.command_line.attachments import parse_prompt_attachments
|
|
28
|
+
from code_muse.command_line.clipboard import get_clipboard_manager
|
|
29
|
+
from code_muse.config import (
|
|
30
|
+
AUTOSAVE_DIR,
|
|
31
|
+
COMMAND_HISTORY_FILE,
|
|
32
|
+
ensure_config_exists,
|
|
33
|
+
finalize_autosave_session,
|
|
34
|
+
initialize_command_history_file,
|
|
35
|
+
save_command_to_history,
|
|
36
|
+
)
|
|
37
|
+
from code_muse.http_utils import find_available_port
|
|
38
|
+
from code_muse.keymap import (
|
|
39
|
+
KeymapError,
|
|
40
|
+
get_cancel_agent_display_name,
|
|
41
|
+
validate_cancel_agent_key,
|
|
42
|
+
)
|
|
43
|
+
from code_muse.messaging import (
|
|
44
|
+
emit_error,
|
|
45
|
+
emit_info,
|
|
46
|
+
emit_success,
|
|
47
|
+
emit_system_message,
|
|
48
|
+
emit_warning,
|
|
49
|
+
)
|
|
50
|
+
from code_muse.terminal_utils import (
|
|
51
|
+
print_truecolor_warning,
|
|
52
|
+
reset_unix_terminal,
|
|
53
|
+
reset_windows_terminal_ansi,
|
|
54
|
+
reset_windows_terminal_full,
|
|
55
|
+
)
|
|
56
|
+
from code_muse.version_checker import default_version_mismatch_behavior
|
|
57
|
+
|
|
58
|
+
plugins.load_plugin_callbacks()
|
|
59
|
+
|
|
60
|
+
__all__ = [
|
|
61
|
+
"interactive_mode",
|
|
62
|
+
"execute_single_prompt",
|
|
63
|
+
"run_prompt_with_attachments",
|
|
64
|
+
"main",
|
|
65
|
+
"main_entry",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
async def main():
|
|
70
|
+
"""Main async entry point for Muse CLI."""
|
|
71
|
+
parser = build_parser()
|
|
72
|
+
args = parser.parse_args()
|
|
73
|
+
|
|
74
|
+
from code_muse.messaging import (
|
|
75
|
+
RichConsoleRenderer,
|
|
76
|
+
SynchronousInteractiveRenderer,
|
|
77
|
+
get_global_queue,
|
|
78
|
+
get_message_bus,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Create a shared console for both renderers
|
|
82
|
+
display_console = Console()
|
|
83
|
+
|
|
84
|
+
# Legacy renderer for backward compatibility (emits via get_global_queue)
|
|
85
|
+
message_queue = get_global_queue()
|
|
86
|
+
message_renderer = SynchronousInteractiveRenderer(message_queue, display_console)
|
|
87
|
+
message_renderer.start()
|
|
88
|
+
|
|
89
|
+
# New MessageBus renderer for structured messages (tools emit here)
|
|
90
|
+
message_bus = get_message_bus()
|
|
91
|
+
bus_renderer = RichConsoleRenderer(message_bus, display_console)
|
|
92
|
+
bus_renderer.start()
|
|
93
|
+
|
|
94
|
+
initialize_command_history_file()
|
|
95
|
+
|
|
96
|
+
# Show the awesome Muse logo when entering interactive mode
|
|
97
|
+
# This happens when: no -p flag (prompt-only mode) is used
|
|
98
|
+
# The logo should appear for both `muse` and `muse -i`
|
|
99
|
+
if not args.prompt:
|
|
100
|
+
try:
|
|
101
|
+
import pyfiglet
|
|
102
|
+
|
|
103
|
+
intro_lines = pyfiglet.figlet_format(
|
|
104
|
+
"FAST PUPPY", font="ansi_shadow"
|
|
105
|
+
).split("\n")
|
|
106
|
+
|
|
107
|
+
# Simple blue to green gradient (top to bottom)
|
|
108
|
+
gradient_colors = ["bright_blue", "bright_cyan", "bright_green"]
|
|
109
|
+
display_console.print("\n")
|
|
110
|
+
|
|
111
|
+
lines = []
|
|
112
|
+
# Apply gradient line by line
|
|
113
|
+
for line_num, line in enumerate(intro_lines):
|
|
114
|
+
if line.strip():
|
|
115
|
+
# Use line position to determine color
|
|
116
|
+
# (top blue, middle cyan, bottom green)
|
|
117
|
+
color_idx = min(line_num // 2, len(gradient_colors) - 1)
|
|
118
|
+
color = gradient_colors[color_idx]
|
|
119
|
+
lines.append(f"[{color}]{line}[/{color}]")
|
|
120
|
+
else:
|
|
121
|
+
lines.append("")
|
|
122
|
+
# Print directly to console to avoid
|
|
123
|
+
# the 'dim' style from emit_system_message
|
|
124
|
+
display_console.print("\n".join(lines))
|
|
125
|
+
except ImportError:
|
|
126
|
+
emit_system_message("Loading...")
|
|
127
|
+
|
|
128
|
+
# Truecolor warning moved to interactive_mode() so it prints LAST
|
|
129
|
+
# after all the help stuff - max visibility for the ugly red box!
|
|
130
|
+
|
|
131
|
+
available_port = await asyncio.to_thread(find_available_port)
|
|
132
|
+
if available_port is None:
|
|
133
|
+
emit_error("No available ports in range 8090-9010!")
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
# Early model setting if specified via command line
|
|
137
|
+
# This happens before ensure_config_exists() to ensure config is set up correctly
|
|
138
|
+
early_model = None
|
|
139
|
+
if args.model:
|
|
140
|
+
early_model = args.model.strip()
|
|
141
|
+
from code_muse.config import set_model_name
|
|
142
|
+
|
|
143
|
+
set_model_name(early_model)
|
|
144
|
+
|
|
145
|
+
ensure_config_exists()
|
|
146
|
+
|
|
147
|
+
# Validate cancel_agent_key configuration early
|
|
148
|
+
try:
|
|
149
|
+
validate_cancel_agent_key()
|
|
150
|
+
except KeymapError as e:
|
|
151
|
+
emit_error(str(e))
|
|
152
|
+
sys.exit(1)
|
|
153
|
+
|
|
154
|
+
# Show uvx detection notice if we're on Windows + uvx
|
|
155
|
+
# Also disable Ctrl+C at the console level to prevent terminal bricking
|
|
156
|
+
try:
|
|
157
|
+
from code_muse.uvx_detection import should_use_alternate_cancel_key
|
|
158
|
+
|
|
159
|
+
if should_use_alternate_cancel_key():
|
|
160
|
+
from code_muse.terminal_utils import (
|
|
161
|
+
disable_windows_ctrl_c,
|
|
162
|
+
set_keep_ctrl_c_disabled,
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
# Disable Ctrl+C at the console input level
|
|
166
|
+
# This prevents Ctrl+C from being processed as a signal at all
|
|
167
|
+
disable_windows_ctrl_c()
|
|
168
|
+
|
|
169
|
+
# Set flag to keep it disabled (prompt_toolkit may re-enable it)
|
|
170
|
+
set_keep_ctrl_c_disabled(True)
|
|
171
|
+
|
|
172
|
+
# Use print directly - emit_system_message can get cleared by ANSI codes
|
|
173
|
+
print(
|
|
174
|
+
"🔧 Detected uvx launch on Windows - using Ctrl+K for cancellation "
|
|
175
|
+
"(Ctrl+C is disabled to prevent terminal issues)"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
# Also install a SIGINT handler as backup
|
|
179
|
+
import signal
|
|
180
|
+
|
|
181
|
+
def _uvx_protective_sigint_handler(_sig, _frame):
|
|
182
|
+
"""Protective SIGINT handler for Windows+uvx."""
|
|
183
|
+
reset_windows_terminal_full()
|
|
184
|
+
# Re-disable Ctrl+C in case something re-enabled it
|
|
185
|
+
disable_windows_ctrl_c()
|
|
186
|
+
|
|
187
|
+
signal.signal(signal.SIGINT, _uvx_protective_sigint_handler)
|
|
188
|
+
except ImportError:
|
|
189
|
+
pass # uvx_detection module not available, ignore
|
|
190
|
+
|
|
191
|
+
# Load API keys from muse.cfg into environment variables
|
|
192
|
+
from code_muse.config import load_api_keys_to_environment
|
|
193
|
+
|
|
194
|
+
load_api_keys_to_environment()
|
|
195
|
+
|
|
196
|
+
# Handle model validation from command line
|
|
197
|
+
# (validation happens here, setting was earlier)
|
|
198
|
+
if args.model:
|
|
199
|
+
from code_muse.config import _validate_model_exists
|
|
200
|
+
|
|
201
|
+
model_name = args.model.strip()
|
|
202
|
+
try:
|
|
203
|
+
# Validate that the model exists in models.json
|
|
204
|
+
if not _validate_model_exists(model_name):
|
|
205
|
+
from code_muse.model_factory import ModelFactory
|
|
206
|
+
|
|
207
|
+
models_config = ModelFactory.load_config()
|
|
208
|
+
available_models = list(models_config.keys()) if models_config else []
|
|
209
|
+
|
|
210
|
+
emit_error(f"Model '{model_name}' not found")
|
|
211
|
+
emit_system_message(f"Available models: {', '.join(available_models)}")
|
|
212
|
+
sys.exit(1)
|
|
213
|
+
|
|
214
|
+
# Model is valid, show confirmation (already set earlier)
|
|
215
|
+
emit_system_message(f"🎯 Using model: {model_name}")
|
|
216
|
+
except Exception as e:
|
|
217
|
+
emit_error(f"Error validating model: {str(e)}")
|
|
218
|
+
sys.exit(1)
|
|
219
|
+
|
|
220
|
+
# Handle agent selection from command line
|
|
221
|
+
if args.agent:
|
|
222
|
+
agent_name = args.agent.lower()
|
|
223
|
+
try:
|
|
224
|
+
# First check if the agent exists by getting available agents
|
|
225
|
+
available_agents = get_available_agents()
|
|
226
|
+
if agent_name not in available_agents:
|
|
227
|
+
emit_error(f"Agent '{agent_name}' not found")
|
|
228
|
+
emit_system_message(
|
|
229
|
+
f"Available agents: {', '.join(available_agents.keys())}"
|
|
230
|
+
)
|
|
231
|
+
sys.exit(1)
|
|
232
|
+
|
|
233
|
+
# Agent exists, set it
|
|
234
|
+
set_current_agent(agent_name)
|
|
235
|
+
emit_system_message(f"🤖 Using agent: {agent_name}")
|
|
236
|
+
except Exception as e:
|
|
237
|
+
emit_error(f"Error setting agent: {str(e)}")
|
|
238
|
+
sys.exit(1)
|
|
239
|
+
|
|
240
|
+
current_version = __version__
|
|
241
|
+
|
|
242
|
+
no_version_update = os.getenv("NO_VERSION_UPDATE", "").lower() in (
|
|
243
|
+
"1",
|
|
244
|
+
"true",
|
|
245
|
+
"yes",
|
|
246
|
+
"on",
|
|
247
|
+
)
|
|
248
|
+
if no_version_update:
|
|
249
|
+
version_msg = f"Current version: {current_version}"
|
|
250
|
+
update_disabled_msg = (
|
|
251
|
+
"Update phase disabled because NO_VERSION_UPDATE is set to 1 or true"
|
|
252
|
+
)
|
|
253
|
+
emit_system_message(version_msg)
|
|
254
|
+
emit_system_message(update_disabled_msg)
|
|
255
|
+
else:
|
|
256
|
+
if len(callbacks.get_callbacks("version_check")):
|
|
257
|
+
await callbacks.on_version_check(current_version)
|
|
258
|
+
else:
|
|
259
|
+
default_version_mismatch_behavior(current_version)
|
|
260
|
+
|
|
261
|
+
await callbacks.on_startup()
|
|
262
|
+
|
|
263
|
+
if args.resume:
|
|
264
|
+
_resume_session_from_path(
|
|
265
|
+
args.resume, allow_legacy=args.import_legacy_pickle_session
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
try:
|
|
269
|
+
initial_command = None
|
|
270
|
+
prompt_only_mode = False
|
|
271
|
+
|
|
272
|
+
if args.prompt:
|
|
273
|
+
initial_command = args.prompt
|
|
274
|
+
prompt_only_mode = True
|
|
275
|
+
elif args.command:
|
|
276
|
+
initial_command = " ".join(args.command)
|
|
277
|
+
prompt_only_mode = False
|
|
278
|
+
|
|
279
|
+
if prompt_only_mode:
|
|
280
|
+
await execute_single_prompt(initial_command, message_renderer)
|
|
281
|
+
else:
|
|
282
|
+
# Default to interactive mode (no args = same as -i)
|
|
283
|
+
await interactive_mode(message_renderer, initial_command=initial_command)
|
|
284
|
+
finally:
|
|
285
|
+
if message_renderer:
|
|
286
|
+
message_renderer.stop()
|
|
287
|
+
if bus_renderer:
|
|
288
|
+
bus_renderer.stop()
|
|
289
|
+
await callbacks.on_shutdown()
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def main_entry():
|
|
293
|
+
"""Entry point for the installed CLI tool."""
|
|
294
|
+
exit_code = 0
|
|
295
|
+
try:
|
|
296
|
+
asyncio.run(main())
|
|
297
|
+
except KeyboardInterrupt:
|
|
298
|
+
# Note: Using sys.stderr for crash output -
|
|
299
|
+
# messaging system may not be available
|
|
300
|
+
sys.stderr.write(traceback.format_exc())
|
|
301
|
+
exit_code = 130 # Standard SIGINT exit code
|
|
302
|
+
finally:
|
|
303
|
+
# Explicitly shut down subsystems before the process exits.
|
|
304
|
+
# The atexit hooks provide a safety net, but calling them
|
|
305
|
+
# here ensures orderly cleanup even if daemon threads keep
|
|
306
|
+
# the interpreter alive briefly after asyncio.run() returns.
|
|
307
|
+
try:
|
|
308
|
+
from code_muse.tools import command_runner
|
|
309
|
+
|
|
310
|
+
command_runner.shutdown()
|
|
311
|
+
except Exception:
|
|
312
|
+
pass
|
|
313
|
+
try:
|
|
314
|
+
callbacks._shutdown_executor()
|
|
315
|
+
except Exception:
|
|
316
|
+
pass
|
|
317
|
+
# Reset terminal on Unix-like systems (not Windows)
|
|
318
|
+
reset_unix_terminal()
|
|
319
|
+
return exit_code
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""CLI argument parsing for Muse."""
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
|
|
5
|
+
from code_muse import __version__
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def build_parser():
|
|
9
|
+
"""Build and return the argument parser."""
|
|
10
|
+
parser = argparse.ArgumentParser(description="Muse - A code generation agent")
|
|
11
|
+
parser.add_argument(
|
|
12
|
+
"--version",
|
|
13
|
+
"-v",
|
|
14
|
+
action="version",
|
|
15
|
+
version=f"{__version__}",
|
|
16
|
+
help="Show version and exit",
|
|
17
|
+
)
|
|
18
|
+
parser.add_argument(
|
|
19
|
+
"--interactive",
|
|
20
|
+
"-i",
|
|
21
|
+
action="store_true",
|
|
22
|
+
help="Run in interactive mode",
|
|
23
|
+
)
|
|
24
|
+
parser.add_argument(
|
|
25
|
+
"--prompt",
|
|
26
|
+
"-p",
|
|
27
|
+
type=str,
|
|
28
|
+
help="Execute a single prompt and exit (no interactive mode)",
|
|
29
|
+
)
|
|
30
|
+
parser.add_argument(
|
|
31
|
+
"--agent",
|
|
32
|
+
"-a",
|
|
33
|
+
type=str,
|
|
34
|
+
help="Specify which agent to use (e.g., --agent muse)",
|
|
35
|
+
)
|
|
36
|
+
parser.add_argument(
|
|
37
|
+
"--model",
|
|
38
|
+
"-m",
|
|
39
|
+
type=str,
|
|
40
|
+
help="Specify which model to use (e.g., --model gpt-5)",
|
|
41
|
+
)
|
|
42
|
+
parser.add_argument(
|
|
43
|
+
"--resume",
|
|
44
|
+
"-r",
|
|
45
|
+
type=str,
|
|
46
|
+
metavar="PATH",
|
|
47
|
+
help=(
|
|
48
|
+
"Resume a saved session from a .json file "
|
|
49
|
+
"(e.g. ~/.muse/contexts/foo.json)"
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
parser.add_argument(
|
|
53
|
+
"--import-legacy-pickle-session",
|
|
54
|
+
action="store_true",
|
|
55
|
+
help=(
|
|
56
|
+
"DANGER: allow loading a legacy .pkl session file "
|
|
57
|
+
"(pickle can execute arbitrary code)"
|
|
58
|
+
),
|
|
59
|
+
)
|
|
60
|
+
parser.add_argument(
|
|
61
|
+
"command", nargs="*", help="Run a single command (deprecated, use -p instead)"
|
|
62
|
+
)
|
|
63
|
+
return parser
|