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,273 @@
|
|
|
1
|
+
"""Silenced event stream handler for sub-agents.
|
|
2
|
+
|
|
3
|
+
This handler suppresses all console output but still:
|
|
4
|
+
- Updates SubAgentConsoleManager with status/metrics
|
|
5
|
+
- Fires stream_event callbacks for the frontend emitter plugin
|
|
6
|
+
- Tracks tool calls, tokens, and status changes
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
>>> from code_muse.agents.subagent_stream_handler import subagent_stream_handler
|
|
10
|
+
>>> # In agent run:
|
|
11
|
+
>>> await subagent_stream_handler(ctx, events, session_id="my-session-123")
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import asyncio
|
|
15
|
+
import logging
|
|
16
|
+
import math
|
|
17
|
+
from collections.abc import AsyncIterable
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from pydantic_ai import PartDeltaEvent, PartEndEvent, PartStartEvent, RunContext
|
|
21
|
+
from pydantic_ai.messages import (
|
|
22
|
+
TextPart,
|
|
23
|
+
TextPartDelta,
|
|
24
|
+
ThinkingPart,
|
|
25
|
+
ThinkingPartDelta,
|
|
26
|
+
ToolCallPart,
|
|
27
|
+
ToolCallPartDelta,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# =============================================================================
|
|
34
|
+
# Callback Helper
|
|
35
|
+
# =============================================================================
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _fire_callback(event_type: str, event_data: Any, session_id: str | None) -> None:
|
|
39
|
+
"""Fire stream_event callback non-blocking.
|
|
40
|
+
|
|
41
|
+
PERF-08: Skip high-frequency part_delta events — no plugin consumes them
|
|
42
|
+
and they create hundreds of micro-tasks per response.
|
|
43
|
+
"""
|
|
44
|
+
if event_type == "part_delta":
|
|
45
|
+
return
|
|
46
|
+
try:
|
|
47
|
+
from code_muse import callbacks
|
|
48
|
+
|
|
49
|
+
loop = asyncio.get_running_loop()
|
|
50
|
+
loop.create_task(callbacks.on_stream_event(event_type, event_data, session_id))
|
|
51
|
+
except RuntimeError:
|
|
52
|
+
# No event loop running - this can happen during shutdown
|
|
53
|
+
logger.debug("No event loop available for stream event callback")
|
|
54
|
+
except ImportError:
|
|
55
|
+
# Callbacks module not available
|
|
56
|
+
logger.debug("Callbacks module not available for stream event")
|
|
57
|
+
except Exception as e:
|
|
58
|
+
# Don't let callback errors break the stream handler
|
|
59
|
+
logger.debug("Error firing stream event callback: %s", e)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# =============================================================================
|
|
63
|
+
# Token Estimation
|
|
64
|
+
# =============================================================================
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _estimate_tokens(content: str) -> int:
|
|
68
|
+
"""Estimate token count from content string.
|
|
69
|
+
|
|
70
|
+
Uses the same ~2.5 characters per token heuristic as BaseAgent.estimate_token_count
|
|
71
|
+
and file_operations._read_file to keep streaming metrics consistent with compaction
|
|
72
|
+
decisions.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
content: The text content to estimate tokens for
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Estimated token count (minimum 1 for non-empty content, 0 for empty)
|
|
79
|
+
"""
|
|
80
|
+
if not content:
|
|
81
|
+
return 0
|
|
82
|
+
return max(1, math.floor(len(content) / 2.5))
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# =============================================================================
|
|
86
|
+
# Main Handler
|
|
87
|
+
# =============================================================================
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
async def subagent_stream_handler(
|
|
91
|
+
ctx: RunContext,
|
|
92
|
+
events: AsyncIterable[Any],
|
|
93
|
+
session_id: str | None = None,
|
|
94
|
+
) -> None:
|
|
95
|
+
"""Silent event stream handler for sub-agents.
|
|
96
|
+
|
|
97
|
+
Processes streaming events without producing any console output.
|
|
98
|
+
Updates the SubAgentConsoleManager with status and metrics, and fires
|
|
99
|
+
stream_event callbacks for any registered listeners.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
ctx: The pydantic-ai run context
|
|
103
|
+
events: Async iterable of streaming events (PartStartEvent,
|
|
104
|
+
PartDeltaEvent, PartEndEvent)
|
|
105
|
+
session_id: Session ID of the sub-agent for console manager updates.
|
|
106
|
+
If None, falls back to get_session_context().
|
|
107
|
+
"""
|
|
108
|
+
# Late import to avoid circular dependencies
|
|
109
|
+
from code_muse.messaging import get_session_context
|
|
110
|
+
from code_muse.messaging.subagent_console import SubAgentConsoleManager
|
|
111
|
+
|
|
112
|
+
manager = SubAgentConsoleManager.get_instance()
|
|
113
|
+
|
|
114
|
+
# Resolve session_id, falling back to context if not provided
|
|
115
|
+
effective_session_id = session_id or get_session_context()
|
|
116
|
+
|
|
117
|
+
# Metrics tracking
|
|
118
|
+
token_count = 0
|
|
119
|
+
tool_call_count = 0
|
|
120
|
+
active_tool_parts: set[int] = set() # Track active tool call indices
|
|
121
|
+
|
|
122
|
+
async for event in events:
|
|
123
|
+
try:
|
|
124
|
+
await _handle_event(
|
|
125
|
+
event=event,
|
|
126
|
+
manager=manager,
|
|
127
|
+
session_id=effective_session_id,
|
|
128
|
+
token_count=token_count,
|
|
129
|
+
tool_call_count=tool_call_count,
|
|
130
|
+
active_tool_parts=active_tool_parts,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
# Update metrics from returned values
|
|
134
|
+
# (we need to track these at this level since they're modified in _handle_event)
|
|
135
|
+
if isinstance(event, PartStartEvent):
|
|
136
|
+
if isinstance(event.part, ToolCallPart):
|
|
137
|
+
tool_call_count += 1
|
|
138
|
+
active_tool_parts.add(event.index)
|
|
139
|
+
|
|
140
|
+
elif isinstance(event, PartDeltaEvent):
|
|
141
|
+
delta = event.delta
|
|
142
|
+
if isinstance(delta, (TextPartDelta, ThinkingPartDelta)):
|
|
143
|
+
if delta.content_delta:
|
|
144
|
+
token_count += _estimate_tokens(delta.content_delta)
|
|
145
|
+
|
|
146
|
+
elif isinstance(event, PartEndEvent):
|
|
147
|
+
active_tool_parts.discard(event.index)
|
|
148
|
+
|
|
149
|
+
except Exception as e:
|
|
150
|
+
# Log but don't crash on event handling errors
|
|
151
|
+
logger.debug(f"Error handling stream event: {e}")
|
|
152
|
+
continue
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
async def _handle_event(
|
|
156
|
+
event: Any,
|
|
157
|
+
manager: Any, # SubAgentConsoleManager
|
|
158
|
+
session_id: str | None,
|
|
159
|
+
token_count: int,
|
|
160
|
+
tool_call_count: int,
|
|
161
|
+
active_tool_parts: set[int],
|
|
162
|
+
) -> None:
|
|
163
|
+
"""Handle a single streaming event.
|
|
164
|
+
|
|
165
|
+
Updates the console manager and fires callbacks for each event type.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
event: The streaming event to handle
|
|
169
|
+
manager: SubAgentConsoleManager instance
|
|
170
|
+
session_id: Session ID for updates
|
|
171
|
+
token_count: Current token count
|
|
172
|
+
tool_call_count: Current tool call count
|
|
173
|
+
active_tool_parts: Set of active tool call indices
|
|
174
|
+
"""
|
|
175
|
+
if session_id is None:
|
|
176
|
+
# Can't update manager without session_id
|
|
177
|
+
logger.debug("No session_id available for stream event")
|
|
178
|
+
return
|
|
179
|
+
|
|
180
|
+
# -------------------------------------------------------------------------
|
|
181
|
+
# PartStartEvent - Track new parts and update status
|
|
182
|
+
# -------------------------------------------------------------------------
|
|
183
|
+
if isinstance(event, PartStartEvent):
|
|
184
|
+
part = event.part
|
|
185
|
+
event_data = {
|
|
186
|
+
"index": event.index,
|
|
187
|
+
"part_type": type(part).__name__,
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if isinstance(part, ThinkingPart):
|
|
191
|
+
manager.update_agent(session_id, status="thinking")
|
|
192
|
+
event_data["content"] = getattr(part, "content", None)
|
|
193
|
+
|
|
194
|
+
elif isinstance(part, TextPart):
|
|
195
|
+
manager.update_agent(session_id, status="running")
|
|
196
|
+
event_data["content"] = getattr(part, "content", None)
|
|
197
|
+
|
|
198
|
+
elif isinstance(part, ToolCallPart):
|
|
199
|
+
# tool_call_count is updated in the main handler
|
|
200
|
+
manager.update_agent(
|
|
201
|
+
session_id,
|
|
202
|
+
status="tool_calling",
|
|
203
|
+
tool_call_count=tool_call_count + 1, # +1 for this new one
|
|
204
|
+
current_tool=part.tool_name,
|
|
205
|
+
)
|
|
206
|
+
event_data["tool_name"] = part.tool_name
|
|
207
|
+
event_data["tool_call_id"] = getattr(part, "tool_call_id", None)
|
|
208
|
+
|
|
209
|
+
_fire_callback("part_start", event_data, session_id)
|
|
210
|
+
|
|
211
|
+
# -------------------------------------------------------------------------
|
|
212
|
+
# PartDeltaEvent - Track content deltas and update metrics
|
|
213
|
+
# -------------------------------------------------------------------------
|
|
214
|
+
elif isinstance(event, PartDeltaEvent):
|
|
215
|
+
delta = event.delta
|
|
216
|
+
event_data = {
|
|
217
|
+
"index": event.index,
|
|
218
|
+
"delta_type": type(delta).__name__,
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if isinstance(delta, TextPartDelta):
|
|
222
|
+
content_delta = delta.content_delta
|
|
223
|
+
if content_delta:
|
|
224
|
+
# Token count is updated in main handler
|
|
225
|
+
new_token_count = token_count + _estimate_tokens(content_delta)
|
|
226
|
+
manager.update_agent(session_id, token_count=new_token_count)
|
|
227
|
+
event_data["content_delta"] = content_delta
|
|
228
|
+
|
|
229
|
+
elif isinstance(delta, ThinkingPartDelta):
|
|
230
|
+
content_delta = delta.content_delta
|
|
231
|
+
if content_delta:
|
|
232
|
+
new_token_count = token_count + _estimate_tokens(content_delta)
|
|
233
|
+
manager.update_agent(session_id, token_count=new_token_count)
|
|
234
|
+
event_data["content_delta"] = content_delta
|
|
235
|
+
|
|
236
|
+
elif isinstance(delta, ToolCallPartDelta):
|
|
237
|
+
# Tool call deltas might have partial args
|
|
238
|
+
event_data["args_delta"] = getattr(delta, "args_delta", None)
|
|
239
|
+
event_data["tool_name_delta"] = getattr(delta, "tool_name_delta", None)
|
|
240
|
+
|
|
241
|
+
_fire_callback("part_delta", event_data, session_id)
|
|
242
|
+
|
|
243
|
+
# -------------------------------------------------------------------------
|
|
244
|
+
# PartEndEvent - Track part completion and update status
|
|
245
|
+
# -------------------------------------------------------------------------
|
|
246
|
+
elif isinstance(event, PartEndEvent):
|
|
247
|
+
event_data = {
|
|
248
|
+
"index": event.index,
|
|
249
|
+
"next_part_kind": getattr(event, "next_part_kind", None),
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
# If this was a tool call part ending, check if we should reset status
|
|
253
|
+
if event.index in active_tool_parts:
|
|
254
|
+
# Remove this index from active parts (done in main handler)
|
|
255
|
+
# If no more active tool parts after removal, reset to running
|
|
256
|
+
remaining_active = active_tool_parts - {event.index}
|
|
257
|
+
if not remaining_active:
|
|
258
|
+
manager.update_agent(
|
|
259
|
+
session_id,
|
|
260
|
+
current_tool=None,
|
|
261
|
+
status="running",
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
_fire_callback("part_end", event_data, session_id)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
# =============================================================================
|
|
268
|
+
# Exports
|
|
269
|
+
# =============================================================================
|
|
270
|
+
|
|
271
|
+
__all__ = [
|
|
272
|
+
"subagent_stream_handler",
|
|
273
|
+
]
|