code-muse 0.1.0__tar.gz → 0.1.2__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.
Files changed (401) hide show
  1. {code_muse-0.1.0 → code_muse-0.1.2}/PKG-INFO +1 -1
  2. code_muse-0.1.2/code_muse/plugins/auto_review/__init__.py +6 -0
  3. code_muse-0.1.2/code_muse/plugins/auto_review/cache.py +33 -0
  4. code_muse-0.1.2/code_muse/plugins/auto_review/config.py +35 -0
  5. code_muse-0.1.2/code_muse/plugins/auto_review/register_callbacks.py +122 -0
  6. code_muse-0.1.2/code_muse/plugins/auto_review/review_prompt.py +23 -0
  7. code_muse-0.1.2/code_muse/plugins/auto_review/reviewer.py +314 -0
  8. code_muse-0.1.2/code_muse/plugins/auto_review/visibility.py +45 -0
  9. {code_muse-0.1.0 → code_muse-0.1.2}/pyproject.toml +1 -1
  10. {code_muse-0.1.0 → code_muse-0.1.2}/.gitignore +0 -0
  11. {code_muse-0.1.0 → code_muse-0.1.2}/LICENSE +0 -0
  12. {code_muse-0.1.0 → code_muse-0.1.2}/README.md +0 -0
  13. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/__init__.py +0 -0
  14. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/__main__.py +0 -0
  15. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/__init__.py +0 -0
  16. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_builder.py +0 -0
  17. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_compaction.py +0 -0
  18. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_diagnostics.py +0 -0
  19. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_history.py +0 -0
  20. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_key_listeners.py +0 -0
  21. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_non_streaming_render.py +0 -0
  22. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/_runtime.py +0 -0
  23. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/agent_creator_agent.py +0 -0
  24. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/agent_helios.py +0 -0
  25. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/agent_manager.py +0 -0
  26. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/agent_muse.py +0 -0
  27. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/agent_planning.py +0 -0
  28. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/agent_qa_iris.py +0 -0
  29. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/base_agent.py +0 -0
  30. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/event_stream_handler.py +0 -0
  31. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/json_agent.py +0 -0
  32. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/prompt_v3.py +0 -0
  33. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/agents/subagent_stream_handler.py +0 -0
  34. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/callbacks.py +0 -0
  35. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/chatgpt_codex_client.py +0 -0
  36. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/claude_cache_client.py +0 -0
  37. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/cli_runner/__init__.py +0 -0
  38. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/cli_runner/args.py +0 -0
  39. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/cli_runner/loop.py +0 -0
  40. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/cli_runner/resume.py +0 -0
  41. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/cli_runner/runner.py +0 -0
  42. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/__init__.py +0 -0
  43. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/add_model_menu.py +0 -0
  44. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/agent_menu.py +0 -0
  45. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/attachments.py +0 -0
  46. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/autosave_menu.py +0 -0
  47. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/clipboard.py +0 -0
  48. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/colors_menu.py +0 -0
  49. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/command_handler.py +0 -0
  50. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/command_registry.py +0 -0
  51. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/config_commands.py +0 -0
  52. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/core_commands.py +0 -0
  53. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/diff_menu.py +0 -0
  54. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/file_path_completion.py +0 -0
  55. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/load_context_completion.py +0 -0
  56. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/model_picker_completion.py +0 -0
  57. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/model_settings_menu.py +0 -0
  58. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/onboarding_slides.py +0 -0
  59. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/onboarding_wizard.py +0 -0
  60. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/pagination.py +0 -0
  61. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/pin_command_completion.py +0 -0
  62. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/prompt_toolkit_completion.py +0 -0
  63. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/session_commands.py +0 -0
  64. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/shell_passthrough.py +0 -0
  65. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/skills_completion.py +0 -0
  66. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/types.py +0 -0
  67. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/uc_menu.py +0 -0
  68. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/utils.py +0 -0
  69. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/command_line/wiggum_state.py +0 -0
  70. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/config.py +0 -0
  71. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/config_agent.py +0 -0
  72. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/config_appearance.py +0 -0
  73. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/config_model.py +0 -0
  74. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/config_security.py +0 -0
  75. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/error_logging.py +0 -0
  76. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/__init__.py +0 -0
  77. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/eval_helpers.py +0 -0
  78. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/eval_runner.py +0 -0
  79. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/sample_evals/__init__.py +0 -0
  80. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/sample_evals/eval_frugal_reads.py +0 -0
  81. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/sample_evals/eval_memory_planning.py +0 -0
  82. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/sample_evals/eval_shell_efficiency.py +0 -0
  83. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/evals/sample_evals/eval_tool_masking.py +0 -0
  84. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/fs_scan_cache/__init__.py +0 -0
  85. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/fs_scan_cache/invalidation_hooks.py +0 -0
  86. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/fs_scan_cache/scan_cache_core.cpython-314-darwin.so +0 -0
  87. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/fs_scan_cache/scan_cache_core.pyx +0 -0
  88. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/fs_scan_cache/tool_integration.py +0 -0
  89. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/fs_scan_cache/ttl_policy.py +0 -0
  90. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/gemini_code_assist.py +0 -0
  91. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/gemini_model.py +0 -0
  92. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/README.md +0 -0
  93. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/__init__.py +0 -0
  94. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/aliases.py +0 -0
  95. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/engine.py +0 -0
  96. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/executor.py +0 -0
  97. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/matcher.py +0 -0
  98. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/models.py +0 -0
  99. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/registry.py +0 -0
  100. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/trust.py +0 -0
  101. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/hook_engine/validator.py +0 -0
  102. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/http_utils.py +0 -0
  103. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/keymap.py +0 -0
  104. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/list_filtering.py +0 -0
  105. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/main.py +0 -0
  106. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/__init__.py +0 -0
  107. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/bus.py +0 -0
  108. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/commands.py +0 -0
  109. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/markdown_patches.py +0 -0
  110. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/message_queue.py +0 -0
  111. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/messages.py +0 -0
  112. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/queue_console.py +0 -0
  113. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/renderers.py +0 -0
  114. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/rich_renderer.py +0 -0
  115. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/shimmer.py +0 -0
  116. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/spinner/__init__.py +0 -0
  117. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/spinner/console_spinner.py +0 -0
  118. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/spinner/spinner_base.py +0 -0
  119. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/messaging/subagent_console.py +0 -0
  120. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/model_factory.py +0 -0
  121. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/model_switching.py +0 -0
  122. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/model_utils.py +0 -0
  123. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models.json +0 -0
  124. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_cache/__init__.py +0 -0
  125. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_cache/blocking_lru_cache.py +0 -0
  126. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_cache/cache_writer.py +0 -0
  127. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_cache/sha256_hash.cpython-314-darwin.so +0 -0
  128. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_cache/sha256_hash.pyx +0 -0
  129. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_cache/startup_integration.py +0 -0
  130. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_dev_api.json +0 -0
  131. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/models_dev_parser.py +0 -0
  132. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/motion.py +0 -0
  133. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/__init__.py +0 -0
  134. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/__init__.py +0 -0
  135. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/config.py +0 -0
  136. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/discovery.py +0 -0
  137. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/downloader.py +0 -0
  138. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/installer.py +0 -0
  139. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/metadata.py +0 -0
  140. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/prompt_builder.py +0 -0
  141. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/register_callbacks.py +0 -0
  142. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/remote_catalog.py +0 -0
  143. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/skill_catalog.py +0 -0
  144. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/skills_install_menu.py +0 -0
  145. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/agent_skills/skills_menu.py +0 -0
  146. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/__init__.py +0 -0
  147. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-darwin.so +0 -0
  148. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-x86_64-linux-gnu.so +0 -0
  149. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/bm25_scorer.pyx +0 -0
  150. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/consolidation.py +0 -0
  151. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/extraction.py +0 -0
  152. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/lease_lock.py +0 -0
  153. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/memory_injection.py +0 -0
  154. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/register_callbacks.py +0 -0
  155. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/secret_scanner.py +0 -0
  156. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/autonomous_memory/session_scanner.py +0 -0
  157. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/aws_bedrock/__init__.py +0 -0
  158. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/aws_bedrock/config.py +0 -0
  159. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/aws_bedrock/register_callbacks.py +0 -0
  160. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/aws_bedrock/utils.py +0 -0
  161. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/README.md +0 -0
  162. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/__init__.py +0 -0
  163. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/config.py +0 -0
  164. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/discovery.py +0 -0
  165. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/register_callbacks.py +0 -0
  166. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/token.py +0 -0
  167. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/azure_foundry/utils.py +0 -0
  168. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/build_filter/__init__.py +0 -0
  169. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/build_filter/register_callbacks.py +0 -0
  170. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/build_filter/strategies/__init__.py +0 -0
  171. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/build_filter/strategies/build.py +0 -0
  172. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/chatgpt_oauth/__init__.py +0 -0
  173. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/chatgpt_oauth/config.py +0 -0
  174. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  175. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  176. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/chatgpt_oauth/test_plugin.py +0 -0
  177. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/chatgpt_oauth/utils.py +0 -0
  178. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/__init__.py +0 -0
  179. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/checkpoint_hook.py +0 -0
  180. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/conversation_snapshots.py +0 -0
  181. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/register_callbacks.py +0 -0
  182. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/restore_command.py +0 -0
  183. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/rewind_shortcut.py +0 -0
  184. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/checkpointing/shadow_git.py +0 -0
  185. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_hooks/__init__.py +0 -0
  186. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_hooks/config.py +0 -0
  187. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_hooks/register_callbacks.py +0 -0
  188. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/README.md +0 -0
  189. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/SETUP.md +0 -0
  190. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/__init__.py +0 -0
  191. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/config.py +0 -0
  192. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/fast_mode.py +0 -0
  193. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/prompt_handler.py +0 -0
  194. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/register_callbacks.py +0 -0
  195. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/test_fast_mode.py +0 -0
  196. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/test_plugin.py +0 -0
  197. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  198. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/claude_code_oauth/utils.py +0 -0
  199. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/copilot_auth/__init__.py +0 -0
  200. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/copilot_auth/config.py +0 -0
  201. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/copilot_auth/reasoning_client.py +0 -0
  202. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/copilot_auth/register_callbacks.py +0 -0
  203. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/copilot_auth/utils.py +0 -0
  204. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/custom_commands/__init__.py +0 -0
  205. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/custom_commands/args_injection.py +0 -0
  206. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/custom_commands/command_discovery.py +0 -0
  207. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/custom_commands/command_toml_schema.py +0 -0
  208. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/custom_commands/register_callbacks.py +0 -0
  209. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/customizable_commands/__init__.py +0 -0
  210. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/customizable_commands/register_callbacks.py +0 -0
  211. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/destructive_command_guard/__init__.py +0 -0
  212. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/destructive_command_guard/detector.py +0 -0
  213. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/destructive_command_guard/register_callbacks.py +0 -0
  214. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/example_custom_command/README.md +0 -0
  215. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/example_custom_command/register_callbacks.py +0 -0
  216. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/file_permission_handler/__init__.py +0 -0
  217. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/file_permission_handler/register_callbacks.py +0 -0
  218. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/__init__.py +0 -0
  219. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/classifier.py +0 -0
  220. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/content_detector.py +0 -0
  221. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/dispatcher.py +0 -0
  222. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/register_callbacks.py +0 -0
  223. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/registry.py +0 -0
  224. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/__init__.py +0 -0
  225. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-darwin.so +0 -0
  226. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-x86_64-linux-gnu.so +0 -0
  227. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/ast_compressor.pyx +0 -0
  228. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/ast_parser.py +0 -0
  229. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/code.cpython-314-darwin.so +0 -0
  230. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/code.cpython-314-x86_64-linux-gnu.so +0 -0
  231. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/code.pyx +0 -0
  232. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/git.cpython-314-darwin.so +0 -0
  233. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/git.cpython-314-x86_64-linux-gnu.so +0 -0
  234. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/git.pyx +0 -0
  235. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/json_compressor.cpython-314-darwin.so +0 -0
  236. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/json_compressor.pyx +0 -0
  237. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/json_patterns.cpython-314-darwin.so +0 -0
  238. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/json_patterns.pyx +0 -0
  239. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/lint.cpython-314-darwin.so +0 -0
  240. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/lint.cpython-314-x86_64-linux-gnu.so +0 -0
  241. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/lint.pyx +0 -0
  242. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/test.cpython-314-darwin.so +0 -0
  243. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/test.cpython-314-x86_64-linux-gnu.so +0 -0
  244. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/strategies/test.pyx +0 -0
  245. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/filter_engine/verbosity.py +0 -0
  246. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/force_push_guard/__init__.py +0 -0
  247. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/force_push_guard/detector.py +0 -0
  248. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/force_push_guard/register_callbacks.py +0 -0
  249. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/force_push_guard/test_detector.py +0 -0
  250. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/frontend_emitter/__init__.py +0 -0
  251. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/frontend_emitter/emitter.py +0 -0
  252. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/frontend_emitter/register_callbacks.py +0 -0
  253. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/gac/__init__.py +0 -0
  254. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/gac/git_ops.py +0 -0
  255. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/gac/prompt.py +0 -0
  256. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/gac/register_callbacks.py +0 -0
  257. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_creator/__init__.py +0 -0
  258. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_creator/register_callbacks.py +0 -0
  259. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_manager/__init__.py +0 -0
  260. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_manager/config.py +0 -0
  261. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_manager/hooks_menu.py +0 -0
  262. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_manager/register_callbacks.py +0 -0
  263. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/hook_monitor/register_callbacks.py +0 -0
  264. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/__init__.py +0 -0
  265. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/factory.py +0 -0
  266. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/judge.py +0 -0
  267. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/memory.py +0 -0
  268. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/mindpack_menu.py +0 -0
  269. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/orchestration.py +0 -0
  270. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/register_callbacks.py +0 -0
  271. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/schemas.py +0 -0
  272. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/mindpack/tools.py +0 -0
  273. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/oauth_muse_html.py +0 -0
  274. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/ollama_setup/__init__.py +0 -0
  275. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/ollama_setup/completer.py +0 -0
  276. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/ollama_setup/register_callbacks.py +0 -0
  277. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_command/__init__.py +0 -0
  278. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_command/register_callbacks.py +0 -0
  279. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_mode/__init__.py +0 -0
  280. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_mode/mode_cycling.py +0 -0
  281. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_mode/plan_generation.py +0 -0
  282. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_mode/plan_hooks.py +0 -0
  283. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_mode/plan_mode_tools.py +0 -0
  284. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plan_mode/register_callbacks.py +0 -0
  285. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/plugin_trust/register_callbacks.py +0 -0
  286. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/policy_engine/__init__.py +0 -0
  287. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/policy_engine/approval_flow_integration.py +0 -0
  288. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/policy_engine/policy_evaluator.py +0 -0
  289. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/policy_engine/policy_file_discovery.py +0 -0
  290. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/policy_engine/policy_toml_schema.py +0 -0
  291. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/policy_engine/register_callbacks.py +0 -0
  292. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/pop_command/__init__.py +0 -0
  293. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/pop_command/register_callbacks.py +0 -0
  294. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/prompt_newline/__init__.py +0 -0
  295. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/prompt_newline/config.py +0 -0
  296. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/prompt_newline/register_callbacks.py +0 -0
  297. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/safety_status/__init__.py +0 -0
  298. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/safety_status/register_callbacks.py +0 -0
  299. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/semantic_compression/__init__.py +0 -0
  300. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/semantic_compression/compressor.py +0 -0
  301. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/semantic_compression/config.py +0 -0
  302. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/semantic_compression/register_callbacks.py +0 -0
  303. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_minimizer/__init__.py +0 -0
  304. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_minimizer/builtin_filters.toml +0 -0
  305. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_minimizer/pipeline.py +0 -0
  306. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_minimizer/primitives.py +0 -0
  307. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_minimizer/register_callbacks.py +0 -0
  308. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_safety/__init__.py +0 -0
  309. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_safety/agent_shell_safety.py +0 -0
  310. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_safety/command_cache.py +0 -0
  311. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/shell_safety/register_callbacks.py +0 -0
  312. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/synthetic_status/__init__.py +0 -0
  313. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/synthetic_status/register_callbacks.py +0 -0
  314. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/synthetic_status/status_api.py +0 -0
  315. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_caching/__init__.py +0 -0
  316. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_caching/cache_hit_tracking.py +0 -0
  317. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_caching/cacheable_prefix_detection.py +0 -0
  318. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_caching/register_callbacks.py +0 -0
  319. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_caching/stats_display.py +0 -0
  320. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_tracking/__init__.py +0 -0
  321. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_tracking/database.py +0 -0
  322. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_tracking/edit_analyzer.py +0 -0
  323. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_tracking/record.py +0 -0
  324. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_tracking/register_callbacks.py +0 -0
  325. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/token_tracking/reports.py +0 -0
  326. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/tps_meter/__init__.py +0 -0
  327. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/tps_meter/register_callbacks.py +0 -0
  328. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/__init__.py +0 -0
  329. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/models.py +0 -0
  330. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/register_callbacks.py +0 -0
  331. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/registry.py +0 -0
  332. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/runner.py +0 -0
  333. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/safety.py +0 -0
  334. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/plugins/universal_constructor/sandbox.py +0 -0
  335. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/provider_identity.py +0 -0
  336. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/pydantic_patches.py +0 -0
  337. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/reopenable_async_client.py +0 -0
  338. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/round_robin_model.py +0 -0
  339. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/secret_storage.py +0 -0
  340. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/security/__init__.py +0 -0
  341. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/security/redaction.cpython-314-darwin.so +0 -0
  342. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/security/redaction.cpython-314-x86_64-linux-gnu.so +0 -0
  343. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/security/redaction.pyx +0 -0
  344. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/session_storage.py +0 -0
  345. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/status_display.py +0 -0
  346. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/__init__.py +0 -0
  347. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/assistant_text_parser.py +0 -0
  348. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/citation_parser.py +0 -0
  349. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/inline_hidden_tag_parser.py +0 -0
  350. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/proposed_plan_parser.py +0 -0
  351. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/stream_text_chunk.py +0 -0
  352. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/stream_text_parser.py +0 -0
  353. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/tagged_line_parser.cpython-314-darwin.so +0 -0
  354. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/tagged_line_parser.pyx +0 -0
  355. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/utf8_stream_parser.cpython-314-darwin.so +0 -0
  356. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/stream_parser/utf8_stream_parser.pyx +0 -0
  357. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/summarization_agent.py +0 -0
  358. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/terminal_utils.cpython-314-darwin.so +0 -0
  359. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/terminal_utils.cpython-314-x86_64-linux-gnu.so +0 -0
  360. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/terminal_utils.pyx +0 -0
  361. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/__init__.py +0 -0
  362. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/agent_tools.py +0 -0
  363. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/__init__.py +0 -0
  364. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/constants.py +0 -0
  365. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/demo_tui.py +0 -0
  366. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/handler.py +0 -0
  367. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/models.py +0 -0
  368. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/registration.py +0 -0
  369. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/renderers.py +0 -0
  370. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/terminal_ui.py +0 -0
  371. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/theme.py +0 -0
  372. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/ask_user_question/tui_loop.py +0 -0
  373. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/background_jobs.py +0 -0
  374. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/__init__.py +0 -0
  375. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_control.py +0 -0
  376. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_interactions.py +0 -0
  377. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_locators.py +0 -0
  378. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_manager.py +0 -0
  379. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_navigation.py +0 -0
  380. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_screenshot.py +0 -0
  381. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_scripts.py +0 -0
  382. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/browser/browser_workflows.py +0 -0
  383. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/chrome_cdp/__init__.py +0 -0
  384. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/chrome_cdp/register_callbacks.py +0 -0
  385. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/command_runner.py +0 -0
  386. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/common.py +0 -0
  387. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/display.py +0 -0
  388. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/file_modifications.py +0 -0
  389. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/file_operations.py +0 -0
  390. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/image_tools.py +0 -0
  391. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/meetin_proxy/__init__.py +0 -0
  392. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/meetin_proxy/capture_addon.py +0 -0
  393. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/meetin_proxy/proxy_manager.py +0 -0
  394. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/meetin_proxy/register_callbacks.py +0 -0
  395. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/path_policy.py +0 -0
  396. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/skills_tools.py +0 -0
  397. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/subagent_context.py +0 -0
  398. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/tools_content.py +0 -0
  399. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/tools/universal_constructor.py +0 -0
  400. {code_muse-0.1.0 → code_muse-0.1.2}/code_muse/uvx_detection.py +0 -0
  401. {code_muse-0.1.0 → code_muse-0.1.2}/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.1.0
3
+ Version: 0.1.2
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
@@ -0,0 +1,6 @@
1
+ """Auto-Review plugin — second-agent review of file changes.
2
+
3
+ Hooks into ``post_tool_call`` to automatically review file modifications
4
+ using a separate LLM call. Displays visible review status so the user always
5
+ knows when a review is happening and what was found.
6
+ """
@@ -0,0 +1,33 @@
1
+ """In-memory cache for auto-review results."""
2
+
3
+ import hashlib
4
+
5
+
6
+ class ReviewCache:
7
+ """Simple cache keyed by SHA256(file_path + content_hash)."""
8
+
9
+ def __init__(self) -> None:
10
+ self._cache: dict[str, dict] = {}
11
+
12
+ def _key(self, file_path: str, content_hash: str) -> str:
13
+ return hashlib.sha256(f"{file_path}::{content_hash}".encode()).hexdigest()
14
+
15
+ def get(self, file_path: str, content_hash: str) -> dict | None:
16
+ """Return cached review result or None."""
17
+ return self._cache.get(self._key(file_path, content_hash))
18
+
19
+ def set(self, file_path: str, content_hash: str, result: dict) -> None:
20
+ """Store a review result in the cache."""
21
+ self._cache[self._key(file_path, content_hash)] = result
22
+
23
+ def clear(self) -> None:
24
+ """Clear all cached entries."""
25
+ self._cache.clear()
26
+
27
+
28
+ _review_cache = ReviewCache()
29
+
30
+
31
+ def get_review_cache() -> ReviewCache:
32
+ """Return the module-level ReviewCache singleton."""
33
+ return _review_cache
@@ -0,0 +1,35 @@
1
+ """Configuration accessors for the Auto-Review plugin."""
2
+
3
+ from code_muse.config import get_value
4
+
5
+
6
+ def is_auto_review_enabled() -> bool:
7
+ """Check if auto-review is enabled (default: True)."""
8
+ val = get_value("auto_review_enabled")
9
+ if val is None:
10
+ return True
11
+ return str(val).lower() in ("1", "true", "yes", "on")
12
+
13
+
14
+ def get_auto_review_model() -> str | None:
15
+ """Get the model to use for auto-review, or None to use the global model."""
16
+ return get_value("auto_review_model")
17
+
18
+
19
+ def get_auto_review_mode() -> str:
20
+ """Get the review mode: 'background' or 'blocking' (default: 'background')."""
21
+ val = get_value("auto_review_mode")
22
+ if val and val.strip().lower() in ("background", "blocking"):
23
+ return val.strip().lower()
24
+ return "background"
25
+
26
+
27
+ def get_auto_review_min_diff_length() -> int:
28
+ """Minimum diff length (in characters) to trigger a review (default: 10)."""
29
+ val = get_value("auto_review_min_diff_length")
30
+ if val is not None:
31
+ try:
32
+ return max(0, int(val))
33
+ except (ValueError, TypeError):
34
+ pass
35
+ return 10
@@ -0,0 +1,122 @@
1
+ """Callback registration for the Auto-Review plugin.
2
+
3
+ Registers:
4
+ - ``post_tool_call`` hook — automatically reviews file changes
5
+ - ``request_code_review`` tool — manual review trigger
6
+ """
7
+
8
+ import logging
9
+ from typing import Any
10
+
11
+ from code_muse.callbacks import register_callback
12
+ from code_muse.plugins.auto_review.reviewer import (
13
+ request_manual_review,
14
+ run_auto_review,
15
+ )
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ # ---------------------------------------------------------------------------
21
+ # post_tool_call hook
22
+ # ---------------------------------------------------------------------------
23
+
24
+
25
+ async def _on_post_tool_call(
26
+ tool_name: str,
27
+ tool_args: dict,
28
+ result: dict,
29
+ duration_ms: float,
30
+ context: Any = None,
31
+ ) -> None:
32
+ """Review file changes after tool execution."""
33
+ try:
34
+ await run_auto_review(tool_name, tool_args, result)
35
+ except Exception as exc:
36
+ logger.error("Auto-review hook failed: %s", exc, exc_info=True)
37
+
38
+
39
+ # ---------------------------------------------------------------------------
40
+ # Tool registration
41
+ # ---------------------------------------------------------------------------
42
+
43
+
44
+ def _register_review_tools() -> list[dict]:
45
+ """Return tool definitions for the auto-review plugin."""
46
+
47
+ def register_request_code_review(agent):
48
+ """Register the request_code_review tool on an agent."""
49
+
50
+ @agent.tool
51
+ async def request_code_review(
52
+ context,
53
+ file_path: str = "",
54
+ reason: str | None = None,
55
+ ) -> dict:
56
+ """Request a code review for a specific file.
57
+
58
+ The reviewer analyzes the file for correctness, safety, style,
59
+ edge cases, and completeness. Returns structured feedback.
60
+
61
+ Args:
62
+ file_path: Path to the file to review
63
+ reason: Optional focus area for the review \
64
+ (e.g., "security", "performance")
65
+
66
+ Returns:
67
+ Dict with verdict, summary, issues, and suggestion
68
+ """
69
+ return await request_manual_review(file_path, reason)
70
+
71
+ return [
72
+ {
73
+ "name": "request_code_review",
74
+ "register_func": register_request_code_review,
75
+ },
76
+ ]
77
+
78
+
79
+ # ---------------------------------------------------------------------------
80
+ # Help entry
81
+ # ---------------------------------------------------------------------------
82
+
83
+
84
+ def _on_custom_command_help() -> list[tuple[str, str]]:
85
+ return [
86
+ ("review <path>", "Request an auto-review for a specific file"),
87
+ ]
88
+
89
+
90
+ def _on_custom_command(command: str, name: str) -> bool | None:
91
+ """Handle ``/review <path>`` command."""
92
+ if name == "review":
93
+ parts = command.split(maxsplit=1)
94
+ file_path = parts[1].strip() if len(parts) > 1 else ""
95
+ if not file_path:
96
+ from code_muse.messaging import emit_warning
97
+
98
+ emit_warning("Usage: /review <file_path>")
99
+ return True
100
+
101
+ import asyncio
102
+
103
+ try:
104
+ loop = asyncio.get_running_loop()
105
+ loop.create_task(request_manual_review(file_path))
106
+ except RuntimeError:
107
+ asyncio.run(request_manual_review(file_path))
108
+
109
+ return True
110
+ return None
111
+
112
+
113
+ # ---------------------------------------------------------------------------
114
+ # Register all callbacks
115
+ # ---------------------------------------------------------------------------
116
+
117
+ register_callback("post_tool_call", _on_post_tool_call)
118
+ register_callback("register_tools", _register_review_tools)
119
+ register_callback("custom_command_help", _on_custom_command_help)
120
+ register_callback("custom_command", _on_custom_command)
121
+
122
+ logger.debug("Auto-Review plugin callbacks registered")
@@ -0,0 +1,23 @@
1
+ """Reviewer system prompt templates."""
2
+
3
+ REVIEWER_SYSTEM_PROMPT = """\
4
+ You are a code reviewer. Review the following file change and \
5
+ provide structured feedback.
6
+
7
+ Evaluate:
8
+ 1. CORRECTNESS — Does the change achieve its apparent goal? Any bugs?
9
+ 2. SAFETY — Could this change introduce security issues, data loss, or breakage?
10
+ 3. STYLE — Does it follow best practices for the language/framework?
11
+ 4. EDGE CASES — Are there inputs or states where this fails?
12
+ 5. COMPLETENESS — Is the change self-contained? Missing imports, error handling, tests?
13
+
14
+ Be concise. Focus on actionable issues. If the change looks good, say so.
15
+
16
+ Return your review as JSON with:
17
+ {
18
+ "verdict": "approved" | "flagged" | "rejected",
19
+ "summary": "One-line summary of findings",
20
+ "issues": ["list of specific issues, or empty list"],
21
+ "suggestion": "Optional improvement suggestion or null"
22
+ }
23
+ """
@@ -0,0 +1,314 @@
1
+ """Core review orchestration — builds context, calls LLM, parses result."""
2
+
3
+ import json
4
+ import logging
5
+
6
+ from code_muse.plugins.auto_review.cache import get_review_cache
7
+ from code_muse.plugins.auto_review.config import (
8
+ get_auto_review_min_diff_length,
9
+ get_auto_review_model,
10
+ is_auto_review_enabled,
11
+ )
12
+ from code_muse.plugins.auto_review.review_prompt import REVIEWER_SYSTEM_PROMPT
13
+ from code_muse.plugins.auto_review.visibility import (
14
+ emit_review_approved,
15
+ emit_review_error,
16
+ emit_review_flagged,
17
+ emit_review_rejected,
18
+ emit_review_started,
19
+ )
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+ # Known file-modification tools that trigger review
24
+ _FILE_MOD_TOOLS = frozenset(
25
+ {
26
+ "create_file",
27
+ "replace_in_file",
28
+ "delete_snippet",
29
+ "delete_file",
30
+ }
31
+ )
32
+
33
+
34
+ def _compute_content_hash(file_path: str, diff: str) -> str:
35
+ """Compute a stable hash for cache key."""
36
+ import hashlib
37
+
38
+ return hashlib.sha256(f"{file_path}::{diff}".encode()).hexdigest()[:16]
39
+
40
+
41
+ def _extract_review_context(
42
+ tool_name: str,
43
+ tool_args: dict,
44
+ result: dict,
45
+ ) -> dict | None:
46
+ """Extract review context from tool call data.
47
+
48
+ Returns dict with file_path, operation, diff, content_hash or None
49
+ if the operation doesn't warrant review (e.g. it failed).
50
+ """
51
+ # Only review successful changes
52
+ if not result.get("success") and not result.get("changed"):
53
+ return None
54
+
55
+ file_path = tool_args.get("file_path", tool_args.get("path", ""))
56
+ if not file_path:
57
+ return None
58
+
59
+ # Build a review diff from the result
60
+ diff = ""
61
+ if "diff" in result:
62
+ diff = result["diff"]
63
+
64
+ # For create_file, the diff might be in the result as a message
65
+ if not diff and tool_name == "create_file":
66
+ content = tool_args.get("content", "")
67
+ if content:
68
+ lines = content.splitlines()
69
+ diff = (
70
+ f"--- /dev/null\n+++ b/{file_path}\n"
71
+ f"@@ -0,0 +1,{len(lines)} @@\n"
72
+ + "\n".join(f"+{line}" for line in lines)
73
+ )
74
+
75
+ # For delete_file, note the deletion
76
+ if not diff and tool_name == "delete_file":
77
+ diff = f"--- a/{file_path}\n+++ /dev/null\n@@ -1,0 +0,0 @@\nFile deleted."
78
+
79
+ # Skip trivial changes
80
+ if len(diff.strip()) < get_auto_review_min_diff_length():
81
+ return None
82
+
83
+ return {
84
+ "file_path": file_path,
85
+ "operation": tool_name,
86
+ "diff": diff,
87
+ "content_hash": _compute_content_hash(file_path, diff),
88
+ }
89
+
90
+
91
+ def _build_reviewer_prompt(context: dict) -> str:
92
+ """Build the user prompt for the reviewer model."""
93
+ file_path = context["file_path"]
94
+ ext = file_path.rsplit(".", 1)[-1] if "." in file_path else "unknown"
95
+ return f"""Please review this file change:
96
+
97
+ File: {context["file_path"]}
98
+ Operation: {context["operation"]}
99
+ Language/type: {ext}
100
+
101
+ Diff:
102
+ ```
103
+ {context["diff"][:4000]}
104
+ ```
105
+
106
+ Provide your structured review as JSON with verdict, summary, issues, and suggestion.
107
+ """
108
+
109
+
110
+ async def _call_reviewer_llm(prompt: str) -> dict | None:
111
+ """Call the reviewer LLM and parse the JSON response.
112
+
113
+ Uses ModelFactory to get a model instance, creates a temporary
114
+ pydantic-ai Agent with no tools, and extracts the review.
115
+ """
116
+ try:
117
+ from pydantic_ai import Agent as PydanticAgent
118
+
119
+ from code_muse.agents._builder import load_muse_rules
120
+ from code_muse.config import get_global_model_name
121
+ from code_muse.model_factory import ModelFactory, make_model_settings
122
+ from code_muse.model_utils import prepare_prompt_for_model
123
+
124
+ model_name = get_auto_review_model() or get_global_model_name()
125
+ if not model_name:
126
+ logger.warning("No model available for auto-review")
127
+ return None
128
+
129
+ models_config = ModelFactory.load_config()
130
+ if model_name not in models_config:
131
+ logger.warning("Reviewer model '%s' not found in config", model_name)
132
+ return None
133
+
134
+ model = ModelFactory.get_model(model_name, models_config)
135
+ if model is None:
136
+ logger.warning("Could not create reviewer model instance")
137
+ return None
138
+
139
+ # Build reviewer instructions
140
+ instructions = REVIEWER_SYSTEM_PROMPT
141
+ rules = load_muse_rules()
142
+ if rules:
143
+ instructions += f"\n\nProject rules:\n{rules}"
144
+
145
+ prepared = prepare_prompt_for_model(
146
+ model_name,
147
+ instructions,
148
+ prompt,
149
+ prepend_system_to_user=False,
150
+ )
151
+ instructions = prepared.instructions
152
+ user_prompt = prepared.user_prompt or prompt
153
+
154
+ model_settings = make_model_settings(model_name)
155
+
156
+ # Create a temporary agent with no tools — just text in, text out
157
+ review_agent = PydanticAgent(
158
+ model=model,
159
+ instructions=instructions,
160
+ output_type=str,
161
+ retries=1,
162
+ model_settings=model_settings,
163
+ )
164
+
165
+ result = await review_agent.run(user_prompt, message_history=[])
166
+ text = result.data if hasattr(result, "data") else str(result)
167
+
168
+ # Try to parse JSON from the response
169
+ # Look for JSON block first
170
+ import re
171
+
172
+ json_match = re.search(r"\{[^{}]*\}", text, re.DOTALL)
173
+ if json_match:
174
+ # Expand to find complete JSON object
175
+ start = text.find("{")
176
+ end = text.rfind("}") + 1
177
+ if start >= 0 and end > start:
178
+ json_str = text[start:end]
179
+ return json.loads(json_str)
180
+
181
+ # Try parsing entire response as JSON
182
+ try:
183
+ return json.loads(text)
184
+ except json.JSONDecodeError:
185
+ pass
186
+
187
+ # Fallback: simple heuristic
188
+ text_lower = text.lower()
189
+ if (
190
+ "looks good" in text_lower
191
+ or "approved" in text_lower
192
+ or "no issues" in text_lower
193
+ ):
194
+ return {
195
+ "verdict": "approved",
196
+ "summary": text[:200],
197
+ "issues": [],
198
+ "suggestion": None,
199
+ }
200
+ return {
201
+ "verdict": "flagged",
202
+ "summary": text[:200],
203
+ "issues": ["Reviewer produced unstructured output"],
204
+ "suggestion": None,
205
+ }
206
+
207
+ except Exception as exc:
208
+ logger.error("Auto-review LLM call failed: %s", exc, exc_info=True)
209
+ return None
210
+
211
+
212
+ async def run_auto_review(
213
+ tool_name: str,
214
+ tool_args: dict,
215
+ result: dict,
216
+ ) -> None:
217
+ """Main entry point — run auto-review on a completed tool call.
218
+
219
+ Called from the ``post_tool_call`` hook. Checks eligibility,
220
+ extracts context, checks cache, calls reviewer, emits results.
221
+ """
222
+ if not is_auto_review_enabled():
223
+ return
224
+
225
+ # Only review file modification tools
226
+ if tool_name not in _FILE_MOD_TOOLS:
227
+ return
228
+
229
+ context = _extract_review_context(tool_name, tool_args, result)
230
+ if context is None:
231
+ return
232
+
233
+ # Check cache
234
+ cache = get_review_cache()
235
+ cached = cache.get(context["file_path"], context["content_hash"])
236
+ if cached is not None:
237
+ emit_review_approved(context["file_path"], "Already reviewed (cached)")
238
+ return
239
+
240
+ # Emit visibility: review started
241
+ emit_review_started(context["file_path"])
242
+
243
+ # Build prompt and call reviewer
244
+ prompt = _build_reviewer_prompt(context)
245
+ review = await _call_reviewer_llm(prompt)
246
+
247
+ if review is None:
248
+ emit_review_error(context["file_path"], "Reviewer LLM call failed")
249
+ return
250
+
251
+ # Cache and emit result
252
+ cache.set(context["file_path"], context["content_hash"], review)
253
+
254
+ verdict = review.get("verdict", "flagged")
255
+ summary = review.get("summary", "No summary provided")
256
+ issues = review.get("issues", [])
257
+ suggestion = review.get("suggestion")
258
+
259
+ if verdict == "approved":
260
+ if suggestion:
261
+ summary += f" — Suggestion: {suggestion}"
262
+ emit_review_approved(context["file_path"], summary)
263
+ elif verdict == "rejected":
264
+ emit_review_rejected(context["file_path"], summary, issues)
265
+ else:
266
+ emit_review_flagged(context["file_path"], summary, issues)
267
+
268
+
269
+ # Tool: manual review request
270
+ async def request_manual_review(file_path: str, reason: str | None = None) -> dict:
271
+ """Request a manual code review for a specific file.
272
+
273
+ This is registered as an agent tool so users can trigger review explicitly.
274
+ """
275
+ try:
276
+ # Read the file content directly
277
+ file_content = ""
278
+ try:
279
+ from pathlib import Path
280
+
281
+ p = Path(file_path).expanduser().resolve()
282
+ if p.exists() and p.is_file():
283
+ file_content = p.read_text(encoding="utf-8", errors="replace")
284
+ except Exception:
285
+ pass
286
+
287
+ context = {
288
+ "file_path": file_path,
289
+ "operation": "manual_review",
290
+ "diff": file_content[:5000],
291
+ "content_hash": _compute_content_hash(file_path, file_content[:5000]),
292
+ }
293
+
294
+ prompt = _build_reviewer_prompt(context)
295
+ if reason:
296
+ prompt += f"\n\nReview focus: {reason}"
297
+
298
+ emit_review_started(file_path)
299
+ review = await _call_reviewer_llm(prompt)
300
+
301
+ if review is None:
302
+ return {"error": "Reviewer LLM call failed", "file_path": file_path}
303
+
304
+ return {
305
+ "file_path": file_path,
306
+ "verdict": review.get("verdict", "flagged"),
307
+ "summary": review.get("summary", ""),
308
+ "issues": review.get("issues", []),
309
+ "suggestion": review.get("suggestion"),
310
+ }
311
+
312
+ except Exception as exc:
313
+ logger.error("Manual review failed: %s", exc, exc_info=True)
314
+ return {"error": str(exc), "file_path": file_path}
@@ -0,0 +1,45 @@
1
+ """Visibility helpers for auto-review — emit visible status messages."""
2
+
3
+ import logging
4
+
5
+ from code_muse.messaging import emit_info, emit_success, emit_warning
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+
10
+ def emit_review_started(file_path: str) -> None:
11
+ """Emit a visible message that review is starting."""
12
+ emit_info(f"🔍 Auto-review in progress... ({file_path})")
13
+
14
+
15
+ def emit_review_approved(file_path: str, summary: str) -> None:
16
+ """Emit a success message when review passes."""
17
+ emit_success(f"✅ Auto-review passed: {summary}")
18
+
19
+
20
+ def emit_review_flagged(file_path: str, summary: str, issues: list[str]) -> None:
21
+ """Emit a warning when review flags issues."""
22
+ msg = f"⚠️ Auto-review: {summary}"
23
+ for issue in issues:
24
+ msg += f"\n • {issue}"
25
+ emit_warning(msg)
26
+
27
+
28
+ def emit_review_rejected(file_path: str, summary: str, issues: list[str]) -> None:
29
+ """Emit an error when review rejects the change."""
30
+ from code_muse.messaging import emit_error
31
+
32
+ msg = f"❌ Auto-review rejected: {summary}"
33
+ for issue in issues:
34
+ msg += f"\n • {issue}"
35
+ emit_error(msg)
36
+
37
+
38
+ def emit_review_skipped(reason: str) -> None:
39
+ """Emit info when review is skipped."""
40
+ emit_info(f"⏭️ Auto-review skipped: {reason}")
41
+
42
+
43
+ def emit_review_error(file_path: str, error_msg: str) -> None:
44
+ """Emit warning when the review itself fails."""
45
+ emit_warning(f"⚠️ Auto-review error for {file_path}: {error_msg}")
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-muse"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Muse — eternal guide of creators in the arts and sciences. An elegant AI coding assistant."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.14,<3.16"
File without changes
File without changes
File without changes