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,136 @@
1
+ """Git operations for the GAC plugin.
2
+
3
+ Lightweight subprocess wrappers for the commands needed to inspect and stage
4
+ changes before an AI-generated commit.
5
+ """
6
+
7
+ import logging
8
+ import subprocess
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ def _run_git(args: list[str]) -> subprocess.CompletedProcess[str]:
14
+ """Run a git command, returning the CompletedProcess on failure as well."""
15
+ return subprocess.run(
16
+ ["git", *args],
17
+ capture_output=True,
18
+ text=True,
19
+ check=False,
20
+ )
21
+
22
+
23
+ def get_staged_diff(context_lines: int = 5) -> str:
24
+ """Return the staged diff with *context_lines* of context.
25
+
26
+ Returns an empty string when there are no staged changes or the command
27
+ fails (e.g. not inside a git repository).
28
+ """
29
+ result = _run_git(["diff", f"-U{context_lines}", "--cached"])
30
+ if result.returncode != 0:
31
+ logger.debug("git diff --cached failed: %s", result.stderr.strip())
32
+ return ""
33
+ return result.stdout
34
+
35
+
36
+ def get_git_status() -> str:
37
+ """Return a formatted status of staged files only.
38
+
39
+ Returns an empty string on failure.
40
+ """
41
+ result = _run_git(["diff", "--name-status", "--staged"])
42
+ if result.returncode != 0:
43
+ logger.debug(
44
+ "git diff --name-status --staged failed: %s", result.stderr.strip()
45
+ )
46
+ return ""
47
+
48
+ output = result.stdout.strip()
49
+ if not output:
50
+ return "No changes staged for commit."
51
+
52
+ status_map = {
53
+ "M": "modified",
54
+ "A": "new file",
55
+ "D": "deleted",
56
+ "R": "renamed",
57
+ "C": "copied",
58
+ "T": "typechange",
59
+ }
60
+
61
+ lines = ["Changes to be committed:"]
62
+ for line in output.splitlines():
63
+ line = line.strip()
64
+ if not line:
65
+ continue
66
+ parts = line.split("\t")
67
+ if len(parts) < 2:
68
+ continue
69
+ change_type = parts[0][0]
70
+ file_path = parts[-1]
71
+ label = status_map.get(change_type, "modified")
72
+ lines.append(f"\t{label}: {file_path}")
73
+
74
+ return "\n".join(lines)
75
+
76
+
77
+ def get_diff_stat() -> str:
78
+ """Return ``git diff --cached --stat`` output.
79
+
80
+ Returns an empty string on failure.
81
+ """
82
+ result = _run_git(["diff", "--cached", "--stat"])
83
+ if result.returncode != 0:
84
+ logger.debug("git diff --cached --stat failed: %s", result.stderr.strip())
85
+ return ""
86
+ return result.stdout
87
+
88
+
89
+ def get_current_branch() -> str:
90
+ """Return the current branch name.
91
+
92
+ Returns an empty string on failure.
93
+ """
94
+ result = _run_git(["rev-parse", "--abbrev-ref", "HEAD"])
95
+ if result.returncode != 0:
96
+ logger.debug(
97
+ "git rev-parse --abbrev-ref HEAD failed: %s", result.stderr.strip()
98
+ )
99
+ return ""
100
+ return result.stdout.strip()
101
+
102
+
103
+ def get_repo_root() -> str:
104
+ """Return the repository root absolute path.
105
+
106
+ Returns an empty string on failure.
107
+ """
108
+ result = _run_git(["rev-parse", "--show-toplevel"])
109
+ if result.returncode != 0:
110
+ logger.debug("git rev-parse --show-toplevel failed: %s", result.stderr.strip())
111
+ return ""
112
+ return result.stdout.strip()
113
+
114
+
115
+ def has_staged_changes() -> bool:
116
+ """Return ``True`` if there are staged files."""
117
+ result = _run_git(["diff", "--cached", "--quiet"])
118
+ return result.returncode != 0
119
+
120
+
121
+ def has_any_changes() -> bool:
122
+ """Return ``True`` if there are any changes (staged or unstaged)."""
123
+ result = _run_git(["status", "--porcelain"])
124
+ if result.returncode != 0:
125
+ return False
126
+ return bool(result.stdout.strip())
127
+
128
+
129
+ def stage_all() -> None:
130
+ """Stage all changes with ``git add -A``.
131
+
132
+ Logs a warning on failure but does not raise.
133
+ """
134
+ result = _run_git(["add", "-A"])
135
+ if result.returncode != 0:
136
+ logger.warning("git add -A failed: %s", result.stderr.strip())
@@ -0,0 +1,191 @@
1
+ """Prompt building for the GAC plugin.
2
+
3
+ Constructs the full prompt (system instructions + git context + execution
4
+ instructions) that is sent to the agent when a ``/gac`` command is issued.
5
+ """
6
+
7
+ from code_muse.plugins.gac.git_ops import (
8
+ get_current_branch,
9
+ get_diff_stat,
10
+ get_git_status,
11
+ get_repo_root,
12
+ get_staged_diff,
13
+ )
14
+
15
+ GAC_SYSTEM_INSTRUCTIONS = """
16
+ <role>
17
+ You are an expert git commit message generator acting as GAC (Git Auto Commit).
18
+ Your task: analyze code changes, generate a conventional commit message,
19
+ then execute the commit using git shell commands.
20
+ </role>
21
+
22
+ <conventions>
23
+ You MUST start your commit message with a conventional commit prefix:
24
+ - feat: A new feature or functionality
25
+ - fix: A bug fix
26
+ - docs: Documentation only
27
+ - style: Code style/formatting (no logic change)
28
+ - refactor: Code restructuring (no behavior change)
29
+ - perf: Performance improvement
30
+ - test: Adding/modifying tests
31
+ - build: Build system/dependencies
32
+ - ci: CI configuration
33
+ - chore: Miscellaneous
34
+
35
+ Check file types FIRST:
36
+ - If ALL changes are docs (*.md, *.rst, *.txt in docs/, README*, CHANGELOG*), "
37
+ "use 'docs:'
38
+ - If mixed, use the prefix for the PRIMARY purpose
39
+
40
+ FORMAT:
41
+ - First line: type: concise summary (present tense, max 50 chars ideal)
42
+ - Line 2: BLANK
43
+ - Lines 3+: bullet points explaining WHAT and WHY
44
+ - DO NOT use markdown headers, code blocks, or formatting
45
+ </conventions>
46
+
47
+ <examples>
48
+ Good:
49
+ feat: add OAuth2 integration with Google and GitHub
50
+ fix: resolve race condition in user session management
51
+ docs: add troubleshooting section for installation
52
+ refactor: extract validation logic into reusable utilities
53
+
54
+ Bad:
55
+ fix stuff
56
+ update code
57
+ WIP: still working on this
58
+ Fixed bug
59
+ </examples>
60
+ """
61
+
62
+ EXECUTION_INSTRUCTIONS = """
63
+ <execution>
64
+ After generating the commit message, you MUST execute these shell commands:
65
+
66
+ STEP 1 — Stage all changes (if nothing is staged):
67
+ git add -A
68
+
69
+ STEP 2 — Commit with the generated message:
70
+ git commit -m "YOUR GENERATED MESSAGE"
71
+
72
+ {extra_steps}
73
+
74
+ CRITICAL:
75
+ - Use the EXACT commit message you generated. No modifications.
76
+ - Do NOT include reasoning, preamble, or explanations in your response — "
77
+ "just the commit message and confirmation.
78
+ - If nothing to commit, report that.
79
+ </execution>
80
+ """
81
+
82
+ EXECUTION_INSTRUCTIONS_PUSH = """
83
+ STEP 3 — Push to remote:
84
+ git push
85
+ """
86
+
87
+ EXECUTION_INSTRUCTIONS_BUMP = """
88
+ STEP 0 — Bump version FIRST (before staging):
89
+ Find the version file (__version__.py, pyproject.toml, package.json, Cargo.toml, etc.)
90
+ Determine the current version
91
+ Increment the PATCH version (e.g., 1.2.3 → 1.2.4)
92
+ Update the version file in place
93
+
94
+ STEP 1 — Stage the version change:
95
+ git add <version_file>
96
+
97
+ STEP 2 — Commit the bump:
98
+ git commit -m "chore: bump version to X.Y.Z"
99
+ """
100
+
101
+
102
+ def build_gac_prompt(push: bool = False, bump: bool = False) -> str | None:
103
+ """Build the full GAC prompt for the agent.
104
+
105
+ Args:
106
+ push: Include ``git push`` instructions.
107
+ bump: Include version-bump instructions.
108
+
109
+ Returns:
110
+ The complete prompt string, or ``None`` when there is nothing to commit.
111
+ """
112
+ status = get_git_status()
113
+ diff_stat = get_diff_stat()
114
+ diff = get_staged_diff(context_lines=5)
115
+ branch = get_current_branch()
116
+ repo_root = get_repo_root()
117
+
118
+ if not bump and not push and not diff and not diff_stat:
119
+ return None
120
+
121
+ extra_steps = ""
122
+ if bump:
123
+ extra_steps = EXECUTION_INSTRUCTIONS_BUMP
124
+ if push:
125
+ extra_steps = extra_steps + "\n" + EXECUTION_INSTRUCTIONS_PUSH
126
+
127
+ execution = EXECUTION_INSTRUCTIONS.format(extra_steps=extra_steps)
128
+
129
+ parts = [
130
+ GAC_SYSTEM_INSTRUCTIONS.strip(),
131
+ "",
132
+ "--- Git context ---",
133
+ f"Repository: {repo_root or 'unknown'}",
134
+ f"Branch: {branch or 'unknown'}",
135
+ "",
136
+ "<git_status>",
137
+ status,
138
+ "</git_status>",
139
+ "",
140
+ "<git_diff_stat>",
141
+ diff_stat,
142
+ "</git_diff_stat>",
143
+ "",
144
+ "<git_diff>",
145
+ diff,
146
+ "</git_diff>",
147
+ "",
148
+ execution.strip(),
149
+ ]
150
+
151
+ return "\n".join(parts)
152
+
153
+
154
+ def build_gac_prompt_for_message_only() -> str | None:
155
+ """Build a prompt that only generates the commit message (no execution).
156
+
157
+ Returns:
158
+ The prompt string, or ``None`` when there is nothing to commit.
159
+ """
160
+ status = get_git_status()
161
+ diff_stat = get_diff_stat()
162
+ diff = get_staged_diff(context_lines=5)
163
+ branch = get_current_branch()
164
+ repo_root = get_repo_root()
165
+
166
+ if not diff and not diff_stat:
167
+ return None
168
+
169
+ parts = [
170
+ GAC_SYSTEM_INSTRUCTIONS.strip(),
171
+ "",
172
+ "--- Git context ---",
173
+ f"Repository: {repo_root or 'unknown'}",
174
+ f"Branch: {branch or 'unknown'}",
175
+ "",
176
+ "<git_status>",
177
+ status,
178
+ "</git_status>",
179
+ "",
180
+ "<git_diff_stat>",
181
+ diff_stat,
182
+ "</git_diff_stat>",
183
+ "",
184
+ "<git_diff>",
185
+ diff,
186
+ "</git_diff>",
187
+ "",
188
+ "Generate ONLY the commit message. No shell commands. No preamble.",
189
+ ]
190
+
191
+ return "\n".join(parts)
@@ -0,0 +1,82 @@
1
+ """Register GAC slash commands: /gac, /gac push, /gac bump."""
2
+
3
+ import logging
4
+
5
+ from code_muse.callbacks import register_callback
6
+ from code_muse.plugins.gac.git_ops import (
7
+ has_any_changes,
8
+ has_staged_changes,
9
+ stage_all,
10
+ )
11
+ from code_muse.plugins.gac.prompt import build_gac_prompt
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+ # Import CustomCommandResult from the custom_commands plugin
16
+ try:
17
+ from code_muse.plugins.custom_commands.register_callbacks import (
18
+ CustomCommandResult,
19
+ )
20
+ except ImportError:
21
+ CustomCommandResult = None
22
+
23
+
24
+ def _on_custom_command(command: str, name: str):
25
+ """Handle /gac, /gac push, /gac bump commands.
26
+
27
+ Args:
28
+ command: Full command string (e.g. ``"/gac push"``).
29
+ name: Command name extracted by the handler (``"gac"``).
30
+
31
+ Returns:
32
+ - ``CustomCommandResult(prompt)`` when the command is resolved and
33
+ should be sent to the agent as input.
34
+ - ``True`` when there is nothing to commit (already handled).
35
+ - ``None`` if the command is not recognised (passthrough).
36
+ """
37
+ if name != "gac":
38
+ return None
39
+
40
+ parts = command.split()
41
+ rest = " ".join(parts[1:]).lower() if len(parts) > 1 else ""
42
+
43
+ push = "push" in rest
44
+ bump = "bump" in rest
45
+
46
+ # Check for changes (skip for bump — the agent creates the change)
47
+ if not bump and not has_any_changes():
48
+ from code_muse.messaging import emit_warning
49
+
50
+ emit_warning("No changes to commit.")
51
+ return True
52
+
53
+ # Stage all changes if nothing is staged
54
+ if not has_staged_changes():
55
+ stage_all()
56
+
57
+ # Build the prompt
58
+ prompt = build_gac_prompt(push=push, bump=bump)
59
+ if prompt is None:
60
+ from code_muse.messaging import emit_warning
61
+
62
+ emit_warning("No changes to commit.")
63
+ return True
64
+
65
+ if CustomCommandResult is not None:
66
+ return CustomCommandResult(prompt)
67
+
68
+ # Fallback: return prompt as string (will be displayed, not sent to agent)
69
+ return prompt
70
+
71
+
72
+ def _on_custom_command_help():
73
+ """Return help entries for GAC commands."""
74
+ return [
75
+ ("gac", "Generate commit message and commit staged changes"),
76
+ ("gac push", "Generate commit message, commit, and push to remote"),
77
+ ("gac bump", "Bump patch version, commit, and push to remote"),
78
+ ]
79
+
80
+
81
+ register_callback("custom_command", _on_custom_command)
82
+ register_callback("custom_command_help", _on_custom_command_help)
@@ -0,0 +1 @@
1
+ # Hook Creator Plugin
@@ -0,0 +1,34 @@
1
+ """
2
+ Hook Creator Plugin - Simple command that injects tool prompt
3
+ """
4
+
5
+ from code_muse.callbacks import register_callback
6
+ from code_muse.messaging import emit_info
7
+
8
+ HOOK_CREATION_PROMPT = "Hook creation prompt placeholder - see Muse documentation for hook creation guidance."
9
+
10
+
11
+ def _custom_help():
12
+ """Help entries for create-hook commands."""
13
+ return [
14
+ ("create-hook", "Get help creating Muse hooks"),
15
+ ]
16
+
17
+
18
+ def _handle_custom_command(command: str, name: str):
19
+ """Handle /create-hook command.
20
+
21
+ Displays hook creation documentation and sends to model with context.
22
+ """
23
+ if name != "create-hook":
24
+ return None
25
+
26
+ emit_info(HOOK_CREATION_PROMPT)
27
+
28
+ # Send the prompt to the model with the hook docs as context
29
+ return "I need help creating a hook for Muse. Here's the documentation above. Can you help me?"
30
+
31
+
32
+ # Register the custom command
33
+ register_callback("custom_command_help", _custom_help)
34
+ register_callback("custom_command", _handle_custom_command)
@@ -0,0 +1 @@
1
+ """Hook Manager plugin – interactive TUI for managing Claude Code hooks."""