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,168 @@
1
+ """Config: agent settings."""
2
+
3
+ import configparser
4
+
5
+ import code_muse.config as _config
6
+
7
+ PACK_AGENT_NAMES = frozenset(
8
+ [
9
+ "pack-leader",
10
+ "bloodhound",
11
+ "shepherd",
12
+ "terrier",
13
+ "watchdog",
14
+ "retriever",
15
+ ]
16
+ )
17
+ UC_AGENT_NAMES = frozenset(["helios"])
18
+
19
+
20
+ def get_pack_agents_enabled() -> bool:
21
+ """Return True if pack agents are enabled (default False).
22
+
23
+ When False (default), pack agents (pack-leader, bloodhound, shepherd,
24
+ terrier, watchdog, retriever) are hidden from `list_agents` tool and `/agents`
25
+ command. They cannot be invoked by other agents or selected by users.
26
+
27
+ When True, pack agents are available for use.
28
+ """
29
+ cfg_val = _config.get_value("enable_pack_agents")
30
+ if cfg_val is None:
31
+ return False
32
+ return str(cfg_val).strip().lower() in {"1", "true", "yes", "on"}
33
+
34
+
35
+ def get_universal_constructor_enabled() -> bool:
36
+ """Return True if the Universal Constructor is enabled (default True).
37
+
38
+ The Universal Constructor allows agents to dynamically create, manage,
39
+ and execute custom tools at runtime. When enabled, agents can extend
40
+ their capabilities by writing Python code that becomes callable tools.
41
+
42
+ When False, the universal_constructor tool is not registered with agents.
43
+ """
44
+ cfg_val = _config.get_value("enable_universal_constructor")
45
+ if cfg_val is None:
46
+ return True # Enabled by default
47
+ return str(cfg_val).strip().lower() in {"1", "true", "yes", "on"}
48
+
49
+
50
+ def set_universal_constructor_enabled(enabled: bool) -> None:
51
+ """Enable or disable the Universal Constructor.
52
+
53
+ Args:
54
+ enabled: True to enable, False to disable
55
+ """
56
+ _config.set_value("enable_universal_constructor", "true" if enabled else "false")
57
+
58
+
59
+ def get_user_agents_directory() -> str:
60
+ """Get the user's agents directory path.
61
+
62
+ Returns:
63
+ Path to the user's Muse agents directory.
64
+ """
65
+ # Ensure the agents directory exists
66
+ _config.AGENTS_DIR.mkdir(parents=True, exist_ok=True)
67
+ return str(_config.AGENTS_DIR)
68
+
69
+
70
+ def get_project_agents_directory() -> str | None:
71
+ """Get the project-local agents directory path.
72
+
73
+ Looks for a .muse/agents/ directory in the current working directory.
74
+ Unlike get_user_agents_directory(), this does NOT create the directory
75
+ if it doesn't exist -- the team must create it intentionally.
76
+
77
+ Returns:
78
+ Path to the project's agents directory if it exists, or None.
79
+ """
80
+ project_agents_dir = _config.Path.cwd() / ".muse" / "agents"
81
+ if project_agents_dir.is_dir():
82
+ return str(project_agents_dir)
83
+ return None
84
+
85
+
86
+ def get_agent_pinned_model(agent_name: str) -> str:
87
+ """Get the pinned model for a specific agent.
88
+
89
+ Args:
90
+ agent_name: Name of the agent to get the pinned model for.
91
+
92
+ Returns:
93
+ Pinned model name, or None if no model is pinned for this agent.
94
+ """
95
+ return _config.get_value(f"agent_model_{agent_name}")
96
+
97
+
98
+ def set_agent_pinned_model(agent_name: str, model_name: str):
99
+ """Set the pinned model for a specific agent.
100
+
101
+ Args:
102
+ agent_name: Name of the agent to pin the model for.
103
+ model_name: Model name to pin to this agent.
104
+ """
105
+ _config.set_config_value(f"agent_model_{agent_name}", model_name)
106
+
107
+
108
+ def clear_agent_pinned_model(agent_name: str):
109
+ """Clear the pinned model for a specific agent.
110
+
111
+ Args:
112
+ agent_name: Name of the agent to clear the pinned model for.
113
+ """
114
+ # We can't easily delete keys from configparser, so set to empty string
115
+ # which will be treated as None by get_agent_pinned_model
116
+ _config.set_config_value(f"agent_model_{agent_name}", "")
117
+
118
+
119
+ def get_all_agent_pinned_models() -> dict:
120
+ """Get all agent-to-model pinnings from config.
121
+
122
+ Returns:
123
+ Dict mapping agent names to their pinned model names.
124
+ Only includes agents that have a pinned model (non-empty value).
125
+ """
126
+ config = configparser.ConfigParser()
127
+ config.read(_config.CONFIG_FILE)
128
+
129
+ pinnings = {}
130
+ if _config.DEFAULT_SECTION in config:
131
+ for key, value in config[_config.DEFAULT_SECTION].items():
132
+ if key.startswith("agent_model_") and value:
133
+ agent_name = key[len("agent_model_") :]
134
+ pinnings[agent_name] = value
135
+ return pinnings
136
+
137
+
138
+ def get_agents_pinned_to_model(model_name: str) -> list:
139
+ """Get all agents that are pinned to a specific model.
140
+
141
+ Args:
142
+ model_name: The model name to look up.
143
+
144
+ Returns:
145
+ List of agent names pinned to this model.
146
+ """
147
+ all_pinnings = get_all_agent_pinned_models()
148
+ return [agent for agent, model in all_pinnings.items() if model == model_name]
149
+
150
+
151
+ def get_default_agent() -> str:
152
+ """
153
+ Get the default agent name from muse.cfg.
154
+
155
+ Returns:
156
+ str: The default agent name, or "planning-agent" if not set.
157
+ """
158
+ return _config.get_value("default_agent") or "planning-agent"
159
+
160
+
161
+ def set_default_agent(agent_name: str) -> None:
162
+ """
163
+ Set the default agent name in muse.cfg.
164
+
165
+ Args:
166
+ agent_name: The name of the agent to set as default.
167
+ """
168
+ _config.set_config_value("default_agent", agent_name)
@@ -0,0 +1,241 @@
1
+ """Config: appearance settings."""
2
+
3
+ import code_muse.config as _config
4
+
5
+
6
+ def set_diff_highlight_style(style: str):
7
+ """Set the diff highlight style.
8
+
9
+ Note: Text mode has been removed. This function is kept for backwards compatibility
10
+ but does nothing. All diffs use beautiful syntax highlighting now!
11
+
12
+ Args:
13
+ style: Ignored (always uses 'highlight' mode)
14
+ """
15
+ # Do nothing - we always use highlight mode now!
16
+ pass
17
+
18
+
19
+ _DEFAULT_DIFF_ADDITION_HEX = "#0b1f0b" # darker green
20
+ _DEFAULT_DIFF_DELETION_HEX = "#390e1a" # wine
21
+
22
+
23
+ def _coerce_to_hex(value: str | None, fallback: str) -> str:
24
+ """Normalize any color string to '#RRGGBB'.
25
+
26
+ Accepts:
27
+ - '#RRGGBB' hex strings (any case) — returned lowercased.
28
+ - Rich color names like 'green', 'orange1', 'bright_red'.
29
+ - 'rgb(r,g,b)' forms that Rich understands.
30
+
31
+ Anything Rich can't parse (including None/empty) falls back to ``fallback``.
32
+ This keeps downstream consumers like ``brighten_hex`` happy — they only
33
+ ever see a well-formed #RRGGBB string.
34
+ """
35
+ if not value:
36
+ return fallback
37
+ candidate = value.strip()
38
+ # Fast-path: already a valid #RRGGBB.
39
+ if (
40
+ len(candidate) == 7
41
+ and candidate.startswith("#")
42
+ and all(c in "0123456789abcdefABCDEF" for c in candidate[1:])
43
+ ):
44
+ return candidate.lower()
45
+ # Otherwise try Rich's parser (handles named colors, rgb(), etc.).
46
+ try:
47
+ from rich.color import Color # local import keeps module import cheap
48
+
49
+ triplet = Color.parse(candidate).get_truecolor()
50
+ return f"#{triplet.red:02x}{triplet.green:02x}{triplet.blue:02x}"
51
+ except Exception:
52
+ return fallback
53
+
54
+
55
+ def get_diff_addition_color() -> str:
56
+ """Get the base color for diff additions, always as a valid '#RRGGBB' hex.
57
+
58
+ Falls back to the default darker green if the configured value is missing
59
+ or unparseable.
60
+ """
61
+ return _coerce_to_hex(
62
+ _config.get_value("highlight_addition_color"), _DEFAULT_DIFF_ADDITION_HEX
63
+ )
64
+
65
+
66
+ def set_diff_addition_color(color: str):
67
+ """Set the color for diff additions.
68
+
69
+ Accepts '#RRGGBB' hex, Rich color names ('green', 'bright_green', ...), or
70
+ 'rgb(r,g,b)'. The value is normalized to '#RRGGBB' before being written so
71
+ downstream renderers never see a raw name.
72
+ """
73
+ _config.set_config_value(
74
+ "highlight_addition_color",
75
+ _coerce_to_hex(color, _DEFAULT_DIFF_ADDITION_HEX),
76
+ )
77
+
78
+
79
+ def get_diff_deletion_color() -> str:
80
+ """Get the base color for diff deletions, always as a valid '#RRGGBB' hex.
81
+
82
+ Falls back to the default wine if the configured value is missing or
83
+ unparseable.
84
+ """
85
+ return _coerce_to_hex(
86
+ _config.get_value("highlight_deletion_color"), _DEFAULT_DIFF_DELETION_HEX
87
+ )
88
+
89
+
90
+ def set_diff_deletion_color(color: str):
91
+ """Set the color for diff deletions.
92
+
93
+ Accepts '#RRGGBB' hex, Rich color names ('red', 'orange1', ...), or
94
+ 'rgb(r,g,b)'. The value is normalized to '#RRGGBB' before being written so
95
+ downstream renderers never see a raw name.
96
+ """
97
+ _config.set_config_value(
98
+ "highlight_deletion_color",
99
+ _coerce_to_hex(color, _DEFAULT_DIFF_DELETION_HEX),
100
+ )
101
+
102
+
103
+ DEFAULT_BANNER_COLORS = {
104
+ "thinking": "deep_sky_blue4", # Sapphire - contemplation
105
+ "agent_response": "medium_purple4", # Amethyst - main AI output
106
+ "shell_command": "dark_orange3", # Amber - system commands
107
+ "read_file": "steel_blue", # Steel - reading files
108
+ "edit_file": "dark_goldenrod", # Gold - modifications (legacy)
109
+ "create_file": "dark_goldenrod", # Gold - file creation
110
+ "replace_in_file": "dark_goldenrod", # Gold - file modifications
111
+ "delete_snippet": "dark_goldenrod", # Gold - snippet removal
112
+ "grep": "grey37", # Silver - search results
113
+ "directory_listing": "dodger_blue2", # Sky - navigation
114
+ "agent_reasoning": "dark_violet", # Violet - deep thought
115
+ "invoke_agent": "deep_pink4", # Ruby - agent invocation
116
+ "subagent_response": "sea_green3", # Emerald - sub-agent success
117
+ "list_agents": "dark_slate_gray3", # Slate - neutral listing
118
+ "universal_constructor": "dark_cyan", # Teal - constructing tools
119
+ # Browser/Terminal tools - same color as edit_file (gold)
120
+ "terminal_tool": "dark_goldenrod", # Gold - browser terminal operations
121
+ # User-initiated shell pass-through (! prefix) - distinct from agent's shell_command
122
+ "shell_passthrough": "medium_sea_green", # Green - user's own shell commands
123
+ }
124
+
125
+
126
+ def get_banner_color(banner_name: str) -> str:
127
+ """Get the background color for a specific banner.
128
+
129
+ Args:
130
+ banner_name: The banner identifier (e.g., 'thinking', 'agent_response')
131
+
132
+ Returns:
133
+ Rich color name or hex code for the banner background
134
+ """
135
+ config_key = f"banner_color_{banner_name}"
136
+ val = _config.get_value(config_key)
137
+ if val:
138
+ return val
139
+ return DEFAULT_BANNER_COLORS.get(banner_name, "blue")
140
+
141
+
142
+ def set_banner_color(banner_name: str, color: str):
143
+ """Set the background color for a specific banner.
144
+
145
+ Args:
146
+ banner_name: The banner identifier (e.g., 'thinking', 'agent_response')
147
+ color: Rich color name or hex code
148
+ """
149
+ config_key = f"banner_color_{banner_name}"
150
+ _config.set_config_value(config_key, color)
151
+
152
+
153
+ def get_all_banner_colors() -> dict:
154
+ """Get all banner colors (configured or default).
155
+
156
+ Returns:
157
+ Dict mapping banner names to their colors
158
+ """
159
+ return {name: get_banner_color(name) for name in DEFAULT_BANNER_COLORS}
160
+
161
+
162
+ def reset_banner_color(banner_name: str):
163
+ """Reset a banner color to its default.
164
+
165
+ Args:
166
+ banner_name: The banner identifier to reset
167
+ """
168
+ default_color = DEFAULT_BANNER_COLORS.get(banner_name, "blue")
169
+ set_banner_color(banner_name, default_color)
170
+
171
+
172
+ def reset_all_banner_colors():
173
+ """Reset all banner colors to their defaults."""
174
+ for name, color in DEFAULT_BANNER_COLORS.items():
175
+ set_banner_color(name, color)
176
+
177
+
178
+ def get_diff_context_lines() -> int:
179
+ """
180
+ Returns the user-configured number of context lines for diff display.
181
+ This controls how many lines of surrounding context are shown in diffs.
182
+ Defaults to 6 if unset or misconfigured.
183
+ Configurable by 'diff_context_lines' key.
184
+ """
185
+ val = _config.get_value("diff_context_lines")
186
+ try:
187
+ context_lines = int(val) if val else 6
188
+ # Apply reasonable bounds: minimum 0, maximum 50
189
+ return max(0, min(context_lines, 50))
190
+ except ValueError, TypeError:
191
+ return 6
192
+
193
+
194
+ def get_suppress_thinking_messages() -> bool:
195
+ """
196
+ Checks muse.cfg for 'suppress_thinking_messages' (case-insensitive in value only).
197
+ Defaults to False if not set.
198
+ Allowed values for ON: 1, '1', 'true', 'yes', 'on' (all case-insensitive for value).
199
+ When enabled, thinking messages (agent_reasoning, planned_next_steps) will be hidden.
200
+ """
201
+ true_vals = {"1", "true", "yes", "on"}
202
+ cfg_val = _config.get_value("suppress_thinking_messages")
203
+ if cfg_val is not None:
204
+ return str(cfg_val).strip().lower() in true_vals
205
+ return False
206
+
207
+
208
+ def set_suppress_thinking_messages(enabled: bool):
209
+ """Sets the suppress_thinking_messages configuration value.
210
+
211
+ Args:
212
+ enabled: Whether to suppress thinking messages
213
+ """
214
+ _config.set_config_value(
215
+ "suppress_thinking_messages", "true" if enabled else "false"
216
+ )
217
+
218
+
219
+ def get_suppress_informational_messages() -> bool:
220
+ """
221
+ Checks muse.cfg for 'suppress_informational_messages' (case-insensitive in value only).
222
+ Defaults to False if not set.
223
+ Allowed values for ON: 1, '1', 'true', 'yes', 'on' (all case-insensitive for value).
224
+ When enabled, informational messages (info, success, warning) will be hidden.
225
+ """
226
+ true_vals = {"1", "true", "yes", "on"}
227
+ cfg_val = _config.get_value("suppress_informational_messages")
228
+ if cfg_val is not None:
229
+ return str(cfg_val).strip().lower() in true_vals
230
+ return False
231
+
232
+
233
+ def set_suppress_informational_messages(enabled: bool):
234
+ """Sets the suppress_informational_messages configuration value.
235
+
236
+ Args:
237
+ enabled: Whether to suppress informational messages
238
+ """
239
+ _config.set_config_value(
240
+ "suppress_informational_messages", "true" if enabled else "false"
241
+ )