auto-coder 0.1.362__py3-none-any.whl → 0.1.364__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 auto-coder might be problematic. Click here for more details.

Files changed (65) hide show
  1. {auto_coder-0.1.362.dist-info → auto_coder-0.1.364.dist-info}/METADATA +2 -2
  2. {auto_coder-0.1.362.dist-info → auto_coder-0.1.364.dist-info}/RECORD +65 -22
  3. autocoder/agent/base_agentic/__init__.py +0 -0
  4. autocoder/agent/base_agentic/agent_hub.py +169 -0
  5. autocoder/agent/base_agentic/agentic_lang.py +112 -0
  6. autocoder/agent/base_agentic/agentic_tool_display.py +180 -0
  7. autocoder/agent/base_agentic/base_agent.py +1582 -0
  8. autocoder/agent/base_agentic/default_tools.py +683 -0
  9. autocoder/agent/base_agentic/test_base_agent.py +82 -0
  10. autocoder/agent/base_agentic/tool_registry.py +425 -0
  11. autocoder/agent/base_agentic/tools/__init__.py +12 -0
  12. autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +72 -0
  13. autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +37 -0
  14. autocoder/agent/base_agentic/tools/base_tool_resolver.py +35 -0
  15. autocoder/agent/base_agentic/tools/example_tool_resolver.py +46 -0
  16. autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +72 -0
  17. autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +110 -0
  18. autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +35 -0
  19. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +54 -0
  20. autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +156 -0
  21. autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +134 -0
  22. autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +96 -0
  23. autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +79 -0
  24. autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +44 -0
  25. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +58 -0
  26. autocoder/agent/base_agentic/types.py +189 -0
  27. autocoder/agent/base_agentic/utils.py +100 -0
  28. autocoder/auto_coder_runner.py +6 -4
  29. autocoder/chat/conf_command.py +11 -10
  30. autocoder/common/__init__.py +2 -0
  31. autocoder/common/file_checkpoint/__init__.py +21 -0
  32. autocoder/common/file_checkpoint/backup.py +264 -0
  33. autocoder/common/file_checkpoint/examples.py +217 -0
  34. autocoder/common/file_checkpoint/manager.py +404 -0
  35. autocoder/common/file_checkpoint/models.py +156 -0
  36. autocoder/common/file_checkpoint/store.py +383 -0
  37. autocoder/common/file_checkpoint/test_backup.py +242 -0
  38. autocoder/common/file_checkpoint/test_manager.py +570 -0
  39. autocoder/common/file_checkpoint/test_models.py +360 -0
  40. autocoder/common/file_checkpoint/test_store.py +327 -0
  41. autocoder/common/file_checkpoint/test_utils.py +297 -0
  42. autocoder/common/file_checkpoint/utils.py +119 -0
  43. autocoder/common/rulefiles/autocoderrules_utils.py +138 -55
  44. autocoder/common/save_formatted_log.py +76 -5
  45. autocoder/common/v2/agent/agentic_edit.py +339 -216
  46. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +2 -2
  47. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +100 -5
  48. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +322 -0
  49. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +160 -10
  50. autocoder/common/v2/agent/agentic_edit_types.py +1 -2
  51. autocoder/common/v2/agent/agentic_tool_display.py +2 -3
  52. autocoder/compilers/normal_compiler.py +64 -0
  53. autocoder/events/event_manager_singleton.py +133 -4
  54. autocoder/linters/normal_linter.py +373 -0
  55. autocoder/linters/python_linter.py +4 -2
  56. autocoder/rag/long_context_rag.py +424 -397
  57. autocoder/rag/test_doc_filter.py +393 -0
  58. autocoder/rag/test_long_context_rag.py +473 -0
  59. autocoder/rag/test_token_limiter.py +342 -0
  60. autocoder/shadows/shadow_manager.py +1 -3
  61. autocoder/version.py +1 -1
  62. {auto_coder-0.1.362.dist-info → auto_coder-0.1.364.dist-info}/LICENSE +0 -0
  63. {auto_coder-0.1.362.dist-info → auto_coder-0.1.364.dist-info}/WHEEL +0 -0
  64. {auto_coder-0.1.362.dist-info → auto_coder-0.1.364.dist-info}/entry_points.txt +0 -0
  65. {auto_coder-0.1.362.dist-info → auto_coder-0.1.364.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.362
3
+ Version: 0.1.364
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -28,7 +28,7 @@ Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
29
  Requires-Dist: aiofiles
30
30
  Requires-Dist: readerwriterlock
31
- Requires-Dist: byzerllm[saas] >=0.1.181
31
+ Requires-Dist: byzerllm[saas] >=0.1.182
32
32
  Requires-Dist: patch
33
33
  Requires-Dist: diff-match-patch
34
34
  Requires-Dist: GitPython
@@ -4,7 +4,7 @@ autocoder/auto_coder_lang.py,sha256=Rtupq6N3_HT7JRhDKdgCBcwRaiAnyCOR_Gsp4jUomrI,
4
4
  autocoder/auto_coder_rag.py,sha256=ru5o86IaKylyVRlVORmnrdf3Q1To2eWi2KLdT9FMW0k,37580
5
5
  autocoder/auto_coder_rag_client_mcp.py,sha256=QRxUbjc6A8UmDMQ8lXgZkjgqtq3lgKYeatJbDY6rSo0,6270
6
6
  autocoder/auto_coder_rag_mcp.py,sha256=-RrjNwFaS2e5v8XDIrKR-zlUNUE8UBaeOtojffBrvJo,8521
7
- autocoder/auto_coder_runner.py,sha256=XyJxJxVRabyc8U0AK5iqcsNDjOmDf5mocFBrae8wboU,112108
7
+ autocoder/auto_coder_runner.py,sha256=VktQIEWjVMmraVjD7W73eZmYtdfm9Ma2w_Ib-cWZYhM,112263
8
8
  autocoder/auto_coder_server.py,sha256=bLORGEclcVdbBVfM140JCI8WtdrU0jbgqdJIVVupiEU,20578
9
9
  autocoder/benchmark.py,sha256=Ypomkdzd1T3GE6dRICY3Hj547dZ6_inqJbBJIp5QMco,4423
10
10
  autocoder/chat_auto_coder.py,sha256=iHy8Kt1so1ZLOPpb5GTfi4BurDe3T1hOPqOw-XIBDpQ,26851
@@ -14,7 +14,7 @@ autocoder/command_parser.py,sha256=fx1g9E6GaM273lGTcJqaFQ-hoksS_Ik2glBMnVltPCE,1
14
14
  autocoder/lang.py,sha256=PFtATuOhHRnfpqHQkXr6p4C893JvpsgwTMif3l-GEi0,14321
15
15
  autocoder/models.py,sha256=Gu50IATQtZtgEir1PpCfwgH6o4ygw6XqqbQRj3lx5dU,13798
16
16
  autocoder/run_context.py,sha256=IUfSO6_gp2Wt1blFWAmOpN0b0nDrTTk4LmtCYUBIoro,1643
17
- autocoder/version.py,sha256=1xzjj7xuqr9c6cDY5ziUjxjz-q-sgMd5PF_y5DGFtMA,23
17
+ autocoder/version.py,sha256=VL9hmmJg1RyRRRaJG6Hcv2loEzXKwXbfJgcVK9hH6Us,23
18
18
  autocoder/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  autocoder/agent/agentic_edit.py,sha256=XsfePZ-t6M-uBSdG1VLZXk1goqXk2HPeJ_A8IYyBuWQ,58896
20
20
  autocoder/agent/agentic_edit_types.py,sha256=oFcDd_cxJ2yH9Ed1uTpD3BipudgoIEWDMPb5pAkq4gI,3288
@@ -43,8 +43,33 @@ autocoder/agent/agentic_edit_tools/replace_in_file_tool_resolver.py,sha256=A2ODU
43
43
  autocoder/agent/agentic_edit_tools/search_files_tool_resolver.py,sha256=Xx0nqrgBUP7MZuigdy_hjO89v1CgQEDE75O9la3VJbE,3754
44
44
  autocoder/agent/agentic_edit_tools/use_mcp_tool_resolver.py,sha256=5WWH8-lEZO29dLOby9GNjkr-JH5rW8UT-7JZ1LuUtM8,2531
45
45
  autocoder/agent/agentic_edit_tools/write_to_file_tool_resolver.py,sha256=HPX1g7Nh7H8I3P2MNmIK4HXLh8IZYaedQgRZAeGxNdc,5135
46
+ autocoder/agent/base_agentic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ autocoder/agent/base_agentic/agent_hub.py,sha256=3Al9rCKu-SRgAs1kvnMe4VIIErTIw85QTkhfFu5omO8,5605
48
+ autocoder/agent/base_agentic/agentic_lang.py,sha256=UCq1NY9USaYJakTWc-3cv_MeHxAb6se1PI4lsSwGrPM,3657
49
+ autocoder/agent/base_agentic/agentic_tool_display.py,sha256=UnAq8ovvpu88KLk19Ff0TW-Dq-k7YiRwZiIJgcYPwiY,6989
50
+ autocoder/agent/base_agentic/base_agent.py,sha256=cirGi77mw7OawO4Q1pGcqkhhNukKDS01-zzhnae_1yU,85580
51
+ autocoder/agent/base_agentic/default_tools.py,sha256=ggtJjysejfDWD6JoG4vBDFrnXFFPRm7JsVVG6XcKer8,33060
52
+ autocoder/agent/base_agentic/test_base_agent.py,sha256=jok9f-DoEagzZRWjk-Zpy3gKw2ztZrsNzEc0XlvE7HU,2804
53
+ autocoder/agent/base_agentic/tool_registry.py,sha256=YFnUXJ78y7g3pm3yGgrhZ-0mx-C1ctdcA0r_ljGiE6o,14292
54
+ autocoder/agent/base_agentic/types.py,sha256=y9BvgN1a38EWB3cIGYTgxPYsrHql09HyqdFmL7e76jQ,4159
55
+ autocoder/agent/base_agentic/utils.py,sha256=-AtaXBEp1dd9WnKrlkqiu8Ur5UfOvHko_fb32alCnN0,3264
56
+ autocoder/agent/base_agentic/tools/__init__.py,sha256=aBb5nA8dZAun6-4-7MTdJ74dGNQdA6RBrS73uom3ue0,332
57
+ autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py,sha256=_OL07TZ_bCGikX-DVv3HSrHT4jvZ7NYXd27J3pLWkIY,3081
58
+ autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py,sha256=9a_qPihfm45Q22kmxmFwYrZrtNsgtEyBePL8D4SXfes,1487
59
+ autocoder/agent/base_agentic/tools/base_tool_resolver.py,sha256=Y0PmRPhBLLdZpr2DNV0W5goGfAqylM5m1bHxa3T6vAY,1009
60
+ autocoder/agent/base_agentic/tools/example_tool_resolver.py,sha256=8WBIqEH_76S0iBHBM3RhLkk14UpJ28lRAw6dNUT-0no,1388
61
+ autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py,sha256=FDWheOy2NVG1RDeG2lhMlj0cFjG4UpqCkWPRMEM7Atc,3755
62
+ autocoder/agent/base_agentic/tools/list_files_tool_resolver.py,sha256=rIKcJ0xVI6Exdmqb2LhUQFL6_GNQFuYazqQSJR0Sf2g,5468
63
+ autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py,sha256=hiLdMRknR_Aljd7Ic2bOWZKs11aFHdhkRTKTlP3IIgw,1461
64
+ autocoder/agent/base_agentic/tools/read_file_tool_resolver.py,sha256=4GV8_hyVlO97MgI2pdUrxur3MFNJutlBT8r9OYfQjps,2857
65
+ autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py,sha256=yvVwQNxTeG-jIWVbhLqpoDqjKzDWoSuWiIge13-7HnI,8015
66
+ autocoder/agent/base_agentic/tools/search_files_tool_resolver.py,sha256=s14ojQWxpWL0d4fzKan95Dya3t3S0oMy9CWrX6qa-ZM,6848
67
+ autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py,sha256=t6y39KqCA3Jd865Xive7sO9dL-4OW10p7vRQr6-HLFE,3427
68
+ autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py,sha256=8ERHMoFJTkZx02TFrsPWvpOQOr9HPJcxD7hBE5lXxpc,2668
69
+ autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py,sha256=Ph63zm6973nxRdRINV3ME0rhDWqtaEveHqLjEEMN02I,1554
70
+ autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py,sha256=aVXrKaUshne1iBxOimjU31mW9SXOZ1aHjqJjdZC31AM,2994
46
71
  autocoder/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- autocoder/chat/conf_command.py,sha256=GAZ5aoJeEOEdOjHLlrizn4d7hDr6bE2vgM1qoSNERuw,11260
72
+ autocoder/chat/conf_command.py,sha256=sqsZEjFXUCaCydXbqLU_ockpwQ7efQCicEd-hjD29ts,11353
48
73
  autocoder/chat/models_command.py,sha256=yISjvqNbKHVapGcXMcsIwRFfPruJ5ruSqR_e8TqhaPw,20105
49
74
  autocoder/chat/rules_command.py,sha256=V9-Om7N7c_6siudtZMWuALxe2GNMkgqorWAP4P_Wl4k,17396
50
75
  autocoder/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -53,7 +78,7 @@ autocoder/commands/auto_web.py,sha256=K0Gv7lil5UqmExr_sAJNOcwNxw_q1vhvre1jjQ7tA3
53
78
  autocoder/commands/tools.py,sha256=IX_zx5mWAvQDED7wUHTqNtrCmLNo9ztFV1aZ6AflY4o,34292
54
79
  autocoder/common/JupyterClient.py,sha256=O-wi6pXeAEYhAY24kDa0BINrLYvKS6rKyWe98pDClS0,2816
55
80
  autocoder/common/ShellClient.py,sha256=fM1q8t_XMSbLBl2zkCNC2J9xuyKN3eXzGm6hHhqL2WY,2286
56
- autocoder/common/__init__.py,sha256=uN0sW7jePq-eim95VPLj8LRPGe_XzQQjqJmG0h1T4HU,14681
81
+ autocoder/common/__init__.py,sha256=LFR-2IrVK0NtHeefzCB8iqLb-6SuWJRPKQec6bS37_0,14734
57
82
  autocoder/common/action_yml_file_manager.py,sha256=DdF5P1R_B_chCnnqoA2IgogakWLZk_nItiJZUfX0_Wo,17857
58
83
  autocoder/common/anything2images.py,sha256=0ILBbWzY02M-CiWB-vzuomb_J1hVdxRcenAfIrAXq9M,25283
59
84
  autocoder/common/anything2img.py,sha256=iZQmg8srXlD7N5uGl5b_ONKJMBjYoW8kPmokkG6ISF0,10118
@@ -104,7 +129,7 @@ autocoder/common/printer.py,sha256=T4XTAcQp5w1ZWYx5NAUXlIGd-9500Vl0JaG1JJXMdkg,2
104
129
  autocoder/common/recall_validation.py,sha256=Avt9Q9dX3kG6Pf2zsdlOHmsjd-OeSj7U1PFBDp_Cve0,1700
105
130
  autocoder/common/result_manager.py,sha256=tvWtqSDhP7yKGtmB9s1pJAuRnB7nDgjM6eVrXF9n4e0,4169
106
131
  autocoder/common/run_cmd.py,sha256=2VrJpeqooasUoc-WKVrvFfesmRR55kOpPmmYgpQrKVc,8283
107
- autocoder/common/save_formatted_log.py,sha256=oI5Ge2Xk1yeutH92pgYd6amZ3N_2v6CNb6blqfUF9sc,1756
132
+ autocoder/common/save_formatted_log.py,sha256=VXeN3dzA1C0AX1slSwBTFMC1lZHR9GtziSVRqUDEKfU,5395
108
133
  autocoder/common/screenshots.py,sha256=_gA-z1HxGjPShBrtgkdideq58MG6rqFB2qMUJKjrycs,3769
109
134
  autocoder/common/search.py,sha256=245iPFgWhMldoUK3CqCP89ltaxZiNPK73evoG6Fp1h8,16518
110
135
  autocoder/common/search_replace.py,sha256=GphFkc57Hb673CAwmbiocqTbw8vrV7TrZxtOhD0332g,22147
@@ -124,6 +149,18 @@ autocoder/common/conversations/example.py,sha256=Pz_EhO6qneUFMfHZiDmGAClZ6b0V4T1
124
149
  autocoder/common/directory_cache/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
125
150
  autocoder/common/directory_cache/cache.py,sha256=Jknygb_U6DkF04_SX04IwsOcQdd-2QQ4d6k9Ucc9OZ0,9358
126
151
  autocoder/common/directory_cache/test_cache.py,sha256=0iQkHaZQPhZBwSS6dwK_je93QMLbYGY0BYrTSt45Cao,6610
152
+ autocoder/common/file_checkpoint/__init__.py,sha256=qwoM0tIU-IMr-zGVCMN8yZtmz0NWpRe027l8z8sCjjk,847
153
+ autocoder/common/file_checkpoint/backup.py,sha256=JO26vOG9k7d8b5jgT24PdccSrTuPqKghp1nz5cmjSiE,8813
154
+ autocoder/common/file_checkpoint/examples.py,sha256=HTik8E0ddvKjEPGwzizWJBHIP9URrWRyRUOKSjYRUG8,6272
155
+ autocoder/common/file_checkpoint/manager.py,sha256=DvPzXvU4LVNb8ZVbEIWJawevX6fIm4VgVmV1g7TrsS4,14774
156
+ autocoder/common/file_checkpoint/models.py,sha256=dcZL2QGnklsa_BV_QY81fH-H5hYfhelXrH6GSrubMZo,4730
157
+ autocoder/common/file_checkpoint/store.py,sha256=dgQe-1O_gPJ3QU6tHihGRp0G2jgD2IDxQ-w9zM6Yq54,12920
158
+ autocoder/common/file_checkpoint/test_backup.py,sha256=Z9Y2RyGqxwKPNc7nW-2jtsMAYzqt0qZGzLoq3pn2zCI,8930
159
+ autocoder/common/file_checkpoint/test_manager.py,sha256=jpeHTmuBJ6bgB32VWBF5MxUEutY4qn8m2Q8kZukuuNc,20109
160
+ autocoder/common/file_checkpoint/test_models.py,sha256=BtIF0gYRsLj7EISV8CXNS8PW7OtMd_S2ShWNIBbQDIc,10491
161
+ autocoder/common/file_checkpoint/test_store.py,sha256=SqHT5zExX2mD-OT9ynaayPtjjcp_HZWkd5PovFCUA8U,12038
162
+ autocoder/common/file_checkpoint/test_utils.py,sha256=wN0VZaM5gc2ltu-c3OPKgKDXqOjgSRCPHep_s4Ns0nI,10209
163
+ autocoder/common/file_checkpoint/utils.py,sha256=lWchNqiQNH13sSi5Tn9g9zit8mlWdYSdiiT59nWeFJE,3273
127
164
  autocoder/common/file_monitor/__init__.py,sha256=9reL3IEnyLWU77WjPzeprM8-4lCetlSMZ94Nuxk5KNg,85
128
165
  autocoder/common/file_monitor/monitor.py,sha256=biS9TJyNKga2dE-CeYAi9xfXvA9aMeMl0tBf68G-SBE,16609
129
166
  autocoder/common/ignorefiles/__init__.py,sha256=P0hq7Avu1IeXBYEkPBZLsJhFzhzyktUWTqaRIXiAFLY,75
@@ -133,7 +170,7 @@ autocoder/common/mcp_servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
133
170
  autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py,sha256=TApShxgoozLluobXHOK1-oAE1zm0-9jdRoPLQB1qwMI,5688
134
171
  autocoder/common/mcp_servers/mcp_server_perplexity.py,sha256=CIC26UkfH1lYoVCjfyY5xGGYVx8h0oz0Uj1c7YJ3OPw,5560
135
172
  autocoder/common/rulefiles/__init__.py,sha256=babSbPdFaXk1NvdHtH2zrJLb_tWd7d2ELIyS8NApY_Y,221
136
- autocoder/common/rulefiles/autocoderrules_utils.py,sha256=E9_dJEtdQHr4rBqGpYPKnX0KDAFDIwnC0xTJabgURWc,16556
173
+ autocoder/common/rulefiles/autocoderrules_utils.py,sha256=TvzKt41wa1uPnYXHkUaJRCuxCJL9IB-Zx6FsEwdSExg,19454
137
174
  autocoder/common/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
175
  autocoder/common/v2/code_agentic_editblock_manager.py,sha256=pAh918YMgmLenXmNKXlmDPgKyVJjOuk69901VEEQHm4,34980
139
176
  autocoder/common/v2/code_auto_generate.py,sha256=PAySLU8ZnpdF8GelwSCiEbzv7sBbn-Vhakinf4i6udE,11646
@@ -149,10 +186,10 @@ autocoder/common/v2/code_editblock_manager.py,sha256=DMwJw-FAM6VyaBQV3p4xespHpgZ
149
186
  autocoder/common/v2/code_manager.py,sha256=C403bS-f6urixwitlKHcml-J03hci-UyNwHJOqBiY6Q,9182
150
187
  autocoder/common/v2/code_strict_diff_manager.py,sha256=Bys7tFAq4G03R1zUZuxrszBTvP4QB96jIw2y5BDLyRM,9424
151
188
  autocoder/common/v2/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- autocoder/common/v2/agent/agentic_edit.py,sha256=4jcDNZ0FpIrWfAy0d6nD_aKzXsINHMEBNjZOTbi08hk,99540
189
+ autocoder/common/v2/agent/agentic_edit.py,sha256=hM2IPCV-Z3ajEsmVUGcFlD01544CloMehyxHAx320Qk,106932
153
190
  autocoder/common/v2/agent/agentic_edit_conversation.py,sha256=pFgWPWHKhZ4J9EcFmIdiGsrSolTZuYcH1qkgKdD8nwk,7726
154
- autocoder/common/v2/agent/agentic_edit_types.py,sha256=VJMrictg6hJ3mC45VgQGRd43DyDUPDUvPV1Rf3z72NI,4776
155
- autocoder/common/v2/agent/agentic_tool_display.py,sha256=WKirt-2V346KLnbHgH3NVJiK3xvriD9oaCWj2IdvzLU,7309
191
+ autocoder/common/v2/agent/agentic_edit_types.py,sha256=ftFTXz-KF96GZvhnYRAxiiYOWfotwU_d9Lb8la2I47U,4779
192
+ autocoder/common/v2/agent/agentic_tool_display.py,sha256=-a-JTQLc4q03E_rdIILKMI0B6DHN-5gcGlrqq-mBYK4,7239
156
193
  autocoder/common/v2/agent/ignore_utils.py,sha256=gnUchRzKMLbUm_jvnKL-r-K9MWKPtt-6iiuzijY7Es0,1717
157
194
  autocoder/common/v2/agent/agentic_edit_tools/__init__.py,sha256=RbPZZcZg_VnGssL577GxSyFrYrxQ_LopJ4G_-mY3z_Q,1337
158
195
  autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py,sha256=bwtf4m9N82TCP3piK5UglJk1FVFFm7ZX59XerA2qxko,3131
@@ -163,12 +200,13 @@ autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_res
163
200
  autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py,sha256=FvpEyBwAfrYvnxcQ_gt7vTmfgoFoR7qr-r1OPx13Xks,5475
164
201
  autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py,sha256=dIdV12VuczHpHuHgx2B1j_3BZYc9PL0jfHCuBk9ryk8,2005
165
202
  autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py,sha256=lGT4_QYJK6Fa9f6HVSGo0cSsGK7qCsDYgJGUowNxPzk,1499
166
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py,sha256=FWyJ9eJvSvF3DHGRDtSqmLUadEN9fdX7hWv5X3V_Y-U,2907
167
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py,sha256=lpD4fCbVR8GTrynqXON69IjM94nPy3nuUL62Ashm5O4,7988
203
+ autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py,sha256=yO7ZORGsKpPOiwbFamWzC_UtUKc7_7AchZz2R6I8HP0,2850
204
+ autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py,sha256=iJ9OocL1pHCWpwXMRl6MtNMwdcdsXI3YfluwPqn2dsM,12274
168
205
  autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py,sha256=ACvygitMVOroQ8I-07v9fIvX9Xm9bO1HrIW--Xv9qKw,6894
169
206
  autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py,sha256=9eBo3WLkrr77iNotwIwVmH1ZL3UY0JQgLpdAIc9wTTM,6127
207
+ autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py,sha256=ZWRPsJny_My4UMzovrB8J2_x5N0rEW-xx3DVI-kDRFI,15870
170
208
  autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py,sha256=wM2Xy4bcnD0TSLEmcM8rvvyyWenN5_KQnJMO6hJ8lTE,1716
171
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py,sha256=UO4SrkDek3WDlRdlHH022W1roSNMdMcipJqDxRBlheM,3044
209
+ autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py,sha256=hRCFosXaf76Di3aJp_pEhTrXMfHRy5DdWeoNrelq55g,10129
172
210
  autocoder/compilers/__init__.py,sha256=C0HOms70QA747XD0uZEMmGtRFcIPenohyqECNStv0Bw,1647
173
211
  autocoder/compilers/base_compiler.py,sha256=dsTzMO4H_RoqWfE-SntIk2B52hWuvSlWVLtkdCbHgGs,3244
174
212
  autocoder/compilers/compiler_config_api.py,sha256=QRSwWm_EX7jSeZ3dtQqM9HI__x5aZ7U0c3fHIW_2N48,13839
@@ -176,6 +214,7 @@ autocoder/compilers/compiler_config_manager.py,sha256=tNwHEk3t2o2L7ZVpHICDEOOIXR
176
214
  autocoder/compilers/compiler_factory.py,sha256=SLUdvBZdqr_pkY-lfArHCuBVjtiMoIs9uxCGztYj6Ro,10950
177
215
  autocoder/compilers/java_compiler.py,sha256=gR-_GB0_A1ZU3cTgRu1H9VPtLPmCWYo2UwBLEZIMvXU,26362
178
216
  autocoder/compilers/models.py,sha256=ZqGQhiF5vfsK71xzLlsCUS_q_Oune3mqokJ8S8ZOPSc,9527
217
+ autocoder/compilers/normal_compiler.py,sha256=3FQO2KK_-pa9lUotXmtCp920lQi9PpcGtdcFpwzjkIQ,1931
179
218
  autocoder/compilers/provided_compiler.py,sha256=gFxMOmFQYzsGCHJ9oPnSPQXboRdB0C4s5evdZMD99js,14667
180
219
  autocoder/compilers/python_compiler.py,sha256=2w2OM_6H0ZWvaquQpDo1x4VciBWczCZkfwmEyJEEpn8,14389
181
220
  autocoder/compilers/reactjs_compiler.py,sha256=h1_9OqiA8ca84-u3DIxQifvtH-2FSsKFWmhwALzNhqM,18159
@@ -195,7 +234,7 @@ autocoder/dispacher/actions/plugins/action_translate.py,sha256=GEn7dZA22jy5WyzIN
195
234
  autocoder/events/__init__.py,sha256=1x_juwr9Ows2RADDa2LyI4QlmPxOVOXZeLO1cht-slM,1443
196
235
  autocoder/events/event_content.py,sha256=eLHf5M1BifSqhzzEBgAWKn3JD5_z_1mWeNdZ53TpMqk,12240
197
236
  autocoder/events/event_manager.py,sha256=ObbvPfNrrhC85w5VvsnLS9oy92oHEwqMN08qGPReNNA,11884
198
- autocoder/events/event_manager_singleton.py,sha256=zIyrkcJ1g5RUh4osQlJRCo4j0GphcVmb0vp7XGbRWEg,8907
237
+ autocoder/events/event_manager_singleton.py,sha256=F2OkC-rSTONZd4KS-ERnBAtBPO74aiEAMwJ9IKYa_b0,14742
199
238
  autocoder/events/event_store.py,sha256=y6tT3P-o3yhDptrKi-UmqI_ZBNg7v21FriI3f7lo_ME,12709
200
239
  autocoder/events/event_types.py,sha256=W_S6PTDIBdufcuPosgz64iITzQy79flL8s3hWB-vZ9o,3638
201
240
  autocoder/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -218,7 +257,8 @@ autocoder/linters/base_linter.py,sha256=1_0DPESnSyF3ZcQhoFkBYJylT5w-B61Rx-3A9uhu
218
257
  autocoder/linters/code_linter.py,sha256=JylTj-Mj4jl9-XSH3PVlbQ4l55Y6E1FG-glv860CGSs,22462
219
258
  autocoder/linters/linter_factory.py,sha256=rsDzaY0jFnmEsbY8Co_xxpJe9lXgfs07Nnrht8_WWtY,10273
220
259
  autocoder/linters/models.py,sha256=GBdayu_p50KBxoRms4X68zrDK-OsKDEKKjo926FevwE,9838
221
- autocoder/linters/python_linter.py,sha256=4psUpOOvwU8EkSHaHfW_Yd67Qvmuke8bL5_LIaj16wM,22459
260
+ autocoder/linters/normal_linter.py,sha256=5Yavs24XNMOryl0ZDpr1UbVboCZwaIs4x9mFqoC1ZYk,13022
261
+ autocoder/linters/python_linter.py,sha256=CurQa4pYeyPv_e4FxgVBHW-pHOzQTOftARLgY97AKBw,22511
222
262
  autocoder/linters/reactjs_linter.py,sha256=LDCXmAI15LUq8nNPyYko3oryzCc2Su05ob63jEeDdIs,20815
223
263
  autocoder/linters/shadow_linter.py,sha256=SKgRNVnTavNUviFC9osYMz18nGWCVOPOHx9LavEbnmc,15047
224
264
  autocoder/linters/vue_linter.py,sha256=ZyvoxT0kSizFh_UkR7UZYO5DV9edbvDQZaibEF9W95I,20905
@@ -243,7 +283,7 @@ autocoder/rag/doc_filter.py,sha256=UduVO2mlrngwJICrefjDJTYfdmQ4GcRXrfWDQ7xXksk,1
243
283
  autocoder/rag/document_retriever.py,sha256=rFwbAuHTvEFJq16HQNlmRLyJp2ddn2RNFslw_ncU7NI,8847
244
284
  autocoder/rag/lang.py,sha256=HvcMeu6jReEJOGxyLMn4rwBoD-myFwmykS3VLceBJLs,3364
245
285
  autocoder/rag/llm_wrapper.py,sha256=Ht5GF5yJtrztoliujsZzx_ooWZmHkd5xLZKcGEiicZw,4303
246
- autocoder/rag/long_context_rag.py,sha256=qAIx1uNlwWe90whoyUGXNnqrcEcbYiqEobWtyYLZh-g,42879
286
+ autocoder/rag/long_context_rag.py,sha256=zLo4SmdZ50Ex8egdXqwVx4Jp5cR1k4UMf49Z-_NbXL0,43550
247
287
  autocoder/rag/qa_conversation_strategy.py,sha256=4CiMK88apKbJ2YM4HHq1KGpr5jUkTh0_m_aCyt-JYgc,10568
248
288
  autocoder/rag/rag_config.py,sha256=8LwFcTd8OJWWwi1_WY4IzjqgtT6RyE2j4PjxS5cCTDE,802
249
289
  autocoder/rag/rag_entry.py,sha256=6TKtErZ0Us9XSV6HgRKXA6yR3SiZGPHpynOKSaR1wgE,2463
@@ -252,6 +292,9 @@ autocoder/rag/relevant_utils.py,sha256=25wRiX-CrBsratASLGHsZE3ux7VjwaQoDNtl74UlV
252
292
  autocoder/rag/searchable.py,sha256=miO2U-3J9JDYFOEv85vs9JExDQ0goLIeI20Ob2rNqU4,2067
253
293
  autocoder/rag/simple_directory_reader.py,sha256=LkKreCkNdEOoL4fNhc3_hDoyyWTQUte4uqextISRz4U,24485
254
294
  autocoder/rag/simple_rag.py,sha256=I902EUqOK1WM0Y2WFd7RzDJYofElvTZNLVCBtX5A9rc,14885
295
+ autocoder/rag/test_doc_filter.py,sha256=eE6IiMknCHDMVbdyOBQQVTKiyAnX1tAm7qFyfxmXSN0,15301
296
+ autocoder/rag/test_long_context_rag.py,sha256=hn50GKhXyRrlJ1mP9RI4bnObR6pZb2yDmJRcZmVSzVU,18365
297
+ autocoder/rag/test_token_limiter.py,sha256=rJmLUqPalkznL7PskKabuqu5dC6Yj-kWa498TaVMjAY,13744
255
298
  autocoder/rag/token_checker.py,sha256=jc76x6KWmvVxds6W8juZfQGaoErudc2HenG3sNQfSLs,2819
256
299
  autocoder/rag/token_counter.py,sha256=C-Lwc4oIjJpZDEqp9WLHGOe6hb4yhrdJpMtkrtp_1qc,2125
257
300
  autocoder/rag/token_limiter.py,sha256=3VgJF4may3ESyATmBIiOe05oc3VsidJcJTJ5EhoSvH8,18854
@@ -283,7 +326,7 @@ autocoder/rag/stream_event/types.py,sha256=rtLwOE8rShmi1dJdxyBpAV5ZjLBGG9vptMiSz
283
326
  autocoder/regex_project/__init__.py,sha256=EBZeCL5ORyD_9_5u_UuG4s7XtpXOu0y1sWDmxWFtufE,6781
284
327
  autocoder/regexproject/__init__.py,sha256=QMXphSxjuv_LDIx0L_0jnnvCzMfmrOl0VMTVmXabeL0,8976
285
328
  autocoder/shadows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
286
- autocoder/shadows/shadow_manager.py,sha256=_DINnvD3oPaHopagL3B3PL0FFfEz7U6DYSEvEkJZ2yE,19230
329
+ autocoder/shadows/shadow_manager.py,sha256=atY6d9Si4twe3pqQ56SjMje5W1VxamPSZs_WzQtAQvM,19165
287
330
  autocoder/suffixproject/__init__.py,sha256=Rew-M9W4pgO9cvw9UCdrc6QVCPdBhVcIpPBnJxrLJ3M,10374
288
331
  autocoder/tsproject/__init__.py,sha256=e_TWVyXQQxYKsXqdQZuFVqNCQLdtBVNJRTs0fgLXVdA,11055
289
332
  autocoder/utils/__init__.py,sha256=W47ac6IOZhNR1rdbho9fvhHnPI_N1i4oMcZOwxLelbU,1123
@@ -310,9 +353,9 @@ autocoder/utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
310
353
  autocoder/utils/auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
311
354
  autocoder/utils/auto_coder_utils/chat_stream_out.py,sha256=t902pKxQ5xM7zgIHiAOsTPLwxhE6VuvXAqPy751S7fg,14096
312
355
  autocoder/utils/chat_auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
313
- auto_coder-0.1.362.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
314
- auto_coder-0.1.362.dist-info/METADATA,sha256=zybH35fI1XiJiv6lmdvc3vjYpwhp30UO3Vw3d9jobdQ,2775
315
- auto_coder-0.1.362.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
316
- auto_coder-0.1.362.dist-info/entry_points.txt,sha256=0nzHtHH4pNcM7xq4EBA2toS28Qelrvcbrr59GqD_0Ak,350
317
- auto_coder-0.1.362.dist-info/top_level.txt,sha256=Jqc0_uJSw2GwoFQAa9iJxYns-2mWla-9ok_Y3Gcznjk,10
318
- auto_coder-0.1.362.dist-info/RECORD,,
356
+ auto_coder-0.1.364.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
357
+ auto_coder-0.1.364.dist-info/METADATA,sha256=G52msypzQ4D-qqJYxzrJC3r8J3LleJ2lpj5BYpjyk6o,2775
358
+ auto_coder-0.1.364.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
359
+ auto_coder-0.1.364.dist-info/entry_points.txt,sha256=0nzHtHH4pNcM7xq4EBA2toS28Qelrvcbrr59GqD_0Ak,350
360
+ auto_coder-0.1.364.dist-info/top_level.txt,sha256=Jqc0_uJSw2GwoFQAa9iJxYns-2mWla-9ok_Y3Gcznjk,10
361
+ auto_coder-0.1.364.dist-info/RECORD,,
File without changes
@@ -0,0 +1,169 @@
1
+ import typing
2
+ import byzerllm
3
+ from typing import List, Dict, Optional, Literal, Any, Union
4
+ from pydantic import BaseModel
5
+ from loguru import logger
6
+ import threading
7
+ from concurrent.futures import ThreadPoolExecutor
8
+ import os
9
+ from datetime import datetime
10
+ from .types import Message, ReplyDecision
11
+ from .utils import GroupUtils,GroupMemberResponse
12
+
13
+ if typing.TYPE_CHECKING:
14
+ from .base_agent import BaseAgent
15
+
16
+ class AgentHub:
17
+ """管理所有Agent实例的全局中心"""
18
+ _instance = None
19
+ agents: Dict[str, 'BaseAgent'] = {}
20
+
21
+ def __new__(cls):
22
+ if cls._instance is None:
23
+ cls._instance = super().__new__(cls)
24
+ return cls._instance
25
+
26
+ @classmethod
27
+ def register_agent(cls, agent: 'BaseAgent'):
28
+ """注册一个新的Agent"""
29
+ if agent.name in cls.agents:
30
+ raise ValueError(f"Agent with name {agent.name} already exists")
31
+ cls.agents[agent.name] = agent
32
+
33
+ @classmethod
34
+ def get_agent(cls, name: str) -> Optional['BaseAgent']:
35
+ """根据名称获取Agent"""
36
+ return cls.agents.get(name)
37
+
38
+ @classmethod
39
+ def list_agents(cls) -> List[str]:
40
+ """获取所有Agent名称"""
41
+ return list(cls.agents.keys())
42
+
43
+ @classmethod
44
+ def get_all_groups(cls) -> List['Group']:
45
+ """获取所有群组实例"""
46
+ return list(GroupHub.groups.values())
47
+
48
+ class GroupHub:
49
+ """管理所有Group实例的全局中心"""
50
+ _instance = None
51
+ groups: Dict[str, 'Group'] = {}
52
+ _groups_lock = threading.RLock()
53
+
54
+ def __new__(cls):
55
+ if cls._instance is None:
56
+ cls._instance = super().__new__(cls)
57
+ return cls._instance
58
+
59
+ @classmethod
60
+ def register_group(cls, group: 'Group'):
61
+ """注册一个新的Group"""
62
+ with cls._groups_lock:
63
+ if group.name in cls.groups:
64
+ raise ValueError(f"Group with name {group.name} already exists")
65
+ cls.groups[group.name] = group
66
+
67
+ @classmethod
68
+ def get_group(cls, name: str) -> Optional['Group']:
69
+ """根据名称获取Group"""
70
+ with cls._groups_lock:
71
+ return cls.groups.get(name)
72
+
73
+ @classmethod
74
+ def list_groups(cls) -> List[str]:
75
+ """获取所有Group名称"""
76
+ with cls._groups_lock:
77
+ return list(cls.groups.keys())
78
+
79
+
80
+
81
+ class Group:
82
+ # 类级线程池(所有 Group 实例共享)
83
+ _executor = ThreadPoolExecutor(max_workers=min(32, (os.cpu_count() or 1) * 4 + 4))
84
+
85
+ def __init__(self, name: str):
86
+ self.name = name
87
+ self.members: List[Agent] = []
88
+ self.history: List[Message] = []
89
+ # 成员列表和消息历史的读写锁
90
+ self._members_lock = threading.RLock()
91
+ self._history_lock = threading.RLock()
92
+ # 自动注册到GroupHub
93
+ GroupHub.register_group(self)
94
+
95
+ def add_member(self, agent: 'Agent'):
96
+ with self._members_lock:
97
+ if agent not in self.members:
98
+ self.members.append(agent)
99
+ with agent._group_lock: # 访问 Agent 的锁
100
+ agent.joined_groups[self.name] = self
101
+
102
+ def _safe_send_message(self, member: 'Agent', message: Message, print_conversation: bool):
103
+ try:
104
+ # 调用 Agent 的线程安全接收方法
105
+ member.threadsafe_receive(message,print_conversation=print_conversation)
106
+ except Exception as e:
107
+ import traceback
108
+ traceback.print_exc()
109
+ logger.error(f"Message delivery failed to {member.name}: {str(e)}")
110
+
111
+ def _handle_send_result(self, future):
112
+ try:
113
+ future.result()
114
+ except Exception as e:
115
+ logger.error(f"Message delivery error: {str(e)}")
116
+
117
+ def broadcast(self, message: Message, print_conversation: bool = False):
118
+ # 消息历史写入需要同步
119
+ with self._history_lock:
120
+ self.history.append(message)
121
+
122
+ # 使用线程池并行发送
123
+ futures = []
124
+ with self._members_lock: # 保护成员列表遍历
125
+ current_members = self.members.copy()
126
+
127
+ for member in current_members:
128
+ if member.name == message.sender:
129
+ continue
130
+
131
+ futures.append(
132
+ self._executor.submit(
133
+ self._safe_send_message,
134
+ member, message, print_conversation
135
+ )
136
+ )
137
+
138
+ # 异步等待所有任务完成(可选)
139
+ for future in futures:
140
+ future.add_done_callback(self._handle_send_result)
141
+
142
+ if print_conversation:
143
+ with self._history_lock: # 同步打印
144
+ print(f"[Group Broadcast End] {message.sender} finished broadcasting to {self.name} group")
145
+
146
+
147
+ class GroupMembership:
148
+ def __init__(self, agent: 'BaseAgent', group: 'Group'):
149
+ self.agent = agent
150
+ self.group = group
151
+
152
+ def talk_to_all(self, content: str):
153
+ message = Message(
154
+ sender=self.agent.name,
155
+ content=content,
156
+ is_group=True,
157
+ group_name=self.group.name
158
+ )
159
+ self.group.broadcast(message)
160
+
161
+ def talk_to(self, content: str, mentions: List['BaseAgent']):
162
+ message = Message(
163
+ sender=self.agent.name,
164
+ content=f"@{' @'.join([a.name for a in mentions])} {content}",
165
+ is_group=True,
166
+ group_name=self.group.name,
167
+ mentions=[a.name for a in mentions]
168
+ )
169
+ self.group.broadcast(message)
@@ -0,0 +1,112 @@
1
+ import locale
2
+ from byzerllm.utils import format_str_jinja2
3
+
4
+ MESSAGES = {
5
+ "auto_command_analyzing": {
6
+ "en": "Analyzing Command Request",
7
+ "zh": "正在分析命令请求"
8
+ },
9
+ # run_in_terminal方法的国际化文本
10
+ "agent_start": {
11
+ "en": "[bold cyan]Starting Agent: {{ project_name }}[/]",
12
+ "zh": "[bold cyan]启动代理: {{ project_name }}[/]"
13
+ },
14
+ "user_input": {
15
+ "en": "[bold]User Input:[/bold]\n{{ input }}",
16
+ "zh": "[bold]用户输入:[/bold]\n{{ input }}"
17
+ },
18
+ "user_input_title": {
19
+ "en": "Objective",
20
+ "zh": "目标"
21
+ },
22
+ "token_usage_log": {
23
+ "en": "Token Usage: Model={{ model }}, Input Tokens={{ input_tokens }}, Output Tokens={{ output_tokens }}, Input Cost=${{ input_cost }}, Output Cost=${{ output_cost }}",
24
+ "zh": "Token使用情况: 模型={{ model }}, 输入Token={{ input_tokens }}, 输出Token={{ output_tokens }}, 输入成本=${{ input_cost }}, 输出成本=${{ output_cost }}"
25
+ },
26
+ "tool_operation_title": {
27
+ "en": "🛠️ Operation: {{ tool_name }}",
28
+ "zh": "🛠️ 操作: {{ tool_name }}"
29
+ },
30
+ "tool_result_success_title": {
31
+ "en": "✅ Tool Result: {{ tool_name }}",
32
+ "zh": "✅ 工具结果: {{ tool_name }}"
33
+ },
34
+ "tool_result_failure_title": {
35
+ "en": "❌ Tool Result: {{ tool_name }}",
36
+ "zh": "❌ 工具结果: {{ tool_name }}"
37
+ },
38
+ "status": {
39
+ "en": "[bold]Status:[/bold] {{ status }}",
40
+ "zh": "[bold]状态:[/bold] {{ status }}"
41
+ },
42
+ "message": {
43
+ "en": "[bold]Message:[/bold] {{ message }}",
44
+ "zh": "[bold]消息:[/bold] {{ message }}"
45
+ },
46
+ "success_status": {
47
+ "en": "Success",
48
+ "zh": "成功"
49
+ },
50
+ "failure_status": {
51
+ "en": "Failure",
52
+ "zh": "失败"
53
+ },
54
+ "format_tool_error": {
55
+ "en": "Error formatting tool result content: {{ error }}",
56
+ "zh": "格式化工具结果内容时出错: {{ error }}"
57
+ },
58
+ "completion_title": {
59
+ "en": "🏁 Task Completed",
60
+ "zh": "🏁 任务完成"
61
+ },
62
+ "suggested_command": {
63
+ "en": "[dim]Suggested Command:[/dim] [bold cyan]{{ command }}[/]",
64
+ "zh": "[dim]建议命令:[/dim] [bold cyan]{{ command }}[/]"
65
+ },
66
+ "error_title": {
67
+ "en": "🔥 Error",
68
+ "zh": "🔥 错误"
69
+ },
70
+ "error_content": {
71
+ "en": "[bold red]Error:[/bold red] {{ message }}",
72
+ "zh": "[bold red]错误:[/bold red] {{ message }}"
73
+ },
74
+ "fatal_error_title": {
75
+ "en": "🔥 System Error",
76
+ "zh": "🔥 系统错误"
77
+ },
78
+ "fatal_error_content": {
79
+ "en": "[bold red]Fatal Error:[/bold red]\n{{ error }}",
80
+ "zh": "[bold red]致命错误:[/bold red]\n{{ error }}"
81
+ },
82
+ "shadow_merge_error": {
83
+ "en": "Error merging shadow changes to project: {{ error }}",
84
+ "zh": "合并影子更改到项目时出错: {{ error }}"
85
+ },
86
+ "agent_execution_complete": {
87
+ "en": "[bold cyan]Agent Execution Completed[/]",
88
+ "zh": "[bold cyan]代理执行完成[/]"
89
+ },
90
+ "unexpected_error": {
91
+ "en": "Unexpected error during agent execution:",
92
+ "zh": "代理执行过程中发生意外错误:"
93
+ }
94
+ }
95
+
96
+
97
+ def get_system_language():
98
+ try:
99
+ return locale.getdefaultlocale()[0][:2]
100
+ except:
101
+ return "en"
102
+
103
+
104
+ def get_message(key):
105
+ lang = get_system_language()
106
+ if key in MESSAGES:
107
+ return MESSAGES[key].get(lang, MESSAGES[key].get("en", ""))
108
+ return ""
109
+
110
+
111
+ def get_message_with_format(msg_key: str, **kwargs):
112
+ return format_str_jinja2(get_message(msg_key), **kwargs)