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,397 @@
1
+ """Build compression strategies for the filter engine.
2
+
3
+ Compresses output from make, cargo, go, npm, docker, pip, and other
4
+ build tools into concise summaries.
5
+ """
6
+
7
+ import json
8
+ import re
9
+
10
+ from code_muse.plugins.filter_engine.registry import get_registry
11
+ from code_muse.plugins.filter_engine.verbosity import VerbosityLevel
12
+ from code_muse.tools.command_runner import ShellCommandOutput
13
+
14
+
15
+ def compress_make(
16
+ stdout: str,
17
+ stderr: str,
18
+ verbosity: VerbosityLevel,
19
+ ) -> ShellCommandOutput:
20
+ """Compress make/cmake/ninja output.
21
+
22
+ Args:
23
+ stdout: Raw build stdout.
24
+ stderr: Raw build stderr.
25
+ verbosity: Current verbosity level.
26
+
27
+ Returns:
28
+ A compressed :class:`ShellCommandOutput`.
29
+ """
30
+ lines = stdout.splitlines()
31
+ errors: list[str] = []
32
+ warnings: list[str] = []
33
+ total_lines = len(lines)
34
+
35
+ for line in lines:
36
+ if "error:" in line.lower() or "undefined reference" in line.lower():
37
+ errors.append(line.strip())
38
+ elif "warning:" in line.lower():
39
+ warnings.append(line.strip())
40
+
41
+ error_count = len(errors)
42
+ warning_count = len(warnings)
43
+
44
+ if error_count == 0 and warning_count == 0:
45
+ summary = f"Build OK ({total_lines} lines)"
46
+ success = True
47
+ else:
48
+ summary = f"Build: {error_count} errors, {warning_count} warnings"
49
+ if errors:
50
+ summary += "\nErrors:\n" + "\n".join(errors[:10])
51
+ if len(errors) > 10:
52
+ summary += f"\n ... and {len(errors) - 10} more"
53
+ if verbosity >= VerbosityLevel.VERBOSE and warnings:
54
+ summary += "\nWarnings:\n" + "\n".join(warnings[:10])
55
+ success = error_count == 0
56
+
57
+ return ShellCommandOutput(
58
+ success=success,
59
+ command="make",
60
+ stdout=summary,
61
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
62
+ exit_code=0 if success else 1,
63
+ execution_time=None,
64
+ )
65
+
66
+
67
+ def compress_cargo_build(
68
+ stdout: str,
69
+ stderr: str,
70
+ verbosity: VerbosityLevel,
71
+ ) -> ShellCommandOutput:
72
+ """Compress cargo build output.
73
+
74
+ Attempts JSON message parsing first, then falls back to text.
75
+
76
+ Args:
77
+ stdout: Raw cargo stdout.
78
+ stderr: Raw cargo stderr.
79
+ verbosity: Current verbosity level.
80
+
81
+ Returns:
82
+ A compressed :class:`ShellCommandOutput`.
83
+ """
84
+ lines = stdout.splitlines()
85
+ json_lines = [line for line in lines if line.strip().startswith("{")]
86
+
87
+ if json_lines:
88
+ errors: list[str] = []
89
+ total = 0
90
+ for line in json_lines:
91
+ try:
92
+ obj = json.loads(line)
93
+ if obj.get("reason") == "compiler-message":
94
+ msg = obj.get("message", {})
95
+ if msg.get("level") == "error":
96
+ errors.append(msg.get("rendered", "").strip())
97
+ total += 1
98
+ except ValueError:
99
+ pass
100
+
101
+ error_count = len(errors)
102
+ if error_count == 0:
103
+ summary = f"cargo build OK ({total} compiler messages)"
104
+ else:
105
+ summary = f"cargo build: {error_count} errors"
106
+ summary += "\n" + "\n".join(errors[:10])
107
+
108
+ return ShellCommandOutput(
109
+ success=error_count == 0,
110
+ command="cargo build",
111
+ stdout=summary,
112
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
113
+ exit_code=0 if error_count == 0 else 1,
114
+ execution_time=None,
115
+ )
116
+
117
+ # Fallback to text
118
+ errors = [
119
+ line.strip()
120
+ for line in lines
121
+ if "error[" in line.lower() or "error:" in line.lower()
122
+ ]
123
+ summary_line = next(
124
+ (
125
+ line
126
+ for line in reversed(lines)
127
+ if "finished" in line.lower() or "error: could not compile" in line.lower()
128
+ ),
129
+ "",
130
+ )
131
+
132
+ if errors:
133
+ summary = f"cargo build: {len(errors)} errors\n" + "\n".join(errors[:10])
134
+ if summary_line:
135
+ summary += f"\n{summary_line.strip()}"
136
+ elif summary_line:
137
+ summary = summary_line.strip()
138
+ else:
139
+ summary = f"cargo build ({len(lines)} lines)"
140
+
141
+ return ShellCommandOutput(
142
+ success=len(errors) == 0,
143
+ command="cargo build",
144
+ stdout=summary,
145
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
146
+ exit_code=0 if len(errors) == 0 else 1,
147
+ execution_time=None,
148
+ )
149
+
150
+
151
+ def compress_go_build(
152
+ stdout: str,
153
+ stderr: str,
154
+ verbosity: VerbosityLevel,
155
+ ) -> ShellCommandOutput:
156
+ """Compress go build output (go outputs nothing on success).
157
+
158
+ Args:
159
+ stdout: Raw go stdout.
160
+ stderr: Raw go stderr.
161
+ verbosity: Current verbosity level.
162
+
163
+ Returns:
164
+ A compressed :class:`ShellCommandOutput`.
165
+ """
166
+ lines = stdout.splitlines()
167
+ errors = [
168
+ line.strip() for line in lines if line.strip() and not line.startswith("#")
169
+ ]
170
+
171
+ if errors:
172
+ summary = f"go build: {len(errors)} errors\n" + "\n".join(errors[:10])
173
+ else:
174
+ summary = "go build OK"
175
+
176
+ return ShellCommandOutput(
177
+ success=len(errors) == 0,
178
+ command="go build",
179
+ stdout=summary,
180
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
181
+ exit_code=0 if len(errors) == 0 else 1,
182
+ execution_time=None,
183
+ )
184
+
185
+
186
+ def compress_npm_build(
187
+ stdout: str,
188
+ stderr: str,
189
+ verbosity: VerbosityLevel,
190
+ ) -> ShellCommandOutput:
191
+ """Compress npm run build / yarn build output.
192
+
193
+ Args:
194
+ stdout: Raw npm stdout.
195
+ stderr: Raw npm stderr.
196
+ verbosity: Current verbosity level.
197
+
198
+ Returns:
199
+ A compressed :class:`ShellCommandOutput`.
200
+ """
201
+ lines = stdout.splitlines()
202
+ errors = [
203
+ line.strip()
204
+ for line in lines
205
+ if (
206
+ "error" in line.lower()
207
+ and "build" in line.lower()
208
+ or line.strip().startswith("ERROR")
209
+ )
210
+ ]
211
+ summary_line = next(
212
+ (
213
+ line
214
+ for line in reversed(lines)
215
+ if "build" in line.lower()
216
+ and (
217
+ "success" in line.lower()
218
+ or "failed" in line.lower()
219
+ or "complete" in line.lower()
220
+ )
221
+ ),
222
+ "",
223
+ )
224
+
225
+ if errors:
226
+ summary = f"npm build: {len(errors)} errors\n" + "\n".join(errors[:10])
227
+ elif summary_line:
228
+ summary = summary_line.strip()
229
+ else:
230
+ summary = f"npm build ({len(lines)} lines)"
231
+
232
+ return ShellCommandOutput(
233
+ success=len(errors) == 0,
234
+ command="npm build",
235
+ stdout=summary,
236
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
237
+ exit_code=0 if len(errors) == 0 else 1,
238
+ execution_time=None,
239
+ )
240
+
241
+
242
+ def compress_docker_build(
243
+ stdout: str,
244
+ stderr: str,
245
+ verbosity: VerbosityLevel,
246
+ ) -> ShellCommandOutput:
247
+ """Compress docker build output — show step errors, collapse successes.
248
+
249
+ Args:
250
+ stdout: Raw docker stdout.
251
+ stderr: Raw docker stderr.
252
+ verbosity: Current verbosity level.
253
+
254
+ Returns:
255
+ A compressed :class:`ShellCommandOutput`.
256
+ """
257
+ lines = stdout.splitlines()
258
+ steps: list[str] = []
259
+ errors: list[str] = []
260
+ current_step: str | None = None
261
+
262
+ for line in lines:
263
+ if line.strip().startswith("Step") or line.strip().startswith("---"):
264
+ if current_step:
265
+ steps.append(current_step)
266
+ current_step = line.strip()
267
+ elif current_step and ("error" in line.lower() or "failed" in line.lower()):
268
+ errors.append(f"{current_step}: {line.strip()}")
269
+
270
+ if current_step:
271
+ steps.append(current_step)
272
+
273
+ if errors:
274
+ summary = f"docker build: {len(errors)} step errors\n" + "\n".join(errors[:10])
275
+ else:
276
+ summary = f"docker build OK ({len(steps)} steps)"
277
+
278
+ return ShellCommandOutput(
279
+ success=len(errors) == 0,
280
+ command="docker build",
281
+ stdout=summary,
282
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
283
+ exit_code=0 if len(errors) == 0 else 1,
284
+ execution_time=None,
285
+ )
286
+
287
+
288
+ def compress_pip_install(
289
+ stdout: str,
290
+ stderr: str,
291
+ verbosity: VerbosityLevel,
292
+ ) -> ShellCommandOutput:
293
+ """Compress pip/uv pip install output.
294
+
295
+ Args:
296
+ stdout: Raw pip stdout.
297
+ stderr: Raw pip stderr.
298
+ verbosity: Current verbosity level.
299
+
300
+ Returns:
301
+ A compressed :class:`ShellCommandOutput`.
302
+ """
303
+ lines = stdout.splitlines()
304
+ errors = [line.strip() for line in lines if "error" in line.lower()]
305
+ installed = [
306
+ line
307
+ for line in lines
308
+ if "successfully installed" in line.lower() or "installed" in line.lower()
309
+ ]
310
+
311
+ summary_parts: list[str] = []
312
+ if installed:
313
+ summary_parts.append(installed[-1].strip())
314
+ if errors:
315
+ summary_parts.append(f"{len(errors)} errors: " + "; ".join(errors[:5]))
316
+
317
+ summary = (
318
+ "\n".join(summary_parts)
319
+ if summary_parts
320
+ else f"pip install ({len(lines)} lines)"
321
+ )
322
+
323
+ return ShellCommandOutput(
324
+ success=len(errors) == 0,
325
+ command="pip install",
326
+ stdout=summary,
327
+ stderr=stderr if verbosity >= VerbosityLevel.VERY_VERBOSE else None,
328
+ exit_code=0 if len(errors) == 0 else 1,
329
+ execution_time=None,
330
+ )
331
+
332
+
333
+ def compress_build(
334
+ command: str,
335
+ stdout: str,
336
+ stderr: str,
337
+ exit_code: int,
338
+ verbosity: VerbosityLevel,
339
+ ) -> ShellCommandOutput | None:
340
+ """Main build dispatcher.
341
+
342
+ Args:
343
+ command: The original build command.
344
+ stdout: Raw stdout.
345
+ stderr: Raw stderr.
346
+ exit_code: Process exit code.
347
+ verbosity: Current verbosity level.
348
+
349
+ Returns:
350
+ A compressed :class:`ShellCommandOutput` or ``None``.
351
+ """
352
+ stripped = command.strip()
353
+
354
+ if re.search(r"\bmake\b|\bcmake\b|\bninja\b|\bmsbuild\b", stripped):
355
+ out = compress_make(stdout, stderr, verbosity)
356
+ out.exit_code = exit_code
357
+ return out
358
+
359
+ if re.search(r"cargo\s+build|cargo\s+run", stripped):
360
+ out = compress_cargo_build(stdout, stderr, verbosity)
361
+ out.exit_code = exit_code
362
+ return out
363
+
364
+ if re.search(r"go\s+build|go\s+install|go\s+run", stripped):
365
+ out = compress_go_build(stdout, stderr, verbosity)
366
+ out.exit_code = exit_code
367
+ return out
368
+
369
+ if re.search(
370
+ r"npm\s+run\s+build|yarn\s+build|pnpm\s+build|npx\s+build",
371
+ stripped,
372
+ ):
373
+ out = compress_npm_build(stdout, stderr, verbosity)
374
+ out.exit_code = exit_code
375
+ return out
376
+
377
+ if re.search(r"docker\s+build|docker\s+compose\s+build", stripped):
378
+ out = compress_docker_build(stdout, stderr, verbosity)
379
+ out.exit_code = exit_code
380
+ return out
381
+
382
+ if re.search(
383
+ r"pip\s+install|pip3\s+install|uv\s+pip\s+install|python\s+-m\s+pip\s+install",
384
+ stripped,
385
+ ):
386
+ out = compress_pip_install(stdout, stderr, verbosity)
387
+ out.exit_code = exit_code
388
+ return out
389
+
390
+ # Generic fallback for any other build-ish command
391
+ return None
392
+
393
+
394
+ # ---------------------------------------------------------------------------
395
+ # Register with the strategy registry
396
+ # ---------------------------------------------------------------------------
397
+ get_registry().register("build", compress_build, priority=0)
@@ -0,0 +1,6 @@
1
+ """ChatGPT OAuth plugin package."""
2
+
3
+ from . import register_callbacks # noqa: F401
4
+ from .oauth_flow import run_oauth_flow
5
+
6
+ __all__ = ["run_oauth_flow"]
@@ -0,0 +1,52 @@
1
+ from pathlib import Path
2
+ from typing import Any
3
+
4
+ from code_muse import config
5
+
6
+ # ChatGPT OAuth configuration based on OpenAI's Codex CLI flow
7
+ CHATGPT_OAUTH_CONFIG: dict[str, Any] = {
8
+ # OAuth endpoints from OpenAI auth service
9
+ "issuer": "https://auth.openai.com",
10
+ "auth_url": "https://auth.openai.com/oauth/authorize",
11
+ "token_url": "https://auth.openai.com/oauth/token",
12
+ # API endpoints - Codex uses chatgpt.com backend, not api.openai.com
13
+ "api_base_url": "https://chatgpt.com/backend-api/codex",
14
+ # OAuth client configuration for Muse
15
+ "client_id": "app_EMoamEEZ73f0CkXaXp7hrann",
16
+ "scope": "openid profile email offline_access",
17
+ # Callback handling (we host a localhost callback to capture the redirect)
18
+ "redirect_host": "http://localhost",
19
+ "redirect_path": "auth/callback",
20
+ "required_port": 1455,
21
+ "callback_timeout": 120,
22
+ # Local configuration (uses XDG_DATA_HOME)
23
+ "token_storage": None, # Set dynamically in get_token_storage_path()
24
+ # Model configuration
25
+ "prefix": "chatgpt-",
26
+ "default_context_length": 272000,
27
+ "api_key_env_var": "CHATGPT_OAUTH_API_KEY",
28
+ # Codex CLI version info (for User-Agent header)
29
+ "client_version": "0.72.0",
30
+ "originator": "codex_cli_rs",
31
+ }
32
+
33
+
34
+ def get_token_storage_path() -> Path:
35
+ """Get the path for storing OAuth tokens (uses XDG_DATA_HOME)."""
36
+ data_dir = Path(config.DATA_DIR)
37
+ data_dir.mkdir(parents=True, exist_ok=True, mode=0o700)
38
+ return data_dir / "chatgpt_oauth.json"
39
+
40
+
41
+ def get_config_dir() -> Path:
42
+ """Get the Muse configuration directory (uses XDG_CONFIG_HOME)."""
43
+ config_dir = Path(config.CONFIG_DIR)
44
+ config_dir.mkdir(parents=True, exist_ok=True, mode=0o700)
45
+ return config_dir
46
+
47
+
48
+ def get_chatgpt_models_path() -> Path:
49
+ """Get the path to the dedicated chatgpt_models.json file (uses XDG_DATA_HOME)."""
50
+ data_dir = Path(config.DATA_DIR)
51
+ data_dir.mkdir(parents=True, exist_ok=True, mode=0o700)
52
+ return data_dir / "chatgpt_models.json"