code-muse 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. code_muse/__init__.py +26 -0
  2. code_muse/__main__.py +10 -0
  3. code_muse/agents/__init__.py +31 -0
  4. code_muse/agents/_builder.py +214 -0
  5. code_muse/agents/_compaction.py +506 -0
  6. code_muse/agents/_diagnostics.py +171 -0
  7. code_muse/agents/_history.py +382 -0
  8. code_muse/agents/_key_listeners.py +148 -0
  9. code_muse/agents/_non_streaming_render.py +148 -0
  10. code_muse/agents/_runtime.py +596 -0
  11. code_muse/agents/agent_creator_agent.py +603 -0
  12. code_muse/agents/agent_helios.py +47 -0
  13. code_muse/agents/agent_manager.py +740 -0
  14. code_muse/agents/agent_muse.py +78 -0
  15. code_muse/agents/agent_planning.py +44 -0
  16. code_muse/agents/agent_qa_melpomene.py +207 -0
  17. code_muse/agents/base_agent.py +194 -0
  18. code_muse/agents/event_stream_handler.py +361 -0
  19. code_muse/agents/json_agent.py +201 -0
  20. code_muse/agents/prompt_v3.py +521 -0
  21. code_muse/agents/subagent_stream_handler.py +273 -0
  22. code_muse/callbacks.py +941 -0
  23. code_muse/chatgpt_codex_client.py +333 -0
  24. code_muse/claude_cache_client.py +853 -0
  25. code_muse/cli_runner/__init__.py +319 -0
  26. code_muse/cli_runner/args.py +63 -0
  27. code_muse/cli_runner/loop.py +510 -0
  28. code_muse/cli_runner/resume.py +72 -0
  29. code_muse/cli_runner/runner.py +161 -0
  30. code_muse/command_line/__init__.py +1 -0
  31. code_muse/command_line/add_model_menu.py +1331 -0
  32. code_muse/command_line/agent_menu.py +674 -0
  33. code_muse/command_line/attachments.py +397 -0
  34. code_muse/command_line/autosave_menu.py +709 -0
  35. code_muse/command_line/clipboard.py +528 -0
  36. code_muse/command_line/colors_menu.py +530 -0
  37. code_muse/command_line/command_handler.py +262 -0
  38. code_muse/command_line/command_registry.py +150 -0
  39. code_muse/command_line/config_commands.py +711 -0
  40. code_muse/command_line/core_commands.py +740 -0
  41. code_muse/command_line/diff_menu.py +865 -0
  42. code_muse/command_line/file_path_completion.py +73 -0
  43. code_muse/command_line/load_context_completion.py +57 -0
  44. code_muse/command_line/model_picker_completion.py +512 -0
  45. code_muse/command_line/model_settings_menu.py +983 -0
  46. code_muse/command_line/onboarding_slides.py +162 -0
  47. code_muse/command_line/onboarding_wizard.py +337 -0
  48. code_muse/command_line/pagination.py +41 -0
  49. code_muse/command_line/pin_command_completion.py +329 -0
  50. code_muse/command_line/prompt_toolkit_completion.py +886 -0
  51. code_muse/command_line/session_commands.py +304 -0
  52. code_muse/command_line/shell_passthrough.py +145 -0
  53. code_muse/command_line/skills_completion.py +158 -0
  54. code_muse/command_line/types.py +18 -0
  55. code_muse/command_line/uc_menu.py +908 -0
  56. code_muse/command_line/utils.py +105 -0
  57. code_muse/command_line/wiggum_state.py +77 -0
  58. code_muse/config.py +1138 -0
  59. code_muse/config_agent.py +168 -0
  60. code_muse/config_appearance.py +241 -0
  61. code_muse/config_model.py +357 -0
  62. code_muse/config_security.py +73 -0
  63. code_muse/error_logging.py +132 -0
  64. code_muse/evals/__init__.py +35 -0
  65. code_muse/evals/eval_helpers.py +81 -0
  66. code_muse/evals/eval_runner.py +299 -0
  67. code_muse/evals/sample_evals/__init__.py +1 -0
  68. code_muse/evals/sample_evals/eval_frugal_reads.py +59 -0
  69. code_muse/evals/sample_evals/eval_memory_planning.py +31 -0
  70. code_muse/evals/sample_evals/eval_shell_efficiency.py +39 -0
  71. code_muse/evals/sample_evals/eval_tool_masking.py +33 -0
  72. code_muse/fs_scan_cache/__init__.py +31 -0
  73. code_muse/fs_scan_cache/invalidation_hooks.py +89 -0
  74. code_muse/fs_scan_cache/scan_cache_core.cpython-314-darwin.so +0 -0
  75. code_muse/fs_scan_cache/scan_cache_core.pyx +203 -0
  76. code_muse/fs_scan_cache/tool_integration.py +309 -0
  77. code_muse/fs_scan_cache/ttl_policy.py +44 -0
  78. code_muse/gemini_code_assist.py +383 -0
  79. code_muse/gemini_model.py +838 -0
  80. code_muse/hook_engine/README.md +105 -0
  81. code_muse/hook_engine/__init__.py +21 -0
  82. code_muse/hook_engine/aliases.py +153 -0
  83. code_muse/hook_engine/engine.py +221 -0
  84. code_muse/hook_engine/executor.py +347 -0
  85. code_muse/hook_engine/matcher.py +154 -0
  86. code_muse/hook_engine/models.py +245 -0
  87. code_muse/hook_engine/registry.py +114 -0
  88. code_muse/hook_engine/trust.py +268 -0
  89. code_muse/hook_engine/validator.py +144 -0
  90. code_muse/http_utils.py +360 -0
  91. code_muse/keymap.py +128 -0
  92. code_muse/list_filtering.py +26 -0
  93. code_muse/main.py +10 -0
  94. code_muse/messaging/__init__.py +259 -0
  95. code_muse/messaging/bus.py +621 -0
  96. code_muse/messaging/commands.py +166 -0
  97. code_muse/messaging/markdown_patches.py +57 -0
  98. code_muse/messaging/message_queue.py +397 -0
  99. code_muse/messaging/messages.py +591 -0
  100. code_muse/messaging/queue_console.py +269 -0
  101. code_muse/messaging/renderers.py +308 -0
  102. code_muse/messaging/rich_renderer.py +1158 -0
  103. code_muse/messaging/shimmer.py +154 -0
  104. code_muse/messaging/spinner/__init__.py +87 -0
  105. code_muse/messaging/spinner/console_spinner.py +250 -0
  106. code_muse/messaging/spinner/spinner_base.py +82 -0
  107. code_muse/messaging/subagent_console.py +458 -0
  108. code_muse/model_factory.py +1203 -0
  109. code_muse/model_switching.py +59 -0
  110. code_muse/model_utils.py +156 -0
  111. code_muse/models.json +66 -0
  112. code_muse/models_cache/__init__.py +26 -0
  113. code_muse/models_cache/blocking_lru_cache.py +98 -0
  114. code_muse/models_cache/cache_writer.py +86 -0
  115. code_muse/models_cache/sha256_hash.cpython-314-darwin.so +0 -0
  116. code_muse/models_cache/sha256_hash.pyx +34 -0
  117. code_muse/models_cache/startup_integration.py +75 -0
  118. code_muse/models_dev_api.json +1 -0
  119. code_muse/models_dev_parser.py +590 -0
  120. code_muse/motion.py +126 -0
  121. code_muse/plugins/__init__.py +471 -0
  122. code_muse/plugins/agent_skills/__init__.py +32 -0
  123. code_muse/plugins/agent_skills/config.py +176 -0
  124. code_muse/plugins/agent_skills/discovery.py +309 -0
  125. code_muse/plugins/agent_skills/downloader.py +389 -0
  126. code_muse/plugins/agent_skills/installer.py +19 -0
  127. code_muse/plugins/agent_skills/metadata.py +293 -0
  128. code_muse/plugins/agent_skills/prompt_builder.py +66 -0
  129. code_muse/plugins/agent_skills/register_callbacks.py +298 -0
  130. code_muse/plugins/agent_skills/remote_catalog.py +320 -0
  131. code_muse/plugins/agent_skills/skill_catalog.py +254 -0
  132. code_muse/plugins/agent_skills/skills_install_menu.py +690 -0
  133. code_muse/plugins/agent_skills/skills_menu.py +791 -0
  134. code_muse/plugins/autonomous_memory/__init__.py +39 -0
  135. code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-darwin.so +0 -0
  136. code_muse/plugins/autonomous_memory/bm25_scorer.cpython-314-x86_64-linux-gnu.so +0 -0
  137. code_muse/plugins/autonomous_memory/bm25_scorer.pyx +291 -0
  138. code_muse/plugins/autonomous_memory/consolidation.py +82 -0
  139. code_muse/plugins/autonomous_memory/extraction.py +382 -0
  140. code_muse/plugins/autonomous_memory/lease_lock.py +105 -0
  141. code_muse/plugins/autonomous_memory/memory_injection.py +59 -0
  142. code_muse/plugins/autonomous_memory/register_callbacks.py +268 -0
  143. code_muse/plugins/autonomous_memory/secret_scanner.py +62 -0
  144. code_muse/plugins/autonomous_memory/session_scanner.py +163 -0
  145. code_muse/plugins/aws_bedrock/__init__.py +14 -0
  146. code_muse/plugins/aws_bedrock/config.py +99 -0
  147. code_muse/plugins/aws_bedrock/register_callbacks.py +241 -0
  148. code_muse/plugins/aws_bedrock/utils.py +153 -0
  149. code_muse/plugins/azure_foundry/README.md +238 -0
  150. code_muse/plugins/azure_foundry/__init__.py +15 -0
  151. code_muse/plugins/azure_foundry/config.py +125 -0
  152. code_muse/plugins/azure_foundry/discovery.py +187 -0
  153. code_muse/plugins/azure_foundry/register_callbacks.py +495 -0
  154. code_muse/plugins/azure_foundry/token.py +180 -0
  155. code_muse/plugins/azure_foundry/utils.py +345 -0
  156. code_muse/plugins/build_filter/__init__.py +1 -0
  157. code_muse/plugins/build_filter/register_callbacks.py +201 -0
  158. code_muse/plugins/build_filter/strategies/__init__.py +1 -0
  159. code_muse/plugins/build_filter/strategies/build.py +397 -0
  160. code_muse/plugins/chatgpt_oauth/__init__.py +6 -0
  161. code_muse/plugins/chatgpt_oauth/config.py +52 -0
  162. code_muse/plugins/chatgpt_oauth/oauth_flow.py +338 -0
  163. code_muse/plugins/chatgpt_oauth/register_callbacks.py +172 -0
  164. code_muse/plugins/chatgpt_oauth/test_plugin.py +301 -0
  165. code_muse/plugins/chatgpt_oauth/utils.py +538 -0
  166. code_muse/plugins/checkpointing/__init__.py +29 -0
  167. code_muse/plugins/checkpointing/checkpoint_hook.py +51 -0
  168. code_muse/plugins/checkpointing/conversation_snapshots.py +117 -0
  169. code_muse/plugins/checkpointing/register_callbacks.py +51 -0
  170. code_muse/plugins/checkpointing/restore_command.py +263 -0
  171. code_muse/plugins/checkpointing/rewind_shortcut.py +88 -0
  172. code_muse/plugins/checkpointing/shadow_git.py +90 -0
  173. code_muse/plugins/claude_code_hooks/__init__.py +1 -0
  174. code_muse/plugins/claude_code_hooks/config.py +188 -0
  175. code_muse/plugins/claude_code_hooks/register_callbacks.py +208 -0
  176. code_muse/plugins/claude_code_oauth/README.md +167 -0
  177. code_muse/plugins/claude_code_oauth/SETUP.md +93 -0
  178. code_muse/plugins/claude_code_oauth/__init__.py +25 -0
  179. code_muse/plugins/claude_code_oauth/config.py +52 -0
  180. code_muse/plugins/claude_code_oauth/fast_mode.py +124 -0
  181. code_muse/plugins/claude_code_oauth/prompt_handler.py +63 -0
  182. code_muse/plugins/claude_code_oauth/register_callbacks.py +547 -0
  183. code_muse/plugins/claude_code_oauth/test_fast_mode.py +165 -0
  184. code_muse/plugins/claude_code_oauth/test_plugin.py +283 -0
  185. code_muse/plugins/claude_code_oauth/token_refresh_heartbeat.py +237 -0
  186. code_muse/plugins/claude_code_oauth/utils.py +664 -0
  187. code_muse/plugins/copilot_auth/__init__.py +11 -0
  188. code_muse/plugins/copilot_auth/config.py +91 -0
  189. code_muse/plugins/copilot_auth/reasoning_client.py +409 -0
  190. code_muse/plugins/copilot_auth/register_callbacks.py +461 -0
  191. code_muse/plugins/copilot_auth/utils.py +584 -0
  192. code_muse/plugins/custom_commands/__init__.py +14 -0
  193. code_muse/plugins/custom_commands/args_injection.py +82 -0
  194. code_muse/plugins/custom_commands/command_discovery.py +89 -0
  195. code_muse/plugins/custom_commands/command_toml_schema.py +71 -0
  196. code_muse/plugins/custom_commands/register_callbacks.py +176 -0
  197. code_muse/plugins/customizable_commands/__init__.py +0 -0
  198. code_muse/plugins/customizable_commands/register_callbacks.py +136 -0
  199. code_muse/plugins/destructive_command_guard/__init__.py +14 -0
  200. code_muse/plugins/destructive_command_guard/detector.py +375 -0
  201. code_muse/plugins/destructive_command_guard/register_callbacks.py +148 -0
  202. code_muse/plugins/example_custom_command/README.md +280 -0
  203. code_muse/plugins/example_custom_command/register_callbacks.py +51 -0
  204. code_muse/plugins/file_permission_handler/__init__.py +4 -0
  205. code_muse/plugins/file_permission_handler/register_callbacks.py +441 -0
  206. code_muse/plugins/filter_engine/__init__.py +30 -0
  207. code_muse/plugins/filter_engine/classifier.py +153 -0
  208. code_muse/plugins/filter_engine/content_detector.py +184 -0
  209. code_muse/plugins/filter_engine/dispatcher.py +244 -0
  210. code_muse/plugins/filter_engine/register_callbacks.py +188 -0
  211. code_muse/plugins/filter_engine/registry.py +279 -0
  212. code_muse/plugins/filter_engine/strategies/__init__.py +8 -0
  213. code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-darwin.so +0 -0
  214. code_muse/plugins/filter_engine/strategies/ast_compressor.cpython-314-x86_64-linux-gnu.so +0 -0
  215. code_muse/plugins/filter_engine/strategies/ast_compressor.pyx +348 -0
  216. code_muse/plugins/filter_engine/strategies/ast_parser.py +167 -0
  217. code_muse/plugins/filter_engine/strategies/code.cpython-314-darwin.so +0 -0
  218. code_muse/plugins/filter_engine/strategies/code.cpython-314-x86_64-linux-gnu.so +0 -0
  219. code_muse/plugins/filter_engine/strategies/code.pyx +584 -0
  220. code_muse/plugins/filter_engine/strategies/git.cpython-314-darwin.so +0 -0
  221. code_muse/plugins/filter_engine/strategies/git.cpython-314-x86_64-linux-gnu.so +0 -0
  222. code_muse/plugins/filter_engine/strategies/git.pyx +438 -0
  223. code_muse/plugins/filter_engine/strategies/json_compressor.cpython-314-darwin.so +0 -0
  224. code_muse/plugins/filter_engine/strategies/json_compressor.pyx +253 -0
  225. code_muse/plugins/filter_engine/strategies/json_patterns.cpython-314-darwin.so +0 -0
  226. code_muse/plugins/filter_engine/strategies/json_patterns.pyx +178 -0
  227. code_muse/plugins/filter_engine/strategies/lint.cpython-314-darwin.so +0 -0
  228. code_muse/plugins/filter_engine/strategies/lint.cpython-314-x86_64-linux-gnu.so +0 -0
  229. code_muse/plugins/filter_engine/strategies/lint.pyx +626 -0
  230. code_muse/plugins/filter_engine/strategies/test.cpython-314-darwin.so +0 -0
  231. code_muse/plugins/filter_engine/strategies/test.cpython-314-x86_64-linux-gnu.so +0 -0
  232. code_muse/plugins/filter_engine/strategies/test.pyx +431 -0
  233. code_muse/plugins/filter_engine/verbosity.py +63 -0
  234. code_muse/plugins/force_push_guard/__init__.py +5 -0
  235. code_muse/plugins/force_push_guard/detector.py +96 -0
  236. code_muse/plugins/force_push_guard/register_callbacks.py +144 -0
  237. code_muse/plugins/force_push_guard/test_detector.py +143 -0
  238. code_muse/plugins/frontend_emitter/__init__.py +25 -0
  239. code_muse/plugins/frontend_emitter/emitter.py +121 -0
  240. code_muse/plugins/frontend_emitter/register_callbacks.py +259 -0
  241. code_muse/plugins/gac/__init__.py +4 -0
  242. code_muse/plugins/gac/git_ops.py +136 -0
  243. code_muse/plugins/gac/prompt.py +191 -0
  244. code_muse/plugins/gac/register_callbacks.py +82 -0
  245. code_muse/plugins/hook_creator/__init__.py +1 -0
  246. code_muse/plugins/hook_creator/register_callbacks.py +34 -0
  247. code_muse/plugins/hook_manager/__init__.py +1 -0
  248. code_muse/plugins/hook_manager/config.py +289 -0
  249. code_muse/plugins/hook_manager/hooks_menu.py +563 -0
  250. code_muse/plugins/hook_manager/register_callbacks.py +227 -0
  251. code_muse/plugins/hook_monitor/register_callbacks.py +36 -0
  252. code_muse/plugins/mindpack/__init__.py +0 -0
  253. code_muse/plugins/mindpack/factory.py +930 -0
  254. code_muse/plugins/mindpack/judge.py +573 -0
  255. code_muse/plugins/mindpack/memory.py +100 -0
  256. code_muse/plugins/mindpack/mindpack_menu.py +1552 -0
  257. code_muse/plugins/mindpack/orchestration.py +605 -0
  258. code_muse/plugins/mindpack/register_callbacks.py +175 -0
  259. code_muse/plugins/mindpack/schemas.py +358 -0
  260. code_muse/plugins/mindpack/tools.py +387 -0
  261. code_muse/plugins/oauth_muse_html.py +226 -0
  262. code_muse/plugins/ollama_setup/__init__.py +5 -0
  263. code_muse/plugins/ollama_setup/completer.py +36 -0
  264. code_muse/plugins/ollama_setup/register_callbacks.py +410 -0
  265. code_muse/plugins/plan_command/__init__.py +0 -0
  266. code_muse/plugins/plan_command/register_callbacks.py +206 -0
  267. code_muse/plugins/plan_mode/__init__.py +37 -0
  268. code_muse/plugins/plan_mode/mode_cycling.py +40 -0
  269. code_muse/plugins/plan_mode/plan_generation.py +68 -0
  270. code_muse/plugins/plan_mode/plan_hooks.py +74 -0
  271. code_muse/plugins/plan_mode/plan_mode_tools.py +138 -0
  272. code_muse/plugins/plan_mode/register_callbacks.py +121 -0
  273. code_muse/plugins/plugin_trust/register_callbacks.py +140 -0
  274. code_muse/plugins/policy_engine/__init__.py +46 -0
  275. code_muse/plugins/policy_engine/approval_flow_integration.py +59 -0
  276. code_muse/plugins/policy_engine/policy_evaluator.py +75 -0
  277. code_muse/plugins/policy_engine/policy_file_discovery.py +90 -0
  278. code_muse/plugins/policy_engine/policy_toml_schema.py +115 -0
  279. code_muse/plugins/policy_engine/register_callbacks.py +112 -0
  280. code_muse/plugins/pop_command/__init__.py +1 -0
  281. code_muse/plugins/pop_command/register_callbacks.py +189 -0
  282. code_muse/plugins/prompt_newline/__init__.py +13 -0
  283. code_muse/plugins/prompt_newline/config.py +19 -0
  284. code_muse/plugins/prompt_newline/register_callbacks.py +159 -0
  285. code_muse/plugins/safety_status/__init__.py +0 -0
  286. code_muse/plugins/safety_status/register_callbacks.py +113 -0
  287. code_muse/plugins/semantic_compression/__init__.py +6 -0
  288. code_muse/plugins/semantic_compression/compressor.py +295 -0
  289. code_muse/plugins/semantic_compression/config.py +123 -0
  290. code_muse/plugins/semantic_compression/register_callbacks.py +320 -0
  291. code_muse/plugins/shell_minimizer/__init__.py +50 -0
  292. code_muse/plugins/shell_minimizer/builtin_filters.toml +393 -0
  293. code_muse/plugins/shell_minimizer/pipeline.py +556 -0
  294. code_muse/plugins/shell_minimizer/primitives.py +482 -0
  295. code_muse/plugins/shell_minimizer/register_callbacks.py +276 -0
  296. code_muse/plugins/shell_safety/__init__.py +6 -0
  297. code_muse/plugins/shell_safety/agent_shell_safety.py +69 -0
  298. code_muse/plugins/shell_safety/command_cache.py +149 -0
  299. code_muse/plugins/shell_safety/register_callbacks.py +202 -0
  300. code_muse/plugins/synthetic_status/__init__.py +1 -0
  301. code_muse/plugins/synthetic_status/register_callbacks.py +128 -0
  302. code_muse/plugins/synthetic_status/status_api.py +145 -0
  303. code_muse/plugins/token_caching/__init__.py +21 -0
  304. code_muse/plugins/token_caching/cache_hit_tracking.py +128 -0
  305. code_muse/plugins/token_caching/cacheable_prefix_detection.py +28 -0
  306. code_muse/plugins/token_caching/register_callbacks.py +54 -0
  307. code_muse/plugins/token_caching/stats_display.py +35 -0
  308. code_muse/plugins/token_tracking/__init__.py +26 -0
  309. code_muse/plugins/token_tracking/database.py +381 -0
  310. code_muse/plugins/token_tracking/edit_analyzer.py +97 -0
  311. code_muse/plugins/token_tracking/record.py +55 -0
  312. code_muse/plugins/token_tracking/register_callbacks.py +277 -0
  313. code_muse/plugins/token_tracking/reports.py +329 -0
  314. code_muse/plugins/universal_constructor/__init__.py +13 -0
  315. code_muse/plugins/universal_constructor/models.py +136 -0
  316. code_muse/plugins/universal_constructor/register_callbacks.py +47 -0
  317. code_muse/plugins/universal_constructor/registry.py +390 -0
  318. code_muse/plugins/universal_constructor/runner.py +474 -0
  319. code_muse/plugins/universal_constructor/safety.py +440 -0
  320. code_muse/plugins/universal_constructor/sandbox.py +584 -0
  321. code_muse/provider_identity.py +105 -0
  322. code_muse/pydantic_patches.py +410 -0
  323. code_muse/reopenable_async_client.py +233 -0
  324. code_muse/round_robin_model.py +151 -0
  325. code_muse/secret_storage.py +74 -0
  326. code_muse/security/__init__.py +1 -0
  327. code_muse/security/redaction.cpython-314-darwin.so +0 -0
  328. code_muse/security/redaction.cpython-314-x86_64-linux-gnu.so +0 -0
  329. code_muse/security/redaction.pyx +135 -0
  330. code_muse/session_storage.py +565 -0
  331. code_muse/status_display.py +261 -0
  332. code_muse/stream_parser/__init__.py +76 -0
  333. code_muse/stream_parser/assistant_text_parser.py +90 -0
  334. code_muse/stream_parser/citation_parser.py +76 -0
  335. code_muse/stream_parser/inline_hidden_tag_parser.py +236 -0
  336. code_muse/stream_parser/proposed_plan_parser.py +158 -0
  337. code_muse/stream_parser/stream_text_chunk.py +23 -0
  338. code_muse/stream_parser/stream_text_parser.py +27 -0
  339. code_muse/stream_parser/tagged_line_parser.cpython-314-darwin.so +0 -0
  340. code_muse/stream_parser/tagged_line_parser.pyx +251 -0
  341. code_muse/stream_parser/utf8_stream_parser.cpython-314-darwin.so +0 -0
  342. code_muse/stream_parser/utf8_stream_parser.pyx +206 -0
  343. code_muse/summarization_agent.py +308 -0
  344. code_muse/terminal_utils.cpython-314-darwin.so +0 -0
  345. code_muse/terminal_utils.cpython-314-x86_64-linux-gnu.so +0 -0
  346. code_muse/terminal_utils.pyx +483 -0
  347. code_muse/tools/__init__.py +459 -0
  348. code_muse/tools/agent_tools.py +613 -0
  349. code_muse/tools/ask_user_question/__init__.py +26 -0
  350. code_muse/tools/ask_user_question/constants.py +73 -0
  351. code_muse/tools/ask_user_question/demo_tui.py +55 -0
  352. code_muse/tools/ask_user_question/handler.py +232 -0
  353. code_muse/tools/ask_user_question/models.py +302 -0
  354. code_muse/tools/ask_user_question/registration.py +37 -0
  355. code_muse/tools/ask_user_question/renderers.py +336 -0
  356. code_muse/tools/ask_user_question/terminal_ui.py +327 -0
  357. code_muse/tools/ask_user_question/theme.py +156 -0
  358. code_muse/tools/ask_user_question/tui_loop.py +422 -0
  359. code_muse/tools/background_jobs.py +99 -0
  360. code_muse/tools/browser/__init__.py +37 -0
  361. code_muse/tools/browser/browser_control.py +289 -0
  362. code_muse/tools/browser/browser_interactions.py +545 -0
  363. code_muse/tools/browser/browser_locators.py +640 -0
  364. code_muse/tools/browser/browser_manager.py +376 -0
  365. code_muse/tools/browser/browser_navigation.py +251 -0
  366. code_muse/tools/browser/browser_screenshot.py +180 -0
  367. code_muse/tools/browser/browser_scripts.py +462 -0
  368. code_muse/tools/browser/browser_workflows.py +222 -0
  369. code_muse/tools/chrome_cdp/__init__.py +1070 -0
  370. code_muse/tools/chrome_cdp/register_callbacks.py +61 -0
  371. code_muse/tools/command_runner.py +1401 -0
  372. code_muse/tools/common.py +1407 -0
  373. code_muse/tools/display.py +87 -0
  374. code_muse/tools/file_modifications.py +1099 -0
  375. code_muse/tools/file_operations.py +860 -0
  376. code_muse/tools/image_tools.py +185 -0
  377. code_muse/tools/meetin_proxy/__init__.py +243 -0
  378. code_muse/tools/meetin_proxy/capture_addon.py +82 -0
  379. code_muse/tools/meetin_proxy/proxy_manager.py +326 -0
  380. code_muse/tools/meetin_proxy/register_callbacks.py +45 -0
  381. code_muse/tools/path_policy.py +219 -0
  382. code_muse/tools/skills_tools.py +586 -0
  383. code_muse/tools/subagent_context.py +158 -0
  384. code_muse/tools/tools_content.py +50 -0
  385. code_muse/tools/universal_constructor.py +965 -0
  386. code_muse/uvx_detection.py +241 -0
  387. code_muse/version_checker.py +86 -0
  388. code_muse-0.0.1.data/data/code_muse/models.json +66 -0
  389. code_muse-0.0.1.data/data/code_muse/models_dev_api.json +1 -0
  390. code_muse-0.0.1.dist-info/METADATA +845 -0
  391. code_muse-0.0.1.dist-info/RECORD +394 -0
  392. code_muse-0.0.1.dist-info/WHEEL +4 -0
  393. code_muse-0.0.1.dist-info/entry_points.txt +2 -0
  394. code_muse-0.0.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,319 @@
1
+ """CLI runner for Muse.
2
+
3
+ Contains the main application logic, interactive mode, and entry point.
4
+ """
5
+
6
+ # Apply pydantic-ai patches BEFORE any pydantic-ai imports
7
+ from code_muse.pydantic_patches import apply_all_patches
8
+
9
+ apply_all_patches()
10
+
11
+ import asyncio
12
+ import os
13
+ import sys
14
+ import traceback
15
+
16
+ from rich.console import Console
17
+
18
+ from code_muse import __version__, callbacks, plugins
19
+ from code_muse.agents import get_available_agents, get_current_agent, set_current_agent
20
+ from code_muse.cli_runner.args import build_parser
21
+ from code_muse.cli_runner.loop import interactive_mode
22
+ from code_muse.cli_runner.resume import _resume_session_from_path
23
+ from code_muse.cli_runner.runner import (
24
+ execute_single_prompt,
25
+ run_prompt_with_attachments,
26
+ )
27
+ from code_muse.command_line.attachments import parse_prompt_attachments
28
+ from code_muse.command_line.clipboard import get_clipboard_manager
29
+ from code_muse.config import (
30
+ AUTOSAVE_DIR,
31
+ COMMAND_HISTORY_FILE,
32
+ ensure_config_exists,
33
+ finalize_autosave_session,
34
+ initialize_command_history_file,
35
+ save_command_to_history,
36
+ )
37
+ from code_muse.http_utils import find_available_port
38
+ from code_muse.keymap import (
39
+ KeymapError,
40
+ get_cancel_agent_display_name,
41
+ validate_cancel_agent_key,
42
+ )
43
+ from code_muse.messaging import (
44
+ emit_error,
45
+ emit_info,
46
+ emit_success,
47
+ emit_system_message,
48
+ emit_warning,
49
+ )
50
+ from code_muse.terminal_utils import (
51
+ print_truecolor_warning,
52
+ reset_unix_terminal,
53
+ reset_windows_terminal_ansi,
54
+ reset_windows_terminal_full,
55
+ )
56
+ from code_muse.version_checker import default_version_mismatch_behavior
57
+
58
+ plugins.load_plugin_callbacks()
59
+
60
+ __all__ = [
61
+ "interactive_mode",
62
+ "execute_single_prompt",
63
+ "run_prompt_with_attachments",
64
+ "main",
65
+ "main_entry",
66
+ ]
67
+
68
+
69
+ async def main():
70
+ """Main async entry point for Muse CLI."""
71
+ parser = build_parser()
72
+ args = parser.parse_args()
73
+
74
+ from code_muse.messaging import (
75
+ RichConsoleRenderer,
76
+ SynchronousInteractiveRenderer,
77
+ get_global_queue,
78
+ get_message_bus,
79
+ )
80
+
81
+ # Create a shared console for both renderers
82
+ display_console = Console()
83
+
84
+ # Legacy renderer for backward compatibility (emits via get_global_queue)
85
+ message_queue = get_global_queue()
86
+ message_renderer = SynchronousInteractiveRenderer(message_queue, display_console)
87
+ message_renderer.start()
88
+
89
+ # New MessageBus renderer for structured messages (tools emit here)
90
+ message_bus = get_message_bus()
91
+ bus_renderer = RichConsoleRenderer(message_bus, display_console)
92
+ bus_renderer.start()
93
+
94
+ initialize_command_history_file()
95
+
96
+ # Show the awesome Muse logo when entering interactive mode
97
+ # This happens when: no -p flag (prompt-only mode) is used
98
+ # The logo should appear for both `muse` and `muse -i`
99
+ if not args.prompt:
100
+ try:
101
+ import pyfiglet
102
+
103
+ intro_lines = pyfiglet.figlet_format(
104
+ "FAST PUPPY", font="ansi_shadow"
105
+ ).split("\n")
106
+
107
+ # Simple blue to green gradient (top to bottom)
108
+ gradient_colors = ["bright_blue", "bright_cyan", "bright_green"]
109
+ display_console.print("\n")
110
+
111
+ lines = []
112
+ # Apply gradient line by line
113
+ for line_num, line in enumerate(intro_lines):
114
+ if line.strip():
115
+ # Use line position to determine color
116
+ # (top blue, middle cyan, bottom green)
117
+ color_idx = min(line_num // 2, len(gradient_colors) - 1)
118
+ color = gradient_colors[color_idx]
119
+ lines.append(f"[{color}]{line}[/{color}]")
120
+ else:
121
+ lines.append("")
122
+ # Print directly to console to avoid
123
+ # the 'dim' style from emit_system_message
124
+ display_console.print("\n".join(lines))
125
+ except ImportError:
126
+ emit_system_message("Loading...")
127
+
128
+ # Truecolor warning moved to interactive_mode() so it prints LAST
129
+ # after all the help stuff - max visibility for the ugly red box!
130
+
131
+ available_port = await asyncio.to_thread(find_available_port)
132
+ if available_port is None:
133
+ emit_error("No available ports in range 8090-9010!")
134
+ return
135
+
136
+ # Early model setting if specified via command line
137
+ # This happens before ensure_config_exists() to ensure config is set up correctly
138
+ early_model = None
139
+ if args.model:
140
+ early_model = args.model.strip()
141
+ from code_muse.config import set_model_name
142
+
143
+ set_model_name(early_model)
144
+
145
+ ensure_config_exists()
146
+
147
+ # Validate cancel_agent_key configuration early
148
+ try:
149
+ validate_cancel_agent_key()
150
+ except KeymapError as e:
151
+ emit_error(str(e))
152
+ sys.exit(1)
153
+
154
+ # Show uvx detection notice if we're on Windows + uvx
155
+ # Also disable Ctrl+C at the console level to prevent terminal bricking
156
+ try:
157
+ from code_muse.uvx_detection import should_use_alternate_cancel_key
158
+
159
+ if should_use_alternate_cancel_key():
160
+ from code_muse.terminal_utils import (
161
+ disable_windows_ctrl_c,
162
+ set_keep_ctrl_c_disabled,
163
+ )
164
+
165
+ # Disable Ctrl+C at the console input level
166
+ # This prevents Ctrl+C from being processed as a signal at all
167
+ disable_windows_ctrl_c()
168
+
169
+ # Set flag to keep it disabled (prompt_toolkit may re-enable it)
170
+ set_keep_ctrl_c_disabled(True)
171
+
172
+ # Use print directly - emit_system_message can get cleared by ANSI codes
173
+ print(
174
+ "🔧 Detected uvx launch on Windows - using Ctrl+K for cancellation "
175
+ "(Ctrl+C is disabled to prevent terminal issues)"
176
+ )
177
+
178
+ # Also install a SIGINT handler as backup
179
+ import signal
180
+
181
+ def _uvx_protective_sigint_handler(_sig, _frame):
182
+ """Protective SIGINT handler for Windows+uvx."""
183
+ reset_windows_terminal_full()
184
+ # Re-disable Ctrl+C in case something re-enabled it
185
+ disable_windows_ctrl_c()
186
+
187
+ signal.signal(signal.SIGINT, _uvx_protective_sigint_handler)
188
+ except ImportError:
189
+ pass # uvx_detection module not available, ignore
190
+
191
+ # Load API keys from muse.cfg into environment variables
192
+ from code_muse.config import load_api_keys_to_environment
193
+
194
+ load_api_keys_to_environment()
195
+
196
+ # Handle model validation from command line
197
+ # (validation happens here, setting was earlier)
198
+ if args.model:
199
+ from code_muse.config import _validate_model_exists
200
+
201
+ model_name = args.model.strip()
202
+ try:
203
+ # Validate that the model exists in models.json
204
+ if not _validate_model_exists(model_name):
205
+ from code_muse.model_factory import ModelFactory
206
+
207
+ models_config = ModelFactory.load_config()
208
+ available_models = list(models_config.keys()) if models_config else []
209
+
210
+ emit_error(f"Model '{model_name}' not found")
211
+ emit_system_message(f"Available models: {', '.join(available_models)}")
212
+ sys.exit(1)
213
+
214
+ # Model is valid, show confirmation (already set earlier)
215
+ emit_system_message(f"🎯 Using model: {model_name}")
216
+ except Exception as e:
217
+ emit_error(f"Error validating model: {str(e)}")
218
+ sys.exit(1)
219
+
220
+ # Handle agent selection from command line
221
+ if args.agent:
222
+ agent_name = args.agent.lower()
223
+ try:
224
+ # First check if the agent exists by getting available agents
225
+ available_agents = get_available_agents()
226
+ if agent_name not in available_agents:
227
+ emit_error(f"Agent '{agent_name}' not found")
228
+ emit_system_message(
229
+ f"Available agents: {', '.join(available_agents.keys())}"
230
+ )
231
+ sys.exit(1)
232
+
233
+ # Agent exists, set it
234
+ set_current_agent(agent_name)
235
+ emit_system_message(f"🤖 Using agent: {agent_name}")
236
+ except Exception as e:
237
+ emit_error(f"Error setting agent: {str(e)}")
238
+ sys.exit(1)
239
+
240
+ current_version = __version__
241
+
242
+ no_version_update = os.getenv("NO_VERSION_UPDATE", "").lower() in (
243
+ "1",
244
+ "true",
245
+ "yes",
246
+ "on",
247
+ )
248
+ if no_version_update:
249
+ version_msg = f"Current version: {current_version}"
250
+ update_disabled_msg = (
251
+ "Update phase disabled because NO_VERSION_UPDATE is set to 1 or true"
252
+ )
253
+ emit_system_message(version_msg)
254
+ emit_system_message(update_disabled_msg)
255
+ else:
256
+ if len(callbacks.get_callbacks("version_check")):
257
+ await callbacks.on_version_check(current_version)
258
+ else:
259
+ default_version_mismatch_behavior(current_version)
260
+
261
+ await callbacks.on_startup()
262
+
263
+ if args.resume:
264
+ _resume_session_from_path(
265
+ args.resume, allow_legacy=args.import_legacy_pickle_session
266
+ )
267
+
268
+ try:
269
+ initial_command = None
270
+ prompt_only_mode = False
271
+
272
+ if args.prompt:
273
+ initial_command = args.prompt
274
+ prompt_only_mode = True
275
+ elif args.command:
276
+ initial_command = " ".join(args.command)
277
+ prompt_only_mode = False
278
+
279
+ if prompt_only_mode:
280
+ await execute_single_prompt(initial_command, message_renderer)
281
+ else:
282
+ # Default to interactive mode (no args = same as -i)
283
+ await interactive_mode(message_renderer, initial_command=initial_command)
284
+ finally:
285
+ if message_renderer:
286
+ message_renderer.stop()
287
+ if bus_renderer:
288
+ bus_renderer.stop()
289
+ await callbacks.on_shutdown()
290
+
291
+
292
+ def main_entry():
293
+ """Entry point for the installed CLI tool."""
294
+ exit_code = 0
295
+ try:
296
+ asyncio.run(main())
297
+ except KeyboardInterrupt:
298
+ # Note: Using sys.stderr for crash output -
299
+ # messaging system may not be available
300
+ sys.stderr.write(traceback.format_exc())
301
+ exit_code = 130 # Standard SIGINT exit code
302
+ finally:
303
+ # Explicitly shut down subsystems before the process exits.
304
+ # The atexit hooks provide a safety net, but calling them
305
+ # here ensures orderly cleanup even if daemon threads keep
306
+ # the interpreter alive briefly after asyncio.run() returns.
307
+ try:
308
+ from code_muse.tools import command_runner
309
+
310
+ command_runner.shutdown()
311
+ except Exception:
312
+ pass
313
+ try:
314
+ callbacks._shutdown_executor()
315
+ except Exception:
316
+ pass
317
+ # Reset terminal on Unix-like systems (not Windows)
318
+ reset_unix_terminal()
319
+ return exit_code
@@ -0,0 +1,63 @@
1
+ """CLI argument parsing for Muse."""
2
+
3
+ import argparse
4
+
5
+ from code_muse import __version__
6
+
7
+
8
+ def build_parser():
9
+ """Build and return the argument parser."""
10
+ parser = argparse.ArgumentParser(description="Muse - A code generation agent")
11
+ parser.add_argument(
12
+ "--version",
13
+ "-v",
14
+ action="version",
15
+ version=f"{__version__}",
16
+ help="Show version and exit",
17
+ )
18
+ parser.add_argument(
19
+ "--interactive",
20
+ "-i",
21
+ action="store_true",
22
+ help="Run in interactive mode",
23
+ )
24
+ parser.add_argument(
25
+ "--prompt",
26
+ "-p",
27
+ type=str,
28
+ help="Execute a single prompt and exit (no interactive mode)",
29
+ )
30
+ parser.add_argument(
31
+ "--agent",
32
+ "-a",
33
+ type=str,
34
+ help="Specify which agent to use (e.g., --agent muse)",
35
+ )
36
+ parser.add_argument(
37
+ "--model",
38
+ "-m",
39
+ type=str,
40
+ help="Specify which model to use (e.g., --model gpt-5)",
41
+ )
42
+ parser.add_argument(
43
+ "--resume",
44
+ "-r",
45
+ type=str,
46
+ metavar="PATH",
47
+ help=(
48
+ "Resume a saved session from a .json file "
49
+ "(e.g. ~/.muse/contexts/foo.json)"
50
+ ),
51
+ )
52
+ parser.add_argument(
53
+ "--import-legacy-pickle-session",
54
+ action="store_true",
55
+ help=(
56
+ "DANGER: allow loading a legacy .pkl session file "
57
+ "(pickle can execute arbitrary code)"
58
+ ),
59
+ )
60
+ parser.add_argument(
61
+ "command", nargs="*", help="Run a single command (deprecated, use -p instead)"
62
+ )
63
+ return parser