code-muse 0.0.1__tar.gz → 0.1.0__tar.gz
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-0.0.1 → code_muse-0.1.0}/PKG-INFO +1 -1
- code_muse-0.0.1/code_muse/agents/agent_qa_melpomene.py → code_muse-0.1.0/code_muse/agents/agent_qa_iris.py +8 -8
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/event_stream_handler.py +34 -4
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/prompt_v3.py +1 -1
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/callbacks.py +14 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/cli_runner/__init__.py +4 -4
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/onboarding_slides.py +3 -3
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/prompt_toolkit_completion.py +64 -28
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/config_appearance.py +18 -18
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/subagent_console.py +1 -1
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/register_callbacks.py +9 -11
- code_muse-0.1.0/code_muse/plugins/tps_meter/__init__.py +0 -0
- code_muse-0.1.0/code_muse/plugins/tps_meter/register_callbacks.py +289 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/agent_tools.py +1 -1
- {code_muse-0.0.1 → code_muse-0.1.0}/pyproject.toml +1 -1
- {code_muse-0.0.1 → code_muse-0.1.0}/.gitignore +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/LICENSE +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/README.md +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/__main__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_builder.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_compaction.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_diagnostics.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_history.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_key_listeners.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_non_streaming_render.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/_runtime.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/agent_creator_agent.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/agent_helios.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/agent_manager.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/agent_muse.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/agent_planning.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/base_agent.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/json_agent.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/agents/subagent_stream_handler.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/chatgpt_codex_client.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/claude_cache_client.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/cli_runner/args.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/cli_runner/loop.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/cli_runner/resume.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/cli_runner/runner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/add_model_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/agent_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/attachments.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/autosave_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/clipboard.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/colors_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/command_handler.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/command_registry.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/config_commands.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/core_commands.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/diff_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/file_path_completion.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/load_context_completion.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/model_picker_completion.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/model_settings_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/onboarding_wizard.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/pagination.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/pin_command_completion.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/session_commands.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/shell_passthrough.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/skills_completion.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/types.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/uc_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/command_line/wiggum_state.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/config_agent.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/config_model.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/config_security.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/error_logging.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/eval_helpers.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/eval_runner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/sample_evals/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/sample_evals/eval_frugal_reads.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/sample_evals/eval_memory_planning.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/sample_evals/eval_shell_efficiency.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/evals/sample_evals/eval_tool_masking.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/fs_scan_cache/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/fs_scan_cache/invalidation_hooks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/fs_scan_cache/scan_cache_core.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/fs_scan_cache/scan_cache_core.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/fs_scan_cache/tool_integration.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/fs_scan_cache/ttl_policy.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/gemini_code_assist.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/gemini_model.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/README.md +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/aliases.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/engine.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/executor.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/matcher.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/models.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/registry.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/trust.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/hook_engine/validator.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/http_utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/keymap.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/list_filtering.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/main.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/bus.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/commands.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/markdown_patches.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/message_queue.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/messages.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/queue_console.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/renderers.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/rich_renderer.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/shimmer.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/spinner/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/spinner/console_spinner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/messaging/spinner/spinner_base.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/model_factory.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/model_switching.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/model_utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models.json +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_cache/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_cache/blocking_lru_cache.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_cache/cache_writer.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_cache/sha256_hash.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_cache/sha256_hash.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_cache/startup_integration.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_dev_api.json +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/models_dev_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/motion.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/discovery.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/downloader.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/installer.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/metadata.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/prompt_builder.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/remote_catalog.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/skill_catalog.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/agent_skills/skills_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/bm25_scorer.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/consolidation.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/extraction.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/lease_lock.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/memory_injection.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/secret_scanner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/autonomous_memory/session_scanner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/aws_bedrock/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/aws_bedrock/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/aws_bedrock/utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/README.md +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/discovery.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/token.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/azure_foundry/utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/build_filter/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/build_filter/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/build_filter/strategies/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/build_filter/strategies/build.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/chatgpt_oauth/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/chatgpt_oauth/utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/checkpoint_hook.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/conversation_snapshots.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/restore_command.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/rewind_shortcut.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/checkpointing/shadow_git.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_hooks/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_hooks/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/README.md +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/claude_code_oauth/utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/copilot_auth/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/copilot_auth/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/copilot_auth/utils.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/custom_commands/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/custom_commands/args_injection.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/custom_commands/command_discovery.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/custom_commands/command_toml_schema.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/custom_commands/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/customizable_commands/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/destructive_command_guard/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/destructive_command_guard/detector.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/example_custom_command/README.md +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/file_permission_handler/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/classifier.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/content_detector.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/dispatcher.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/registry.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/ast_compressor.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/ast_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/code.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/code.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/code.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/git.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/git.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/git.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/json_compressor.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/json_compressor.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/json_patterns.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/json_patterns.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/lint.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/lint.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/lint.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/test.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/test.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/strategies/test.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/filter_engine/verbosity.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/force_push_guard/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/force_push_guard/detector.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/force_push_guard/test_detector.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/frontend_emitter/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/frontend_emitter/emitter.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/gac/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/gac/git_ops.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/gac/prompt.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/gac/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_creator/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_creator/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_manager/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_manager/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_manager/hooks_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_manager/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/hook_monitor/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/factory.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/judge.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/memory.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/mindpack_menu.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/orchestration.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/schemas.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/mindpack/tools.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/oauth_muse_html.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/ollama_setup/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/ollama_setup/completer.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_command/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_command/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_mode/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_mode/mode_cycling.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_mode/plan_generation.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_mode/plan_hooks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_mode/plan_mode_tools.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plan_mode/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/plugin_trust/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/policy_engine/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/policy_engine/approval_flow_integration.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/policy_engine/policy_evaluator.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/policy_engine/policy_file_discovery.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/policy_engine/policy_toml_schema.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/policy_engine/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/pop_command/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/pop_command/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/prompt_newline/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/prompt_newline/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/safety_status/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/safety_status/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/semantic_compression/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/semantic_compression/compressor.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/semantic_compression/config.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/semantic_compression/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_minimizer/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_minimizer/builtin_filters.toml +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_minimizer/pipeline.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_minimizer/primitives.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_minimizer/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_safety/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_safety/command_cache.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/shell_safety/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/synthetic_status/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/synthetic_status/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/synthetic_status/status_api.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_caching/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_caching/cache_hit_tracking.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_caching/cacheable_prefix_detection.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_caching/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_caching/stats_display.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_tracking/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_tracking/database.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_tracking/edit_analyzer.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_tracking/record.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_tracking/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/token_tracking/reports.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/models.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/registry.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/runner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/safety.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/plugins/universal_constructor/sandbox.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/provider_identity.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/pydantic_patches.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/reopenable_async_client.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/round_robin_model.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/secret_storage.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/security/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/security/redaction.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/security/redaction.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/security/redaction.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/session_storage.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/status_display.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/assistant_text_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/citation_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/inline_hidden_tag_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/proposed_plan_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/stream_text_chunk.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/stream_text_parser.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/tagged_line_parser.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/tagged_line_parser.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/utf8_stream_parser.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/stream_parser/utf8_stream_parser.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/summarization_agent.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/terminal_utils.cpython-314-darwin.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/terminal_utils.cpython-314-x86_64-linux-gnu.so +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/terminal_utils.pyx +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/constants.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/demo_tui.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/handler.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/models.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/registration.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/renderers.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/terminal_ui.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/theme.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/ask_user_question/tui_loop.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/background_jobs.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_control.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_interactions.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_locators.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_manager.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_navigation.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_screenshot.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_scripts.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/browser/browser_workflows.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/chrome_cdp/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/chrome_cdp/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/command_runner.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/common.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/display.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/file_modifications.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/file_operations.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/image_tools.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/meetin_proxy/__init__.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/meetin_proxy/capture_addon.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/meetin_proxy/proxy_manager.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/meetin_proxy/register_callbacks.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/path_policy.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/skills_tools.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/subagent_context.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/tools_content.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/tools/universal_constructor.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/uvx_detection.py +0 -0
- {code_muse-0.0.1 → code_muse-0.1.0}/code_muse/version_checker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-muse
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.1.0
|
|
4
4
|
Summary: Muse — eternal guide of creators in the arts and sciences. An elegant AI coding assistant.
|
|
5
5
|
Project-URL: Repository, https://github.com/asx8678/muse
|
|
6
6
|
Project-URL: Homepage, https://github.com/asx8678/muse
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"""QA
|
|
1
|
+
"""QA Iris — Playwright-powered browser automation agent."""
|
|
2
2
|
|
|
3
3
|
from .base_agent import BaseAgent
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class
|
|
7
|
-
"""QA
|
|
6
|
+
class QualityAssuranceIrisAgent(BaseAgent):
|
|
7
|
+
"""QA Iris — Advanced browser automation with Playwright."""
|
|
8
8
|
|
|
9
9
|
@property
|
|
10
10
|
def name(self) -> str:
|
|
11
|
-
return "qa-
|
|
11
|
+
return "qa-iris"
|
|
12
12
|
|
|
13
13
|
@property
|
|
14
14
|
def display_name(self) -> str:
|
|
15
|
-
return "QA
|
|
15
|
+
return "QA Iris"
|
|
16
16
|
|
|
17
17
|
@property
|
|
18
18
|
def description(self) -> str:
|
|
19
19
|
return "Advanced web browser automation and quality assurance testing using Playwright with visual analysis capabilities"
|
|
20
20
|
|
|
21
21
|
def get_available_tools(self) -> list[str]:
|
|
22
|
-
"""Get the list of tools available to QA
|
|
22
|
+
"""Get the list of tools available to QA Iris."""
|
|
23
23
|
return [
|
|
24
24
|
# Core agent tools
|
|
25
25
|
# Browser control and initialization
|
|
@@ -72,9 +72,9 @@ class QualityAssuranceMelpomeneAgent(BaseAgent):
|
|
|
72
72
|
]
|
|
73
73
|
|
|
74
74
|
def get_system_prompt(self) -> str:
|
|
75
|
-
"""Get QA
|
|
75
|
+
"""Get QA Iris's specialized system prompt."""
|
|
76
76
|
return """
|
|
77
|
-
You are QA
|
|
77
|
+
You are QA Iris, an advanced autonomous browser automation and QA testing agent powered by Playwright!
|
|
78
78
|
|
|
79
79
|
You specialize in:
|
|
80
80
|
🎯 **Quality Assurance Testing** - automated testing of web applications and user workflows
|
|
@@ -35,14 +35,17 @@ def _handle_stream_task_exception(task: asyncio.Task) -> None:
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def _fire_stream_event(event_type: str, event_data: Any) -> None:
|
|
38
|
-
"""Fire a stream event callback
|
|
38
|
+
"""Fire a stream event callback to registered plugins.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
For high-frequency part_delta events, fires synchronously without
|
|
41
|
+
creating a task to avoid overhead. For structural events (part_start,
|
|
42
|
+
part_end), fires asynchronously via task.
|
|
43
43
|
"""
|
|
44
44
|
if event_type == "part_delta":
|
|
45
|
+
# Fire synchronously for perf — tps_meter plugin consumes these
|
|
46
|
+
_fire_stream_event_sync(event_type, event_data)
|
|
45
47
|
return
|
|
48
|
+
|
|
46
49
|
try:
|
|
47
50
|
from code_muse import callbacks
|
|
48
51
|
from code_muse.messaging import get_session_context
|
|
@@ -58,6 +61,24 @@ def _fire_stream_event(event_type: str, event_data: Any) -> None:
|
|
|
58
61
|
logger.debug("Error firing stream event callback: %s", e)
|
|
59
62
|
|
|
60
63
|
|
|
64
|
+
def _fire_stream_event_sync(event_type: str, event_data: Any) -> None:
|
|
65
|
+
"""Fire stream event callbacks synchronously (no task creation).
|
|
66
|
+
|
|
67
|
+
Used for high-frequency events like part_delta where creating 100+
|
|
68
|
+
asyncio tasks per response would be wasteful.
|
|
69
|
+
"""
|
|
70
|
+
try:
|
|
71
|
+
from code_muse import callbacks
|
|
72
|
+
from code_muse.messaging import get_session_context
|
|
73
|
+
|
|
74
|
+
agent_session_id = get_session_context()
|
|
75
|
+
callbacks.on_stream_event_sync(event_type, event_data, agent_session_id)
|
|
76
|
+
except ImportError:
|
|
77
|
+
logger.debug("callbacks or messaging module not available for stream event")
|
|
78
|
+
except Exception as e:
|
|
79
|
+
logger.debug("Error firing stream event callback: %s", e)
|
|
80
|
+
|
|
81
|
+
|
|
61
82
|
# Module-level console for streaming output
|
|
62
83
|
# Set via set_streaming_console() to share console with spinner
|
|
63
84
|
_streaming_console: Console | None = None
|
|
@@ -302,11 +323,20 @@ async def event_stream_handler(
|
|
|
302
323
|
|
|
303
324
|
# PartEndEvent - finish the streaming with a newline
|
|
304
325
|
elif isinstance(event, PartEndEvent):
|
|
326
|
+
# Determine part type from tracking sets
|
|
327
|
+
_part_end_type = "unknown"
|
|
328
|
+
if event.index in text_parts:
|
|
329
|
+
_part_end_type = "TextPart"
|
|
330
|
+
elif event.index in thinking_parts:
|
|
331
|
+
_part_end_type = "ThinkingPart"
|
|
332
|
+
elif event.index in tool_parts:
|
|
333
|
+
_part_end_type = "ToolCallPart"
|
|
305
334
|
# Fire stream event callback for part_end
|
|
306
335
|
_fire_stream_event(
|
|
307
336
|
"part_end",
|
|
308
337
|
{
|
|
309
338
|
"index": event.index,
|
|
339
|
+
"part_type": _part_end_type,
|
|
310
340
|
"next_part_kind": getattr(event, "next_part_kind", None),
|
|
311
341
|
},
|
|
312
342
|
)
|
|
@@ -348,7 +348,7 @@ Calliope — epic vision and eloquent structure
|
|
|
348
348
|
Clio — memory and historical context
|
|
349
349
|
Erato — lyric beauty and emotional resonance
|
|
350
350
|
Euterpe — rhythm and harmonious flow
|
|
351
|
-
|
|
351
|
+
Iris — resilience in the face of error
|
|
352
352
|
Polyhymnia — sacred geometry and deep architecture
|
|
353
353
|
Terpsichore — graceful movement, interaction, and delightful UX choreography
|
|
354
354
|
Thalia — joyful insight and accessible wisdom
|
|
@@ -541,6 +541,20 @@ async def on_stream_event(
|
|
|
541
541
|
)
|
|
542
542
|
|
|
543
543
|
|
|
544
|
+
def on_stream_event_sync(
|
|
545
|
+
event_type: str, event_data: Any, agent_session_id: str | None = None
|
|
546
|
+
) -> list[Any]:
|
|
547
|
+
"""Synchronous version of on_stream_event — no task creation.
|
|
548
|
+
|
|
549
|
+
Used for high-frequency events (part_delta) where async overhead
|
|
550
|
+
would be wasteful. Callbacks are fired synchronously in the caller's
|
|
551
|
+
thread.
|
|
552
|
+
"""
|
|
553
|
+
return _trigger_callbacks_sync(
|
|
554
|
+
"stream_event", event_type, event_data, agent_session_id
|
|
555
|
+
)
|
|
556
|
+
|
|
557
|
+
|
|
544
558
|
def on_register_tools() -> list[dict[str, Any]]:
|
|
545
559
|
"""Collect custom tool registrations from plugins.
|
|
546
560
|
|
|
@@ -101,11 +101,11 @@ async def main():
|
|
|
101
101
|
import pyfiglet
|
|
102
102
|
|
|
103
103
|
intro_lines = pyfiglet.figlet_format(
|
|
104
|
-
"
|
|
104
|
+
"Muse", font="ansi_shadow"
|
|
105
105
|
).split("\n")
|
|
106
106
|
|
|
107
|
-
#
|
|
108
|
-
gradient_colors = ["
|
|
107
|
+
# Warm gold to deep red gradient (top to bottom)
|
|
108
|
+
gradient_colors = ["gold1", "dark_orange", "red1"]
|
|
109
109
|
display_console.print("\n")
|
|
110
110
|
|
|
111
111
|
lines = []
|
|
@@ -113,7 +113,7 @@ async def main():
|
|
|
113
113
|
for line_num, line in enumerate(intro_lines):
|
|
114
114
|
if line.strip():
|
|
115
115
|
# Use line position to determine color
|
|
116
|
-
# (top
|
|
116
|
+
# (top gold, middle orange, bottom red)
|
|
117
117
|
color_idx = min(line_num // 2, len(gradient_colors) - 1)
|
|
118
118
|
color = gradient_colors[color_idx]
|
|
119
119
|
lines.append(f"[{color}]{line}[/{color}]")
|
|
@@ -45,8 +45,8 @@ def get_gradient_banner() -> str:
|
|
|
45
45
|
try:
|
|
46
46
|
import pyfiglet
|
|
47
47
|
|
|
48
|
-
lines = pyfiglet.figlet_format("
|
|
49
|
-
colors = ["
|
|
48
|
+
lines = pyfiglet.figlet_format("Muse", font="ansi_shadow").split("\n")
|
|
49
|
+
colors = ["gold1", "dark_orange", "red1"]
|
|
50
50
|
result = []
|
|
51
51
|
for i, line in enumerate(lines):
|
|
52
52
|
if line.strip():
|
|
@@ -54,7 +54,7 @@ def get_gradient_banner() -> str:
|
|
|
54
54
|
result.append(f"[{color}]{line}[/{color}]")
|
|
55
55
|
return "\n".join(result)
|
|
56
56
|
except ImportError:
|
|
57
|
-
return "[bold
|
|
57
|
+
return "[bold bright_red]═══ Muse ═══[/bold bright_red]"
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
# ============================================================================
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# YELLOW = '\033[1;33m'
|
|
8
8
|
# BOLD = '\033[1m'
|
|
9
9
|
import asyncio
|
|
10
|
+
import contextlib
|
|
10
11
|
import os
|
|
11
12
|
import sys
|
|
12
13
|
from pathlib import Path
|
|
@@ -47,6 +48,15 @@ from code_muse.config import (
|
|
|
47
48
|
get_value,
|
|
48
49
|
)
|
|
49
50
|
|
|
51
|
+
# Optional TPS meter integration for bottom toolbar
|
|
52
|
+
_tps_state = None
|
|
53
|
+
try:
|
|
54
|
+
from code_muse.plugins.tps_meter.register_callbacks import get_tps_state
|
|
55
|
+
|
|
56
|
+
_tps_state = get_tps_state()
|
|
57
|
+
except ImportError:
|
|
58
|
+
pass
|
|
59
|
+
|
|
50
60
|
|
|
51
61
|
def _sanitize_for_encoding(text: str) -> str:
|
|
52
62
|
"""Remove or replace characters that can't be safely encoded.
|
|
@@ -133,8 +143,9 @@ class SetCompleter(Completer):
|
|
|
133
143
|
if not stripped_text_for_trigger_check.startswith(self.trigger + " "):
|
|
134
144
|
return
|
|
135
145
|
|
|
136
|
-
# Determine the part of the text that is relevant for this completer
|
|
137
|
-
# This handles cases like " /set foo" where the trigger
|
|
146
|
+
# Determine the part of the text that is relevant for this completer.
|
|
147
|
+
# This handles cases like " /set foo" where the trigger
|
|
148
|
+
# isn't at the start of the string.
|
|
138
149
|
actual_trigger_pos = text_before_cursor.find(self.trigger)
|
|
139
150
|
|
|
140
151
|
# Extract the input after /set and space (up to cursor)
|
|
@@ -152,7 +163,8 @@ class SetCompleter(Completer):
|
|
|
152
163
|
|
|
153
164
|
for key in config_keys:
|
|
154
165
|
if key == "model" or key == "muse_token":
|
|
155
|
-
|
|
166
|
+
# Exclude 'model' and 'muse_token' from regular /set completions
|
|
167
|
+
continue
|
|
156
168
|
if key.startswith(text_after_trigger):
|
|
157
169
|
prev_value = get_value(key)
|
|
158
170
|
value_part = f" = {prev_value}" if prev_value is not None else " = "
|
|
@@ -292,7 +304,8 @@ class CDCompleter(Completer):
|
|
|
292
304
|
text_before_cursor = document.text_before_cursor
|
|
293
305
|
stripped_text = text_before_cursor.lstrip()
|
|
294
306
|
|
|
295
|
-
# Require a space after /cd before showing completions
|
|
307
|
+
# Require a space after /cd before showing completions
|
|
308
|
+
# (consistency with other completers)
|
|
296
309
|
if not stripped_text.startswith(self.trigger + " "):
|
|
297
310
|
return
|
|
298
311
|
|
|
@@ -321,7 +334,8 @@ class CDCompleter(Completer):
|
|
|
321
334
|
original_prefix = None
|
|
322
335
|
|
|
323
336
|
for d in dirnames:
|
|
324
|
-
# Build the completion text so we keep the
|
|
337
|
+
# Build the completion text so we keep the
|
|
338
|
+
# already-typed directory parts.
|
|
325
339
|
if user_prefix and original_prefix:
|
|
326
340
|
# Restore ~ prefix
|
|
327
341
|
suggestion = user_prefix + d + os.sep
|
|
@@ -451,7 +465,8 @@ class SlashCompleter(Completer):
|
|
|
451
465
|
"text": alias,
|
|
452
466
|
"display": f"/{alias} (alias for /{cmd.name})",
|
|
453
467
|
"meta": cmd.description,
|
|
454
|
-
"sort_key": alias.lower(),
|
|
468
|
+
"sort_key": alias.lower(),
|
|
469
|
+
# Sort by alias name, not primary command
|
|
455
470
|
}
|
|
456
471
|
)
|
|
457
472
|
|
|
@@ -616,26 +631,26 @@ async def get_input_with_combined_completion(
|
|
|
616
631
|
# Ctrl+X keybinding - exit with KeyboardInterrupt for shell command cancellation
|
|
617
632
|
@bindings.add(Keys.ControlX)
|
|
618
633
|
def _(event):
|
|
619
|
-
|
|
634
|
+
with contextlib.suppress(Exception):
|
|
635
|
+
# Ignore "Return value already set" errors when exit was
|
|
636
|
+
# already called. This happens when user presses multiple
|
|
637
|
+
# exit keys in quick succession.
|
|
620
638
|
event.app.exit(exception=KeyboardInterrupt)
|
|
621
|
-
except Exception:
|
|
622
|
-
# Ignore "Return value already set" errors when exit was already called
|
|
623
|
-
# This happens when user presses multiple exit keys in quick succession
|
|
624
|
-
pass
|
|
625
639
|
|
|
626
640
|
# Escape keybinding - exit with KeyboardInterrupt
|
|
627
641
|
@bindings.add(Keys.Escape)
|
|
628
642
|
def _(event):
|
|
629
|
-
|
|
643
|
+
with contextlib.suppress(Exception):
|
|
644
|
+
# Ignore "Return value already set" errors when exit
|
|
645
|
+
# was already called.
|
|
630
646
|
event.app.exit(exception=KeyboardInterrupt)
|
|
631
|
-
except Exception:
|
|
632
|
-
# Ignore "Return value already set" errors when exit was already called
|
|
633
|
-
pass
|
|
634
647
|
|
|
635
648
|
# NOTE: We intentionally do NOT override Ctrl+C here.
|
|
636
|
-
# prompt_toolkit's default Ctrl+C handler properly resets the
|
|
637
|
-
#
|
|
638
|
-
#
|
|
649
|
+
# prompt_toolkit's default Ctrl+C handler properly resets the
|
|
650
|
+
# terminal state on Windows. Overriding it with
|
|
651
|
+
# event.app.exit(exception=KeyboardInterrupt) can leave the
|
|
652
|
+
# terminal in a bad state where characters cannot be typed.
|
|
653
|
+
# Let prompt_toolkit handle Ctrl+C natively.
|
|
639
654
|
|
|
640
655
|
# Toggle multiline with Alt+M
|
|
641
656
|
@bindings.add(Keys.Escape, "m")
|
|
@@ -704,9 +719,12 @@ async def get_input_with_combined_completion(
|
|
|
704
719
|
buffer.start_completion(select_first=False)
|
|
705
720
|
|
|
706
721
|
# Handle bracketed paste - smart detection for text vs images.
|
|
707
|
-
# Most terminals (Windows included!) send Ctrl+V through
|
|
708
|
-
#
|
|
709
|
-
# - If text
|
|
722
|
+
# Most terminals (Windows included!) send Ctrl+V through
|
|
723
|
+
# bracketed paste.
|
|
724
|
+
# - If there's meaningful text content → paste as text
|
|
725
|
+
# (drag-and-drop file paths, copied text)
|
|
726
|
+
# - If text is empty/whitespace → check for clipboard image
|
|
727
|
+
# (image paste on Windows)
|
|
710
728
|
@bindings.add(Keys.BracketedPaste)
|
|
711
729
|
def handle_bracketed_paste(event):
|
|
712
730
|
"""Handle bracketed paste - smart text vs image detection."""
|
|
@@ -748,8 +766,9 @@ async def get_input_with_combined_completion(
|
|
|
748
766
|
placeholder = capture_clipboard_image_to_pending()
|
|
749
767
|
if placeholder:
|
|
750
768
|
event.app.current_buffer.insert_text(placeholder + " ")
|
|
751
|
-
# The placeholder itself is visible feedback -
|
|
752
|
-
#
|
|
769
|
+
# The placeholder itself is visible feedback -
|
|
770
|
+
# no need for extra output. Use bell for audible
|
|
771
|
+
# feedback (works in most terminals).
|
|
753
772
|
event.app.output.bell()
|
|
754
773
|
return # Don't also paste text
|
|
755
774
|
except Exception:
|
|
@@ -841,11 +860,27 @@ async def get_input_with_combined_completion(
|
|
|
841
860
|
key_bindings=bindings,
|
|
842
861
|
input_processors=[AttachmentPlaceholderProcessor()],
|
|
843
862
|
)
|
|
844
|
-
# If they pass a string, backward-compat: convert it to formatted_text
|
|
845
|
-
if isinstance(prompt_str, str):
|
|
846
|
-
from prompt_toolkit.formatted_text import FormattedText
|
|
847
863
|
|
|
848
|
-
|
|
864
|
+
# Build dynamic prompt that includes TPS stats inline (if plugin loaded)
|
|
865
|
+
def _build_prompt():
|
|
866
|
+
if isinstance(prompt_str, str):
|
|
867
|
+
from prompt_toolkit.formatted_text import FormattedText
|
|
868
|
+
|
|
869
|
+
parts = FormattedText([(None, prompt_str)])
|
|
870
|
+
else:
|
|
871
|
+
if hasattr(prompt_str, "__iter__"):
|
|
872
|
+
parts = list(prompt_str)
|
|
873
|
+
else:
|
|
874
|
+
parts = [prompt_str]
|
|
875
|
+
|
|
876
|
+
# Append TPS stats before the arrow if available
|
|
877
|
+
if _tps_state is not None:
|
|
878
|
+
tps_text = _tps_state.get_toolbar_text()
|
|
879
|
+
if tps_text:
|
|
880
|
+
parts.insert(-1, ("class:tps-meter", f" {tps_text} "))
|
|
881
|
+
|
|
882
|
+
return parts
|
|
883
|
+
|
|
849
884
|
style = Style.from_dict(
|
|
850
885
|
{
|
|
851
886
|
# Keys must AVOID the 'class:' prefix – that prefix is used only when
|
|
@@ -857,9 +892,10 @@ async def get_input_with_combined_completion(
|
|
|
857
892
|
"cwd": "bold ansibrightgreen",
|
|
858
893
|
"arrow": "bold ansibrightblue",
|
|
859
894
|
"attachment-placeholder": "italic ansicyan",
|
|
895
|
+
"tps-meter": "italic ansigreen",
|
|
860
896
|
}
|
|
861
897
|
)
|
|
862
|
-
text = await session.prompt_async(
|
|
898
|
+
text = await session.prompt_async(_build_prompt, style=style)
|
|
863
899
|
# NOTE: We used to call update_model_in_input(text) here to handle /model and /m
|
|
864
900
|
# commands at the prompt level, but that prevented the command handler from running
|
|
865
901
|
# and emitting success messages. Now we let all /model commands fall through to
|
|
@@ -101,25 +101,25 @@ def set_diff_deletion_color(color: str):
|
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
DEFAULT_BANNER_COLORS = {
|
|
104
|
-
"thinking": "
|
|
105
|
-
"agent_response": "
|
|
106
|
-
"shell_command": "
|
|
107
|
-
"read_file": "
|
|
108
|
-
"edit_file": "
|
|
109
|
-
"create_file": "
|
|
110
|
-
"replace_in_file": "
|
|
111
|
-
"delete_snippet": "
|
|
112
|
-
"grep": "
|
|
113
|
-
"directory_listing": "
|
|
104
|
+
"thinking": "dark_violet", # Violet - contemplation
|
|
105
|
+
"agent_response": "purple4", # Deep Purple - main AI output
|
|
106
|
+
"shell_command": "deeppink3", # Deep Pink - system commands
|
|
107
|
+
"read_file": "dark_magenta", # Magenta - reading files
|
|
108
|
+
"edit_file": "purple4", # Purple - modifications
|
|
109
|
+
"create_file": "purple4", # Purple - file creation
|
|
110
|
+
"replace_in_file": "purple4", # Purple - file modifications
|
|
111
|
+
"delete_snippet": "dark_violet", # Violet - snippet removal
|
|
112
|
+
"grep": "medium_purple3", # Light Purple - search results
|
|
113
|
+
"directory_listing": "deeppink4", # Deep Pink - navigation
|
|
114
114
|
"agent_reasoning": "dark_violet", # Violet - deep thought
|
|
115
|
-
"invoke_agent": "
|
|
116
|
-
"subagent_response": "
|
|
117
|
-
"list_agents": "
|
|
118
|
-
"universal_constructor": "
|
|
119
|
-
# Browser/Terminal tools
|
|
120
|
-
"terminal_tool": "
|
|
121
|
-
# User-initiated shell pass-through
|
|
122
|
-
"shell_passthrough": "
|
|
115
|
+
"invoke_agent": "deeppink3", # Deep Pink - agent invocation
|
|
116
|
+
"subagent_response": "purple3", # Purple - sub-agent success
|
|
117
|
+
"list_agents": "dark_magenta", # Magenta - neutral listing
|
|
118
|
+
"universal_constructor": "dark_violet", # Violet - constructing tools
|
|
119
|
+
# Browser/Terminal tools
|
|
120
|
+
"terminal_tool": "purple4", # Purple - browser terminal operations
|
|
121
|
+
# User-initiated shell pass-through
|
|
122
|
+
"shell_passthrough": "deeppink4", # Deep Pink - user's own shell commands
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
|
|
@@ -172,7 +172,7 @@ class SubAgentConsoleManager:
|
|
|
172
172
|
|
|
173
173
|
Args:
|
|
174
174
|
session_id: Unique identifier for this agent session.
|
|
175
|
-
agent_name: Name of the agent (e.g., 'muse', 'qa-
|
|
175
|
+
agent_name: Name of the agent (e.g., 'muse', 'qa-iris').
|
|
176
176
|
model_name: Name of the model being used (e.g., 'gpt-4o').
|
|
177
177
|
"""
|
|
178
178
|
with self._agents_lock:
|
|
@@ -103,9 +103,9 @@ async def filter_engine_callback(
|
|
|
103
103
|
# ---------------------------------------------------------------------------
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
_INIT_MARKDOWN = """#
|
|
106
|
+
_INIT_MARKDOWN = """# Muse Token Saving
|
|
107
107
|
|
|
108
|
-
This project uses
|
|
108
|
+
This project uses Muse to compress shell command output, reducing token usage by 60-90%.
|
|
109
109
|
|
|
110
110
|
## Enabled Strategies
|
|
111
111
|
- Git output compression (status, log, diff)
|
|
@@ -138,28 +138,26 @@ def _detect_project_type(cwd: Path) -> str | None:
|
|
|
138
138
|
|
|
139
139
|
|
|
140
140
|
def _on_custom_command(command: str, name: str) -> bool | None: # noqa: ARG001
|
|
141
|
-
"""Handle ``/init`` — one-command
|
|
141
|
+
"""Handle ``/init`` — one-command Muse setup."""
|
|
142
142
|
if name != "init":
|
|
143
143
|
return None
|
|
144
144
|
|
|
145
145
|
cwd = Path.cwd()
|
|
146
146
|
manifest = _detect_project_type(cwd)
|
|
147
147
|
|
|
148
|
-
md_path = cwd / "
|
|
148
|
+
md_path = cwd / "MUSE.md"
|
|
149
149
|
if md_path.exists():
|
|
150
|
-
emit_info("
|
|
150
|
+
emit_info("MUSE.md already exists — nothing to do.")
|
|
151
151
|
return True
|
|
152
152
|
|
|
153
153
|
md_path.write_text(_INIT_MARKDOWN, encoding="utf-8")
|
|
154
154
|
if manifest:
|
|
155
155
|
emit_success(
|
|
156
|
-
f"✅
|
|
157
|
-
f"Created
|
|
156
|
+
f"✅ Muse initialized. Detected {manifest}. "
|
|
157
|
+
f"Created MUSE.md. Filter engine is active."
|
|
158
158
|
)
|
|
159
159
|
else:
|
|
160
|
-
emit_success(
|
|
161
|
-
"✅ Fast-Puppy initialized. Created FAST_PUPPY.md. Filter engine is active."
|
|
162
|
-
)
|
|
160
|
+
emit_success("✅ Muse initialized. Created MUSE.md. Filter engine is active.")
|
|
163
161
|
return True
|
|
164
162
|
|
|
165
163
|
|
|
@@ -170,7 +168,7 @@ def _on_custom_command(command: str, name: str) -> bool | None: # noqa: ARG001
|
|
|
170
168
|
|
|
171
169
|
def _on_custom_command_help() -> list[tuple[str, str]]:
|
|
172
170
|
return [
|
|
173
|
-
("/init", "Initialize
|
|
171
|
+
("/init", "Initialize Muse in the current project"),
|
|
174
172
|
]
|
|
175
173
|
|
|
176
174
|
|
|
File without changes
|