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,168 @@
|
|
|
1
|
+
"""Config: agent settings."""
|
|
2
|
+
|
|
3
|
+
import configparser
|
|
4
|
+
|
|
5
|
+
import code_muse.config as _config
|
|
6
|
+
|
|
7
|
+
PACK_AGENT_NAMES = frozenset(
|
|
8
|
+
[
|
|
9
|
+
"pack-leader",
|
|
10
|
+
"bloodhound",
|
|
11
|
+
"shepherd",
|
|
12
|
+
"terrier",
|
|
13
|
+
"watchdog",
|
|
14
|
+
"retriever",
|
|
15
|
+
]
|
|
16
|
+
)
|
|
17
|
+
UC_AGENT_NAMES = frozenset(["helios"])
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_pack_agents_enabled() -> bool:
|
|
21
|
+
"""Return True if pack agents are enabled (default False).
|
|
22
|
+
|
|
23
|
+
When False (default), pack agents (pack-leader, bloodhound, shepherd,
|
|
24
|
+
terrier, watchdog, retriever) are hidden from `list_agents` tool and `/agents`
|
|
25
|
+
command. They cannot be invoked by other agents or selected by users.
|
|
26
|
+
|
|
27
|
+
When True, pack agents are available for use.
|
|
28
|
+
"""
|
|
29
|
+
cfg_val = _config.get_value("enable_pack_agents")
|
|
30
|
+
if cfg_val is None:
|
|
31
|
+
return False
|
|
32
|
+
return str(cfg_val).strip().lower() in {"1", "true", "yes", "on"}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def get_universal_constructor_enabled() -> bool:
|
|
36
|
+
"""Return True if the Universal Constructor is enabled (default True).
|
|
37
|
+
|
|
38
|
+
The Universal Constructor allows agents to dynamically create, manage,
|
|
39
|
+
and execute custom tools at runtime. When enabled, agents can extend
|
|
40
|
+
their capabilities by writing Python code that becomes callable tools.
|
|
41
|
+
|
|
42
|
+
When False, the universal_constructor tool is not registered with agents.
|
|
43
|
+
"""
|
|
44
|
+
cfg_val = _config.get_value("enable_universal_constructor")
|
|
45
|
+
if cfg_val is None:
|
|
46
|
+
return True # Enabled by default
|
|
47
|
+
return str(cfg_val).strip().lower() in {"1", "true", "yes", "on"}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def set_universal_constructor_enabled(enabled: bool) -> None:
|
|
51
|
+
"""Enable or disable the Universal Constructor.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
enabled: True to enable, False to disable
|
|
55
|
+
"""
|
|
56
|
+
_config.set_value("enable_universal_constructor", "true" if enabled else "false")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def get_user_agents_directory() -> str:
|
|
60
|
+
"""Get the user's agents directory path.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Path to the user's Muse agents directory.
|
|
64
|
+
"""
|
|
65
|
+
# Ensure the agents directory exists
|
|
66
|
+
_config.AGENTS_DIR.mkdir(parents=True, exist_ok=True)
|
|
67
|
+
return str(_config.AGENTS_DIR)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_project_agents_directory() -> str | None:
|
|
71
|
+
"""Get the project-local agents directory path.
|
|
72
|
+
|
|
73
|
+
Looks for a .muse/agents/ directory in the current working directory.
|
|
74
|
+
Unlike get_user_agents_directory(), this does NOT create the directory
|
|
75
|
+
if it doesn't exist -- the team must create it intentionally.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Path to the project's agents directory if it exists, or None.
|
|
79
|
+
"""
|
|
80
|
+
project_agents_dir = _config.Path.cwd() / ".muse" / "agents"
|
|
81
|
+
if project_agents_dir.is_dir():
|
|
82
|
+
return str(project_agents_dir)
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def get_agent_pinned_model(agent_name: str) -> str:
|
|
87
|
+
"""Get the pinned model for a specific agent.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
agent_name: Name of the agent to get the pinned model for.
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
Pinned model name, or None if no model is pinned for this agent.
|
|
94
|
+
"""
|
|
95
|
+
return _config.get_value(f"agent_model_{agent_name}")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def set_agent_pinned_model(agent_name: str, model_name: str):
|
|
99
|
+
"""Set the pinned model for a specific agent.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
agent_name: Name of the agent to pin the model for.
|
|
103
|
+
model_name: Model name to pin to this agent.
|
|
104
|
+
"""
|
|
105
|
+
_config.set_config_value(f"agent_model_{agent_name}", model_name)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def clear_agent_pinned_model(agent_name: str):
|
|
109
|
+
"""Clear the pinned model for a specific agent.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
agent_name: Name of the agent to clear the pinned model for.
|
|
113
|
+
"""
|
|
114
|
+
# We can't easily delete keys from configparser, so set to empty string
|
|
115
|
+
# which will be treated as None by get_agent_pinned_model
|
|
116
|
+
_config.set_config_value(f"agent_model_{agent_name}", "")
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def get_all_agent_pinned_models() -> dict:
|
|
120
|
+
"""Get all agent-to-model pinnings from config.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Dict mapping agent names to their pinned model names.
|
|
124
|
+
Only includes agents that have a pinned model (non-empty value).
|
|
125
|
+
"""
|
|
126
|
+
config = configparser.ConfigParser()
|
|
127
|
+
config.read(_config.CONFIG_FILE)
|
|
128
|
+
|
|
129
|
+
pinnings = {}
|
|
130
|
+
if _config.DEFAULT_SECTION in config:
|
|
131
|
+
for key, value in config[_config.DEFAULT_SECTION].items():
|
|
132
|
+
if key.startswith("agent_model_") and value:
|
|
133
|
+
agent_name = key[len("agent_model_") :]
|
|
134
|
+
pinnings[agent_name] = value
|
|
135
|
+
return pinnings
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def get_agents_pinned_to_model(model_name: str) -> list:
|
|
139
|
+
"""Get all agents that are pinned to a specific model.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
model_name: The model name to look up.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
List of agent names pinned to this model.
|
|
146
|
+
"""
|
|
147
|
+
all_pinnings = get_all_agent_pinned_models()
|
|
148
|
+
return [agent for agent, model in all_pinnings.items() if model == model_name]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def get_default_agent() -> str:
|
|
152
|
+
"""
|
|
153
|
+
Get the default agent name from muse.cfg.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
str: The default agent name, or "planning-agent" if not set.
|
|
157
|
+
"""
|
|
158
|
+
return _config.get_value("default_agent") or "planning-agent"
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def set_default_agent(agent_name: str) -> None:
|
|
162
|
+
"""
|
|
163
|
+
Set the default agent name in muse.cfg.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
agent_name: The name of the agent to set as default.
|
|
167
|
+
"""
|
|
168
|
+
_config.set_config_value("default_agent", agent_name)
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"""Config: appearance settings."""
|
|
2
|
+
|
|
3
|
+
import code_muse.config as _config
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def set_diff_highlight_style(style: str):
|
|
7
|
+
"""Set the diff highlight style.
|
|
8
|
+
|
|
9
|
+
Note: Text mode has been removed. This function is kept for backwards compatibility
|
|
10
|
+
but does nothing. All diffs use beautiful syntax highlighting now!
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
style: Ignored (always uses 'highlight' mode)
|
|
14
|
+
"""
|
|
15
|
+
# Do nothing - we always use highlight mode now!
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
_DEFAULT_DIFF_ADDITION_HEX = "#0b1f0b" # darker green
|
|
20
|
+
_DEFAULT_DIFF_DELETION_HEX = "#390e1a" # wine
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _coerce_to_hex(value: str | None, fallback: str) -> str:
|
|
24
|
+
"""Normalize any color string to '#RRGGBB'.
|
|
25
|
+
|
|
26
|
+
Accepts:
|
|
27
|
+
- '#RRGGBB' hex strings (any case) — returned lowercased.
|
|
28
|
+
- Rich color names like 'green', 'orange1', 'bright_red'.
|
|
29
|
+
- 'rgb(r,g,b)' forms that Rich understands.
|
|
30
|
+
|
|
31
|
+
Anything Rich can't parse (including None/empty) falls back to ``fallback``.
|
|
32
|
+
This keeps downstream consumers like ``brighten_hex`` happy — they only
|
|
33
|
+
ever see a well-formed #RRGGBB string.
|
|
34
|
+
"""
|
|
35
|
+
if not value:
|
|
36
|
+
return fallback
|
|
37
|
+
candidate = value.strip()
|
|
38
|
+
# Fast-path: already a valid #RRGGBB.
|
|
39
|
+
if (
|
|
40
|
+
len(candidate) == 7
|
|
41
|
+
and candidate.startswith("#")
|
|
42
|
+
and all(c in "0123456789abcdefABCDEF" for c in candidate[1:])
|
|
43
|
+
):
|
|
44
|
+
return candidate.lower()
|
|
45
|
+
# Otherwise try Rich's parser (handles named colors, rgb(), etc.).
|
|
46
|
+
try:
|
|
47
|
+
from rich.color import Color # local import keeps module import cheap
|
|
48
|
+
|
|
49
|
+
triplet = Color.parse(candidate).get_truecolor()
|
|
50
|
+
return f"#{triplet.red:02x}{triplet.green:02x}{triplet.blue:02x}"
|
|
51
|
+
except Exception:
|
|
52
|
+
return fallback
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_diff_addition_color() -> str:
|
|
56
|
+
"""Get the base color for diff additions, always as a valid '#RRGGBB' hex.
|
|
57
|
+
|
|
58
|
+
Falls back to the default darker green if the configured value is missing
|
|
59
|
+
or unparseable.
|
|
60
|
+
"""
|
|
61
|
+
return _coerce_to_hex(
|
|
62
|
+
_config.get_value("highlight_addition_color"), _DEFAULT_DIFF_ADDITION_HEX
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def set_diff_addition_color(color: str):
|
|
67
|
+
"""Set the color for diff additions.
|
|
68
|
+
|
|
69
|
+
Accepts '#RRGGBB' hex, Rich color names ('green', 'bright_green', ...), or
|
|
70
|
+
'rgb(r,g,b)'. The value is normalized to '#RRGGBB' before being written so
|
|
71
|
+
downstream renderers never see a raw name.
|
|
72
|
+
"""
|
|
73
|
+
_config.set_config_value(
|
|
74
|
+
"highlight_addition_color",
|
|
75
|
+
_coerce_to_hex(color, _DEFAULT_DIFF_ADDITION_HEX),
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def get_diff_deletion_color() -> str:
|
|
80
|
+
"""Get the base color for diff deletions, always as a valid '#RRGGBB' hex.
|
|
81
|
+
|
|
82
|
+
Falls back to the default wine if the configured value is missing or
|
|
83
|
+
unparseable.
|
|
84
|
+
"""
|
|
85
|
+
return _coerce_to_hex(
|
|
86
|
+
_config.get_value("highlight_deletion_color"), _DEFAULT_DIFF_DELETION_HEX
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def set_diff_deletion_color(color: str):
|
|
91
|
+
"""Set the color for diff deletions.
|
|
92
|
+
|
|
93
|
+
Accepts '#RRGGBB' hex, Rich color names ('red', 'orange1', ...), or
|
|
94
|
+
'rgb(r,g,b)'. The value is normalized to '#RRGGBB' before being written so
|
|
95
|
+
downstream renderers never see a raw name.
|
|
96
|
+
"""
|
|
97
|
+
_config.set_config_value(
|
|
98
|
+
"highlight_deletion_color",
|
|
99
|
+
_coerce_to_hex(color, _DEFAULT_DIFF_DELETION_HEX),
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
DEFAULT_BANNER_COLORS = {
|
|
104
|
+
"thinking": "deep_sky_blue4", # Sapphire - contemplation
|
|
105
|
+
"agent_response": "medium_purple4", # Amethyst - main AI output
|
|
106
|
+
"shell_command": "dark_orange3", # Amber - system commands
|
|
107
|
+
"read_file": "steel_blue", # Steel - reading files
|
|
108
|
+
"edit_file": "dark_goldenrod", # Gold - modifications (legacy)
|
|
109
|
+
"create_file": "dark_goldenrod", # Gold - file creation
|
|
110
|
+
"replace_in_file": "dark_goldenrod", # Gold - file modifications
|
|
111
|
+
"delete_snippet": "dark_goldenrod", # Gold - snippet removal
|
|
112
|
+
"grep": "grey37", # Silver - search results
|
|
113
|
+
"directory_listing": "dodger_blue2", # Sky - navigation
|
|
114
|
+
"agent_reasoning": "dark_violet", # Violet - deep thought
|
|
115
|
+
"invoke_agent": "deep_pink4", # Ruby - agent invocation
|
|
116
|
+
"subagent_response": "sea_green3", # Emerald - sub-agent success
|
|
117
|
+
"list_agents": "dark_slate_gray3", # Slate - neutral listing
|
|
118
|
+
"universal_constructor": "dark_cyan", # Teal - constructing tools
|
|
119
|
+
# Browser/Terminal tools - same color as edit_file (gold)
|
|
120
|
+
"terminal_tool": "dark_goldenrod", # Gold - browser terminal operations
|
|
121
|
+
# User-initiated shell pass-through (! prefix) - distinct from agent's shell_command
|
|
122
|
+
"shell_passthrough": "medium_sea_green", # Green - user's own shell commands
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def get_banner_color(banner_name: str) -> str:
|
|
127
|
+
"""Get the background color for a specific banner.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
banner_name: The banner identifier (e.g., 'thinking', 'agent_response')
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
Rich color name or hex code for the banner background
|
|
134
|
+
"""
|
|
135
|
+
config_key = f"banner_color_{banner_name}"
|
|
136
|
+
val = _config.get_value(config_key)
|
|
137
|
+
if val:
|
|
138
|
+
return val
|
|
139
|
+
return DEFAULT_BANNER_COLORS.get(banner_name, "blue")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def set_banner_color(banner_name: str, color: str):
|
|
143
|
+
"""Set the background color for a specific banner.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
banner_name: The banner identifier (e.g., 'thinking', 'agent_response')
|
|
147
|
+
color: Rich color name or hex code
|
|
148
|
+
"""
|
|
149
|
+
config_key = f"banner_color_{banner_name}"
|
|
150
|
+
_config.set_config_value(config_key, color)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def get_all_banner_colors() -> dict:
|
|
154
|
+
"""Get all banner colors (configured or default).
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
Dict mapping banner names to their colors
|
|
158
|
+
"""
|
|
159
|
+
return {name: get_banner_color(name) for name in DEFAULT_BANNER_COLORS}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def reset_banner_color(banner_name: str):
|
|
163
|
+
"""Reset a banner color to its default.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
banner_name: The banner identifier to reset
|
|
167
|
+
"""
|
|
168
|
+
default_color = DEFAULT_BANNER_COLORS.get(banner_name, "blue")
|
|
169
|
+
set_banner_color(banner_name, default_color)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def reset_all_banner_colors():
|
|
173
|
+
"""Reset all banner colors to their defaults."""
|
|
174
|
+
for name, color in DEFAULT_BANNER_COLORS.items():
|
|
175
|
+
set_banner_color(name, color)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def get_diff_context_lines() -> int:
|
|
179
|
+
"""
|
|
180
|
+
Returns the user-configured number of context lines for diff display.
|
|
181
|
+
This controls how many lines of surrounding context are shown in diffs.
|
|
182
|
+
Defaults to 6 if unset or misconfigured.
|
|
183
|
+
Configurable by 'diff_context_lines' key.
|
|
184
|
+
"""
|
|
185
|
+
val = _config.get_value("diff_context_lines")
|
|
186
|
+
try:
|
|
187
|
+
context_lines = int(val) if val else 6
|
|
188
|
+
# Apply reasonable bounds: minimum 0, maximum 50
|
|
189
|
+
return max(0, min(context_lines, 50))
|
|
190
|
+
except ValueError, TypeError:
|
|
191
|
+
return 6
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def get_suppress_thinking_messages() -> bool:
|
|
195
|
+
"""
|
|
196
|
+
Checks muse.cfg for 'suppress_thinking_messages' (case-insensitive in value only).
|
|
197
|
+
Defaults to False if not set.
|
|
198
|
+
Allowed values for ON: 1, '1', 'true', 'yes', 'on' (all case-insensitive for value).
|
|
199
|
+
When enabled, thinking messages (agent_reasoning, planned_next_steps) will be hidden.
|
|
200
|
+
"""
|
|
201
|
+
true_vals = {"1", "true", "yes", "on"}
|
|
202
|
+
cfg_val = _config.get_value("suppress_thinking_messages")
|
|
203
|
+
if cfg_val is not None:
|
|
204
|
+
return str(cfg_val).strip().lower() in true_vals
|
|
205
|
+
return False
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def set_suppress_thinking_messages(enabled: bool):
|
|
209
|
+
"""Sets the suppress_thinking_messages configuration value.
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
enabled: Whether to suppress thinking messages
|
|
213
|
+
"""
|
|
214
|
+
_config.set_config_value(
|
|
215
|
+
"suppress_thinking_messages", "true" if enabled else "false"
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def get_suppress_informational_messages() -> bool:
|
|
220
|
+
"""
|
|
221
|
+
Checks muse.cfg for 'suppress_informational_messages' (case-insensitive in value only).
|
|
222
|
+
Defaults to False if not set.
|
|
223
|
+
Allowed values for ON: 1, '1', 'true', 'yes', 'on' (all case-insensitive for value).
|
|
224
|
+
When enabled, informational messages (info, success, warning) will be hidden.
|
|
225
|
+
"""
|
|
226
|
+
true_vals = {"1", "true", "yes", "on"}
|
|
227
|
+
cfg_val = _config.get_value("suppress_informational_messages")
|
|
228
|
+
if cfg_val is not None:
|
|
229
|
+
return str(cfg_val).strip().lower() in true_vals
|
|
230
|
+
return False
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def set_suppress_informational_messages(enabled: bool):
|
|
234
|
+
"""Sets the suppress_informational_messages configuration value.
|
|
235
|
+
|
|
236
|
+
Args:
|
|
237
|
+
enabled: Whether to suppress informational messages
|
|
238
|
+
"""
|
|
239
|
+
_config.set_config_value(
|
|
240
|
+
"suppress_informational_messages", "true" if enabled else "false"
|
|
241
|
+
)
|