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,320 @@
1
+ """Semantic Compression Plugin — callback registrations.
2
+
3
+ Wires the semantic compression engine into the Fast Puppy runtime:
4
+ - ``post_tool_call``: compress large string tool outputs
5
+ - ``load_prompt``: append compression-format instructions to the system prompt
6
+ - ``custom_command`` / ``custom_command_help``: ``/compress`` slash command
7
+ """
8
+
9
+ import logging
10
+ import re
11
+ from typing import Any
12
+
13
+ from code_muse.callbacks import register_callback
14
+ from code_muse.messaging import emit_error, emit_success
15
+
16
+ from .config import (
17
+ get_compression_allowlist,
18
+ get_compression_blocklist,
19
+ get_semantic_compression_enabled,
20
+ is_tool_allowed,
21
+ set_compression_allowlist,
22
+ set_compression_blocklist,
23
+ set_semantic_compression_enabled,
24
+ )
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+ # Threshold in characters: only compress tool results longer than this
29
+ _MIN_COMPRESS_LENGTH = 200
30
+
31
+
32
+ # ---------------------------------------------------------------------------
33
+ # post_tool_call — compress large text results (gated, opt-in)
34
+ # ---------------------------------------------------------------------------
35
+
36
+
37
+ async def _on_post_tool_call(
38
+ tool_name: str,
39
+ tool_args: dict[str, Any],
40
+ result: Any,
41
+ duration_ms: float,
42
+ context: Any = None,
43
+ ) -> Any:
44
+ """Intercept tool results and apply semantic compression to string outputs.
45
+
46
+ Compression is **opt-in** via ``semantic_compression_enabled`` config
47
+ and can be scoped to specific tools via allowlist/blocklist.
48
+
49
+ Only compresses string results longer than *_MIN_COMPRESS_LENGTH*
50
+ characters. Returns ``None`` so the tool result is left untouched
51
+ (we don't modify in-place — the caller uses the return to *replace*
52
+ the result).
53
+
54
+ Code blocks inside results are detected and preserved verbatim.
55
+ """
56
+ # Gate 1: plugin must be enabled
57
+ if not get_semantic_compression_enabled():
58
+ return None
59
+
60
+ # Gate 2: tool must pass allowlist/blocklist checks
61
+ if not is_tool_allowed(tool_name):
62
+ return None
63
+
64
+ # Only interested in string results of substantial length
65
+ if not isinstance(result, str):
66
+ return None
67
+ if len(result) < _MIN_COMPRESS_LENGTH:
68
+ return None
69
+
70
+ # Skip results that look like they're already compressed
71
+ # (heuristic: very high ratio of content words to function words)
72
+ if _looks_already_compressed(result):
73
+ return None
74
+
75
+ try:
76
+ from .compressor import compress_semantic
77
+
78
+ compressed = compress_semantic(result, aggressive=False)
79
+ logger.debug(
80
+ "Compressed %s output: %d → %d chars (%.1f%% reduction)",
81
+ tool_name,
82
+ len(result),
83
+ len(compressed),
84
+ (1 - len(compressed) / max(len(result), 1)) * 100,
85
+ )
86
+ return compressed
87
+ except Exception as exc:
88
+ logger.warning("Semantic compression failed for %s: %s", tool_name, exc)
89
+ return None
90
+
91
+
92
+ def _looks_already_compressed(text: str) -> bool:
93
+ """Quick heuristic to skip text that's already telegraphic/compressed.
94
+
95
+ Returns ``True`` if the text appears to already be compressed
96
+ (very few function words relative to content words).
97
+ """
98
+ # Count common function words
99
+ func_words = re.findall(
100
+ r"\b(the|a|an|is|are|was|were|am|be|been|being|very|quite|rather|really"
101
+ r"|extremely|somewhat|have|has|had|do|does|did|will|would|can|could"
102
+ r"|may|might|should|it|this|that|these|those|he|she|they|which|who"
103
+ r"|whom|in order to|due to)\b",
104
+ text,
105
+ re.IGNORECASE,
106
+ )
107
+ total_words = len(re.findall(r"\b\w+\b", text))
108
+ if total_words < 10:
109
+ return True # too short to judge
110
+ func_ratio = len(func_words) / max(total_words, 1)
111
+ # If fewer than 8% of words are function words, text likely already compressed
112
+ return func_ratio < 0.08
113
+
114
+
115
+ # ---------------------------------------------------------------------------
116
+ # load_prompt — inject compression instructions into the system prompt
117
+ # ---------------------------------------------------------------------------
118
+
119
+
120
+ def _get_compression_prompt() -> str | None:
121
+ """Return compression-format instructions for the system prompt.
122
+
123
+ Tells the LLM it may use compressed/telegraphic communication style,
124
+ referencing the same rules the compressor uses.
125
+ """
126
+ return """\
127
+ ## Semantic Compression Format
128
+
129
+ You may communicate in compressed form when appropriate. The system
130
+ understands semantic compression — grammar-light, content-dense
131
+ text that drops predictable function words.
132
+
133
+ ### Compression Rules
134
+
135
+ **Drop (always safe):**
136
+ - Articles: a, an, the
137
+ - Copulas: is, are, was, were, am, be, been, being
138
+ - Filler phrases: "in order to" → "to", "due to the fact that" → "because"
139
+ - Pure intensifiers: very, quite, rather, really, extremely, somewhat
140
+ - Complementizer "that" after bridge verbs
141
+
142
+ **Drop when meaning unchanged (aggressive):**
143
+ - Auxiliary verbs: have/has/had, do/does/did, will/would
144
+ - Modal verbs: can/could/may/might/should (keep "must")
145
+ - Pronouns when referent obvious
146
+ - Relative pronouns: which, that, who, whom
147
+
148
+ **Structural compression:**
149
+ - Passive → active when agent known
150
+ - Nominalization → verb: "made a decision" → "decided"
151
+ - Redundant pairs → single: "each and every" → "every"
152
+ - Clause → modifier: "anomaly that was reported" → "reported anomaly"
153
+
154
+ **Always preserve:**
155
+ - Nouns, main verbs, meaning-bearing modifiers
156
+ - Numbers, quantifiers, uncertainty markers
157
+ - Negation (not, no, never)
158
+ - Temporal markers, causality, conditionals
159
+ - Requirements/permissions: must, required, prohibited, allowed
160
+ - Proper nouns, technical terms, code
161
+
162
+ Output should remain readable — prefer fragments over broken grammar."""
163
+
164
+
165
+ # ---------------------------------------------------------------------------
166
+ # /compress slash command
167
+ # ---------------------------------------------------------------------------
168
+
169
+
170
+ def _compress_command_help() -> list[tuple[str, str]]:
171
+ return [
172
+ (
173
+ "compress",
174
+ "Compress text with semantic compression (Tier 1 safe mode)",
175
+ ),
176
+ (
177
+ "compress-aggressive",
178
+ "Compress text with aggressive semantic compression (Tier 1+2)",
179
+ ),
180
+ (
181
+ "semantic-compression",
182
+ "Configure automatic semantic compression of tool output",
183
+ ),
184
+ ]
185
+
186
+
187
+ def _handle_compress_command(command: str, name: str) -> bool | str | None:
188
+ """Handle ``/compress`` and ``/compress-aggressive``.
189
+
190
+ Returns the compressed text as a string for display, or ``True``
191
+ to signal the command was handled.
192
+ """
193
+ if name not in ("compress", "compress-aggressive"):
194
+ return None
195
+
196
+ aggressive = name == "compress-aggressive"
197
+
198
+ # Extract text after the command name
199
+ parts = command.split(maxsplit=1)
200
+ text = parts[1] if len(parts) > 1 else ""
201
+
202
+ if not text.strip():
203
+ return "Usage: /compress <text> or /compress-aggressive <text>"
204
+
205
+ try:
206
+ from .compressor import compress_semantic
207
+
208
+ compressed = compress_semantic(text, aggressive=aggressive)
209
+ mode = "aggressive" if aggressive else "safe"
210
+ return f"[Semantic compression ({mode}): {len(text)} → {len(compressed)} chars]\n{compressed}"
211
+ except Exception as exc:
212
+ logger.error("Compress command failed: %s", exc)
213
+ return f"Compression error: {exc}"
214
+
215
+
216
+ # ---------------------------------------------------------------------------
217
+ # /semantic-compression slash command
218
+ # ---------------------------------------------------------------------------
219
+
220
+
221
+ def _handle_semantic_compression_command(command: str, name: str) -> bool | str | None:
222
+ """Handle ``/semantic-compression`` configuration commands.
223
+
224
+ Subcommands:
225
+ on|off|true|false|enable|disable — toggle automatic compression
226
+ status — show current config
227
+ allowlist [tool1,tool2,...] — set or clear allowlist
228
+ blocklist [tool1,tool2,...] — set or clear blocklist
229
+ """
230
+ if name != "semantic-compression":
231
+ return None
232
+
233
+ tokens = command.strip().split()
234
+ if len(tokens) < 2:
235
+ return _show_semantic_compression_status()
236
+
237
+ sub = tokens[1].lower()
238
+
239
+ # Toggle commands
240
+ if sub in ("on", "true", "1", "yes", "enable"):
241
+ set_semantic_compression_enabled(True)
242
+ emit_success("[Run] Semantic compression of tool output: ON")
243
+ return True
244
+ if sub in ("off", "false", "0", "no", "disable"):
245
+ set_semantic_compression_enabled(False)
246
+ emit_success("[Run] Semantic compression of tool output: OFF")
247
+ return True
248
+
249
+ # Status
250
+ if sub == "status":
251
+ return _show_semantic_compression_status()
252
+
253
+ # Allowlist
254
+ if sub == "allowlist":
255
+ if len(tokens) > 2:
256
+ raw = " ".join(tokens[2:])
257
+ tools = {t.strip() for t in raw.replace(",", " ").split() if t.strip()}
258
+ set_compression_allowlist(tools)
259
+ emit_success(
260
+ f"[Run] Compression allowlist set: {sorted(tools) or '(empty)'}"
261
+ )
262
+ else:
263
+ set_compression_allowlist(set())
264
+ emit_success("[Run] Compression allowlist cleared")
265
+ return True
266
+
267
+ # Blocklist
268
+ if sub == "blocklist":
269
+ if len(tokens) > 2:
270
+ raw = " ".join(tokens[2:])
271
+ tools = {t.strip() for t in raw.replace(",", " ").split() if t.strip()}
272
+ set_compression_blocklist(tools)
273
+ emit_success(
274
+ f"[Run] Compression blocklist set: {sorted(tools) or '(empty)'}"
275
+ )
276
+ else:
277
+ set_compression_blocklist(set())
278
+ emit_success("[Run] Compression blocklist cleared")
279
+ return True
280
+
281
+ emit_error(
282
+ f"Unknown /semantic-compression subcommand: '{sub}'.\n"
283
+ "Usage: /semantic-compression [on|off|status|allowlist|blocklist]"
284
+ )
285
+ return True
286
+
287
+
288
+ def _show_semantic_compression_status() -> str:
289
+ """Return a human-readable status string."""
290
+ enabled = get_semantic_compression_enabled()
291
+ allowlist = get_compression_allowlist()
292
+ blocklist = get_compression_blocklist()
293
+ lines = [
294
+ "Semantic Compression Status:",
295
+ f" Enabled: {'yes' if enabled else 'no (opt-in)'}"
296
+ if not enabled
297
+ else " Enabled: yes",
298
+ ]
299
+ if allowlist:
300
+ lines.append(f" Allowlist: {', '.join(sorted(allowlist))}")
301
+ else:
302
+ lines.append(" Allowlist: (none — all tools allowed)")
303
+ if blocklist:
304
+ lines.append(f" Blocklist: {', '.join(sorted(blocklist))}")
305
+ else:
306
+ lines.append(" Blocklist: (none)")
307
+ return "\n".join(lines)
308
+
309
+
310
+ # ---------------------------------------------------------------------------
311
+ # Register callbacks
312
+ # ---------------------------------------------------------------------------
313
+
314
+ register_callback("post_tool_call", _on_post_tool_call)
315
+ register_callback("load_prompt", _get_compression_prompt)
316
+ register_callback("custom_command_help", _compress_command_help)
317
+ register_callback("custom_command", _handle_compress_command)
318
+ register_callback("custom_command", _handle_semantic_compression_command)
319
+
320
+ logger.info("Semantic Compression Plugin loaded")
@@ -0,0 +1,50 @@
1
+ """Shell Minimizer plugin for Muse.
2
+
3
+ Compresses shell command stdout/stderr before it reaches the LLM,
4
+ using per-program intelligent filtering. Ports the key concepts from
5
+ oh-my-pi's minimizer system to a pure-Python pipeline engine.
6
+
7
+ Public API:
8
+ - apply_pipeline_from_toml(name, toml_def, input, exit_code) -> str
9
+ - parse_pipeline_toml(contents, source_label) -> list[CompiledPipeline]
10
+ """
11
+
12
+ from code_muse.plugins.shell_minimizer.pipeline import (
13
+ CompiledPipeline,
14
+ PipelineDef,
15
+ apply_pipeline,
16
+ compile_pipeline,
17
+ parse_pipeline_toml,
18
+ )
19
+ from code_muse.plugins.shell_minimizer.primitives import (
20
+ compact_listing,
21
+ dedup_consecutive_lines,
22
+ group_by_file,
23
+ head_lines_only,
24
+ head_tail_lines,
25
+ keep_lines_regex,
26
+ max_lines,
27
+ strip_ansi,
28
+ strip_lines_regex,
29
+ tail_lines_only,
30
+ truncate_line,
31
+ )
32
+
33
+ __all__ = [
34
+ "CompiledPipeline",
35
+ "PipelineDef",
36
+ "apply_pipeline",
37
+ "compact_listing",
38
+ "compile_pipeline",
39
+ "dedup_consecutive_lines",
40
+ "group_by_file",
41
+ "head_lines_only",
42
+ "head_tail_lines",
43
+ "keep_lines_regex",
44
+ "max_lines",
45
+ "parse_pipeline_toml",
46
+ "strip_ansi",
47
+ "strip_lines_regex",
48
+ "tail_lines_only",
49
+ "truncate_line",
50
+ ]