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,459 @@
1
+ from annotationlib import get_annotations
2
+
3
+ from code_muse.callbacks import on_register_tools
4
+ from code_muse.messaging import emit_warning
5
+ from code_muse.tools.agent_tools import register_invoke_agent, register_list_agents
6
+ from code_muse.tools.ask_user_question import register_ask_user_question
7
+
8
+ # Browser automation tools
9
+ from code_muse.tools.browser.browser_control import (
10
+ register_close_browser,
11
+ register_create_new_page,
12
+ register_get_browser_status,
13
+ register_initialize_browser,
14
+ register_list_pages,
15
+ )
16
+ from code_muse.tools.browser.browser_interactions import (
17
+ register_browser_check,
18
+ register_browser_uncheck,
19
+ register_click_element,
20
+ register_double_click_element,
21
+ register_get_element_text,
22
+ register_get_element_value,
23
+ register_hover_element,
24
+ register_select_option,
25
+ register_set_element_text,
26
+ )
27
+ from code_muse.tools.browser.browser_locators import (
28
+ register_find_buttons,
29
+ register_find_by_label,
30
+ register_find_by_placeholder,
31
+ register_find_by_role,
32
+ register_find_by_test_id,
33
+ register_find_by_text,
34
+ register_find_links,
35
+ register_run_xpath_query,
36
+ )
37
+ from code_muse.tools.browser.browser_navigation import (
38
+ register_browser_go_back,
39
+ register_browser_go_forward,
40
+ register_get_page_info,
41
+ register_navigate_to_url,
42
+ register_reload_page,
43
+ register_wait_for_load_state,
44
+ )
45
+ from code_muse.tools.browser.browser_screenshot import (
46
+ register_take_screenshot_and_analyze,
47
+ )
48
+ from code_muse.tools.browser.browser_scripts import (
49
+ register_browser_clear_highlights,
50
+ register_browser_highlight_element,
51
+ register_execute_javascript,
52
+ register_scroll_page,
53
+ register_scroll_to_element,
54
+ register_set_viewport_size,
55
+ register_wait_for_element,
56
+ )
57
+ from code_muse.tools.browser.browser_workflows import (
58
+ register_list_workflows,
59
+ register_read_workflow,
60
+ register_save_workflow,
61
+ )
62
+
63
+ # Chrome CDP tools
64
+ from code_muse.tools.chrome_cdp import register_chrome_cdp
65
+ from code_muse.tools.command_runner import (
66
+ register_agent_run_shell_command,
67
+ register_agent_share_your_reasoning,
68
+ )
69
+ from code_muse.tools.display import (
70
+ display_non_streamed_result as display_non_streamed_result,
71
+ )
72
+ from code_muse.tools.file_modifications import (
73
+ register_create_file,
74
+ register_delete_file,
75
+ register_delete_snippet,
76
+ register_edit_file,
77
+ register_replace_in_file,
78
+ )
79
+ from code_muse.tools.file_operations import (
80
+ register_grep,
81
+ register_list_files,
82
+ register_read_file,
83
+ )
84
+ from code_muse.tools.image_tools import register_load_image
85
+ from code_muse.tools.meetin_proxy import register_mitmproxy
86
+ from code_muse.tools.skills_tools import (
87
+ register_activate_skill,
88
+ register_list_or_search_skills,
89
+ )
90
+ from code_muse.tools.universal_constructor import register_universal_constructor
91
+
92
+ # Map of tool names to their individual registration functions
93
+ TOOL_REGISTRY = {
94
+ # Agent Tools
95
+ "list_agents": register_list_agents,
96
+ "invoke_agent": register_invoke_agent,
97
+ # File Operations
98
+ "list_files": register_list_files,
99
+ "read_file": register_read_file,
100
+ "grep": register_grep,
101
+ # File Modifications
102
+ # DEPRECATED: auto-expanded to create_file, replace_in_file, delete_snippet
103
+ "edit_file": register_edit_file,
104
+ "create_file": register_create_file,
105
+ "replace_in_file": register_replace_in_file,
106
+ "delete_snippet": register_delete_snippet,
107
+ "delete_file": register_delete_file,
108
+ # Command Runner
109
+ "agent_run_shell_command": register_agent_run_shell_command,
110
+ "agent_share_your_reasoning": register_agent_share_your_reasoning,
111
+ # User Interaction
112
+ "ask_user_question": register_ask_user_question,
113
+ # Browser Control
114
+ "browser_initialize": register_initialize_browser,
115
+ "browser_close": register_close_browser,
116
+ "browser_status": register_get_browser_status,
117
+ "browser_new_page": register_create_new_page,
118
+ "browser_list_pages": register_list_pages,
119
+ # Browser Navigation
120
+ "browser_navigate": register_navigate_to_url,
121
+ "browser_get_page_info": register_get_page_info,
122
+ "browser_go_back": register_browser_go_back,
123
+ "browser_go_forward": register_browser_go_forward,
124
+ "browser_reload": register_reload_page,
125
+ "browser_wait_for_load": register_wait_for_load_state,
126
+ # Browser Element Discovery
127
+ "browser_find_by_role": register_find_by_role,
128
+ "browser_find_by_text": register_find_by_text,
129
+ "browser_find_by_label": register_find_by_label,
130
+ "browser_find_by_placeholder": register_find_by_placeholder,
131
+ "browser_find_by_test_id": register_find_by_test_id,
132
+ "browser_xpath_query": register_run_xpath_query,
133
+ "browser_find_buttons": register_find_buttons,
134
+ "browser_find_links": register_find_links,
135
+ # Browser Element Interactions
136
+ "browser_click": register_click_element,
137
+ "browser_double_click": register_double_click_element,
138
+ "browser_hover": register_hover_element,
139
+ "browser_set_text": register_set_element_text,
140
+ "browser_get_text": register_get_element_text,
141
+ "browser_get_value": register_get_element_value,
142
+ "browser_select_option": register_select_option,
143
+ "browser_check": register_browser_check,
144
+ "browser_uncheck": register_browser_uncheck,
145
+ # Browser Scripts and Advanced Features
146
+ "browser_execute_js": register_execute_javascript,
147
+ "browser_scroll": register_scroll_page,
148
+ "browser_scroll_to_element": register_scroll_to_element,
149
+ "browser_set_viewport": register_set_viewport_size,
150
+ "browser_wait_for_element": register_wait_for_element,
151
+ "browser_highlight_element": register_browser_highlight_element,
152
+ "browser_clear_highlights": register_browser_clear_highlights,
153
+ # Browser Screenshots
154
+ "browser_screenshot_analyze": register_take_screenshot_and_analyze,
155
+ # Browser Workflows
156
+ "browser_save_workflow": register_save_workflow,
157
+ "browser_list_workflows": register_list_workflows,
158
+ "browser_read_workflow": register_read_workflow,
159
+ # Image loading (used by browser/QA agents and friends)
160
+ "load_image_for_analysis": register_load_image,
161
+ # mitmproxy
162
+ "mitmproxy": register_mitmproxy,
163
+ # Chrome CDP
164
+ "chrome_cdp": register_chrome_cdp,
165
+ # Skills Tools
166
+ "activate_skill": register_activate_skill,
167
+ "list_or_search_skills": register_list_or_search_skills,
168
+ # Universal Constructor
169
+ "universal_constructor": register_universal_constructor,
170
+ }
171
+
172
+ # Tools that expand into multiple tools for backward compatibility.
173
+ # When an agent requests a tool listed here, all the expansion tools
174
+ # are registered instead (the original tool is NOT registered).
175
+ TOOL_EXPANSIONS: dict[str, list[str]] = {
176
+ "edit_file": ["create_file", "replace_in_file", "delete_snippet"],
177
+ }
178
+
179
+ # Legacy tool names we silently ignore instead of warning about.
180
+ # Keep this for truly removed tools only; backward-compatible tool aliases
181
+ # that still work should stay in TOOL_REGISTRY.
182
+ REMOVED_LEGACY_TOOLS: set[str] = set()
183
+
184
+
185
+ def _load_plugin_tools() -> None:
186
+ """Load tools registered by plugins via the register_tools callback.
187
+
188
+ This merges plugin-provided tools into the TOOL_REGISTRY.
189
+ Called lazily when tools are first accessed.
190
+ """
191
+ try:
192
+ results = on_register_tools()
193
+ for result in results:
194
+ if result is None:
195
+ continue
196
+ # Each result should be a list of tool definitions
197
+ tools_list = result if isinstance(result, list) else [result]
198
+ for tool_def in tools_list:
199
+ if (
200
+ isinstance(tool_def, dict)
201
+ and "name" in tool_def
202
+ and "register_func" in tool_def
203
+ ):
204
+ tool_name = tool_def["name"]
205
+ register_func = tool_def["register_func"]
206
+ if callable(register_func):
207
+ TOOL_REGISTRY[tool_name] = register_func
208
+ except Exception:
209
+ # Don't let plugin failures break core functionality
210
+ pass
211
+
212
+
213
+ # Appended to the system prompt when extended thinking is active and
214
+ # the share_your_reasoning tool is removed. Encourages the model to
215
+ # use its native thinking blocks between tool calls instead.
216
+ EXTENDED_THINKING_PROMPT_NOTE = (
217
+ "\n\nIMPORTANT: You have extended thinking enabled. "
218
+ "Always think between tool calls or waves of tool calls "
219
+ "(if running parallel tools). Use your thinking blocks to reason "
220
+ "about the results before deciding on next steps."
221
+ )
222
+
223
+
224
+ def has_extended_thinking_active(model_name: str | None = None) -> bool:
225
+ """Check if an Anthropic model has extended thinking enabled or adaptive.
226
+
227
+ When extended thinking is active, the model already exposes its reasoning
228
+ via thinking blocks, making the share_your_reasoning tool redundant.
229
+
230
+ Args:
231
+ model_name: The model name to check. If None, uses the current global model.
232
+
233
+ Returns:
234
+ True if the model is an Anthropic model with extended_thinking set to
235
+ "enabled" or "adaptive".
236
+ """
237
+ from code_muse.config import get_effective_model_settings, get_global_model_name
238
+
239
+ if model_name is None:
240
+ model_name = get_global_model_name()
241
+
242
+ if model_name is None:
243
+ return False
244
+
245
+ # Only applies to Anthropic/Claude models
246
+ if not (model_name.startswith("claude-") or model_name.startswith("anthropic-")):
247
+ return False
248
+
249
+ from code_muse.model_utils import get_default_extended_thinking
250
+
251
+ settings = get_effective_model_settings(model_name)
252
+ default_thinking = get_default_extended_thinking(model_name)
253
+ extended_thinking = settings.get("extended_thinking", default_thinking)
254
+
255
+ # Handle legacy boolean values
256
+ if extended_thinking is True:
257
+ extended_thinking = "enabled"
258
+ elif extended_thinking is False:
259
+ return False
260
+
261
+ return extended_thinking in ("enabled", "adaptive")
262
+
263
+
264
+ def register_tools_for_agent(
265
+ agent, tool_names: list[str], model_name: str | None = None
266
+ ):
267
+ """Register specific tools for an agent based on tool names.
268
+
269
+ Args:
270
+ agent: The agent to register tools to.
271
+ tool_names: List of tool names to register. UC tools are prefixed with "uc:".
272
+ model_name: Optional model name. Used to determine if certain tools
273
+ (like agent_share_your_reasoning) should be skipped. If None,
274
+ falls back to the current global model.
275
+ """
276
+ from code_muse.config import get_universal_constructor_enabled
277
+
278
+ _load_plugin_tools()
279
+
280
+ # Expand compound tools (e.g. "edit_file" → three individual tools)
281
+ expanded_tools: list[str] = []
282
+ seen: set[str] = set()
283
+ for tool_name in tool_names:
284
+ if tool_name in TOOL_EXPANSIONS:
285
+ for expanded in TOOL_EXPANSIONS[tool_name]:
286
+ if expanded not in seen:
287
+ expanded_tools.append(expanded)
288
+ seen.add(expanded)
289
+ else:
290
+ if tool_name not in seen:
291
+ expanded_tools.append(tool_name)
292
+ seen.add(tool_name)
293
+ tool_names = expanded_tools
294
+
295
+ for tool_name in tool_names:
296
+ # Handle UC tools (prefixed with "uc:")
297
+ if tool_name.startswith("uc:"):
298
+ # Skip UC tools if UC is disabled
299
+ if not get_universal_constructor_enabled():
300
+ continue
301
+ uc_tool_name = tool_name[3:] # Remove "uc:" prefix
302
+ _register_uc_tool_wrapper(agent, uc_tool_name)
303
+ continue
304
+
305
+ if tool_name in REMOVED_LEGACY_TOOLS:
306
+ continue
307
+
308
+ if tool_name not in TOOL_REGISTRY:
309
+ # Skip unknown tools with a warning instead of failing
310
+ emit_warning(f"Warning: Unknown tool '{tool_name}' requested, skipping...")
311
+ continue
312
+
313
+ # Check if Universal Constructor is disabled
314
+ if (
315
+ tool_name == "universal_constructor"
316
+ and not get_universal_constructor_enabled()
317
+ ):
318
+ continue # Skip UC if disabled in config
319
+
320
+ # Register the individual tool
321
+ register_func = TOOL_REGISTRY[tool_name]
322
+ register_func(agent)
323
+
324
+
325
+ def _register_uc_tool_wrapper(agent, uc_tool_name: str):
326
+ """Register a wrapper for a UC tool that calls it via the UC registry.
327
+
328
+ This creates a dynamic tool that wraps the UC tool, preserving its
329
+ parameter signature so pydantic-ai can generate proper JSON schema.
330
+
331
+ Args:
332
+ agent: The agent to register the tool wrapper to.
333
+ uc_tool_name: The full name of the UC tool (e.g., "api.weather").
334
+ """
335
+ import inspect
336
+ from typing import Any
337
+
338
+ from pydantic_ai import RunContext
339
+
340
+ # Get tool info and function from registry
341
+ try:
342
+ from code_muse.plugins.universal_constructor.registry import get_registry
343
+
344
+ registry = get_registry()
345
+ tool_info = registry.get_tool(uc_tool_name)
346
+ if not tool_info:
347
+ emit_warning(f"Warning: UC tool '{uc_tool_name}' not found, skipping...")
348
+ return
349
+
350
+ func = registry.get_tool_function(uc_tool_name)
351
+ if not func:
352
+ emit_warning(
353
+ f"Warning: UC tool '{uc_tool_name}' function not found, skipping..."
354
+ )
355
+ return
356
+
357
+ description = tool_info.meta.description
358
+ docstring = tool_info.docstring or description
359
+ except Exception as e:
360
+ emit_warning(f"Warning: Failed to get UC tool '{uc_tool_name}' info: {e}")
361
+ return
362
+
363
+ # Get the original function's signature
364
+ try:
365
+ sig = inspect.signature(func)
366
+ # Get annotations from the original function
367
+ annotations = get_annotations(func).copy()
368
+ except ValueError, TypeError:
369
+ sig = None
370
+ annotations = {}
371
+
372
+ # Create wrapper that preserves the signature
373
+ def make_uc_wrapper(
374
+ tool_name: str, original_func, original_sig, original_annotations
375
+ ):
376
+ # Build the wrapper function
377
+ async def uc_tool_wrapper(context: RunContext, **kwargs: Any) -> Any:
378
+ """Dynamically generated wrapper for a UC tool."""
379
+ try:
380
+ result = original_func(**kwargs)
381
+ # Await async tool implementations
382
+ if inspect.isawaitable(result):
383
+ result = await result
384
+ return result
385
+ except Exception as e:
386
+ return {"error": f"UC tool '{tool_name}' failed: {e}"}
387
+
388
+ # Copy signature info from original function
389
+ uc_tool_wrapper.__name__ = tool_name.replace(".", "_")
390
+ uc_tool_wrapper.__doc__ = (
391
+ f"{docstring}\n\nThis is a Universal Constructor tool."
392
+ )
393
+
394
+ # Preserve annotations for pydantic-ai schema generation
395
+ if original_annotations:
396
+ # Add 'context' param and copy original params (excluding 'return')
397
+ new_annotations = {"context": RunContext}
398
+ for param_name, param_type in original_annotations.items():
399
+ if param_name != "return":
400
+ new_annotations[param_name] = param_type
401
+ if "return" in original_annotations:
402
+ new_annotations["return"] = original_annotations["return"]
403
+ else:
404
+ new_annotations["return"] = Any
405
+ uc_tool_wrapper.__annotations__ = new_annotations
406
+
407
+ # Try to set __signature__ for better introspection
408
+ if original_sig:
409
+ try:
410
+ # Build new parameters list: context first, then original params
411
+ new_params = [
412
+ inspect.Parameter(
413
+ "context",
414
+ inspect.Parameter.POSITIONAL_OR_KEYWORD,
415
+ annotation=RunContext,
416
+ )
417
+ ]
418
+ for param in original_sig.parameters.values():
419
+ new_params.append(param)
420
+
421
+ # Create new signature with return annotation
422
+ return_annotation = original_annotations.get("return", Any)
423
+ new_sig = original_sig.replace(
424
+ parameters=new_params, return_annotation=return_annotation
425
+ )
426
+ uc_tool_wrapper.__signature__ = new_sig
427
+ except ValueError, TypeError:
428
+ pass # Signature manipulation failed, continue without it
429
+
430
+ return uc_tool_wrapper
431
+
432
+ wrapper = make_uc_wrapper(uc_tool_name, func, sig, annotations)
433
+
434
+ # Register the wrapper as a tool
435
+ try:
436
+ agent.tool(wrapper)
437
+ except Exception as e:
438
+ emit_warning(f"Warning: Failed to register UC tool '{uc_tool_name}': {e}")
439
+
440
+
441
+ def register_all_tools(agent, model_name: str | None = None):
442
+ """Register all available tools to the provided agent.
443
+
444
+ Args:
445
+ agent: The agent to register tools to.
446
+ model_name: Optional model name for conditional tool filtering.
447
+ """
448
+ all_tools = list(TOOL_REGISTRY.keys())
449
+ register_tools_for_agent(agent, all_tools, model_name=model_name)
450
+
451
+
452
+ def get_available_tool_names() -> list[str]:
453
+ """Get list of all available tool names.
454
+
455
+ Returns:
456
+ List of all tool names that can be registered.
457
+ """
458
+ _load_plugin_tools()
459
+ return list(TOOL_REGISTRY.keys())