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,320 @@
|
|
|
1
|
+
"""Semantic Compression Plugin — callback registrations.
|
|
2
|
+
|
|
3
|
+
Wires the semantic compression engine into the Fast Puppy runtime:
|
|
4
|
+
- ``post_tool_call``: compress large string tool outputs
|
|
5
|
+
- ``load_prompt``: append compression-format instructions to the system prompt
|
|
6
|
+
- ``custom_command`` / ``custom_command_help``: ``/compress`` slash command
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
import re
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from code_muse.callbacks import register_callback
|
|
14
|
+
from code_muse.messaging import emit_error, emit_success
|
|
15
|
+
|
|
16
|
+
from .config import (
|
|
17
|
+
get_compression_allowlist,
|
|
18
|
+
get_compression_blocklist,
|
|
19
|
+
get_semantic_compression_enabled,
|
|
20
|
+
is_tool_allowed,
|
|
21
|
+
set_compression_allowlist,
|
|
22
|
+
set_compression_blocklist,
|
|
23
|
+
set_semantic_compression_enabled,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
# Threshold in characters: only compress tool results longer than this
|
|
29
|
+
_MIN_COMPRESS_LENGTH = 200
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# ---------------------------------------------------------------------------
|
|
33
|
+
# post_tool_call — compress large text results (gated, opt-in)
|
|
34
|
+
# ---------------------------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
async def _on_post_tool_call(
|
|
38
|
+
tool_name: str,
|
|
39
|
+
tool_args: dict[str, Any],
|
|
40
|
+
result: Any,
|
|
41
|
+
duration_ms: float,
|
|
42
|
+
context: Any = None,
|
|
43
|
+
) -> Any:
|
|
44
|
+
"""Intercept tool results and apply semantic compression to string outputs.
|
|
45
|
+
|
|
46
|
+
Compression is **opt-in** via ``semantic_compression_enabled`` config
|
|
47
|
+
and can be scoped to specific tools via allowlist/blocklist.
|
|
48
|
+
|
|
49
|
+
Only compresses string results longer than *_MIN_COMPRESS_LENGTH*
|
|
50
|
+
characters. Returns ``None`` so the tool result is left untouched
|
|
51
|
+
(we don't modify in-place — the caller uses the return to *replace*
|
|
52
|
+
the result).
|
|
53
|
+
|
|
54
|
+
Code blocks inside results are detected and preserved verbatim.
|
|
55
|
+
"""
|
|
56
|
+
# Gate 1: plugin must be enabled
|
|
57
|
+
if not get_semantic_compression_enabled():
|
|
58
|
+
return None
|
|
59
|
+
|
|
60
|
+
# Gate 2: tool must pass allowlist/blocklist checks
|
|
61
|
+
if not is_tool_allowed(tool_name):
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
# Only interested in string results of substantial length
|
|
65
|
+
if not isinstance(result, str):
|
|
66
|
+
return None
|
|
67
|
+
if len(result) < _MIN_COMPRESS_LENGTH:
|
|
68
|
+
return None
|
|
69
|
+
|
|
70
|
+
# Skip results that look like they're already compressed
|
|
71
|
+
# (heuristic: very high ratio of content words to function words)
|
|
72
|
+
if _looks_already_compressed(result):
|
|
73
|
+
return None
|
|
74
|
+
|
|
75
|
+
try:
|
|
76
|
+
from .compressor import compress_semantic
|
|
77
|
+
|
|
78
|
+
compressed = compress_semantic(result, aggressive=False)
|
|
79
|
+
logger.debug(
|
|
80
|
+
"Compressed %s output: %d → %d chars (%.1f%% reduction)",
|
|
81
|
+
tool_name,
|
|
82
|
+
len(result),
|
|
83
|
+
len(compressed),
|
|
84
|
+
(1 - len(compressed) / max(len(result), 1)) * 100,
|
|
85
|
+
)
|
|
86
|
+
return compressed
|
|
87
|
+
except Exception as exc:
|
|
88
|
+
logger.warning("Semantic compression failed for %s: %s", tool_name, exc)
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _looks_already_compressed(text: str) -> bool:
|
|
93
|
+
"""Quick heuristic to skip text that's already telegraphic/compressed.
|
|
94
|
+
|
|
95
|
+
Returns ``True`` if the text appears to already be compressed
|
|
96
|
+
(very few function words relative to content words).
|
|
97
|
+
"""
|
|
98
|
+
# Count common function words
|
|
99
|
+
func_words = re.findall(
|
|
100
|
+
r"\b(the|a|an|is|are|was|were|am|be|been|being|very|quite|rather|really"
|
|
101
|
+
r"|extremely|somewhat|have|has|had|do|does|did|will|would|can|could"
|
|
102
|
+
r"|may|might|should|it|this|that|these|those|he|she|they|which|who"
|
|
103
|
+
r"|whom|in order to|due to)\b",
|
|
104
|
+
text,
|
|
105
|
+
re.IGNORECASE,
|
|
106
|
+
)
|
|
107
|
+
total_words = len(re.findall(r"\b\w+\b", text))
|
|
108
|
+
if total_words < 10:
|
|
109
|
+
return True # too short to judge
|
|
110
|
+
func_ratio = len(func_words) / max(total_words, 1)
|
|
111
|
+
# If fewer than 8% of words are function words, text likely already compressed
|
|
112
|
+
return func_ratio < 0.08
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# ---------------------------------------------------------------------------
|
|
116
|
+
# load_prompt — inject compression instructions into the system prompt
|
|
117
|
+
# ---------------------------------------------------------------------------
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _get_compression_prompt() -> str | None:
|
|
121
|
+
"""Return compression-format instructions for the system prompt.
|
|
122
|
+
|
|
123
|
+
Tells the LLM it may use compressed/telegraphic communication style,
|
|
124
|
+
referencing the same rules the compressor uses.
|
|
125
|
+
"""
|
|
126
|
+
return """\
|
|
127
|
+
## Semantic Compression Format
|
|
128
|
+
|
|
129
|
+
You may communicate in compressed form when appropriate. The system
|
|
130
|
+
understands semantic compression — grammar-light, content-dense
|
|
131
|
+
text that drops predictable function words.
|
|
132
|
+
|
|
133
|
+
### Compression Rules
|
|
134
|
+
|
|
135
|
+
**Drop (always safe):**
|
|
136
|
+
- Articles: a, an, the
|
|
137
|
+
- Copulas: is, are, was, were, am, be, been, being
|
|
138
|
+
- Filler phrases: "in order to" → "to", "due to the fact that" → "because"
|
|
139
|
+
- Pure intensifiers: very, quite, rather, really, extremely, somewhat
|
|
140
|
+
- Complementizer "that" after bridge verbs
|
|
141
|
+
|
|
142
|
+
**Drop when meaning unchanged (aggressive):**
|
|
143
|
+
- Auxiliary verbs: have/has/had, do/does/did, will/would
|
|
144
|
+
- Modal verbs: can/could/may/might/should (keep "must")
|
|
145
|
+
- Pronouns when referent obvious
|
|
146
|
+
- Relative pronouns: which, that, who, whom
|
|
147
|
+
|
|
148
|
+
**Structural compression:**
|
|
149
|
+
- Passive → active when agent known
|
|
150
|
+
- Nominalization → verb: "made a decision" → "decided"
|
|
151
|
+
- Redundant pairs → single: "each and every" → "every"
|
|
152
|
+
- Clause → modifier: "anomaly that was reported" → "reported anomaly"
|
|
153
|
+
|
|
154
|
+
**Always preserve:**
|
|
155
|
+
- Nouns, main verbs, meaning-bearing modifiers
|
|
156
|
+
- Numbers, quantifiers, uncertainty markers
|
|
157
|
+
- Negation (not, no, never)
|
|
158
|
+
- Temporal markers, causality, conditionals
|
|
159
|
+
- Requirements/permissions: must, required, prohibited, allowed
|
|
160
|
+
- Proper nouns, technical terms, code
|
|
161
|
+
|
|
162
|
+
Output should remain readable — prefer fragments over broken grammar."""
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
# ---------------------------------------------------------------------------
|
|
166
|
+
# /compress slash command
|
|
167
|
+
# ---------------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def _compress_command_help() -> list[tuple[str, str]]:
|
|
171
|
+
return [
|
|
172
|
+
(
|
|
173
|
+
"compress",
|
|
174
|
+
"Compress text with semantic compression (Tier 1 safe mode)",
|
|
175
|
+
),
|
|
176
|
+
(
|
|
177
|
+
"compress-aggressive",
|
|
178
|
+
"Compress text with aggressive semantic compression (Tier 1+2)",
|
|
179
|
+
),
|
|
180
|
+
(
|
|
181
|
+
"semantic-compression",
|
|
182
|
+
"Configure automatic semantic compression of tool output",
|
|
183
|
+
),
|
|
184
|
+
]
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def _handle_compress_command(command: str, name: str) -> bool | str | None:
|
|
188
|
+
"""Handle ``/compress`` and ``/compress-aggressive``.
|
|
189
|
+
|
|
190
|
+
Returns the compressed text as a string for display, or ``True``
|
|
191
|
+
to signal the command was handled.
|
|
192
|
+
"""
|
|
193
|
+
if name not in ("compress", "compress-aggressive"):
|
|
194
|
+
return None
|
|
195
|
+
|
|
196
|
+
aggressive = name == "compress-aggressive"
|
|
197
|
+
|
|
198
|
+
# Extract text after the command name
|
|
199
|
+
parts = command.split(maxsplit=1)
|
|
200
|
+
text = parts[1] if len(parts) > 1 else ""
|
|
201
|
+
|
|
202
|
+
if not text.strip():
|
|
203
|
+
return "Usage: /compress <text> or /compress-aggressive <text>"
|
|
204
|
+
|
|
205
|
+
try:
|
|
206
|
+
from .compressor import compress_semantic
|
|
207
|
+
|
|
208
|
+
compressed = compress_semantic(text, aggressive=aggressive)
|
|
209
|
+
mode = "aggressive" if aggressive else "safe"
|
|
210
|
+
return f"[Semantic compression ({mode}): {len(text)} → {len(compressed)} chars]\n{compressed}"
|
|
211
|
+
except Exception as exc:
|
|
212
|
+
logger.error("Compress command failed: %s", exc)
|
|
213
|
+
return f"Compression error: {exc}"
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# ---------------------------------------------------------------------------
|
|
217
|
+
# /semantic-compression slash command
|
|
218
|
+
# ---------------------------------------------------------------------------
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _handle_semantic_compression_command(command: str, name: str) -> bool | str | None:
|
|
222
|
+
"""Handle ``/semantic-compression`` configuration commands.
|
|
223
|
+
|
|
224
|
+
Subcommands:
|
|
225
|
+
on|off|true|false|enable|disable — toggle automatic compression
|
|
226
|
+
status — show current config
|
|
227
|
+
allowlist [tool1,tool2,...] — set or clear allowlist
|
|
228
|
+
blocklist [tool1,tool2,...] — set or clear blocklist
|
|
229
|
+
"""
|
|
230
|
+
if name != "semantic-compression":
|
|
231
|
+
return None
|
|
232
|
+
|
|
233
|
+
tokens = command.strip().split()
|
|
234
|
+
if len(tokens) < 2:
|
|
235
|
+
return _show_semantic_compression_status()
|
|
236
|
+
|
|
237
|
+
sub = tokens[1].lower()
|
|
238
|
+
|
|
239
|
+
# Toggle commands
|
|
240
|
+
if sub in ("on", "true", "1", "yes", "enable"):
|
|
241
|
+
set_semantic_compression_enabled(True)
|
|
242
|
+
emit_success("[Run] Semantic compression of tool output: ON")
|
|
243
|
+
return True
|
|
244
|
+
if sub in ("off", "false", "0", "no", "disable"):
|
|
245
|
+
set_semantic_compression_enabled(False)
|
|
246
|
+
emit_success("[Run] Semantic compression of tool output: OFF")
|
|
247
|
+
return True
|
|
248
|
+
|
|
249
|
+
# Status
|
|
250
|
+
if sub == "status":
|
|
251
|
+
return _show_semantic_compression_status()
|
|
252
|
+
|
|
253
|
+
# Allowlist
|
|
254
|
+
if sub == "allowlist":
|
|
255
|
+
if len(tokens) > 2:
|
|
256
|
+
raw = " ".join(tokens[2:])
|
|
257
|
+
tools = {t.strip() for t in raw.replace(",", " ").split() if t.strip()}
|
|
258
|
+
set_compression_allowlist(tools)
|
|
259
|
+
emit_success(
|
|
260
|
+
f"[Run] Compression allowlist set: {sorted(tools) or '(empty)'}"
|
|
261
|
+
)
|
|
262
|
+
else:
|
|
263
|
+
set_compression_allowlist(set())
|
|
264
|
+
emit_success("[Run] Compression allowlist cleared")
|
|
265
|
+
return True
|
|
266
|
+
|
|
267
|
+
# Blocklist
|
|
268
|
+
if sub == "blocklist":
|
|
269
|
+
if len(tokens) > 2:
|
|
270
|
+
raw = " ".join(tokens[2:])
|
|
271
|
+
tools = {t.strip() for t in raw.replace(",", " ").split() if t.strip()}
|
|
272
|
+
set_compression_blocklist(tools)
|
|
273
|
+
emit_success(
|
|
274
|
+
f"[Run] Compression blocklist set: {sorted(tools) or '(empty)'}"
|
|
275
|
+
)
|
|
276
|
+
else:
|
|
277
|
+
set_compression_blocklist(set())
|
|
278
|
+
emit_success("[Run] Compression blocklist cleared")
|
|
279
|
+
return True
|
|
280
|
+
|
|
281
|
+
emit_error(
|
|
282
|
+
f"Unknown /semantic-compression subcommand: '{sub}'.\n"
|
|
283
|
+
"Usage: /semantic-compression [on|off|status|allowlist|blocklist]"
|
|
284
|
+
)
|
|
285
|
+
return True
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def _show_semantic_compression_status() -> str:
|
|
289
|
+
"""Return a human-readable status string."""
|
|
290
|
+
enabled = get_semantic_compression_enabled()
|
|
291
|
+
allowlist = get_compression_allowlist()
|
|
292
|
+
blocklist = get_compression_blocklist()
|
|
293
|
+
lines = [
|
|
294
|
+
"Semantic Compression Status:",
|
|
295
|
+
f" Enabled: {'yes' if enabled else 'no (opt-in)'}"
|
|
296
|
+
if not enabled
|
|
297
|
+
else " Enabled: yes",
|
|
298
|
+
]
|
|
299
|
+
if allowlist:
|
|
300
|
+
lines.append(f" Allowlist: {', '.join(sorted(allowlist))}")
|
|
301
|
+
else:
|
|
302
|
+
lines.append(" Allowlist: (none — all tools allowed)")
|
|
303
|
+
if blocklist:
|
|
304
|
+
lines.append(f" Blocklist: {', '.join(sorted(blocklist))}")
|
|
305
|
+
else:
|
|
306
|
+
lines.append(" Blocklist: (none)")
|
|
307
|
+
return "\n".join(lines)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
# ---------------------------------------------------------------------------
|
|
311
|
+
# Register callbacks
|
|
312
|
+
# ---------------------------------------------------------------------------
|
|
313
|
+
|
|
314
|
+
register_callback("post_tool_call", _on_post_tool_call)
|
|
315
|
+
register_callback("load_prompt", _get_compression_prompt)
|
|
316
|
+
register_callback("custom_command_help", _compress_command_help)
|
|
317
|
+
register_callback("custom_command", _handle_compress_command)
|
|
318
|
+
register_callback("custom_command", _handle_semantic_compression_command)
|
|
319
|
+
|
|
320
|
+
logger.info("Semantic Compression Plugin loaded")
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Shell Minimizer plugin for Muse.
|
|
2
|
+
|
|
3
|
+
Compresses shell command stdout/stderr before it reaches the LLM,
|
|
4
|
+
using per-program intelligent filtering. Ports the key concepts from
|
|
5
|
+
oh-my-pi's minimizer system to a pure-Python pipeline engine.
|
|
6
|
+
|
|
7
|
+
Public API:
|
|
8
|
+
- apply_pipeline_from_toml(name, toml_def, input, exit_code) -> str
|
|
9
|
+
- parse_pipeline_toml(contents, source_label) -> list[CompiledPipeline]
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from code_muse.plugins.shell_minimizer.pipeline import (
|
|
13
|
+
CompiledPipeline,
|
|
14
|
+
PipelineDef,
|
|
15
|
+
apply_pipeline,
|
|
16
|
+
compile_pipeline,
|
|
17
|
+
parse_pipeline_toml,
|
|
18
|
+
)
|
|
19
|
+
from code_muse.plugins.shell_minimizer.primitives import (
|
|
20
|
+
compact_listing,
|
|
21
|
+
dedup_consecutive_lines,
|
|
22
|
+
group_by_file,
|
|
23
|
+
head_lines_only,
|
|
24
|
+
head_tail_lines,
|
|
25
|
+
keep_lines_regex,
|
|
26
|
+
max_lines,
|
|
27
|
+
strip_ansi,
|
|
28
|
+
strip_lines_regex,
|
|
29
|
+
tail_lines_only,
|
|
30
|
+
truncate_line,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
__all__ = [
|
|
34
|
+
"CompiledPipeline",
|
|
35
|
+
"PipelineDef",
|
|
36
|
+
"apply_pipeline",
|
|
37
|
+
"compact_listing",
|
|
38
|
+
"compile_pipeline",
|
|
39
|
+
"dedup_consecutive_lines",
|
|
40
|
+
"group_by_file",
|
|
41
|
+
"head_lines_only",
|
|
42
|
+
"head_tail_lines",
|
|
43
|
+
"keep_lines_regex",
|
|
44
|
+
"max_lines",
|
|
45
|
+
"parse_pipeline_toml",
|
|
46
|
+
"strip_ansi",
|
|
47
|
+
"strip_lines_regex",
|
|
48
|
+
"tail_lines_only",
|
|
49
|
+
"truncate_line",
|
|
50
|
+
]
|