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.

Files changed (117) hide show
  1. hanzo_mcp/__init__.py +2 -2
  2. hanzo_mcp/analytics/__init__.py +5 -0
  3. hanzo_mcp/analytics/posthog_analytics.py +364 -0
  4. hanzo_mcp/cli.py +5 -5
  5. hanzo_mcp/cli_enhanced.py +7 -7
  6. hanzo_mcp/cli_plugin.py +91 -0
  7. hanzo_mcp/config/__init__.py +1 -1
  8. hanzo_mcp/config/settings.py +70 -7
  9. hanzo_mcp/config/tool_config.py +20 -6
  10. hanzo_mcp/dev_server.py +3 -3
  11. hanzo_mcp/prompts/project_system.py +1 -1
  12. hanzo_mcp/server.py +40 -3
  13. hanzo_mcp/server_enhanced.py +69 -0
  14. hanzo_mcp/tools/__init__.py +140 -31
  15. hanzo_mcp/tools/agent/__init__.py +85 -4
  16. hanzo_mcp/tools/agent/agent_tool.py +104 -6
  17. hanzo_mcp/tools/agent/agent_tool_v2.py +459 -0
  18. hanzo_mcp/tools/agent/clarification_protocol.py +220 -0
  19. hanzo_mcp/tools/agent/clarification_tool.py +68 -0
  20. hanzo_mcp/tools/agent/claude_cli_tool.py +125 -0
  21. hanzo_mcp/tools/agent/claude_desktop_auth.py +508 -0
  22. hanzo_mcp/tools/agent/cli_agent_base.py +191 -0
  23. hanzo_mcp/tools/agent/code_auth.py +436 -0
  24. hanzo_mcp/tools/agent/code_auth_tool.py +194 -0
  25. hanzo_mcp/tools/agent/codex_cli_tool.py +123 -0
  26. hanzo_mcp/tools/agent/critic_tool.py +376 -0
  27. hanzo_mcp/tools/agent/gemini_cli_tool.py +128 -0
  28. hanzo_mcp/tools/agent/grok_cli_tool.py +128 -0
  29. hanzo_mcp/tools/agent/iching_tool.py +380 -0
  30. hanzo_mcp/tools/agent/network_tool.py +273 -0
  31. hanzo_mcp/tools/agent/prompt.py +62 -20
  32. hanzo_mcp/tools/agent/review_tool.py +433 -0
  33. hanzo_mcp/tools/agent/swarm_tool.py +535 -0
  34. hanzo_mcp/tools/agent/swarm_tool_v2.py +594 -0
  35. hanzo_mcp/tools/common/__init__.py +15 -1
  36. hanzo_mcp/tools/common/base.py +5 -4
  37. hanzo_mcp/tools/common/batch_tool.py +103 -11
  38. hanzo_mcp/tools/common/config_tool.py +2 -2
  39. hanzo_mcp/tools/common/context.py +2 -2
  40. hanzo_mcp/tools/common/context_fix.py +26 -0
  41. hanzo_mcp/tools/common/critic_tool.py +196 -0
  42. hanzo_mcp/tools/common/decorators.py +208 -0
  43. hanzo_mcp/tools/common/enhanced_base.py +106 -0
  44. hanzo_mcp/tools/common/fastmcp_pagination.py +369 -0
  45. hanzo_mcp/tools/common/forgiving_edit.py +243 -0
  46. hanzo_mcp/tools/common/mode.py +116 -0
  47. hanzo_mcp/tools/common/mode_loader.py +105 -0
  48. hanzo_mcp/tools/common/paginated_base.py +230 -0
  49. hanzo_mcp/tools/common/paginated_response.py +307 -0
  50. hanzo_mcp/tools/common/pagination.py +226 -0
  51. hanzo_mcp/tools/common/permissions.py +1 -1
  52. hanzo_mcp/tools/common/personality.py +936 -0
  53. hanzo_mcp/tools/common/plugin_loader.py +287 -0
  54. hanzo_mcp/tools/common/stats.py +4 -4
  55. hanzo_mcp/tools/common/tool_list.py +4 -1
  56. hanzo_mcp/tools/common/truncate.py +101 -0
  57. hanzo_mcp/tools/common/validation.py +1 -1
  58. hanzo_mcp/tools/config/__init__.py +3 -1
  59. hanzo_mcp/tools/config/config_tool.py +1 -1
  60. hanzo_mcp/tools/config/mode_tool.py +209 -0
  61. hanzo_mcp/tools/database/__init__.py +1 -1
  62. hanzo_mcp/tools/editor/__init__.py +1 -1
  63. hanzo_mcp/tools/filesystem/__init__.py +48 -14
  64. hanzo_mcp/tools/filesystem/ast_multi_edit.py +562 -0
  65. hanzo_mcp/tools/filesystem/batch_search.py +3 -3
  66. hanzo_mcp/tools/filesystem/diff.py +2 -2
  67. hanzo_mcp/tools/filesystem/directory_tree_paginated.py +338 -0
  68. hanzo_mcp/tools/filesystem/rules_tool.py +235 -0
  69. hanzo_mcp/tools/filesystem/{unified_search.py → search_tool.py} +12 -12
  70. hanzo_mcp/tools/filesystem/{symbols_unified.py → symbols_tool.py} +104 -5
  71. hanzo_mcp/tools/filesystem/watch.py +3 -2
  72. hanzo_mcp/tools/jupyter/__init__.py +2 -2
  73. hanzo_mcp/tools/jupyter/jupyter.py +1 -1
  74. hanzo_mcp/tools/llm/__init__.py +3 -3
  75. hanzo_mcp/tools/llm/llm_tool.py +648 -143
  76. hanzo_mcp/tools/lsp/__init__.py +5 -0
  77. hanzo_mcp/tools/lsp/lsp_tool.py +512 -0
  78. hanzo_mcp/tools/mcp/__init__.py +2 -2
  79. hanzo_mcp/tools/mcp/{mcp_unified.py → mcp_tool.py} +3 -3
  80. hanzo_mcp/tools/memory/__init__.py +76 -0
  81. hanzo_mcp/tools/memory/knowledge_tools.py +518 -0
  82. hanzo_mcp/tools/memory/memory_tools.py +456 -0
  83. hanzo_mcp/tools/search/__init__.py +6 -0
  84. hanzo_mcp/tools/search/find_tool.py +581 -0
  85. hanzo_mcp/tools/search/unified_search.py +953 -0
  86. hanzo_mcp/tools/shell/__init__.py +11 -6
  87. hanzo_mcp/tools/shell/auto_background.py +203 -0
  88. hanzo_mcp/tools/shell/base_process.py +57 -29
  89. hanzo_mcp/tools/shell/bash_session_executor.py +1 -1
  90. hanzo_mcp/tools/shell/{bash_unified.py → bash_tool.py} +18 -34
  91. hanzo_mcp/tools/shell/command_executor.py +2 -2
  92. hanzo_mcp/tools/shell/{npx_unified.py → npx_tool.py} +16 -33
  93. hanzo_mcp/tools/shell/open.py +2 -2
  94. hanzo_mcp/tools/shell/{process_unified.py → process_tool.py} +1 -1
  95. hanzo_mcp/tools/shell/run_command_windows.py +1 -1
  96. hanzo_mcp/tools/shell/streaming_command.py +594 -0
  97. hanzo_mcp/tools/shell/uvx.py +47 -2
  98. hanzo_mcp/tools/shell/uvx_background.py +47 -2
  99. hanzo_mcp/tools/shell/{uvx_unified.py → uvx_tool.py} +16 -33
  100. hanzo_mcp/tools/todo/__init__.py +14 -19
  101. hanzo_mcp/tools/todo/todo.py +22 -1
  102. hanzo_mcp/tools/vector/__init__.py +1 -1
  103. hanzo_mcp/tools/vector/infinity_store.py +2 -2
  104. hanzo_mcp/tools/vector/project_manager.py +1 -1
  105. hanzo_mcp/types.py +23 -0
  106. hanzo_mcp-0.7.0.dist-info/METADATA +516 -0
  107. hanzo_mcp-0.7.0.dist-info/RECORD +180 -0
  108. {hanzo_mcp-0.6.12.dist-info → hanzo_mcp-0.7.0.dist-info}/entry_points.txt +1 -0
  109. hanzo_mcp/tools/common/palette.py +0 -344
  110. hanzo_mcp/tools/common/palette_loader.py +0 -108
  111. hanzo_mcp/tools/config/palette_tool.py +0 -179
  112. hanzo_mcp/tools/llm/llm_unified.py +0 -851
  113. hanzo_mcp-0.6.12.dist-info/METADATA +0 -339
  114. hanzo_mcp-0.6.12.dist-info/RECORD +0 -135
  115. hanzo_mcp-0.6.12.dist-info/licenses/LICENSE +0 -21
  116. {hanzo_mcp-0.6.12.dist-info → hanzo_mcp-0.7.0.dist-info}/WHEEL +0 -0
  117. {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,3 +1,4 @@
1
1
  [console_scripts]
2
2
  hanzo-mcp = hanzo_mcp.cli:main
3
3
  hanzo-mcp-dev = hanzo_mcp.dev_server:run_dev_server
4
+ hanzo-plugin = hanzo_mcp.cli_plugin:main
@@ -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