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,459 @@
|
|
|
1
|
+
from annotationlib import get_annotations
|
|
2
|
+
|
|
3
|
+
from code_muse.callbacks import on_register_tools
|
|
4
|
+
from code_muse.messaging import emit_warning
|
|
5
|
+
from code_muse.tools.agent_tools import register_invoke_agent, register_list_agents
|
|
6
|
+
from code_muse.tools.ask_user_question import register_ask_user_question
|
|
7
|
+
|
|
8
|
+
# Browser automation tools
|
|
9
|
+
from code_muse.tools.browser.browser_control import (
|
|
10
|
+
register_close_browser,
|
|
11
|
+
register_create_new_page,
|
|
12
|
+
register_get_browser_status,
|
|
13
|
+
register_initialize_browser,
|
|
14
|
+
register_list_pages,
|
|
15
|
+
)
|
|
16
|
+
from code_muse.tools.browser.browser_interactions import (
|
|
17
|
+
register_browser_check,
|
|
18
|
+
register_browser_uncheck,
|
|
19
|
+
register_click_element,
|
|
20
|
+
register_double_click_element,
|
|
21
|
+
register_get_element_text,
|
|
22
|
+
register_get_element_value,
|
|
23
|
+
register_hover_element,
|
|
24
|
+
register_select_option,
|
|
25
|
+
register_set_element_text,
|
|
26
|
+
)
|
|
27
|
+
from code_muse.tools.browser.browser_locators import (
|
|
28
|
+
register_find_buttons,
|
|
29
|
+
register_find_by_label,
|
|
30
|
+
register_find_by_placeholder,
|
|
31
|
+
register_find_by_role,
|
|
32
|
+
register_find_by_test_id,
|
|
33
|
+
register_find_by_text,
|
|
34
|
+
register_find_links,
|
|
35
|
+
register_run_xpath_query,
|
|
36
|
+
)
|
|
37
|
+
from code_muse.tools.browser.browser_navigation import (
|
|
38
|
+
register_browser_go_back,
|
|
39
|
+
register_browser_go_forward,
|
|
40
|
+
register_get_page_info,
|
|
41
|
+
register_navigate_to_url,
|
|
42
|
+
register_reload_page,
|
|
43
|
+
register_wait_for_load_state,
|
|
44
|
+
)
|
|
45
|
+
from code_muse.tools.browser.browser_screenshot import (
|
|
46
|
+
register_take_screenshot_and_analyze,
|
|
47
|
+
)
|
|
48
|
+
from code_muse.tools.browser.browser_scripts import (
|
|
49
|
+
register_browser_clear_highlights,
|
|
50
|
+
register_browser_highlight_element,
|
|
51
|
+
register_execute_javascript,
|
|
52
|
+
register_scroll_page,
|
|
53
|
+
register_scroll_to_element,
|
|
54
|
+
register_set_viewport_size,
|
|
55
|
+
register_wait_for_element,
|
|
56
|
+
)
|
|
57
|
+
from code_muse.tools.browser.browser_workflows import (
|
|
58
|
+
register_list_workflows,
|
|
59
|
+
register_read_workflow,
|
|
60
|
+
register_save_workflow,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Chrome CDP tools
|
|
64
|
+
from code_muse.tools.chrome_cdp import register_chrome_cdp
|
|
65
|
+
from code_muse.tools.command_runner import (
|
|
66
|
+
register_agent_run_shell_command,
|
|
67
|
+
register_agent_share_your_reasoning,
|
|
68
|
+
)
|
|
69
|
+
from code_muse.tools.display import (
|
|
70
|
+
display_non_streamed_result as display_non_streamed_result,
|
|
71
|
+
)
|
|
72
|
+
from code_muse.tools.file_modifications import (
|
|
73
|
+
register_create_file,
|
|
74
|
+
register_delete_file,
|
|
75
|
+
register_delete_snippet,
|
|
76
|
+
register_edit_file,
|
|
77
|
+
register_replace_in_file,
|
|
78
|
+
)
|
|
79
|
+
from code_muse.tools.file_operations import (
|
|
80
|
+
register_grep,
|
|
81
|
+
register_list_files,
|
|
82
|
+
register_read_file,
|
|
83
|
+
)
|
|
84
|
+
from code_muse.tools.image_tools import register_load_image
|
|
85
|
+
from code_muse.tools.meetin_proxy import register_mitmproxy
|
|
86
|
+
from code_muse.tools.skills_tools import (
|
|
87
|
+
register_activate_skill,
|
|
88
|
+
register_list_or_search_skills,
|
|
89
|
+
)
|
|
90
|
+
from code_muse.tools.universal_constructor import register_universal_constructor
|
|
91
|
+
|
|
92
|
+
# Map of tool names to their individual registration functions
|
|
93
|
+
TOOL_REGISTRY = {
|
|
94
|
+
# Agent Tools
|
|
95
|
+
"list_agents": register_list_agents,
|
|
96
|
+
"invoke_agent": register_invoke_agent,
|
|
97
|
+
# File Operations
|
|
98
|
+
"list_files": register_list_files,
|
|
99
|
+
"read_file": register_read_file,
|
|
100
|
+
"grep": register_grep,
|
|
101
|
+
# File Modifications
|
|
102
|
+
# DEPRECATED: auto-expanded to create_file, replace_in_file, delete_snippet
|
|
103
|
+
"edit_file": register_edit_file,
|
|
104
|
+
"create_file": register_create_file,
|
|
105
|
+
"replace_in_file": register_replace_in_file,
|
|
106
|
+
"delete_snippet": register_delete_snippet,
|
|
107
|
+
"delete_file": register_delete_file,
|
|
108
|
+
# Command Runner
|
|
109
|
+
"agent_run_shell_command": register_agent_run_shell_command,
|
|
110
|
+
"agent_share_your_reasoning": register_agent_share_your_reasoning,
|
|
111
|
+
# User Interaction
|
|
112
|
+
"ask_user_question": register_ask_user_question,
|
|
113
|
+
# Browser Control
|
|
114
|
+
"browser_initialize": register_initialize_browser,
|
|
115
|
+
"browser_close": register_close_browser,
|
|
116
|
+
"browser_status": register_get_browser_status,
|
|
117
|
+
"browser_new_page": register_create_new_page,
|
|
118
|
+
"browser_list_pages": register_list_pages,
|
|
119
|
+
# Browser Navigation
|
|
120
|
+
"browser_navigate": register_navigate_to_url,
|
|
121
|
+
"browser_get_page_info": register_get_page_info,
|
|
122
|
+
"browser_go_back": register_browser_go_back,
|
|
123
|
+
"browser_go_forward": register_browser_go_forward,
|
|
124
|
+
"browser_reload": register_reload_page,
|
|
125
|
+
"browser_wait_for_load": register_wait_for_load_state,
|
|
126
|
+
# Browser Element Discovery
|
|
127
|
+
"browser_find_by_role": register_find_by_role,
|
|
128
|
+
"browser_find_by_text": register_find_by_text,
|
|
129
|
+
"browser_find_by_label": register_find_by_label,
|
|
130
|
+
"browser_find_by_placeholder": register_find_by_placeholder,
|
|
131
|
+
"browser_find_by_test_id": register_find_by_test_id,
|
|
132
|
+
"browser_xpath_query": register_run_xpath_query,
|
|
133
|
+
"browser_find_buttons": register_find_buttons,
|
|
134
|
+
"browser_find_links": register_find_links,
|
|
135
|
+
# Browser Element Interactions
|
|
136
|
+
"browser_click": register_click_element,
|
|
137
|
+
"browser_double_click": register_double_click_element,
|
|
138
|
+
"browser_hover": register_hover_element,
|
|
139
|
+
"browser_set_text": register_set_element_text,
|
|
140
|
+
"browser_get_text": register_get_element_text,
|
|
141
|
+
"browser_get_value": register_get_element_value,
|
|
142
|
+
"browser_select_option": register_select_option,
|
|
143
|
+
"browser_check": register_browser_check,
|
|
144
|
+
"browser_uncheck": register_browser_uncheck,
|
|
145
|
+
# Browser Scripts and Advanced Features
|
|
146
|
+
"browser_execute_js": register_execute_javascript,
|
|
147
|
+
"browser_scroll": register_scroll_page,
|
|
148
|
+
"browser_scroll_to_element": register_scroll_to_element,
|
|
149
|
+
"browser_set_viewport": register_set_viewport_size,
|
|
150
|
+
"browser_wait_for_element": register_wait_for_element,
|
|
151
|
+
"browser_highlight_element": register_browser_highlight_element,
|
|
152
|
+
"browser_clear_highlights": register_browser_clear_highlights,
|
|
153
|
+
# Browser Screenshots
|
|
154
|
+
"browser_screenshot_analyze": register_take_screenshot_and_analyze,
|
|
155
|
+
# Browser Workflows
|
|
156
|
+
"browser_save_workflow": register_save_workflow,
|
|
157
|
+
"browser_list_workflows": register_list_workflows,
|
|
158
|
+
"browser_read_workflow": register_read_workflow,
|
|
159
|
+
# Image loading (used by browser/QA agents and friends)
|
|
160
|
+
"load_image_for_analysis": register_load_image,
|
|
161
|
+
# mitmproxy
|
|
162
|
+
"mitmproxy": register_mitmproxy,
|
|
163
|
+
# Chrome CDP
|
|
164
|
+
"chrome_cdp": register_chrome_cdp,
|
|
165
|
+
# Skills Tools
|
|
166
|
+
"activate_skill": register_activate_skill,
|
|
167
|
+
"list_or_search_skills": register_list_or_search_skills,
|
|
168
|
+
# Universal Constructor
|
|
169
|
+
"universal_constructor": register_universal_constructor,
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
# Tools that expand into multiple tools for backward compatibility.
|
|
173
|
+
# When an agent requests a tool listed here, all the expansion tools
|
|
174
|
+
# are registered instead (the original tool is NOT registered).
|
|
175
|
+
TOOL_EXPANSIONS: dict[str, list[str]] = {
|
|
176
|
+
"edit_file": ["create_file", "replace_in_file", "delete_snippet"],
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
# Legacy tool names we silently ignore instead of warning about.
|
|
180
|
+
# Keep this for truly removed tools only; backward-compatible tool aliases
|
|
181
|
+
# that still work should stay in TOOL_REGISTRY.
|
|
182
|
+
REMOVED_LEGACY_TOOLS: set[str] = set()
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _load_plugin_tools() -> None:
|
|
186
|
+
"""Load tools registered by plugins via the register_tools callback.
|
|
187
|
+
|
|
188
|
+
This merges plugin-provided tools into the TOOL_REGISTRY.
|
|
189
|
+
Called lazily when tools are first accessed.
|
|
190
|
+
"""
|
|
191
|
+
try:
|
|
192
|
+
results = on_register_tools()
|
|
193
|
+
for result in results:
|
|
194
|
+
if result is None:
|
|
195
|
+
continue
|
|
196
|
+
# Each result should be a list of tool definitions
|
|
197
|
+
tools_list = result if isinstance(result, list) else [result]
|
|
198
|
+
for tool_def in tools_list:
|
|
199
|
+
if (
|
|
200
|
+
isinstance(tool_def, dict)
|
|
201
|
+
and "name" in tool_def
|
|
202
|
+
and "register_func" in tool_def
|
|
203
|
+
):
|
|
204
|
+
tool_name = tool_def["name"]
|
|
205
|
+
register_func = tool_def["register_func"]
|
|
206
|
+
if callable(register_func):
|
|
207
|
+
TOOL_REGISTRY[tool_name] = register_func
|
|
208
|
+
except Exception:
|
|
209
|
+
# Don't let plugin failures break core functionality
|
|
210
|
+
pass
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
# Appended to the system prompt when extended thinking is active and
|
|
214
|
+
# the share_your_reasoning tool is removed. Encourages the model to
|
|
215
|
+
# use its native thinking blocks between tool calls instead.
|
|
216
|
+
EXTENDED_THINKING_PROMPT_NOTE = (
|
|
217
|
+
"\n\nIMPORTANT: You have extended thinking enabled. "
|
|
218
|
+
"Always think between tool calls or waves of tool calls "
|
|
219
|
+
"(if running parallel tools). Use your thinking blocks to reason "
|
|
220
|
+
"about the results before deciding on next steps."
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def has_extended_thinking_active(model_name: str | None = None) -> bool:
|
|
225
|
+
"""Check if an Anthropic model has extended thinking enabled or adaptive.
|
|
226
|
+
|
|
227
|
+
When extended thinking is active, the model already exposes its reasoning
|
|
228
|
+
via thinking blocks, making the share_your_reasoning tool redundant.
|
|
229
|
+
|
|
230
|
+
Args:
|
|
231
|
+
model_name: The model name to check. If None, uses the current global model.
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
True if the model is an Anthropic model with extended_thinking set to
|
|
235
|
+
"enabled" or "adaptive".
|
|
236
|
+
"""
|
|
237
|
+
from code_muse.config import get_effective_model_settings, get_global_model_name
|
|
238
|
+
|
|
239
|
+
if model_name is None:
|
|
240
|
+
model_name = get_global_model_name()
|
|
241
|
+
|
|
242
|
+
if model_name is None:
|
|
243
|
+
return False
|
|
244
|
+
|
|
245
|
+
# Only applies to Anthropic/Claude models
|
|
246
|
+
if not (model_name.startswith("claude-") or model_name.startswith("anthropic-")):
|
|
247
|
+
return False
|
|
248
|
+
|
|
249
|
+
from code_muse.model_utils import get_default_extended_thinking
|
|
250
|
+
|
|
251
|
+
settings = get_effective_model_settings(model_name)
|
|
252
|
+
default_thinking = get_default_extended_thinking(model_name)
|
|
253
|
+
extended_thinking = settings.get("extended_thinking", default_thinking)
|
|
254
|
+
|
|
255
|
+
# Handle legacy boolean values
|
|
256
|
+
if extended_thinking is True:
|
|
257
|
+
extended_thinking = "enabled"
|
|
258
|
+
elif extended_thinking is False:
|
|
259
|
+
return False
|
|
260
|
+
|
|
261
|
+
return extended_thinking in ("enabled", "adaptive")
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def register_tools_for_agent(
|
|
265
|
+
agent, tool_names: list[str], model_name: str | None = None
|
|
266
|
+
):
|
|
267
|
+
"""Register specific tools for an agent based on tool names.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
agent: The agent to register tools to.
|
|
271
|
+
tool_names: List of tool names to register. UC tools are prefixed with "uc:".
|
|
272
|
+
model_name: Optional model name. Used to determine if certain tools
|
|
273
|
+
(like agent_share_your_reasoning) should be skipped. If None,
|
|
274
|
+
falls back to the current global model.
|
|
275
|
+
"""
|
|
276
|
+
from code_muse.config import get_universal_constructor_enabled
|
|
277
|
+
|
|
278
|
+
_load_plugin_tools()
|
|
279
|
+
|
|
280
|
+
# Expand compound tools (e.g. "edit_file" → three individual tools)
|
|
281
|
+
expanded_tools: list[str] = []
|
|
282
|
+
seen: set[str] = set()
|
|
283
|
+
for tool_name in tool_names:
|
|
284
|
+
if tool_name in TOOL_EXPANSIONS:
|
|
285
|
+
for expanded in TOOL_EXPANSIONS[tool_name]:
|
|
286
|
+
if expanded not in seen:
|
|
287
|
+
expanded_tools.append(expanded)
|
|
288
|
+
seen.add(expanded)
|
|
289
|
+
else:
|
|
290
|
+
if tool_name not in seen:
|
|
291
|
+
expanded_tools.append(tool_name)
|
|
292
|
+
seen.add(tool_name)
|
|
293
|
+
tool_names = expanded_tools
|
|
294
|
+
|
|
295
|
+
for tool_name in tool_names:
|
|
296
|
+
# Handle UC tools (prefixed with "uc:")
|
|
297
|
+
if tool_name.startswith("uc:"):
|
|
298
|
+
# Skip UC tools if UC is disabled
|
|
299
|
+
if not get_universal_constructor_enabled():
|
|
300
|
+
continue
|
|
301
|
+
uc_tool_name = tool_name[3:] # Remove "uc:" prefix
|
|
302
|
+
_register_uc_tool_wrapper(agent, uc_tool_name)
|
|
303
|
+
continue
|
|
304
|
+
|
|
305
|
+
if tool_name in REMOVED_LEGACY_TOOLS:
|
|
306
|
+
continue
|
|
307
|
+
|
|
308
|
+
if tool_name not in TOOL_REGISTRY:
|
|
309
|
+
# Skip unknown tools with a warning instead of failing
|
|
310
|
+
emit_warning(f"Warning: Unknown tool '{tool_name}' requested, skipping...")
|
|
311
|
+
continue
|
|
312
|
+
|
|
313
|
+
# Check if Universal Constructor is disabled
|
|
314
|
+
if (
|
|
315
|
+
tool_name == "universal_constructor"
|
|
316
|
+
and not get_universal_constructor_enabled()
|
|
317
|
+
):
|
|
318
|
+
continue # Skip UC if disabled in config
|
|
319
|
+
|
|
320
|
+
# Register the individual tool
|
|
321
|
+
register_func = TOOL_REGISTRY[tool_name]
|
|
322
|
+
register_func(agent)
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def _register_uc_tool_wrapper(agent, uc_tool_name: str):
|
|
326
|
+
"""Register a wrapper for a UC tool that calls it via the UC registry.
|
|
327
|
+
|
|
328
|
+
This creates a dynamic tool that wraps the UC tool, preserving its
|
|
329
|
+
parameter signature so pydantic-ai can generate proper JSON schema.
|
|
330
|
+
|
|
331
|
+
Args:
|
|
332
|
+
agent: The agent to register the tool wrapper to.
|
|
333
|
+
uc_tool_name: The full name of the UC tool (e.g., "api.weather").
|
|
334
|
+
"""
|
|
335
|
+
import inspect
|
|
336
|
+
from typing import Any
|
|
337
|
+
|
|
338
|
+
from pydantic_ai import RunContext
|
|
339
|
+
|
|
340
|
+
# Get tool info and function from registry
|
|
341
|
+
try:
|
|
342
|
+
from code_muse.plugins.universal_constructor.registry import get_registry
|
|
343
|
+
|
|
344
|
+
registry = get_registry()
|
|
345
|
+
tool_info = registry.get_tool(uc_tool_name)
|
|
346
|
+
if not tool_info:
|
|
347
|
+
emit_warning(f"Warning: UC tool '{uc_tool_name}' not found, skipping...")
|
|
348
|
+
return
|
|
349
|
+
|
|
350
|
+
func = registry.get_tool_function(uc_tool_name)
|
|
351
|
+
if not func:
|
|
352
|
+
emit_warning(
|
|
353
|
+
f"Warning: UC tool '{uc_tool_name}' function not found, skipping..."
|
|
354
|
+
)
|
|
355
|
+
return
|
|
356
|
+
|
|
357
|
+
description = tool_info.meta.description
|
|
358
|
+
docstring = tool_info.docstring or description
|
|
359
|
+
except Exception as e:
|
|
360
|
+
emit_warning(f"Warning: Failed to get UC tool '{uc_tool_name}' info: {e}")
|
|
361
|
+
return
|
|
362
|
+
|
|
363
|
+
# Get the original function's signature
|
|
364
|
+
try:
|
|
365
|
+
sig = inspect.signature(func)
|
|
366
|
+
# Get annotations from the original function
|
|
367
|
+
annotations = get_annotations(func).copy()
|
|
368
|
+
except ValueError, TypeError:
|
|
369
|
+
sig = None
|
|
370
|
+
annotations = {}
|
|
371
|
+
|
|
372
|
+
# Create wrapper that preserves the signature
|
|
373
|
+
def make_uc_wrapper(
|
|
374
|
+
tool_name: str, original_func, original_sig, original_annotations
|
|
375
|
+
):
|
|
376
|
+
# Build the wrapper function
|
|
377
|
+
async def uc_tool_wrapper(context: RunContext, **kwargs: Any) -> Any:
|
|
378
|
+
"""Dynamically generated wrapper for a UC tool."""
|
|
379
|
+
try:
|
|
380
|
+
result = original_func(**kwargs)
|
|
381
|
+
# Await async tool implementations
|
|
382
|
+
if inspect.isawaitable(result):
|
|
383
|
+
result = await result
|
|
384
|
+
return result
|
|
385
|
+
except Exception as e:
|
|
386
|
+
return {"error": f"UC tool '{tool_name}' failed: {e}"}
|
|
387
|
+
|
|
388
|
+
# Copy signature info from original function
|
|
389
|
+
uc_tool_wrapper.__name__ = tool_name.replace(".", "_")
|
|
390
|
+
uc_tool_wrapper.__doc__ = (
|
|
391
|
+
f"{docstring}\n\nThis is a Universal Constructor tool."
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
# Preserve annotations for pydantic-ai schema generation
|
|
395
|
+
if original_annotations:
|
|
396
|
+
# Add 'context' param and copy original params (excluding 'return')
|
|
397
|
+
new_annotations = {"context": RunContext}
|
|
398
|
+
for param_name, param_type in original_annotations.items():
|
|
399
|
+
if param_name != "return":
|
|
400
|
+
new_annotations[param_name] = param_type
|
|
401
|
+
if "return" in original_annotations:
|
|
402
|
+
new_annotations["return"] = original_annotations["return"]
|
|
403
|
+
else:
|
|
404
|
+
new_annotations["return"] = Any
|
|
405
|
+
uc_tool_wrapper.__annotations__ = new_annotations
|
|
406
|
+
|
|
407
|
+
# Try to set __signature__ for better introspection
|
|
408
|
+
if original_sig:
|
|
409
|
+
try:
|
|
410
|
+
# Build new parameters list: context first, then original params
|
|
411
|
+
new_params = [
|
|
412
|
+
inspect.Parameter(
|
|
413
|
+
"context",
|
|
414
|
+
inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
|
415
|
+
annotation=RunContext,
|
|
416
|
+
)
|
|
417
|
+
]
|
|
418
|
+
for param in original_sig.parameters.values():
|
|
419
|
+
new_params.append(param)
|
|
420
|
+
|
|
421
|
+
# Create new signature with return annotation
|
|
422
|
+
return_annotation = original_annotations.get("return", Any)
|
|
423
|
+
new_sig = original_sig.replace(
|
|
424
|
+
parameters=new_params, return_annotation=return_annotation
|
|
425
|
+
)
|
|
426
|
+
uc_tool_wrapper.__signature__ = new_sig
|
|
427
|
+
except ValueError, TypeError:
|
|
428
|
+
pass # Signature manipulation failed, continue without it
|
|
429
|
+
|
|
430
|
+
return uc_tool_wrapper
|
|
431
|
+
|
|
432
|
+
wrapper = make_uc_wrapper(uc_tool_name, func, sig, annotations)
|
|
433
|
+
|
|
434
|
+
# Register the wrapper as a tool
|
|
435
|
+
try:
|
|
436
|
+
agent.tool(wrapper)
|
|
437
|
+
except Exception as e:
|
|
438
|
+
emit_warning(f"Warning: Failed to register UC tool '{uc_tool_name}': {e}")
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def register_all_tools(agent, model_name: str | None = None):
|
|
442
|
+
"""Register all available tools to the provided agent.
|
|
443
|
+
|
|
444
|
+
Args:
|
|
445
|
+
agent: The agent to register tools to.
|
|
446
|
+
model_name: Optional model name for conditional tool filtering.
|
|
447
|
+
"""
|
|
448
|
+
all_tools = list(TOOL_REGISTRY.keys())
|
|
449
|
+
register_tools_for_agent(agent, all_tools, model_name=model_name)
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
def get_available_tool_names() -> list[str]:
|
|
453
|
+
"""Get list of all available tool names.
|
|
454
|
+
|
|
455
|
+
Returns:
|
|
456
|
+
List of all tool names that can be registered.
|
|
457
|
+
"""
|
|
458
|
+
_load_plugin_tools()
|
|
459
|
+
return list(TOOL_REGISTRY.keys())
|