hanzo-mcp 0.6.12__py3-none-any.whl → 0.7.0__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.
Potentially problematic release.
This version of hanzo-mcp might be problematic. Click here for more details.
- hanzo_mcp/__init__.py +2 -2
- hanzo_mcp/analytics/__init__.py +5 -0
- hanzo_mcp/analytics/posthog_analytics.py +364 -0
- hanzo_mcp/cli.py +5 -5
- hanzo_mcp/cli_enhanced.py +7 -7
- hanzo_mcp/cli_plugin.py +91 -0
- hanzo_mcp/config/__init__.py +1 -1
- hanzo_mcp/config/settings.py +70 -7
- hanzo_mcp/config/tool_config.py +20 -6
- hanzo_mcp/dev_server.py +3 -3
- hanzo_mcp/prompts/project_system.py +1 -1
- hanzo_mcp/server.py +40 -3
- hanzo_mcp/server_enhanced.py +69 -0
- hanzo_mcp/tools/__init__.py +140 -31
- hanzo_mcp/tools/agent/__init__.py +85 -4
- hanzo_mcp/tools/agent/agent_tool.py +104 -6
- hanzo_mcp/tools/agent/agent_tool_v2.py +459 -0
- hanzo_mcp/tools/agent/clarification_protocol.py +220 -0
- hanzo_mcp/tools/agent/clarification_tool.py +68 -0
- hanzo_mcp/tools/agent/claude_cli_tool.py +125 -0
- hanzo_mcp/tools/agent/claude_desktop_auth.py +508 -0
- hanzo_mcp/tools/agent/cli_agent_base.py +191 -0
- hanzo_mcp/tools/agent/code_auth.py +436 -0
- hanzo_mcp/tools/agent/code_auth_tool.py +194 -0
- hanzo_mcp/tools/agent/codex_cli_tool.py +123 -0
- hanzo_mcp/tools/agent/critic_tool.py +376 -0
- hanzo_mcp/tools/agent/gemini_cli_tool.py +128 -0
- hanzo_mcp/tools/agent/grok_cli_tool.py +128 -0
- hanzo_mcp/tools/agent/iching_tool.py +380 -0
- hanzo_mcp/tools/agent/network_tool.py +273 -0
- hanzo_mcp/tools/agent/prompt.py +62 -20
- hanzo_mcp/tools/agent/review_tool.py +433 -0
- hanzo_mcp/tools/agent/swarm_tool.py +535 -0
- hanzo_mcp/tools/agent/swarm_tool_v2.py +594 -0
- hanzo_mcp/tools/common/__init__.py +15 -1
- hanzo_mcp/tools/common/base.py +5 -4
- hanzo_mcp/tools/common/batch_tool.py +103 -11
- hanzo_mcp/tools/common/config_tool.py +2 -2
- hanzo_mcp/tools/common/context.py +2 -2
- hanzo_mcp/tools/common/context_fix.py +26 -0
- hanzo_mcp/tools/common/critic_tool.py +196 -0
- hanzo_mcp/tools/common/decorators.py +208 -0
- hanzo_mcp/tools/common/enhanced_base.py +106 -0
- hanzo_mcp/tools/common/fastmcp_pagination.py +369 -0
- hanzo_mcp/tools/common/forgiving_edit.py +243 -0
- hanzo_mcp/tools/common/mode.py +116 -0
- hanzo_mcp/tools/common/mode_loader.py +105 -0
- hanzo_mcp/tools/common/paginated_base.py +230 -0
- hanzo_mcp/tools/common/paginated_response.py +307 -0
- hanzo_mcp/tools/common/pagination.py +226 -0
- hanzo_mcp/tools/common/permissions.py +1 -1
- hanzo_mcp/tools/common/personality.py +936 -0
- hanzo_mcp/tools/common/plugin_loader.py +287 -0
- hanzo_mcp/tools/common/stats.py +4 -4
- hanzo_mcp/tools/common/tool_list.py +4 -1
- hanzo_mcp/tools/common/truncate.py +101 -0
- hanzo_mcp/tools/common/validation.py +1 -1
- hanzo_mcp/tools/config/__init__.py +3 -1
- hanzo_mcp/tools/config/config_tool.py +1 -1
- hanzo_mcp/tools/config/mode_tool.py +209 -0
- hanzo_mcp/tools/database/__init__.py +1 -1
- hanzo_mcp/tools/editor/__init__.py +1 -1
- hanzo_mcp/tools/filesystem/__init__.py +48 -14
- hanzo_mcp/tools/filesystem/ast_multi_edit.py +562 -0
- hanzo_mcp/tools/filesystem/batch_search.py +3 -3
- hanzo_mcp/tools/filesystem/diff.py +2 -2
- hanzo_mcp/tools/filesystem/directory_tree_paginated.py +338 -0
- hanzo_mcp/tools/filesystem/rules_tool.py +235 -0
- hanzo_mcp/tools/filesystem/{unified_search.py → search_tool.py} +12 -12
- hanzo_mcp/tools/filesystem/{symbols_unified.py → symbols_tool.py} +104 -5
- hanzo_mcp/tools/filesystem/watch.py +3 -2
- hanzo_mcp/tools/jupyter/__init__.py +2 -2
- hanzo_mcp/tools/jupyter/jupyter.py +1 -1
- hanzo_mcp/tools/llm/__init__.py +3 -3
- hanzo_mcp/tools/llm/llm_tool.py +648 -143
- hanzo_mcp/tools/lsp/__init__.py +5 -0
- hanzo_mcp/tools/lsp/lsp_tool.py +512 -0
- hanzo_mcp/tools/mcp/__init__.py +2 -2
- hanzo_mcp/tools/mcp/{mcp_unified.py → mcp_tool.py} +3 -3
- hanzo_mcp/tools/memory/__init__.py +76 -0
- hanzo_mcp/tools/memory/knowledge_tools.py +518 -0
- hanzo_mcp/tools/memory/memory_tools.py +456 -0
- hanzo_mcp/tools/search/__init__.py +6 -0
- hanzo_mcp/tools/search/find_tool.py +581 -0
- hanzo_mcp/tools/search/unified_search.py +953 -0
- hanzo_mcp/tools/shell/__init__.py +11 -6
- hanzo_mcp/tools/shell/auto_background.py +203 -0
- hanzo_mcp/tools/shell/base_process.py +57 -29
- hanzo_mcp/tools/shell/bash_session_executor.py +1 -1
- hanzo_mcp/tools/shell/{bash_unified.py → bash_tool.py} +18 -34
- hanzo_mcp/tools/shell/command_executor.py +2 -2
- hanzo_mcp/tools/shell/{npx_unified.py → npx_tool.py} +16 -33
- hanzo_mcp/tools/shell/open.py +2 -2
- hanzo_mcp/tools/shell/{process_unified.py → process_tool.py} +1 -1
- hanzo_mcp/tools/shell/run_command_windows.py +1 -1
- hanzo_mcp/tools/shell/streaming_command.py +594 -0
- hanzo_mcp/tools/shell/uvx.py +47 -2
- hanzo_mcp/tools/shell/uvx_background.py +47 -2
- hanzo_mcp/tools/shell/{uvx_unified.py → uvx_tool.py} +16 -33
- hanzo_mcp/tools/todo/__init__.py +14 -19
- hanzo_mcp/tools/todo/todo.py +22 -1
- hanzo_mcp/tools/vector/__init__.py +1 -1
- hanzo_mcp/tools/vector/infinity_store.py +2 -2
- hanzo_mcp/tools/vector/project_manager.py +1 -1
- hanzo_mcp/types.py +23 -0
- hanzo_mcp-0.7.0.dist-info/METADATA +516 -0
- hanzo_mcp-0.7.0.dist-info/RECORD +180 -0
- {hanzo_mcp-0.6.12.dist-info → hanzo_mcp-0.7.0.dist-info}/entry_points.txt +1 -0
- hanzo_mcp/tools/common/palette.py +0 -344
- hanzo_mcp/tools/common/palette_loader.py +0 -108
- hanzo_mcp/tools/config/palette_tool.py +0 -179
- hanzo_mcp/tools/llm/llm_unified.py +0 -851
- hanzo_mcp-0.6.12.dist-info/METADATA +0 -339
- hanzo_mcp-0.6.12.dist-info/RECORD +0 -135
- hanzo_mcp-0.6.12.dist-info/licenses/LICENSE +0 -21
- {hanzo_mcp-0.6.12.dist-info → hanzo_mcp-0.7.0.dist-info}/WHEEL +0 -0
- {hanzo_mcp-0.6.12.dist-info → hanzo_mcp-0.7.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
hanzo_mcp/__init__.py,sha256=u_sq1RxXsMYSHcKa9iuMSjVhooegJyiHbPhVIc9O4oE,361
|
|
2
|
+
hanzo_mcp/__main__.py,sha256=TY-sUBg0MJozJws4-e3_kT8mJVoYGKCk6G3gPGxjIBI,129
|
|
3
|
+
hanzo_mcp/cli.py,sha256=NU861dStkBtnerDvV3uTjBL_2RGV2Ujz0C6DnNI8BXI,13295
|
|
4
|
+
hanzo_mcp/cli_enhanced.py,sha256=T_AATmhSoKxEdltB-OY8iv5FxD2yI-d-TtDJ3ui-eY0,15966
|
|
5
|
+
hanzo_mcp/cli_plugin.py,sha256=FjBklPtpIbpgSNq5QfIeeWCO3otjOJPFXcpfKP8bGBw,3181
|
|
6
|
+
hanzo_mcp/dev_server.py,sha256=Ie1egLSmzu2i_kRLorIIlpfHyS-hZBv9P9yUjjAEVVc,8134
|
|
7
|
+
hanzo_mcp/server.py,sha256=o_JUOgHaQkBygUxl98GFbibJH89JOE1Dk7ISRwcGSxw,9808
|
|
8
|
+
hanzo_mcp/server_enhanced.py,sha256=6GK5IiDE2NTXnT_UnGi_HPV-gTn0ZT-D-rOToMmE394,2166
|
|
9
|
+
hanzo_mcp/types.py,sha256=CTquCvlKC-KTyGrtJH7tQxSxLDXMBHy7WTbzbYBnWUE,659
|
|
10
|
+
hanzo_mcp/analytics/__init__.py,sha256=9Z64jQGNqNmLeIYhyVpjtRsU_jfpo9N-NXb-26Q6tt0,212
|
|
11
|
+
hanzo_mcp/analytics/posthog_analytics.py,sha256=XOt7hkvswyYEaKE8f6nmWl-Tr4BvKhM00_XdH2vFUQo,11279
|
|
12
|
+
hanzo_mcp/config/__init__.py,sha256=E3GQ0EMerdJI8mbTL2uhlBPiJYykNOnAoPorIpP2QKM,505
|
|
13
|
+
hanzo_mcp/config/settings.py,sha256=kA7O8MaDv988H1xlywXWfO1pyGTsoZVR77_aRVR7wg0,18508
|
|
14
|
+
hanzo_mcp/config/tool_config.py,sha256=MhRg-IhgYEY74CNywJskWBxMo0TX6fE6vnBWnqH2y14,6854
|
|
15
|
+
hanzo_mcp/prompts/__init__.py,sha256=Fp2Jr6SmUd6QmasOclgkTIb4qCzRSqtu3i-0d98XKEg,3992
|
|
16
|
+
hanzo_mcp/prompts/compact_conversation.py,sha256=nvD068KEesiMcevxxMBeIJh6AqT7YHOqyH6RepRFFfA,4206
|
|
17
|
+
hanzo_mcp/prompts/create_release.py,sha256=1Z8xSTtz5vAm0rWFnERpFu7wIYExT4iXhM6nGmQaM-s,1374
|
|
18
|
+
hanzo_mcp/prompts/project_system.py,sha256=FgWxRaX7rPQwDZT3n69yBwLkQv4uJ4jcUZjKzikjR9A,8230
|
|
19
|
+
hanzo_mcp/prompts/project_todo_reminder.py,sha256=otiBdmzxssBSb3MZZSQsjYDGLBqi1bM0HgraELP_Nf4,3645
|
|
20
|
+
hanzo_mcp/prompts/utils.py,sha256=IwxIhzZfYJ2anToPulbrpcc07u4Dozo9ok6VE3BC_4A,9963
|
|
21
|
+
hanzo_mcp/tools/__init__.py,sha256=QXnDVa7MjTsGT2MnEXJcUdWS0e5Grw9_mX0rwhZ-F3k,18811
|
|
22
|
+
hanzo_mcp/tools/agent/__init__.py,sha256=Op9hy3rrRCvhzH85mUXWPhFQWYgFbmr486ehl7EaziU,4847
|
|
23
|
+
hanzo_mcp/tools/agent/agent.py,sha256=xWYV6-ACIut_u2yiaobmN5szvoBOs8vre0opNKcKkmY,13541
|
|
24
|
+
hanzo_mcp/tools/agent/agent_tool.py,sha256=xh7ts4ZOGhe9AiQ1B6fuqvy3HfL-Gtd6azeQfey0PAk,26744
|
|
25
|
+
hanzo_mcp/tools/agent/agent_tool_v2.py,sha256=iLLoyu4dG-ovxXWyO_BUo5N8yLIzxYkrLsykqn1K7OY,16135
|
|
26
|
+
hanzo_mcp/tools/agent/clarification_protocol.py,sha256=haSUDJQVLAQLpp0doFdqxfSDUWeyzDNL38xcI918_H8,8135
|
|
27
|
+
hanzo_mcp/tools/agent/clarification_tool.py,sha256=yXuo6z8N5wq0Ll5-Tg8RYHtyeexxFREQrC0JlhKrbyk,2469
|
|
28
|
+
hanzo_mcp/tools/agent/claude_cli_tool.py,sha256=TM2VT6FlbUlyLp9QWZ_UBqmSjfNT-F9cmeUHSIupF_o,3904
|
|
29
|
+
hanzo_mcp/tools/agent/claude_desktop_auth.py,sha256=hkHjlqc4dqrv1hXJFOZKvgaHScogGkjV5De3r8NRTBQ,16922
|
|
30
|
+
hanzo_mcp/tools/agent/cli_agent_base.py,sha256=nik-oNttJeaKN7Zy_avDZko96a2IFP_vAVB5Xyx8xEc,6590
|
|
31
|
+
hanzo_mcp/tools/agent/code_auth.py,sha256=tMVHKluMYgL0XII3McXv7mRmhbkotBj6FSP9nlYyzAo,14497
|
|
32
|
+
hanzo_mcp/tools/agent/code_auth_tool.py,sha256=L12B3CelKCgJN829tGaYErtSyWZ6zuZOurGXjHoghMU,6404
|
|
33
|
+
hanzo_mcp/tools/agent/codex_cli_tool.py,sha256=VJnSeD8F_mXTqiRQDKllwAdUXuIVg2aECWKFCF-1S08,3789
|
|
34
|
+
hanzo_mcp/tools/agent/critic_tool.py,sha256=WGE9IcashxSDsLaUkQTiR78u89-3PqAMcJffr4DE9Mo,14139
|
|
35
|
+
hanzo_mcp/tools/agent/gemini_cli_tool.py,sha256=HSzZJP1dgs6cZ2D9CNkkTLGkvGex-jmTMiUHDX49Qdo,4027
|
|
36
|
+
hanzo_mcp/tools/agent/grok_cli_tool.py,sha256=cBBNixC92wjblzlJqI8ar4yg88M9692qOP40gt9YlY8,3861
|
|
37
|
+
hanzo_mcp/tools/agent/iching_tool.py,sha256=dXEJLFtwMQNnPWquxsbAuNH6_hB2sva82Q9VN_Qn0_A,20878
|
|
38
|
+
hanzo_mcp/tools/agent/network_tool.py,sha256=83S-ggTUINGkQjuAcQQjYkx2BUCS6O2POI8vPqS8SlM,10223
|
|
39
|
+
hanzo_mcp/tools/agent/prompt.py,sha256=O5aTf6ooF_KLUgeELjNPoJuxIqFh_pQtDhda9TohQVU,6806
|
|
40
|
+
hanzo_mcp/tools/agent/review_tool.py,sha256=5HeltukjfLfg6EqwExsz7y2h4_lJnqybRQhtbR2DpO8,17257
|
|
41
|
+
hanzo_mcp/tools/agent/swarm_tool.py,sha256=W-czkW1mAdgsAb87f3u0y3r1WA_p_fHotT7hJZUd7Io,21038
|
|
42
|
+
hanzo_mcp/tools/agent/swarm_tool_v2.py,sha256=PPu6NXx5WdXFoce7vbWmtWw1TAS38I0H4VLflekv7z0,21449
|
|
43
|
+
hanzo_mcp/tools/agent/tool_adapter.py,sha256=HbuCOuj21hdNlUu0vLQq2QRupi7vCDhMPj2MH-oTwKE,2302
|
|
44
|
+
hanzo_mcp/tools/common/__init__.py,sha256=QQqwCAtOEvWlQ48O-8s_vayY58peGSfk1AgmWJSuQus,1283
|
|
45
|
+
hanzo_mcp/tools/common/base.py,sha256=Yu6aQX3ma-uLcHf1frLStw1U3zCiOvuROHdr0HPoyc8,5946
|
|
46
|
+
hanzo_mcp/tools/common/batch_tool.py,sha256=GYNGG4tTemmgJEvyUodRq5ysQe0_gpIAQ0WjLRcbjwg,16070
|
|
47
|
+
hanzo_mcp/tools/common/config_tool.py,sha256=X2TaITRcYemyD-V2w-Jwpv3DpFdSp65Dk_QTHfYzgF8,16250
|
|
48
|
+
hanzo_mcp/tools/common/context.py,sha256=by0twroTbcQwTJ552HgzhG67GXHCPyEsBXQ18jueLho,5184
|
|
49
|
+
hanzo_mcp/tools/common/context_fix.py,sha256=T0VUJpz-8SQE-h3MiWYiLaZFyF7s-rfTpYVUP6ax2TU,764
|
|
50
|
+
hanzo_mcp/tools/common/critic_tool.py,sha256=0wj9in66AmLQs8bTCiuNxnSSYyUZUursIIXl_6gRZhw,6292
|
|
51
|
+
hanzo_mcp/tools/common/decorators.py,sha256=4CIpYTrcTKSM1zGKFGGjDwgxJXKKKthavzz_cLGqw2U,6806
|
|
52
|
+
hanzo_mcp/tools/common/enhanced_base.py,sha256=8jF7QNFmS1owhqJLzdClpDkbS3INj49DQ_Rn_yvdIoY,3781
|
|
53
|
+
hanzo_mcp/tools/common/fastmcp_pagination.py,sha256=fbfXsOWb80bSHoDmMhKLthCaHlF_T3MQ42lzjplmOUU,12144
|
|
54
|
+
hanzo_mcp/tools/common/forgiving_edit.py,sha256=6SGMrItHQdAkaqx0y73ivK8vKa5nJTpNbuXtmB_Y7t4,9129
|
|
55
|
+
hanzo_mcp/tools/common/mode.py,sha256=3tHBnhR-N6fxmEJPelLMyeHIUqXx-q0lSGU5BWCPw14,3320
|
|
56
|
+
hanzo_mcp/tools/common/mode_loader.py,sha256=341MxmYmJHwM5WAfQnULbfoypEAnyME-tEu69_8J44Y,3340
|
|
57
|
+
hanzo_mcp/tools/common/paginated_base.py,sha256=Yrrmcy-WnA885cd7Coi-CCHQXboqsjgl8_K8jrEb-Ts,8902
|
|
58
|
+
hanzo_mcp/tools/common/paginated_response.py,sha256=Qqjd_mS0SV1vztV_DY_-iShMBRS5eeQnRor8pKvi0vk,10563
|
|
59
|
+
hanzo_mcp/tools/common/pagination.py,sha256=rTIb-dCm8jMb4ElFa8BWkad8HFAB55RUpnyKgSChGw4,6413
|
|
60
|
+
hanzo_mcp/tools/common/permissions.py,sha256=D6oK5eWqkAZt-tUeL717-NnmYLzcX22wsq86zzhOdfc,7561
|
|
61
|
+
hanzo_mcp/tools/common/personality.py,sha256=8Ly46Ui95t-KbaMz5k6gVQG87Acz7p32sU4Cz-RwtuM,36884
|
|
62
|
+
hanzo_mcp/tools/common/plugin_loader.py,sha256=XUEmxkdteOSejoTnRMeEMXdCOrDPRTt0BvvrvrBA4is,9191
|
|
63
|
+
hanzo_mcp/tools/common/stats.py,sha256=Idv5lkJjx6PUbpgLkifwrrd09bigzLKgpZHGZFJT5qQ,9765
|
|
64
|
+
hanzo_mcp/tools/common/thinking_tool.py,sha256=-jNKGS9V9qkl2Y7Zl8QK6HJmJ4XE2EOWyeA-dg3Fg-o,5071
|
|
65
|
+
hanzo_mcp/tools/common/tool_disable.py,sha256=JFXQsA08WzCHYSuEETjmcUzk1RhABZljRD0d4N8PkSI,4257
|
|
66
|
+
hanzo_mcp/tools/common/tool_enable.py,sha256=CD9ioFVVcnAFtrhKKsuLuKhMh31qMBSVdLSldDbTBmE,5044
|
|
67
|
+
hanzo_mcp/tools/common/tool_list.py,sha256=tYLpUaunjeXeHV95rMASDJyJIc4FIcchEKwrZZr82Hg,9553
|
|
68
|
+
hanzo_mcp/tools/common/truncate.py,sha256=3R2qBuMSl23mJ3W_pVKi9MShdLGEeejkWIUWGHf_oBA,3188
|
|
69
|
+
hanzo_mcp/tools/common/validation.py,sha256=cBA4sqDapIAXUj9mVQVzM3lS_KovDrI5Ct66muxy538,1693
|
|
70
|
+
hanzo_mcp/tools/config/__init__.py,sha256=7yZQLhF40U9F7Xddb4uMwhg-76owkOEOax94xw6Ip-o,313
|
|
71
|
+
hanzo_mcp/tools/config/config_tool.py,sha256=FHtKsXEGwWFLQkrgWQHmzg6-OO3M7HQY30mJjEnXeHM,6876
|
|
72
|
+
hanzo_mcp/tools/config/index_config.py,sha256=VNxCrFyBFLAjoial5pZlRNZgrF1iDVl5yy-_czEyfGo,6332
|
|
73
|
+
hanzo_mcp/tools/config/mode_tool.py,sha256=GawuLeQ9pc0ExPAcYqaw82zs7UYb4a2R6DWQmZtASY8,8851
|
|
74
|
+
hanzo_mcp/tools/database/__init__.py,sha256=dTZj2QLelJpJouYmgP2vAyf1eU62ZoND0xZ7OC0dmiM,2166
|
|
75
|
+
hanzo_mcp/tools/database/database_manager.py,sha256=urbP3T4QpTPBOH7JKjgjRbgMZAZxGm5Q_skZnZ9aHXQ,8807
|
|
76
|
+
hanzo_mcp/tools/database/graph.py,sha256=i4yufKM8KNlb4NgsHkZSZ2kLICuJsQfl9m13sTfTZZ4,16964
|
|
77
|
+
hanzo_mcp/tools/database/graph_add.py,sha256=gxFG-OHkvJhLUUW-xQMvNiQ_iQDt7vJ1k9rWdBd7dEg,7741
|
|
78
|
+
hanzo_mcp/tools/database/graph_query.py,sha256=j7I0zhkiqLZqE2Btef4NMeqAuJiDXFoNYniphRSnzaY,19753
|
|
79
|
+
hanzo_mcp/tools/database/graph_remove.py,sha256=Ei0ezAKa1902ll1wLTKcVXjoFETGCPbH7EvcQ5ctTMM,8776
|
|
80
|
+
hanzo_mcp/tools/database/graph_search.py,sha256=ATZEe5U4wjHV4ocSQZko_QlN9Clrx-EZ_DSGzYaoSTs,12566
|
|
81
|
+
hanzo_mcp/tools/database/graph_stats.py,sha256=dcBpMwFgS9X5l57Kdi8RAfyeI2-YKrDNyW0BjRL3L2I,13024
|
|
82
|
+
hanzo_mcp/tools/database/sql.py,sha256=I7mDodvYwt5jqS0qMid2JcJatQ5Q0yabyTPi9X59Drw,16144
|
|
83
|
+
hanzo_mcp/tools/database/sql_query.py,sha256=MsZ9XQ-KIMOMeqIxUnbKpd4_CN8Nt6zIN6vB9V6xkik,7290
|
|
84
|
+
hanzo_mcp/tools/database/sql_search.py,sha256=KEG7DBcBvMy0CGRoxxanOYmwKL9GVN4vNPQvjxhlxkg,9831
|
|
85
|
+
hanzo_mcp/tools/database/sql_stats.py,sha256=9aumwENMo-9DOfcLBg8zQ6khIdxVIQLVh_kNYE4MbZA,9008
|
|
86
|
+
hanzo_mcp/tools/editor/__init__.py,sha256=UfwWP23OUFmd6dYRwm2fKfaYDlignQ2gfi32yRson08,331
|
|
87
|
+
hanzo_mcp/tools/editor/neovim_command.py,sha256=R4OtUia7WKdzOK8AHDrNpHii5GDJmHWwZigFy9ATycs,8283
|
|
88
|
+
hanzo_mcp/tools/editor/neovim_edit.py,sha256=Hq10p1LIHBM_jGIyvjQYtJr8NR5pAeLRM6GfnGHFzTg,8816
|
|
89
|
+
hanzo_mcp/tools/editor/neovim_session.py,sha256=H1AhXBod9HzcYv4fQu4pOlBcyfwgjUo24lzenDZfqRU,11962
|
|
90
|
+
hanzo_mcp/tools/filesystem/__init__.py,sha256=navUNfGxyJqHfc-mVhuAPMGeyjauB9WyknhzSitFQME,7849
|
|
91
|
+
hanzo_mcp/tools/filesystem/ast_multi_edit.py,sha256=DdcVYEbdKIgrPOPJVxmirt_xXfkffFhtBdXpOkCaZek,22084
|
|
92
|
+
hanzo_mcp/tools/filesystem/base.py,sha256=0_6PBU1yqGRIQ8ggQNMEA2rB4DXTFg7sMJRAoocN9do,3818
|
|
93
|
+
hanzo_mcp/tools/filesystem/batch_search.py,sha256=nnl72e-HzkjrGCcnyn-2E8VkKBNRx7-0NxxiYFznbhc,34278
|
|
94
|
+
hanzo_mcp/tools/filesystem/content_replace.py,sha256=9GvQhJP1yBJsLQZPHs1UJZ6hxLBh1gCmZaU_CI4kbsA,9958
|
|
95
|
+
hanzo_mcp/tools/filesystem/diff.py,sha256=0ukeGSvkf4PosKhlvQltMuFKA7and_H5T8c632LEX6U,7618
|
|
96
|
+
hanzo_mcp/tools/filesystem/directory_tree.py,sha256=H_fuqNot8Qx3eJQXBsFGIUVyASGFjXgnO_viT_gCLwU,10696
|
|
97
|
+
hanzo_mcp/tools/filesystem/directory_tree_paginated.py,sha256=bP3ns4jW0srTiIqsmj6tvJ76Xj89JvjYrOofXQ9iXmU,11511
|
|
98
|
+
hanzo_mcp/tools/filesystem/edit.py,sha256=jqn1ae3tL5JrHQYm-uWHbXZSuAtw8o2Nj2yYJ1CGg8k,10632
|
|
99
|
+
hanzo_mcp/tools/filesystem/find.py,sha256=897Lnd2507979hBzkskU5gEj1XDJdr7Gr9hTZIAWkUU,15337
|
|
100
|
+
hanzo_mcp/tools/filesystem/find_files.py,sha256=BjmDzXvfXLV7_5NSZ7whhxXzJbM-vP1O0xq411PReSk,10959
|
|
101
|
+
hanzo_mcp/tools/filesystem/git_search.py,sha256=qOOIxuATu6UPdlWokJaifaKLphj1Y3uMREqCMD9weOk,16220
|
|
102
|
+
hanzo_mcp/tools/filesystem/grep.py,sha256=LDBGEpN2dj5xW1VvfgDxlkx4QqofWeztqwdyf_pSup0,16832
|
|
103
|
+
hanzo_mcp/tools/filesystem/multi_edit.py,sha256=p6_OJNBn9uzCxVcLJrL88gze_P4O8j2Lm0-DZAESwpY,14242
|
|
104
|
+
hanzo_mcp/tools/filesystem/read.py,sha256=y8FV9S4GZZLNMplrIZrz5FrqQ0xT3OiIHav-a2uDBzs,9342
|
|
105
|
+
hanzo_mcp/tools/filesystem/rules_tool.py,sha256=QBm2FnuN3HlIHC5M5vkAE8fvMrtebQskb31KJ_R1mec,8311
|
|
106
|
+
hanzo_mcp/tools/filesystem/search_tool.py,sha256=m2i8A-iC9oyL6KR0fsPXbD7QXDORJksb2iB_xqNLz8s,26580
|
|
107
|
+
hanzo_mcp/tools/filesystem/symbols.py,sha256=gwLwA2PA6YuT7hojjFVHq2xVPuB2xlyTYyVbBow7AXY,7290
|
|
108
|
+
hanzo_mcp/tools/filesystem/symbols_tool.py,sha256=oCS734s17Q2KjGGw0vXcKOzJclrLvuHPE0NXCS_BN-U,15993
|
|
109
|
+
hanzo_mcp/tools/filesystem/tree.py,sha256=MPBb3jHWa09DezDILP3FP7S_XCY2dJYQM-zUVYUloQQ,7497
|
|
110
|
+
hanzo_mcp/tools/filesystem/unix_aliases.py,sha256=jagrJbDo97Kpt3Zu3LQcuw_z28MQlADrNPbWgk6_cA0,3162
|
|
111
|
+
hanzo_mcp/tools/filesystem/watch.py,sha256=in8vDAaInagg5gWT5hOcgioN7hs5nuEDeln3yaxrW5c,7100
|
|
112
|
+
hanzo_mcp/tools/filesystem/write.py,sha256=FwumcJX9RW_Xy8noKh-S3p95KRyOUG59Nl4w5lznV40,4762
|
|
113
|
+
hanzo_mcp/tools/jupyter/__init__.py,sha256=QQV3Vq13L5TicBWaSHtgg7HNteGjkmj67PXfWbrvcqY,2416
|
|
114
|
+
hanzo_mcp/tools/jupyter/base.py,sha256=cK190wDExYyUFu7qrT-s5sHglPd9k6SrlpA60sLwFFE,10101
|
|
115
|
+
hanzo_mcp/tools/jupyter/jupyter.py,sha256=48QgVTgoHmlKRk2D1oxMckIDr92CzZmKuWyzpdagceo,11749
|
|
116
|
+
hanzo_mcp/tools/jupyter/notebook_edit.py,sha256=MeaeUgvPnc5EmvgzbtJGIqKqFuUFt_8RE-XzBouYU4Q,11806
|
|
117
|
+
hanzo_mcp/tools/jupyter/notebook_read.py,sha256=Au6Ad3N1Z5cYq2yIbu5y9H4oF6SwOj6SdHQeBwP7Gus,5222
|
|
118
|
+
hanzo_mcp/tools/llm/__init__.py,sha256=7bb3oAPAGkv_jFmGNXK6RSTFqjbty9Iklp1WqQXsM2s,703
|
|
119
|
+
hanzo_mcp/tools/llm/consensus_tool.py,sha256=5Rjs9TS0jeNkSH12AQK3fSvy7yo6tJRdmfYZLrR6NgU,11622
|
|
120
|
+
hanzo_mcp/tools/llm/llm_manage.py,sha256=SCgmiO_cjQnCFdpsGzIPMluN1s8FA-Nj5-3AJZLvIUg,15666
|
|
121
|
+
hanzo_mcp/tools/llm/llm_tool.py,sha256=PJpPG8st-kd7Yc21udAZsvfzvkauhhauojvJ-b8ZnJc,29796
|
|
122
|
+
hanzo_mcp/tools/llm/provider_tools.py,sha256=mtjGdAPX3XFc_22fMNYNQbeU49opduQPO9h7DoN5IQo,11546
|
|
123
|
+
hanzo_mcp/tools/lsp/__init__.py,sha256=bqUrl-Do2Qj9usJYUHaU7gg4EZr5YEGY0LtBTgOl15A,149
|
|
124
|
+
hanzo_mcp/tools/lsp/lsp_tool.py,sha256=SNW3E3EykNr1_N3jUJlf0wtVeUIVDwQQR_6Qu34IUs0,19163
|
|
125
|
+
hanzo_mcp/tools/mcp/__init__.py,sha256=OJ9WHtzG3J8sHGSAdckortCR-m6DiyS01YPQMao7E2g,348
|
|
126
|
+
hanzo_mcp/tools/mcp/mcp_add.py,sha256=e66tk-OoV8R5x020sDHWgmJw_QLncfA7_RAi2Mr3ZDc,7924
|
|
127
|
+
hanzo_mcp/tools/mcp/mcp_remove.py,sha256=cI_C6xjaHrQ0jnlqRZvrtjDi4CR6V0mTDLynOlrcAiA,3266
|
|
128
|
+
hanzo_mcp/tools/mcp/mcp_stats.py,sha256=nka8zAJEEfqlA3tO5IamuIwOnmIZzLDW52kOxPTCDZc,5478
|
|
129
|
+
hanzo_mcp/tools/mcp/mcp_tool.py,sha256=kx-HEK1PQaLrWi4wff73HgGpY6x0m0J-CaNAD84uQwU,16855
|
|
130
|
+
hanzo_mcp/tools/memory/__init__.py,sha256=1ndJ_bwVVt0xFCpEYDUBHQjby6hM4Uww3Av_aivFAiM,2866
|
|
131
|
+
hanzo_mcp/tools/memory/knowledge_tools.py,sha256=52lWw5Km6rUjvsFXMAgXAIGO91qyDTvpK6WJOZNSfM0,17922
|
|
132
|
+
hanzo_mcp/tools/memory/memory_tools.py,sha256=jBF4HVsOFURBMOV4KXD1z4e-_O5oRKy63DqeFFppHsc,14267
|
|
133
|
+
hanzo_mcp/tools/search/__init__.py,sha256=nYhD_YhR4YLtA4lHK8hKW9XErw0g-JvRB8NF_T8vrd4,272
|
|
134
|
+
hanzo_mcp/tools/search/find_tool.py,sha256=5h7r8nWox80YpgevgRNnr1Gg-CCMYfWu2xD9Qj4O8Bw,22243
|
|
135
|
+
hanzo_mcp/tools/search/unified_search.py,sha256=c2Di9eOcFtDh8FJMpt9nFB1PkkVtD-8lzyProkoaatI,37429
|
|
136
|
+
hanzo_mcp/tools/shell/__init__.py,sha256=Ejgww5ots7XYXnf4uVJ3qvu9CROCHEEps622P4OzUWM,1996
|
|
137
|
+
hanzo_mcp/tools/shell/auto_background.py,sha256=m_S815bsS2B5bIpjolFI1qA2V7SenLq0emqpGDrHIlE,7590
|
|
138
|
+
hanzo_mcp/tools/shell/base.py,sha256=Nx9rAE7CO9-Hr5k_qYKUtNFq4twI6Z-lOt0fpkS57i4,5832
|
|
139
|
+
hanzo_mcp/tools/shell/base_process.py,sha256=h6jg5O_SK6n4QVFC7-4z6kJRlPgxnVEOYt7hofxny4w,10520
|
|
140
|
+
hanzo_mcp/tools/shell/bash_session.py,sha256=YPtdtC0pc6Q04RJqKUy0u0RPTbiT2IGtsvFqejK5Hu4,27271
|
|
141
|
+
hanzo_mcp/tools/shell/bash_session_executor.py,sha256=BcR6aJgluRdj0lepV8MrIkeYo3S9MrbuIqIjtV12WHQ,10891
|
|
142
|
+
hanzo_mcp/tools/shell/bash_tool.py,sha256=kjJpwaXHx5Xmjannvw4NVVJFY2HmDU5hH_ZGyYyPMZ0,4453
|
|
143
|
+
hanzo_mcp/tools/shell/command_executor.py,sha256=171GoLjIvbnV4F0kqxs30BgLBQC4I1Gi4jEOZJ9N5FA,36507
|
|
144
|
+
hanzo_mcp/tools/shell/logs.py,sha256=RahjkEHNwsKbnJ7cTAie70BSb9bV6T9Vf4JJluoZXYo,8468
|
|
145
|
+
hanzo_mcp/tools/shell/npx.py,sha256=Bs5tKpyJMm6Yfrmuph0btbvSQGbDczR_YToP2iRqhHY,5083
|
|
146
|
+
hanzo_mcp/tools/shell/npx_background.py,sha256=GNZOYV_jjA9pa7w-ZNy_oX7iSA_VfZRzVUr7dKunfjo,7120
|
|
147
|
+
hanzo_mcp/tools/shell/npx_tool.py,sha256=9vgJvBCM82co9-Wb5RVkGOebmRtYiRYZVJdiLVekNgs,3032
|
|
148
|
+
hanzo_mcp/tools/shell/open.py,sha256=h8SWEtHKUBevSt-be51MS1No2srIT6ptuySNexMYn58,3686
|
|
149
|
+
hanzo_mcp/tools/shell/pkill.py,sha256=PStKLEhuZhCZAXnn-Wwlut2xjV7GIc7PozuF8y8b7gI,8676
|
|
150
|
+
hanzo_mcp/tools/shell/process_tool.py,sha256=DvSQfP-X0TzJS8JFa5wmihkfHVnW1J_9Hi7q-H1f_AM,5007
|
|
151
|
+
hanzo_mcp/tools/shell/processes.py,sha256=q2TCVpftV1HJaoEOEWzTOOUvyRemZiG0v8hK9VGM94A,9395
|
|
152
|
+
hanzo_mcp/tools/shell/run_background.py,sha256=K2SxCF9sDcVxcwzAA77plZMb3wjYTOoSqS6MVyuBFBE,9713
|
|
153
|
+
hanzo_mcp/tools/shell/run_command.py,sha256=AEH3waGpjbaSxBxSfmDW6hF7aL4pzwEwgUojOEsSNOY,16095
|
|
154
|
+
hanzo_mcp/tools/shell/run_command_windows.py,sha256=FZ8fUjqvsdGvzyyvagNiQ6ot_isHvVtvCt39MZ5FNks,15320
|
|
155
|
+
hanzo_mcp/tools/shell/session_manager.py,sha256=o8iS4PFCnq28vPqYtdtH9M8lfGyzyhtNL0hmNI13Uuc,6509
|
|
156
|
+
hanzo_mcp/tools/shell/session_storage.py,sha256=elnyFgn0FwsmVvoWAoJFAqiEeNaK4_yByT8-zXa6r-o,10141
|
|
157
|
+
hanzo_mcp/tools/shell/streaming_command.py,sha256=gHh1J5AxOPgI2pcqhGHXv8sVxMrAkSmqBDsF2V6oNMQ,22312
|
|
158
|
+
hanzo_mcp/tools/shell/uvx.py,sha256=f8Lmn35epWmvEfhzWbKju1KMRotLyqT8VmZ-vXeOL1Y,6749
|
|
159
|
+
hanzo_mcp/tools/shell/uvx_background.py,sha256=sgUSPbDavgnREePVBl0eSe8UhekPHnSVBc2YDHHUo2c,8820
|
|
160
|
+
hanzo_mcp/tools/shell/uvx_tool.py,sha256=vCqsn756vOEwC7QP-8JQHM_BtskJjSrviaRVxVPs5YU,3068
|
|
161
|
+
hanzo_mcp/tools/todo/__init__.py,sha256=gLYj2u9TxvFt_EBSAzQywdUUeuUP6TD620KeoibQoV8,1531
|
|
162
|
+
hanzo_mcp/tools/todo/base.py,sha256=k0CFZy59YlLAJBVzVA4tr-qGkQ1l5yF04kcmziwQWec,10666
|
|
163
|
+
hanzo_mcp/tools/todo/todo.py,sha256=o3rKo8-JziG_42oX6YXNSpveH13pp14hF4Q68KavFsg,8921
|
|
164
|
+
hanzo_mcp/tools/todo/todo_read.py,sha256=EWqXOeQANGQOJXKyMv-0GeJdq-d0HnslRM__LW6Jydg,4688
|
|
165
|
+
hanzo_mcp/tools/todo/todo_write.py,sha256=nJG2By4FXHZm7NNreEfVYb3wPJbraVWjrdv_TqXqYFo,15394
|
|
166
|
+
hanzo_mcp/tools/vector/__init__.py,sha256=JCO2BX_2TJW1ZtBq6arWY9RFg5PEJuWQ_Ceaqs2v6bI,4010
|
|
167
|
+
hanzo_mcp/tools/vector/ast_analyzer.py,sha256=0MraKxFbZqaPns0CUacCG84IX_DW_RxSfi7fvXT-MEY,15986
|
|
168
|
+
hanzo_mcp/tools/vector/git_ingester.py,sha256=pR4_HRMT7trGhr1kGHASvhgm7Vjwh6UY-UVdXCNj07s,16367
|
|
169
|
+
hanzo_mcp/tools/vector/index_tool.py,sha256=rMqv1WQMt18eikXdOzUNYyvWdR1gK_rIy4P769gGTak,12769
|
|
170
|
+
hanzo_mcp/tools/vector/infinity_store.py,sha256=gBEl21kYX1PVJhEqoEMljSnBOWoVzBC3kpNLW51PBWw,28622
|
|
171
|
+
hanzo_mcp/tools/vector/mock_infinity.py,sha256=QyU7FM2eTCP0BeuX8xhRe0En7hG9EFt-XzgDu-BefrI,4990
|
|
172
|
+
hanzo_mcp/tools/vector/project_manager.py,sha256=PBaO5WMT5SJRM6wENMZXCCG86P2p5PfHaj8nw1JaPEI,13624
|
|
173
|
+
hanzo_mcp/tools/vector/vector.py,sha256=EpKEDkRfSHsDfPewqRwNAulX0BndlK48p-sFSMtt3js,10179
|
|
174
|
+
hanzo_mcp/tools/vector/vector_index.py,sha256=IqXoEfEk6TOOEThXw4obePZqfvBRiYL_LCrx8z35-h8,4403
|
|
175
|
+
hanzo_mcp/tools/vector/vector_search.py,sha256=jwX1azf4V4seqJ2CIDloX3lJ5_hkUl7X5e2OOgGXQNk,9647
|
|
176
|
+
hanzo_mcp-0.7.0.dist-info/METADATA,sha256=pBX9QCEMy31C7XoMJwZ3gszyp8-dul61WFXgCAppdU0,16054
|
|
177
|
+
hanzo_mcp-0.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
178
|
+
hanzo_mcp-0.7.0.dist-info/entry_points.txt,sha256=ML30pedHV5wjthfztzMMz3uYhNdR_6inzYY5pSqNME4,142
|
|
179
|
+
hanzo_mcp-0.7.0.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
|
|
180
|
+
hanzo_mcp-0.7.0.dist-info/RECORD,,
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
"""Tool palette system for organizing development tools."""
|
|
2
|
-
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
from dataclasses import dataclass, field
|
|
5
|
-
from typing import Dict, List, Optional, Set
|
|
6
|
-
|
|
7
|
-
from hanzo_mcp.tools.common.base import BaseTool
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@dataclass
|
|
11
|
-
class ToolPalette:
|
|
12
|
-
"""A collection of tools for a specific development environment."""
|
|
13
|
-
|
|
14
|
-
name: str
|
|
15
|
-
description: str
|
|
16
|
-
author: Optional[str] = None
|
|
17
|
-
tools: List[str] = field(default_factory=list)
|
|
18
|
-
dependencies: List[str] = field(default_factory=list)
|
|
19
|
-
environment: Dict[str, str] = field(default_factory=dict)
|
|
20
|
-
|
|
21
|
-
def __post_init__(self):
|
|
22
|
-
"""Validate palette configuration."""
|
|
23
|
-
if not self.name:
|
|
24
|
-
raise ValueError("Palette name is required")
|
|
25
|
-
if not self.tools:
|
|
26
|
-
raise ValueError("Palette must include at least one tool")
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class PaletteRegistry:
|
|
30
|
-
"""Registry for tool palettes."""
|
|
31
|
-
|
|
32
|
-
_palettes: Dict[str, ToolPalette] = {}
|
|
33
|
-
_active_palette: Optional[str] = None
|
|
34
|
-
|
|
35
|
-
@classmethod
|
|
36
|
-
def register(cls, palette: ToolPalette) -> None:
|
|
37
|
-
"""Register a tool palette."""
|
|
38
|
-
cls._palettes[palette.name] = palette
|
|
39
|
-
|
|
40
|
-
@classmethod
|
|
41
|
-
def get(cls, name: str) -> Optional[ToolPalette]:
|
|
42
|
-
"""Get a palette by name."""
|
|
43
|
-
return cls._palettes.get(name)
|
|
44
|
-
|
|
45
|
-
@classmethod
|
|
46
|
-
def list(cls) -> List[ToolPalette]:
|
|
47
|
-
"""List all registered palettes."""
|
|
48
|
-
return list(cls._palettes.values())
|
|
49
|
-
|
|
50
|
-
@classmethod
|
|
51
|
-
def set_active(cls, name: str) -> None:
|
|
52
|
-
"""Set the active palette."""
|
|
53
|
-
if name not in cls._palettes:
|
|
54
|
-
raise ValueError(f"Palette '{name}' not found")
|
|
55
|
-
cls._active_palette = name
|
|
56
|
-
|
|
57
|
-
@classmethod
|
|
58
|
-
def get_active(cls) -> Optional[ToolPalette]:
|
|
59
|
-
"""Get the active palette."""
|
|
60
|
-
if cls._active_palette:
|
|
61
|
-
return cls._palettes.get(cls._active_palette)
|
|
62
|
-
return None
|
|
63
|
-
|
|
64
|
-
@classmethod
|
|
65
|
-
def get_active_tools(cls) -> Set[str]:
|
|
66
|
-
"""Get the set of tools from the active palette."""
|
|
67
|
-
palette = cls.get_active()
|
|
68
|
-
if palette:
|
|
69
|
-
return set(palette.tools)
|
|
70
|
-
return set()
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
# Pre-defined palettes for famous programmers and ecosystems
|
|
74
|
-
|
|
75
|
-
# Python palette - Guido van Rossum style
|
|
76
|
-
python_palette = ToolPalette(
|
|
77
|
-
name="python",
|
|
78
|
-
description="Python development tools following Guido's philosophy",
|
|
79
|
-
author="Guido van Rossum",
|
|
80
|
-
tools=[
|
|
81
|
-
# Core tools
|
|
82
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
83
|
-
# Python specific
|
|
84
|
-
"uvx", "process",
|
|
85
|
-
# Python tooling commands via uvx
|
|
86
|
-
"ruff", # Linting and formatting
|
|
87
|
-
"black", # Code formatting
|
|
88
|
-
"mypy", # Type checking
|
|
89
|
-
"pytest", # Testing
|
|
90
|
-
"poetry", # Dependency management
|
|
91
|
-
"pip-tools", # Requirements management
|
|
92
|
-
"jupyter", # Interactive notebooks
|
|
93
|
-
"sphinx", # Documentation
|
|
94
|
-
],
|
|
95
|
-
environment={
|
|
96
|
-
"PYTHONDONTWRITEBYTECODE": "1",
|
|
97
|
-
"PYTHONUNBUFFERED": "1",
|
|
98
|
-
}
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
# Ruby palette - Yukihiro Matsumoto (Matz) style
|
|
102
|
-
ruby_palette = ToolPalette(
|
|
103
|
-
name="ruby",
|
|
104
|
-
description="Ruby development tools for programmer happiness by Yukihiro Matsumoto",
|
|
105
|
-
author="Yukihiro Matsumoto",
|
|
106
|
-
tools=[
|
|
107
|
-
# Core tools
|
|
108
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
109
|
-
# Ruby specific
|
|
110
|
-
"process",
|
|
111
|
-
# Ruby tooling - optimized for happiness
|
|
112
|
-
"ruby", # Ruby interpreter
|
|
113
|
-
"gem", # Package manager
|
|
114
|
-
"bundler", # Dependency management
|
|
115
|
-
"rake", # Task automation
|
|
116
|
-
"irb", # Interactive Ruby
|
|
117
|
-
"pry", # Enhanced REPL and debugging
|
|
118
|
-
"rubocop", # Style guide enforcement
|
|
119
|
-
"rspec", # Behavior-driven testing
|
|
120
|
-
"minitest", # Lightweight testing
|
|
121
|
-
"yard", # Documentation generator
|
|
122
|
-
"rails", # Web application framework
|
|
123
|
-
"sinatra", # Lightweight web framework
|
|
124
|
-
"sidekiq", # Background processing
|
|
125
|
-
"capistrano", # Deployment automation
|
|
126
|
-
],
|
|
127
|
-
environment={
|
|
128
|
-
"RUBYOPT": "-W:deprecated",
|
|
129
|
-
"BUNDLE_JOBS": "4",
|
|
130
|
-
"BUNDLE_RETRY": "3",
|
|
131
|
-
}
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
# JavaScript/Node palette - Brendan Eich / Ryan Dahl style
|
|
135
|
-
javascript_palette = ToolPalette(
|
|
136
|
-
name="javascript",
|
|
137
|
-
description="JavaScript/Node.js development tools by Brendan Eich / Ryan Dahl",
|
|
138
|
-
author="Brendan Eich / Ryan Dahl",
|
|
139
|
-
tools=[
|
|
140
|
-
# Core tools
|
|
141
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
142
|
-
# JavaScript specific
|
|
143
|
-
"npx", "process",
|
|
144
|
-
# Package managers
|
|
145
|
-
"npm", "yarn", "pnpm", "bun",
|
|
146
|
-
# Core tooling via npx
|
|
147
|
-
"node", # Node.js runtime
|
|
148
|
-
"prettier", # Code formatting
|
|
149
|
-
"eslint", # Linting and static analysis
|
|
150
|
-
"typescript", # TypeScript compiler
|
|
151
|
-
"jest", # Testing framework
|
|
152
|
-
"vitest", # Fast testing with Vite
|
|
153
|
-
"playwright", # End-to-end testing
|
|
154
|
-
# Build tools
|
|
155
|
-
"webpack", # Module bundler
|
|
156
|
-
"vite", # Fast dev server and bundler
|
|
157
|
-
"rollup", # Module bundler
|
|
158
|
-
"esbuild", # Fast bundler
|
|
159
|
-
# Frameworks and scaffolding
|
|
160
|
-
"create-react-app", # React scaffolding
|
|
161
|
-
"create-next-app", # Next.js scaffolding
|
|
162
|
-
"nuxt", # Vue.js framework
|
|
163
|
-
"svelte", # Component framework
|
|
164
|
-
],
|
|
165
|
-
environment={
|
|
166
|
-
"NODE_ENV": "development",
|
|
167
|
-
"NPM_CONFIG_PROGRESS": "false",
|
|
168
|
-
"FORCE_COLOR": "1",
|
|
169
|
-
}
|
|
170
|
-
)
|
|
171
|
-
|
|
172
|
-
# Go palette - Rob Pike / Ken Thompson style
|
|
173
|
-
go_palette = ToolPalette(
|
|
174
|
-
name="go",
|
|
175
|
-
description="Go development tools emphasizing simplicity by Rob Pike / Ken Thompson",
|
|
176
|
-
author="Rob Pike / Ken Thompson",
|
|
177
|
-
tools=[
|
|
178
|
-
# Core tools
|
|
179
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
180
|
-
# Go specific
|
|
181
|
-
"process",
|
|
182
|
-
# Go tooling - emphasizing simplicity
|
|
183
|
-
"go", # Compiler and standard tools (go build, go test, go mod)
|
|
184
|
-
"gofmt", # Code formatting
|
|
185
|
-
"goimports", # Import management
|
|
186
|
-
"golangci-lint", # Modern linting (replaces golint)
|
|
187
|
-
"godoc", # Documentation
|
|
188
|
-
"delve", # Debugger (dlv)
|
|
189
|
-
"go-outline", # Code outline
|
|
190
|
-
"guru", # Code analysis
|
|
191
|
-
"goreleaser", # Release automation
|
|
192
|
-
],
|
|
193
|
-
environment={
|
|
194
|
-
"GO111MODULE": "on",
|
|
195
|
-
"GOPROXY": "https://proxy.golang.org,direct",
|
|
196
|
-
"GOSUMDB": "sum.golang.org",
|
|
197
|
-
"CGO_ENABLED": "0", # Rob Pike prefers pure Go when possible
|
|
198
|
-
}
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
# Rust palette - Graydon Hoare style
|
|
202
|
-
rust_palette = ToolPalette(
|
|
203
|
-
name="rust",
|
|
204
|
-
description="Rust development tools for systems programming by Graydon Hoare",
|
|
205
|
-
author="Graydon Hoare",
|
|
206
|
-
tools=[
|
|
207
|
-
# Core tools
|
|
208
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
209
|
-
# Rust specific
|
|
210
|
-
"process",
|
|
211
|
-
# Rust tooling - all via cargo/rustup
|
|
212
|
-
"cargo", # Build system and package manager
|
|
213
|
-
"rustfmt", # Code formatting (cargo fmt)
|
|
214
|
-
"clippy", # Linting (cargo clippy)
|
|
215
|
-
"rustdoc", # Documentation (cargo doc)
|
|
216
|
-
"rust-analyzer", # Language server
|
|
217
|
-
"miri", # Interpreter for unsafe code checking
|
|
218
|
-
"rustup", # Rust toolchain manager
|
|
219
|
-
"sccache", # Shared compilation cache
|
|
220
|
-
"wasm-pack", # WebAssembly workflow
|
|
221
|
-
],
|
|
222
|
-
environment={
|
|
223
|
-
"RUST_BACKTRACE": "1",
|
|
224
|
-
"RUSTFLAGS": "-D warnings",
|
|
225
|
-
"CARGO_INCREMENTAL": "1",
|
|
226
|
-
}
|
|
227
|
-
)
|
|
228
|
-
|
|
229
|
-
# DevOps palette - Infrastructure and operations
|
|
230
|
-
devops_palette = ToolPalette(
|
|
231
|
-
name="devops",
|
|
232
|
-
description="DevOps and infrastructure tools",
|
|
233
|
-
tools=[
|
|
234
|
-
# Core tools
|
|
235
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
236
|
-
"process", "open",
|
|
237
|
-
# DevOps tooling
|
|
238
|
-
"docker", # Containerization
|
|
239
|
-
"kubectl", # Kubernetes
|
|
240
|
-
"terraform", # Infrastructure as code
|
|
241
|
-
"ansible", # Configuration management
|
|
242
|
-
"helm", # Kubernetes package manager
|
|
243
|
-
"prometheus", # Monitoring
|
|
244
|
-
"grafana", # Visualization
|
|
245
|
-
],
|
|
246
|
-
environment={
|
|
247
|
-
"DOCKER_BUILDKIT": "1",
|
|
248
|
-
}
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
# Full stack palette - Everything enabled
|
|
252
|
-
fullstack_palette = ToolPalette(
|
|
253
|
-
name="fullstack",
|
|
254
|
-
description="All development tools enabled",
|
|
255
|
-
tools=[
|
|
256
|
-
# All filesystem tools
|
|
257
|
-
"read", "write", "edit", "multi_edit", "grep", "tree", "find",
|
|
258
|
-
"symbols", "git_search", "watch",
|
|
259
|
-
# All shell tools
|
|
260
|
-
"bash", "npx", "uvx", "process", "open",
|
|
261
|
-
# All other tools
|
|
262
|
-
"agent", "thinking", "llm", "mcp", "sql", "graph", "config",
|
|
263
|
-
"todo", "jupyter", "vim",
|
|
264
|
-
]
|
|
265
|
-
)
|
|
266
|
-
|
|
267
|
-
# Minimal palette - Just the essentials
|
|
268
|
-
minimal_palette = ToolPalette(
|
|
269
|
-
name="minimal",
|
|
270
|
-
description="Minimal set of essential tools",
|
|
271
|
-
tools=[
|
|
272
|
-
"read", "write", "edit", "bash", "grep", "tree"
|
|
273
|
-
]
|
|
274
|
-
)
|
|
275
|
-
|
|
276
|
-
# C/C++ palette - Dennis Ritchie / Bjarne Stroustrup style
|
|
277
|
-
cpp_palette = ToolPalette(
|
|
278
|
-
name="cpp",
|
|
279
|
-
description="C/C++ development tools for systems programming by Dennis Ritchie / Bjarne Stroustrup",
|
|
280
|
-
author="Dennis Ritchie / Bjarne Stroustrup",
|
|
281
|
-
tools=[
|
|
282
|
-
# Core tools
|
|
283
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
284
|
-
# C/C++ specific
|
|
285
|
-
"process",
|
|
286
|
-
# Compilers and build systems
|
|
287
|
-
"gcc", "clang", "g++", "clang++",
|
|
288
|
-
"make", "cmake", "ninja",
|
|
289
|
-
# Debugging and analysis
|
|
290
|
-
"gdb", "lldb", "valgrind",
|
|
291
|
-
"clang-format", "clang-tidy",
|
|
292
|
-
# Package management
|
|
293
|
-
"conan", "vcpkg",
|
|
294
|
-
# Documentation
|
|
295
|
-
"doxygen",
|
|
296
|
-
],
|
|
297
|
-
environment={
|
|
298
|
-
"CC": "clang",
|
|
299
|
-
"CXX": "clang++",
|
|
300
|
-
"CFLAGS": "-Wall -Wextra",
|
|
301
|
-
"CXXFLAGS": "-Wall -Wextra -std=c++20",
|
|
302
|
-
}
|
|
303
|
-
)
|
|
304
|
-
|
|
305
|
-
# Data Science palette - Scientific computing
|
|
306
|
-
datascience_palette = ToolPalette(
|
|
307
|
-
name="datascience",
|
|
308
|
-
description="Data science and machine learning tools",
|
|
309
|
-
author="Scientific Computing Community",
|
|
310
|
-
tools=[
|
|
311
|
-
# Core tools
|
|
312
|
-
"bash", "read", "write", "edit", "grep", "tree", "find",
|
|
313
|
-
# Python for data science
|
|
314
|
-
"uvx", "process", "jupyter",
|
|
315
|
-
# Data science tooling via uvx/pip
|
|
316
|
-
"pandas", "numpy", "scipy", "matplotlib", "seaborn",
|
|
317
|
-
"scikit-learn", "tensorflow", "pytorch",
|
|
318
|
-
"plotly", "bokeh", "streamlit",
|
|
319
|
-
"dvc", "mlflow", "wandb",
|
|
320
|
-
"black", "isort", "mypy",
|
|
321
|
-
],
|
|
322
|
-
environment={
|
|
323
|
-
"PYTHONDONTWRITEBYTECODE": "1",
|
|
324
|
-
"PYTHONUNBUFFERED": "1",
|
|
325
|
-
"JUPYTER_ENABLE_LAB": "yes",
|
|
326
|
-
}
|
|
327
|
-
)
|
|
328
|
-
|
|
329
|
-
# Register all pre-defined palettes
|
|
330
|
-
def register_default_palettes():
|
|
331
|
-
"""Register all default tool palettes."""
|
|
332
|
-
for palette in [
|
|
333
|
-
python_palette,
|
|
334
|
-
ruby_palette,
|
|
335
|
-
javascript_palette,
|
|
336
|
-
go_palette,
|
|
337
|
-
rust_palette,
|
|
338
|
-
cpp_palette,
|
|
339
|
-
datascience_palette,
|
|
340
|
-
devops_palette,
|
|
341
|
-
fullstack_palette,
|
|
342
|
-
minimal_palette,
|
|
343
|
-
]:
|
|
344
|
-
PaletteRegistry.register(palette)
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"""Tool palette loader for dynamic tool configuration."""
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
from typing import Dict, List, Optional, Set
|
|
5
|
-
|
|
6
|
-
from hanzo_mcp.tools.common.palette import PaletteRegistry, register_default_palettes
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class PaletteLoader:
|
|
10
|
-
"""Loads and manages tool palettes for dynamic configuration."""
|
|
11
|
-
|
|
12
|
-
@staticmethod
|
|
13
|
-
def initialize_palettes() -> None:
|
|
14
|
-
"""Initialize the palette system with defaults."""
|
|
15
|
-
register_default_palettes()
|
|
16
|
-
|
|
17
|
-
# Check for environment variable to set default palette
|
|
18
|
-
default_palette = os.environ.get("HANZO_MCP_PALETTE", "python")
|
|
19
|
-
if PaletteRegistry.get(default_palette):
|
|
20
|
-
PaletteRegistry.set_active(default_palette)
|
|
21
|
-
|
|
22
|
-
@staticmethod
|
|
23
|
-
def get_enabled_tools_from_palette(
|
|
24
|
-
base_enabled_tools: Optional[Dict[str, bool]] = None,
|
|
25
|
-
force_palette: Optional[str] = None
|
|
26
|
-
) -> Dict[str, bool]:
|
|
27
|
-
"""Get enabled tools configuration from active palette.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
base_enabled_tools: Base configuration to merge with
|
|
31
|
-
force_palette: Force a specific palette (overrides active)
|
|
32
|
-
|
|
33
|
-
Returns:
|
|
34
|
-
Dictionary of tool enable states
|
|
35
|
-
"""
|
|
36
|
-
# Initialize if needed
|
|
37
|
-
if not PaletteRegistry.list():
|
|
38
|
-
PaletteLoader.initialize_palettes()
|
|
39
|
-
|
|
40
|
-
# Get palette to use
|
|
41
|
-
if force_palette:
|
|
42
|
-
PaletteRegistry.set_active(force_palette)
|
|
43
|
-
|
|
44
|
-
palette = PaletteRegistry.get_active()
|
|
45
|
-
if not palette:
|
|
46
|
-
# No active palette, return base config
|
|
47
|
-
return base_enabled_tools or {}
|
|
48
|
-
|
|
49
|
-
# Start with base configuration
|
|
50
|
-
result = base_enabled_tools.copy() if base_enabled_tools else {}
|
|
51
|
-
|
|
52
|
-
# Get all possible tools (this is a superset for safety)
|
|
53
|
-
all_possible_tools = {
|
|
54
|
-
# Filesystem tools
|
|
55
|
-
"read", "write", "edit", "multi_edit", "grep", "tree", "find",
|
|
56
|
-
"symbols", "git_search", "content_replace", "batch_search",
|
|
57
|
-
"find_files", "unified_search", "watch",
|
|
58
|
-
# Shell tools
|
|
59
|
-
"bash", "npx", "uvx", "process", "open",
|
|
60
|
-
# Database tools
|
|
61
|
-
"sql", "graph",
|
|
62
|
-
# Config tools
|
|
63
|
-
"config", "palette",
|
|
64
|
-
# LLM tools
|
|
65
|
-
"llm", "agent", "thinking",
|
|
66
|
-
# MCP tools
|
|
67
|
-
"mcp",
|
|
68
|
-
# Todo tools
|
|
69
|
-
"todo",
|
|
70
|
-
# Jupyter tools
|
|
71
|
-
"jupyter",
|
|
72
|
-
# Editor tools
|
|
73
|
-
"vim",
|
|
74
|
-
# Stats/system tools
|
|
75
|
-
"stats", "tool_enable", "tool_disable", "tool_list",
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
# Disable all tools first (clean slate for palette)
|
|
79
|
-
for tool in all_possible_tools:
|
|
80
|
-
result[tool] = False
|
|
81
|
-
|
|
82
|
-
# Enable tools from palette
|
|
83
|
-
for tool in palette.tools:
|
|
84
|
-
result[tool] = True
|
|
85
|
-
|
|
86
|
-
# Always enable palette tool itself (meta)
|
|
87
|
-
result["palette"] = True
|
|
88
|
-
|
|
89
|
-
return result
|
|
90
|
-
|
|
91
|
-
@staticmethod
|
|
92
|
-
def get_environment_from_palette() -> Dict[str, str]:
|
|
93
|
-
"""Get environment variables from active palette.
|
|
94
|
-
|
|
95
|
-
Returns:
|
|
96
|
-
Dictionary of environment variables
|
|
97
|
-
"""
|
|
98
|
-
palette = PaletteRegistry.get_active()
|
|
99
|
-
if palette and palette.environment:
|
|
100
|
-
return palette.environment.copy()
|
|
101
|
-
return {}
|
|
102
|
-
|
|
103
|
-
@staticmethod
|
|
104
|
-
def apply_palette_environment() -> None:
|
|
105
|
-
"""Apply environment variables from active palette to process."""
|
|
106
|
-
env_vars = PaletteLoader.get_environment_from_palette()
|
|
107
|
-
for key, value in env_vars.items():
|
|
108
|
-
os.environ[key] = value
|