auto-coder 0.1.363__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.
- {auto_coder-0.1.363.dist-info → auto_coder-0.1.364.dist-info}/METADATA +2 -2
- {auto_coder-0.1.363.dist-info → auto_coder-0.1.364.dist-info}/RECORD +33 -18
- autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +1 -1
- autocoder/auto_coder_runner.py +2 -0
- autocoder/common/__init__.py +2 -0
- autocoder/common/file_checkpoint/__init__.py +21 -0
- autocoder/common/file_checkpoint/backup.py +264 -0
- autocoder/common/file_checkpoint/examples.py +217 -0
- autocoder/common/file_checkpoint/manager.py +404 -0
- autocoder/common/file_checkpoint/models.py +156 -0
- autocoder/common/file_checkpoint/store.py +383 -0
- autocoder/common/file_checkpoint/test_backup.py +242 -0
- autocoder/common/file_checkpoint/test_manager.py +570 -0
- autocoder/common/file_checkpoint/test_models.py +360 -0
- autocoder/common/file_checkpoint/test_store.py +327 -0
- autocoder/common/file_checkpoint/test_utils.py +297 -0
- autocoder/common/file_checkpoint/utils.py +119 -0
- autocoder/common/rulefiles/autocoderrules_utils.py +114 -55
- autocoder/common/save_formatted_log.py +76 -5
- autocoder/common/v2/agent/agentic_edit.py +318 -197
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +27 -4
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +322 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +83 -61
- autocoder/compilers/normal_compiler.py +64 -0
- autocoder/events/event_manager_singleton.py +133 -4
- autocoder/linters/normal_linter.py +373 -0
- autocoder/linters/python_linter.py +4 -2
- autocoder/version.py +1 -1
- {auto_coder-0.1.363.dist-info → auto_coder-0.1.364.dist-info}/LICENSE +0 -0
- {auto_coder-0.1.363.dist-info → auto_coder-0.1.364.dist-info}/WHEEL +0 -0
- {auto_coder-0.1.363.dist-info → auto_coder-0.1.364.dist-info}/entry_points.txt +0 -0
- {auto_coder-0.1.363.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.
|
|
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.
|
|
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=
|
|
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=
|
|
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
|
|
@@ -58,7 +58,7 @@ autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py,sha256
|
|
|
58
58
|
autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py,sha256=9a_qPihfm45Q22kmxmFwYrZrtNsgtEyBePL8D4SXfes,1487
|
|
59
59
|
autocoder/agent/base_agentic/tools/base_tool_resolver.py,sha256=Y0PmRPhBLLdZpr2DNV0W5goGfAqylM5m1bHxa3T6vAY,1009
|
|
60
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=
|
|
61
|
+
autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py,sha256=FDWheOy2NVG1RDeG2lhMlj0cFjG4UpqCkWPRMEM7Atc,3755
|
|
62
62
|
autocoder/agent/base_agentic/tools/list_files_tool_resolver.py,sha256=rIKcJ0xVI6Exdmqb2LhUQFL6_GNQFuYazqQSJR0Sf2g,5468
|
|
63
63
|
autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py,sha256=hiLdMRknR_Aljd7Ic2bOWZKs11aFHdhkRTKTlP3IIgw,1461
|
|
64
64
|
autocoder/agent/base_agentic/tools/read_file_tool_resolver.py,sha256=4GV8_hyVlO97MgI2pdUrxur3MFNJutlBT8r9OYfQjps,2857
|
|
@@ -78,7 +78,7 @@ autocoder/commands/auto_web.py,sha256=K0Gv7lil5UqmExr_sAJNOcwNxw_q1vhvre1jjQ7tA3
|
|
|
78
78
|
autocoder/commands/tools.py,sha256=IX_zx5mWAvQDED7wUHTqNtrCmLNo9ztFV1aZ6AflY4o,34292
|
|
79
79
|
autocoder/common/JupyterClient.py,sha256=O-wi6pXeAEYhAY24kDa0BINrLYvKS6rKyWe98pDClS0,2816
|
|
80
80
|
autocoder/common/ShellClient.py,sha256=fM1q8t_XMSbLBl2zkCNC2J9xuyKN3eXzGm6hHhqL2WY,2286
|
|
81
|
-
autocoder/common/__init__.py,sha256=
|
|
81
|
+
autocoder/common/__init__.py,sha256=LFR-2IrVK0NtHeefzCB8iqLb-6SuWJRPKQec6bS37_0,14734
|
|
82
82
|
autocoder/common/action_yml_file_manager.py,sha256=DdF5P1R_B_chCnnqoA2IgogakWLZk_nItiJZUfX0_Wo,17857
|
|
83
83
|
autocoder/common/anything2images.py,sha256=0ILBbWzY02M-CiWB-vzuomb_J1hVdxRcenAfIrAXq9M,25283
|
|
84
84
|
autocoder/common/anything2img.py,sha256=iZQmg8srXlD7N5uGl5b_ONKJMBjYoW8kPmokkG6ISF0,10118
|
|
@@ -129,7 +129,7 @@ autocoder/common/printer.py,sha256=T4XTAcQp5w1ZWYx5NAUXlIGd-9500Vl0JaG1JJXMdkg,2
|
|
|
129
129
|
autocoder/common/recall_validation.py,sha256=Avt9Q9dX3kG6Pf2zsdlOHmsjd-OeSj7U1PFBDp_Cve0,1700
|
|
130
130
|
autocoder/common/result_manager.py,sha256=tvWtqSDhP7yKGtmB9s1pJAuRnB7nDgjM6eVrXF9n4e0,4169
|
|
131
131
|
autocoder/common/run_cmd.py,sha256=2VrJpeqooasUoc-WKVrvFfesmRR55kOpPmmYgpQrKVc,8283
|
|
132
|
-
autocoder/common/save_formatted_log.py,sha256=
|
|
132
|
+
autocoder/common/save_formatted_log.py,sha256=VXeN3dzA1C0AX1slSwBTFMC1lZHR9GtziSVRqUDEKfU,5395
|
|
133
133
|
autocoder/common/screenshots.py,sha256=_gA-z1HxGjPShBrtgkdideq58MG6rqFB2qMUJKjrycs,3769
|
|
134
134
|
autocoder/common/search.py,sha256=245iPFgWhMldoUK3CqCP89ltaxZiNPK73evoG6Fp1h8,16518
|
|
135
135
|
autocoder/common/search_replace.py,sha256=GphFkc57Hb673CAwmbiocqTbw8vrV7TrZxtOhD0332g,22147
|
|
@@ -149,6 +149,18 @@ autocoder/common/conversations/example.py,sha256=Pz_EhO6qneUFMfHZiDmGAClZ6b0V4T1
|
|
|
149
149
|
autocoder/common/directory_cache/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
150
150
|
autocoder/common/directory_cache/cache.py,sha256=Jknygb_U6DkF04_SX04IwsOcQdd-2QQ4d6k9Ucc9OZ0,9358
|
|
151
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
|
|
152
164
|
autocoder/common/file_monitor/__init__.py,sha256=9reL3IEnyLWU77WjPzeprM8-4lCetlSMZ94Nuxk5KNg,85
|
|
153
165
|
autocoder/common/file_monitor/monitor.py,sha256=biS9TJyNKga2dE-CeYAi9xfXvA9aMeMl0tBf68G-SBE,16609
|
|
154
166
|
autocoder/common/ignorefiles/__init__.py,sha256=P0hq7Avu1IeXBYEkPBZLsJhFzhzyktUWTqaRIXiAFLY,75
|
|
@@ -158,7 +170,7 @@ autocoder/common/mcp_servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
158
170
|
autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py,sha256=TApShxgoozLluobXHOK1-oAE1zm0-9jdRoPLQB1qwMI,5688
|
|
159
171
|
autocoder/common/mcp_servers/mcp_server_perplexity.py,sha256=CIC26UkfH1lYoVCjfyY5xGGYVx8h0oz0Uj1c7YJ3OPw,5560
|
|
160
172
|
autocoder/common/rulefiles/__init__.py,sha256=babSbPdFaXk1NvdHtH2zrJLb_tWd7d2ELIyS8NApY_Y,221
|
|
161
|
-
autocoder/common/rulefiles/autocoderrules_utils.py,sha256=
|
|
173
|
+
autocoder/common/rulefiles/autocoderrules_utils.py,sha256=TvzKt41wa1uPnYXHkUaJRCuxCJL9IB-Zx6FsEwdSExg,19454
|
|
162
174
|
autocoder/common/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
163
175
|
autocoder/common/v2/code_agentic_editblock_manager.py,sha256=pAh918YMgmLenXmNKXlmDPgKyVJjOuk69901VEEQHm4,34980
|
|
164
176
|
autocoder/common/v2/code_auto_generate.py,sha256=PAySLU8ZnpdF8GelwSCiEbzv7sBbn-Vhakinf4i6udE,11646
|
|
@@ -174,7 +186,7 @@ autocoder/common/v2/code_editblock_manager.py,sha256=DMwJw-FAM6VyaBQV3p4xespHpgZ
|
|
|
174
186
|
autocoder/common/v2/code_manager.py,sha256=C403bS-f6urixwitlKHcml-J03hci-UyNwHJOqBiY6Q,9182
|
|
175
187
|
autocoder/common/v2/code_strict_diff_manager.py,sha256=Bys7tFAq4G03R1zUZuxrszBTvP4QB96jIw2y5BDLyRM,9424
|
|
176
188
|
autocoder/common/v2/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
-
autocoder/common/v2/agent/agentic_edit.py,sha256=
|
|
189
|
+
autocoder/common/v2/agent/agentic_edit.py,sha256=hM2IPCV-Z3ajEsmVUGcFlD01544CloMehyxHAx320Qk,106932
|
|
178
190
|
autocoder/common/v2/agent/agentic_edit_conversation.py,sha256=pFgWPWHKhZ4J9EcFmIdiGsrSolTZuYcH1qkgKdD8nwk,7726
|
|
179
191
|
autocoder/common/v2/agent/agentic_edit_types.py,sha256=ftFTXz-KF96GZvhnYRAxiiYOWfotwU_d9Lb8la2I47U,4779
|
|
180
192
|
autocoder/common/v2/agent/agentic_tool_display.py,sha256=-a-JTQLc4q03E_rdIILKMI0B6DHN-5gcGlrqq-mBYK4,7239
|
|
@@ -188,12 +200,13 @@ autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_res
|
|
|
188
200
|
autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py,sha256=FvpEyBwAfrYvnxcQ_gt7vTmfgoFoR7qr-r1OPx13Xks,5475
|
|
189
201
|
autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py,sha256=dIdV12VuczHpHuHgx2B1j_3BZYc9PL0jfHCuBk9ryk8,2005
|
|
190
202
|
autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py,sha256=lGT4_QYJK6Fa9f6HVSGo0cSsGK7qCsDYgJGUowNxPzk,1499
|
|
191
|
-
autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py,sha256=
|
|
192
|
-
autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py,sha256=
|
|
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
|
|
193
205
|
autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py,sha256=ACvygitMVOroQ8I-07v9fIvX9Xm9bO1HrIW--Xv9qKw,6894
|
|
194
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
|
|
195
208
|
autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py,sha256=wM2Xy4bcnD0TSLEmcM8rvvyyWenN5_KQnJMO6hJ8lTE,1716
|
|
196
|
-
autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py,sha256=
|
|
209
|
+
autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py,sha256=hRCFosXaf76Di3aJp_pEhTrXMfHRy5DdWeoNrelq55g,10129
|
|
197
210
|
autocoder/compilers/__init__.py,sha256=C0HOms70QA747XD0uZEMmGtRFcIPenohyqECNStv0Bw,1647
|
|
198
211
|
autocoder/compilers/base_compiler.py,sha256=dsTzMO4H_RoqWfE-SntIk2B52hWuvSlWVLtkdCbHgGs,3244
|
|
199
212
|
autocoder/compilers/compiler_config_api.py,sha256=QRSwWm_EX7jSeZ3dtQqM9HI__x5aZ7U0c3fHIW_2N48,13839
|
|
@@ -201,6 +214,7 @@ autocoder/compilers/compiler_config_manager.py,sha256=tNwHEk3t2o2L7ZVpHICDEOOIXR
|
|
|
201
214
|
autocoder/compilers/compiler_factory.py,sha256=SLUdvBZdqr_pkY-lfArHCuBVjtiMoIs9uxCGztYj6Ro,10950
|
|
202
215
|
autocoder/compilers/java_compiler.py,sha256=gR-_GB0_A1ZU3cTgRu1H9VPtLPmCWYo2UwBLEZIMvXU,26362
|
|
203
216
|
autocoder/compilers/models.py,sha256=ZqGQhiF5vfsK71xzLlsCUS_q_Oune3mqokJ8S8ZOPSc,9527
|
|
217
|
+
autocoder/compilers/normal_compiler.py,sha256=3FQO2KK_-pa9lUotXmtCp920lQi9PpcGtdcFpwzjkIQ,1931
|
|
204
218
|
autocoder/compilers/provided_compiler.py,sha256=gFxMOmFQYzsGCHJ9oPnSPQXboRdB0C4s5evdZMD99js,14667
|
|
205
219
|
autocoder/compilers/python_compiler.py,sha256=2w2OM_6H0ZWvaquQpDo1x4VciBWczCZkfwmEyJEEpn8,14389
|
|
206
220
|
autocoder/compilers/reactjs_compiler.py,sha256=h1_9OqiA8ca84-u3DIxQifvtH-2FSsKFWmhwALzNhqM,18159
|
|
@@ -220,7 +234,7 @@ autocoder/dispacher/actions/plugins/action_translate.py,sha256=GEn7dZA22jy5WyzIN
|
|
|
220
234
|
autocoder/events/__init__.py,sha256=1x_juwr9Ows2RADDa2LyI4QlmPxOVOXZeLO1cht-slM,1443
|
|
221
235
|
autocoder/events/event_content.py,sha256=eLHf5M1BifSqhzzEBgAWKn3JD5_z_1mWeNdZ53TpMqk,12240
|
|
222
236
|
autocoder/events/event_manager.py,sha256=ObbvPfNrrhC85w5VvsnLS9oy92oHEwqMN08qGPReNNA,11884
|
|
223
|
-
autocoder/events/event_manager_singleton.py,sha256=
|
|
237
|
+
autocoder/events/event_manager_singleton.py,sha256=F2OkC-rSTONZd4KS-ERnBAtBPO74aiEAMwJ9IKYa_b0,14742
|
|
224
238
|
autocoder/events/event_store.py,sha256=y6tT3P-o3yhDptrKi-UmqI_ZBNg7v21FriI3f7lo_ME,12709
|
|
225
239
|
autocoder/events/event_types.py,sha256=W_S6PTDIBdufcuPosgz64iITzQy79flL8s3hWB-vZ9o,3638
|
|
226
240
|
autocoder/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -243,7 +257,8 @@ autocoder/linters/base_linter.py,sha256=1_0DPESnSyF3ZcQhoFkBYJylT5w-B61Rx-3A9uhu
|
|
|
243
257
|
autocoder/linters/code_linter.py,sha256=JylTj-Mj4jl9-XSH3PVlbQ4l55Y6E1FG-glv860CGSs,22462
|
|
244
258
|
autocoder/linters/linter_factory.py,sha256=rsDzaY0jFnmEsbY8Co_xxpJe9lXgfs07Nnrht8_WWtY,10273
|
|
245
259
|
autocoder/linters/models.py,sha256=GBdayu_p50KBxoRms4X68zrDK-OsKDEKKjo926FevwE,9838
|
|
246
|
-
autocoder/linters/
|
|
260
|
+
autocoder/linters/normal_linter.py,sha256=5Yavs24XNMOryl0ZDpr1UbVboCZwaIs4x9mFqoC1ZYk,13022
|
|
261
|
+
autocoder/linters/python_linter.py,sha256=CurQa4pYeyPv_e4FxgVBHW-pHOzQTOftARLgY97AKBw,22511
|
|
247
262
|
autocoder/linters/reactjs_linter.py,sha256=LDCXmAI15LUq8nNPyYko3oryzCc2Su05ob63jEeDdIs,20815
|
|
248
263
|
autocoder/linters/shadow_linter.py,sha256=SKgRNVnTavNUviFC9osYMz18nGWCVOPOHx9LavEbnmc,15047
|
|
249
264
|
autocoder/linters/vue_linter.py,sha256=ZyvoxT0kSizFh_UkR7UZYO5DV9edbvDQZaibEF9W95I,20905
|
|
@@ -338,9 +353,9 @@ autocoder/utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
338
353
|
autocoder/utils/auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
339
354
|
autocoder/utils/auto_coder_utils/chat_stream_out.py,sha256=t902pKxQ5xM7zgIHiAOsTPLwxhE6VuvXAqPy751S7fg,14096
|
|
340
355
|
autocoder/utils/chat_auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
341
|
-
auto_coder-0.1.
|
|
342
|
-
auto_coder-0.1.
|
|
343
|
-
auto_coder-0.1.
|
|
344
|
-
auto_coder-0.1.
|
|
345
|
-
auto_coder-0.1.
|
|
346
|
-
auto_coder-0.1.
|
|
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,,
|
|
@@ -3,13 +3,13 @@ import subprocess
|
|
|
3
3
|
from typing import Dict, Any, Optional
|
|
4
4
|
from autocoder.agent.base_agentic.tools.base_tool_resolver import BaseToolResolver
|
|
5
5
|
from autocoder.agent.base_agentic.types import ExecuteCommandTool, ToolResult # Import ToolResult from types
|
|
6
|
-
from autocoder.common import shells
|
|
7
6
|
from autocoder.common.printer import Printer
|
|
8
7
|
from loguru import logger
|
|
9
8
|
import typing
|
|
10
9
|
from autocoder.common import AutoCoderArgs
|
|
11
10
|
from autocoder.events.event_manager_singleton import get_event_manager
|
|
12
11
|
from autocoder.run_context import get_run_context
|
|
12
|
+
from autocoder.common.run_cmd import run_cmd_subprocess
|
|
13
13
|
if typing.TYPE_CHECKING:
|
|
14
14
|
from ..base_agent import BaseAgent
|
|
15
15
|
|
autocoder/auto_coder_runner.py
CHANGED
|
@@ -2850,6 +2850,7 @@ def auto_command(query: str,extra_args: Dict[str,Any]={}):
|
|
|
2850
2850
|
else:
|
|
2851
2851
|
agent.run_in_terminal(AgenticEditRequest(user_input=query))
|
|
2852
2852
|
|
|
2853
|
+
completer.refresh_files()
|
|
2853
2854
|
return
|
|
2854
2855
|
|
|
2855
2856
|
args = get_final_config()
|
|
@@ -2902,3 +2903,4 @@ def auto_command(query: str,extra_args: Dict[str,Any]={}):
|
|
|
2902
2903
|
border_style="blue",
|
|
2903
2904
|
padding=(1, 2)
|
|
2904
2905
|
))
|
|
2906
|
+
completer.refresh_files()
|
autocoder/common/__init__.py
CHANGED
|
@@ -432,6 +432,8 @@ class AutoCoderArgs(pydantic.BaseModel):
|
|
|
432
432
|
auto_fix_lint_max_attempts: Optional[int] = 5
|
|
433
433
|
auto_fix_compile_max_attempts: Optional[int] = 5
|
|
434
434
|
auto_fix_merge_max_attempts: Optional[int] = 5
|
|
435
|
+
|
|
436
|
+
enable_auto_select_rules: Optional[bool] = True
|
|
435
437
|
|
|
436
438
|
ignore_clean_shadows: Optional[bool] = False
|
|
437
439
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""
|
|
2
|
+
文件变更管理模块
|
|
3
|
+
|
|
4
|
+
该模块提供了一种可靠的机制来应用、记录和撤销对项目文件的修改。
|
|
5
|
+
主要功能包括:
|
|
6
|
+
1. 将影子系统中的文件变更安全地应用到用户的实际项目中
|
|
7
|
+
2. 记录每次变更的历史,支持多版本撤销功能
|
|
8
|
+
3. 提供简单直观的API,便于集成到现有的编辑流程中
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from autocoder.common.file_checkpoint.models import (
|
|
12
|
+
FileChange, ChangeRecord, ApplyResult, UndoResult, DiffResult
|
|
13
|
+
)
|
|
14
|
+
from autocoder.common.file_checkpoint.manager import FileChangeManager
|
|
15
|
+
from autocoder.common.file_checkpoint.store import FileChangeStore
|
|
16
|
+
from autocoder.common.file_checkpoint.backup import FileBackupManager
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
'FileChange', 'ChangeRecord', 'ApplyResult', 'UndoResult', 'DiffResult',
|
|
20
|
+
'FileChangeManager', 'FileChangeStore', 'FileBackupManager'
|
|
21
|
+
]
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"""
|
|
2
|
+
文件备份管理器
|
|
3
|
+
|
|
4
|
+
负责文件的备份和恢复操作,支持多版本文件备份。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import uuid
|
|
9
|
+
import shutil
|
|
10
|
+
import logging
|
|
11
|
+
from typing import Optional, Dict, List, Tuple
|
|
12
|
+
from datetime import datetime
|
|
13
|
+
import json
|
|
14
|
+
import threading
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class FileBackupManager:
|
|
20
|
+
"""负责文件的备份和恢复操作"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, backup_dir: Optional[str] = None):
|
|
23
|
+
"""
|
|
24
|
+
初始化备份管理器
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
backup_dir: 备份文件存储目录,如果为None则使用默认目录
|
|
28
|
+
"""
|
|
29
|
+
if backup_dir is None:
|
|
30
|
+
# 默认备份目录为项目根目录下的.auto-coder/checkpoint
|
|
31
|
+
backup_dir = os.path.join(os.getcwd(), ".auto-coder", "checkpoint")
|
|
32
|
+
|
|
33
|
+
self.backup_dir = backup_dir
|
|
34
|
+
self.metadata_file = os.path.join(backup_dir, "backup_metadata.json")
|
|
35
|
+
self.lock = threading.RLock()
|
|
36
|
+
|
|
37
|
+
# 确保备份目录存在
|
|
38
|
+
os.makedirs(backup_dir, exist_ok=True)
|
|
39
|
+
|
|
40
|
+
# 加载备份元数据
|
|
41
|
+
self.metadata = self._load_metadata()
|
|
42
|
+
|
|
43
|
+
def backup_file(self, file_path: str) -> Optional[str]:
|
|
44
|
+
"""
|
|
45
|
+
备份指定文件
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
file_path: 文件路径
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
str: 备份文件ID,如果文件不存在则返回None
|
|
52
|
+
"""
|
|
53
|
+
if not os.path.exists(file_path):
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
with self.lock:
|
|
57
|
+
# 生成唯一的备份ID
|
|
58
|
+
backup_id = str(uuid.uuid4())
|
|
59
|
+
|
|
60
|
+
# 构建备份文件路径
|
|
61
|
+
backup_file_path = os.path.join(self.backup_dir, backup_id)
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
# 复制文件到备份目录
|
|
65
|
+
shutil.copy2(file_path, backup_file_path)
|
|
66
|
+
|
|
67
|
+
# 更新元数据
|
|
68
|
+
self.metadata[backup_id] = {
|
|
69
|
+
"original_path": file_path,
|
|
70
|
+
"timestamp": datetime.now().timestamp(),
|
|
71
|
+
"size": os.path.getsize(file_path)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
# 保存元数据
|
|
75
|
+
self._save_metadata()
|
|
76
|
+
|
|
77
|
+
logger.debug(f"已备份文件 {file_path} 到 {backup_file_path}")
|
|
78
|
+
return backup_id
|
|
79
|
+
|
|
80
|
+
except Exception as e:
|
|
81
|
+
logger.error(f"备份文件 {file_path} 失败: {str(e)}")
|
|
82
|
+
# 清理可能部分创建的备份文件
|
|
83
|
+
if os.path.exists(backup_file_path):
|
|
84
|
+
os.remove(backup_file_path)
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
def restore_file(self, file_path: str, backup_id: str) -> bool:
|
|
88
|
+
"""
|
|
89
|
+
从备份恢复文件
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
file_path: 目标文件路径
|
|
93
|
+
backup_id: 备份文件ID
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
bool: 恢复是否成功
|
|
97
|
+
"""
|
|
98
|
+
with self.lock:
|
|
99
|
+
# 检查备份ID是否存在
|
|
100
|
+
if backup_id not in self.metadata:
|
|
101
|
+
logger.error(f"备份ID {backup_id} 不存在")
|
|
102
|
+
return False
|
|
103
|
+
|
|
104
|
+
# 构建备份文件路径
|
|
105
|
+
backup_file_path = os.path.join(self.backup_dir, backup_id)
|
|
106
|
+
|
|
107
|
+
# 检查备份文件是否存在
|
|
108
|
+
if not os.path.exists(backup_file_path):
|
|
109
|
+
logger.error(f"备份文件 {backup_file_path} 不存在")
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
try:
|
|
113
|
+
# 确保目标目录存在
|
|
114
|
+
os.makedirs(os.path.dirname(file_path), exist_ok=True)
|
|
115
|
+
|
|
116
|
+
# 复制备份文件到目标路径
|
|
117
|
+
shutil.copy2(backup_file_path, file_path)
|
|
118
|
+
|
|
119
|
+
logger.debug(f"已从 {backup_file_path} 恢复文件到 {file_path}")
|
|
120
|
+
return True
|
|
121
|
+
|
|
122
|
+
except Exception as e:
|
|
123
|
+
logger.error(f"恢复文件 {file_path} 失败: {str(e)}")
|
|
124
|
+
return False
|
|
125
|
+
|
|
126
|
+
def get_backup_content(self, backup_id: str) -> Optional[str]:
|
|
127
|
+
"""
|
|
128
|
+
获取备份文件的内容
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
backup_id: 备份文件ID
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
str: 备份文件内容,如果备份不存在则返回None
|
|
135
|
+
"""
|
|
136
|
+
with self.lock:
|
|
137
|
+
# 检查备份ID是否存在
|
|
138
|
+
if backup_id not in self.metadata:
|
|
139
|
+
logger.error(f"备份ID {backup_id} 不存在")
|
|
140
|
+
return None
|
|
141
|
+
|
|
142
|
+
# 构建备份文件路径
|
|
143
|
+
backup_file_path = os.path.join(self.backup_dir, backup_id)
|
|
144
|
+
|
|
145
|
+
# 检查备份文件是否存在
|
|
146
|
+
if not os.path.exists(backup_file_path):
|
|
147
|
+
logger.error(f"备份文件 {backup_file_path} 不存在")
|
|
148
|
+
return None
|
|
149
|
+
|
|
150
|
+
try:
|
|
151
|
+
# 读取备份文件内容
|
|
152
|
+
with open(backup_file_path, 'r', encoding='utf-8') as f:
|
|
153
|
+
return f.read()
|
|
154
|
+
|
|
155
|
+
except Exception as e:
|
|
156
|
+
logger.error(f"读取备份文件 {backup_file_path} 失败: {str(e)}")
|
|
157
|
+
return None
|
|
158
|
+
|
|
159
|
+
def delete_backup(self, backup_id: str) -> bool:
|
|
160
|
+
"""
|
|
161
|
+
删除指定的备份文件
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
backup_id: 备份文件ID
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
bool: 删除是否成功
|
|
168
|
+
"""
|
|
169
|
+
with self.lock:
|
|
170
|
+
# 检查备份ID是否存在
|
|
171
|
+
if backup_id not in self.metadata:
|
|
172
|
+
logger.error(f"备份ID {backup_id} 不存在")
|
|
173
|
+
return False
|
|
174
|
+
|
|
175
|
+
# 构建备份文件路径
|
|
176
|
+
backup_file_path = os.path.join(self.backup_dir, backup_id)
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
# 删除备份文件
|
|
180
|
+
if os.path.exists(backup_file_path):
|
|
181
|
+
os.remove(backup_file_path)
|
|
182
|
+
|
|
183
|
+
# 更新元数据
|
|
184
|
+
del self.metadata[backup_id]
|
|
185
|
+
|
|
186
|
+
# 保存元数据
|
|
187
|
+
self._save_metadata()
|
|
188
|
+
|
|
189
|
+
logger.debug(f"已删除备份 {backup_id}")
|
|
190
|
+
return True
|
|
191
|
+
|
|
192
|
+
except Exception as e:
|
|
193
|
+
logger.error(f"删除备份 {backup_id} 失败: {str(e)}")
|
|
194
|
+
return False
|
|
195
|
+
|
|
196
|
+
def clean_old_backups(self, max_age_days: int = 30) -> int:
|
|
197
|
+
"""
|
|
198
|
+
清理过旧的备份文件
|
|
199
|
+
|
|
200
|
+
Args:
|
|
201
|
+
max_age_days: 最大保留天数
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
int: 清理的备份文件数量
|
|
205
|
+
"""
|
|
206
|
+
with self.lock:
|
|
207
|
+
now = datetime.now().timestamp()
|
|
208
|
+
max_age_seconds = max_age_days * 24 * 60 * 60
|
|
209
|
+
|
|
210
|
+
backup_ids_to_delete = []
|
|
211
|
+
|
|
212
|
+
# 找出过旧的备份
|
|
213
|
+
for backup_id, metadata in self.metadata.items():
|
|
214
|
+
if now - metadata["timestamp"] > max_age_seconds:
|
|
215
|
+
backup_ids_to_delete.append(backup_id)
|
|
216
|
+
|
|
217
|
+
# 删除过旧的备份
|
|
218
|
+
deleted_count = 0
|
|
219
|
+
for backup_id in backup_ids_to_delete:
|
|
220
|
+
if self.delete_backup(backup_id):
|
|
221
|
+
deleted_count += 1
|
|
222
|
+
|
|
223
|
+
return deleted_count
|
|
224
|
+
|
|
225
|
+
def get_backups_for_file(self, file_path: str) -> List[Tuple[str, float]]:
|
|
226
|
+
"""
|
|
227
|
+
获取指定文件的所有备份
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
file_path: 文件路径
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
List[Tuple[str, float]]: 备份ID和时间戳的列表,按时间戳降序排序
|
|
234
|
+
"""
|
|
235
|
+
with self.lock:
|
|
236
|
+
backups = []
|
|
237
|
+
|
|
238
|
+
for backup_id, metadata in self.metadata.items():
|
|
239
|
+
if metadata["original_path"] == file_path:
|
|
240
|
+
backups.append((backup_id, metadata["timestamp"]))
|
|
241
|
+
|
|
242
|
+
# 按时间戳降序排序
|
|
243
|
+
backups.sort(key=lambda x: x[1], reverse=True)
|
|
244
|
+
|
|
245
|
+
return backups
|
|
246
|
+
|
|
247
|
+
def _load_metadata(self) -> Dict:
|
|
248
|
+
"""加载备份元数据"""
|
|
249
|
+
if os.path.exists(self.metadata_file):
|
|
250
|
+
try:
|
|
251
|
+
with open(self.metadata_file, 'r', encoding='utf-8') as f:
|
|
252
|
+
return json.load(f)
|
|
253
|
+
except Exception as e:
|
|
254
|
+
logger.error(f"加载备份元数据失败: {str(e)}")
|
|
255
|
+
|
|
256
|
+
return {}
|
|
257
|
+
|
|
258
|
+
def _save_metadata(self) -> None:
|
|
259
|
+
"""保存备份元数据"""
|
|
260
|
+
try:
|
|
261
|
+
with open(self.metadata_file, 'w', encoding='utf-8') as f:
|
|
262
|
+
json.dump(self.metadata, f, indent=2)
|
|
263
|
+
except Exception as e:
|
|
264
|
+
logger.error(f"保存备份元数据失败: {str(e)}")
|