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
code_muse/__init__.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import importlib.metadata
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
# Biscuit was here.
|
|
5
|
+
try:
|
|
6
|
+
_detected_version = importlib.metadata.version("code-muse")
|
|
7
|
+
# Ensure we never end up with None or empty string
|
|
8
|
+
__version__ = _detected_version if _detected_version else "0.0.0-dev"
|
|
9
|
+
except Exception:
|
|
10
|
+
# Fallback for dev environments where metadata might not be available
|
|
11
|
+
__version__ = "0.0.0-dev"
|
|
12
|
+
|
|
13
|
+
# Enable Cython JIT compilation for .pyx modules throughout the package.
|
|
14
|
+
_CYTHON_AVAILABLE = False
|
|
15
|
+
try:
|
|
16
|
+
import pyximport
|
|
17
|
+
|
|
18
|
+
pyximport.install(language_level=3, build_in_temp=True, inplace=True)
|
|
19
|
+
_CYTHON_AVAILABLE = True
|
|
20
|
+
except Exception:
|
|
21
|
+
pass # Cython not available — .pyx modules will need pre-compiled extension files
|
|
22
|
+
|
|
23
|
+
# Scan the package tree for .pyx modules and record Cython status.
|
|
24
|
+
_pyx_files = list(Path(__file__).parent.rglob("*.pyx"))
|
|
25
|
+
PYX_MODULE_COUNT: int = len(_pyx_files)
|
|
26
|
+
CYTHON_ENABLED: bool = _CYTHON_AVAILABLE and PYX_MODULE_COUNT > 0
|
code_muse/__main__.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Agent management system for Muse.
|
|
2
|
+
|
|
3
|
+
This module provides functionality for switching between different agent
|
|
4
|
+
configurations, each with their own system prompts and tool sets.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .agent_manager import (
|
|
8
|
+
clone_agent,
|
|
9
|
+
delete_clone_agent,
|
|
10
|
+
get_agent_descriptions,
|
|
11
|
+
get_available_agents,
|
|
12
|
+
get_current_agent,
|
|
13
|
+
is_clone_agent_name,
|
|
14
|
+
load_agent,
|
|
15
|
+
refresh_agents,
|
|
16
|
+
set_current_agent,
|
|
17
|
+
)
|
|
18
|
+
from .subagent_stream_handler import subagent_stream_handler
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"clone_agent",
|
|
22
|
+
"delete_clone_agent",
|
|
23
|
+
"get_available_agents",
|
|
24
|
+
"get_current_agent",
|
|
25
|
+
"is_clone_agent_name",
|
|
26
|
+
"set_current_agent",
|
|
27
|
+
"load_agent",
|
|
28
|
+
"get_agent_descriptions",
|
|
29
|
+
"refresh_agents",
|
|
30
|
+
"subagent_stream_handler",
|
|
31
|
+
]
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""Pydantic-ai agent construction, extracted from ``BaseAgent``.
|
|
2
|
+
|
|
3
|
+
Collapses the previous duplicated build paths and the parallel
|
|
4
|
+
``_create_agent_with_output_type`` method into a single ``build_pydantic_agent``
|
|
5
|
+
entry point. Everything else in here (muse rules loading, model fallback,
|
|
6
|
+
and related helpers) is a pure free function.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import uuid
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from pydantic_ai import Agent as PydanticAgent
|
|
14
|
+
|
|
15
|
+
from code_muse.agents._compaction import make_history_processor
|
|
16
|
+
from code_muse.config import (
|
|
17
|
+
CONFIG_DIR,
|
|
18
|
+
get_global_model_name,
|
|
19
|
+
)
|
|
20
|
+
from code_muse.messaging import emit_error, emit_info, emit_warning
|
|
21
|
+
from code_muse.model_factory import ModelFactory, make_model_settings
|
|
22
|
+
|
|
23
|
+
_AGENT_RULE_FILES = ("AGENTS.md", "AGENT.md", "agents.md", "agent.md")
|
|
24
|
+
_MUSE_DIR = ".muse"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def load_muse_rules() -> str | None:
|
|
28
|
+
"""Load AGENT(S).md from global config dir and/or the current project dir.
|
|
29
|
+
|
|
30
|
+
Global rules (``~/.muse/AGENTS.md``) come first; project-local rules
|
|
31
|
+
are appended, allowing projects to override/extend global ones.
|
|
32
|
+
|
|
33
|
+
**Search order for project rules:**
|
|
34
|
+
|
|
35
|
+
1. ``.muse/AGENTS.md`` (preferred — keeps root clean)
|
|
36
|
+
2. ``./AGENTS.md`` (alternate location)
|
|
37
|
+
|
|
38
|
+
Returns ``None`` if neither exists.
|
|
39
|
+
"""
|
|
40
|
+
global_rules: str | None = None
|
|
41
|
+
for name in _AGENT_RULE_FILES:
|
|
42
|
+
candidate = Path(CONFIG_DIR) / name
|
|
43
|
+
if candidate.exists():
|
|
44
|
+
global_rules = candidate.read_text(encoding="utf-8-sig")
|
|
45
|
+
break
|
|
46
|
+
|
|
47
|
+
project_rules: str | None = None
|
|
48
|
+
|
|
49
|
+
# Priority 1: Check .muse/ directory (preferred location)
|
|
50
|
+
muse_dir = Path(_MUSE_DIR)
|
|
51
|
+
if muse_dir.is_dir():
|
|
52
|
+
for name in _AGENT_RULE_FILES:
|
|
53
|
+
candidate = muse_dir / name
|
|
54
|
+
if candidate.exists():
|
|
55
|
+
project_rules = candidate.read_text(encoding="utf-8-sig")
|
|
56
|
+
break
|
|
57
|
+
|
|
58
|
+
# Priority 2: Fallback to project root
|
|
59
|
+
if project_rules is None:
|
|
60
|
+
for name in _AGENT_RULE_FILES:
|
|
61
|
+
candidate = Path(name)
|
|
62
|
+
if candidate.exists():
|
|
63
|
+
project_rules = candidate.read_text(encoding="utf-8-sig")
|
|
64
|
+
break
|
|
65
|
+
|
|
66
|
+
rules = [r for r in (global_rules, project_rules) if r]
|
|
67
|
+
return "\n\n".join(rules) if rules else None
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def load_model_with_fallback(
|
|
71
|
+
requested_model_name: str,
|
|
72
|
+
models_config: dict[str, Any],
|
|
73
|
+
message_group: str,
|
|
74
|
+
) -> tuple[Any, str]:
|
|
75
|
+
"""Load the requested model, or fall back to a sensible alternative.
|
|
76
|
+
|
|
77
|
+
Falls back in order: the globally configured model, then any other
|
|
78
|
+
configured model. Raises ``ValueError`` only if nothing loads.
|
|
79
|
+
"""
|
|
80
|
+
try:
|
|
81
|
+
return ModelFactory.get_model(
|
|
82
|
+
requested_model_name, models_config
|
|
83
|
+
), requested_model_name
|
|
84
|
+
except ValueError as exc:
|
|
85
|
+
available = list(models_config.keys())
|
|
86
|
+
available_str = (
|
|
87
|
+
", ".join(sorted(available)) if available else "no configured models"
|
|
88
|
+
)
|
|
89
|
+
emit_warning(
|
|
90
|
+
f"Model '{requested_model_name}' not found. Available models: {available_str}",
|
|
91
|
+
message_group=message_group,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
candidates: list[str] = []
|
|
95
|
+
global_candidate = get_global_model_name()
|
|
96
|
+
if global_candidate:
|
|
97
|
+
candidates.append(global_candidate)
|
|
98
|
+
for candidate in available:
|
|
99
|
+
if candidate not in candidates:
|
|
100
|
+
candidates.append(candidate)
|
|
101
|
+
|
|
102
|
+
for candidate in candidates:
|
|
103
|
+
if not candidate or candidate == requested_model_name:
|
|
104
|
+
continue
|
|
105
|
+
try:
|
|
106
|
+
model = ModelFactory.get_model(candidate, models_config)
|
|
107
|
+
emit_info(
|
|
108
|
+
f"Using fallback model: {candidate}", message_group=message_group
|
|
109
|
+
)
|
|
110
|
+
return model, candidate
|
|
111
|
+
except ValueError:
|
|
112
|
+
continue
|
|
113
|
+
|
|
114
|
+
friendly = (
|
|
115
|
+
"No valid model could be loaded. Update the model configuration or "
|
|
116
|
+
"set a valid model with `config set`."
|
|
117
|
+
)
|
|
118
|
+
emit_error(friendly, message_group=message_group)
|
|
119
|
+
raise ValueError(friendly) from exc
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _assemble_instructions(agent: Any, resolved_model_name: str) -> str:
|
|
123
|
+
"""Compose full system prompt + muse rules + extended-thinking note."""
|
|
124
|
+
from code_muse.model_utils import prepare_prompt_for_model
|
|
125
|
+
from code_muse.tools import (
|
|
126
|
+
EXTENDED_THINKING_PROMPT_NOTE,
|
|
127
|
+
has_extended_thinking_active,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
instructions = agent.get_full_system_prompt()
|
|
131
|
+
agent_rules = load_muse_rules()
|
|
132
|
+
if agent_rules:
|
|
133
|
+
instructions += f"\n{agent_rules}"
|
|
134
|
+
|
|
135
|
+
if has_extended_thinking_active(resolved_model_name):
|
|
136
|
+
instructions += EXTENDED_THINKING_PROMPT_NOTE
|
|
137
|
+
|
|
138
|
+
# Append plugin prompt additions (file permission rules, skill docs, etc.)
|
|
139
|
+
from code_muse import callbacks as _cb
|
|
140
|
+
|
|
141
|
+
prompt_additions = _cb.on_load_prompt()
|
|
142
|
+
if prompt_additions:
|
|
143
|
+
instructions += "\n" + "\n".join(str(p) for p in prompt_additions if p)
|
|
144
|
+
|
|
145
|
+
prepared = prepare_prompt_for_model(
|
|
146
|
+
agent.get_model_name(), instructions, "", prepend_system_to_user=False
|
|
147
|
+
)
|
|
148
|
+
return prepared.instructions
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def build_pydantic_agent(
|
|
152
|
+
agent: Any,
|
|
153
|
+
output_type: Any = str,
|
|
154
|
+
message_group: str | None = None,
|
|
155
|
+
) -> Any:
|
|
156
|
+
"""Build (and wire up) the pydantic-ai agent for ``agent``.
|
|
157
|
+
|
|
158
|
+
Replaces the old ``reload_code_generation_agent`` + ``_create_agent_with_output_type``
|
|
159
|
+
pair. Side effects on ``agent``:
|
|
160
|
+
|
|
161
|
+
- ``agent._muse_rules = None`` (invalidates any cached rules)
|
|
162
|
+
- ``agent.cur_model`` ← resolved pydantic-ai model
|
|
163
|
+
- ``agent._last_model_name`` ← resolved model name
|
|
164
|
+
- ``agent.pydantic_agent`` ← the final pydantic-ai agent
|
|
165
|
+
- ``agent._code_generation_agent`` ← same as ``pydantic_agent``
|
|
166
|
+
The build happens in two passes: we construct once with ``toolsets=[]`` so
|
|
167
|
+
we can introspect registered tool names, then rebuild with the final
|
|
168
|
+
configuration.
|
|
169
|
+
"""
|
|
170
|
+
from code_muse.tools import register_tools_for_agent
|
|
171
|
+
|
|
172
|
+
agent._muse_rules = None
|
|
173
|
+
message_group = message_group or str(uuid.uuid4())
|
|
174
|
+
|
|
175
|
+
models_config = ModelFactory.load_config()
|
|
176
|
+
model, resolved_model_name = load_model_with_fallback(
|
|
177
|
+
agent.get_model_name(), models_config, message_group
|
|
178
|
+
)
|
|
179
|
+
instructions = _assemble_instructions(agent, resolved_model_name)
|
|
180
|
+
model_settings = make_model_settings(resolved_model_name)
|
|
181
|
+
history_processor = make_history_processor(agent)
|
|
182
|
+
|
|
183
|
+
def _new_pydantic_agent(toolsets: list[Any]) -> PydanticAgent:
|
|
184
|
+
return PydanticAgent(
|
|
185
|
+
model=model,
|
|
186
|
+
instructions=instructions,
|
|
187
|
+
output_type=output_type,
|
|
188
|
+
retries=3,
|
|
189
|
+
toolsets=toolsets,
|
|
190
|
+
history_processors=[history_processor],
|
|
191
|
+
model_settings=model_settings,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
# Pass 1: build with empty toolsets so we can see what pydantic-ai + our
|
|
195
|
+
# tool registry actually produced.
|
|
196
|
+
probe_agent = _new_pydantic_agent(toolsets=[])
|
|
197
|
+
agent_tools = agent.get_available_tools()
|
|
198
|
+
register_tools_for_agent(probe_agent, agent_tools, model_name=resolved_model_name)
|
|
199
|
+
|
|
200
|
+
_existing_tool_names: set[str] = set(getattr(probe_agent, "_tools", {}) or {}) # noqa: F841
|
|
201
|
+
final_toolsets = []
|
|
202
|
+
|
|
203
|
+
# Pass 2: real build with the final toolsets.
|
|
204
|
+
final_pydantic = _new_pydantic_agent(toolsets=final_toolsets)
|
|
205
|
+
register_tools_for_agent(
|
|
206
|
+
final_pydantic, agent_tools, model_name=resolved_model_name
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
agent.cur_model = model
|
|
210
|
+
agent._last_model_name = resolved_model_name
|
|
211
|
+
|
|
212
|
+
agent.pydantic_agent = final_pydantic
|
|
213
|
+
agent._code_generation_agent = final_pydantic
|
|
214
|
+
return final_pydantic
|