auto-coder 0.1.399__py3-none-any.whl → 1.0.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 auto-coder might be problematic. Click here for more details.
- {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/METADATA +1 -1
- {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/RECORD +71 -35
- autocoder/agent/agentic_filter.py +1 -1
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +1 -1
- autocoder/auto_coder_runner.py +121 -26
- autocoder/chat_auto_coder.py +81 -22
- autocoder/commands/auto_command.py +1 -1
- autocoder/common/__init__.py +2 -2
- autocoder/common/ac_style_command_parser/parser.py +27 -12
- autocoder/common/auto_coder_lang.py +78 -0
- autocoder/common/command_completer_v2.py +1 -1
- autocoder/common/file_monitor/test_file_monitor.py +307 -0
- autocoder/common/git_utils.py +7 -2
- autocoder/common/pruner/__init__.py +0 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +197 -0
- autocoder/common/pruner/context_pruner.py +574 -0
- autocoder/common/pruner/conversation_pruner.py +132 -0
- autocoder/common/pruner/test_agentic_conversation_pruner.py +342 -0
- autocoder/common/pruner/test_context_pruner.py +546 -0
- autocoder/common/pull_requests/__init__.py +256 -0
- autocoder/common/pull_requests/base_provider.py +191 -0
- autocoder/common/pull_requests/config.py +66 -0
- autocoder/common/pull_requests/example.py +1 -0
- autocoder/common/pull_requests/exceptions.py +46 -0
- autocoder/common/pull_requests/manager.py +201 -0
- autocoder/common/pull_requests/models.py +164 -0
- autocoder/common/pull_requests/providers/__init__.py +23 -0
- autocoder/common/pull_requests/providers/gitcode_provider.py +19 -0
- autocoder/common/pull_requests/providers/gitee_provider.py +20 -0
- autocoder/common/pull_requests/providers/github_provider.py +214 -0
- autocoder/common/pull_requests/providers/gitlab_provider.py +29 -0
- autocoder/common/pull_requests/test_module.py +1 -0
- autocoder/common/pull_requests/utils.py +344 -0
- autocoder/common/tokens/__init__.py +77 -0
- autocoder/common/tokens/counter.py +231 -0
- autocoder/common/tokens/file_detector.py +105 -0
- autocoder/common/tokens/filters.py +111 -0
- autocoder/common/tokens/models.py +28 -0
- autocoder/common/v2/agent/agentic_edit.py +538 -590
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +8 -1
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +43 -0
- autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +1 -1
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +1 -1
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +33 -88
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +8 -8
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +118 -0
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +324 -0
- autocoder/common/v2/agent/agentic_edit_types.py +47 -4
- autocoder/common/v2/agent/runner/__init__.py +31 -0
- autocoder/common/v2/agent/runner/base_runner.py +106 -0
- autocoder/common/v2/agent/runner/event_runner.py +216 -0
- autocoder/common/v2/agent/runner/sdk_runner.py +40 -0
- autocoder/common/v2/agent/runner/terminal_runner.py +283 -0
- autocoder/common/v2/agent/runner/tool_display.py +191 -0
- autocoder/index/entry.py +1 -1
- autocoder/plugins/token_helper_plugin.py +107 -7
- autocoder/run_context.py +9 -0
- autocoder/sdk/__init__.py +114 -81
- autocoder/sdk/cli/handlers.py +2 -1
- autocoder/sdk/cli/main.py +9 -2
- autocoder/sdk/cli/options.py +4 -3
- autocoder/sdk/core/auto_coder_core.py +7 -152
- autocoder/sdk/core/bridge.py +5 -4
- autocoder/sdk/models/options.py +8 -6
- autocoder/version.py +1 -1
- {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/WHEEL +0 -0
- {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/entry_points.txt +0 -0
- {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/licenses/LICENSE +0 -0
- {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/top_level.txt +0 -0
|
@@ -651,163 +651,12 @@ class AutoCoderCore:
|
|
|
651
651
|
self._print_final_token_usage()
|
|
652
652
|
|
|
653
653
|
raise e
|
|
654
|
-
|
|
655
|
-
def modify_code(
|
|
656
|
-
self,
|
|
657
|
-
prompt: str,
|
|
658
|
-
pre_commit: bool = False,
|
|
659
|
-
extra_args: Optional[Dict[str, Any]] = None,
|
|
660
|
-
show_terminal: bool = True
|
|
661
|
-
) -> CodeModificationResult:
|
|
662
|
-
"""
|
|
663
|
-
代码修改接口 - 直接使用 run_auto_command
|
|
664
654
|
|
|
665
|
-
Args:
|
|
666
|
-
prompt: 修改提示
|
|
667
|
-
pre_commit: 是否预提交
|
|
668
|
-
extra_args: 额外参数
|
|
669
|
-
show_terminal: 是否显示到终端
|
|
670
|
-
|
|
671
|
-
Returns:
|
|
672
|
-
CodeModificationResult: 修改结果
|
|
673
|
-
"""
|
|
674
|
-
try:
|
|
675
|
-
# 重置累计的 token 使用情况
|
|
676
|
-
self._reset_token_usage()
|
|
677
|
-
|
|
678
|
-
event_stream = self._sync_run_auto_command(
|
|
679
|
-
prompt,
|
|
680
|
-
pre_commit=pre_commit,
|
|
681
|
-
extra_args=extra_args
|
|
682
|
-
)
|
|
683
|
-
|
|
684
|
-
# 分析事件流,提取修改结果
|
|
685
|
-
modified_files = []
|
|
686
|
-
created_files = []
|
|
687
|
-
deleted_files = []
|
|
688
|
-
messages = []
|
|
689
|
-
success = True
|
|
690
|
-
error_details = None
|
|
691
|
-
|
|
692
|
-
for event in event_stream:
|
|
693
|
-
# 渲染事件到终端
|
|
694
|
-
self._render_stream_event(event, show_terminal)
|
|
695
|
-
|
|
696
|
-
if event.event_type == "content":
|
|
697
|
-
messages.append(event.data.get("content", ""))
|
|
698
|
-
elif event.event_type == "error":
|
|
699
|
-
success = False
|
|
700
|
-
error_details = event.data.get("error", "Unknown error")
|
|
701
|
-
elif event.event_type == "file_modified":
|
|
702
|
-
modified_files.extend(event.data.get("files", []))
|
|
703
|
-
elif event.event_type == "file_created":
|
|
704
|
-
created_files.extend(event.data.get("files", []))
|
|
705
|
-
elif event.event_type == "file_deleted":
|
|
706
|
-
deleted_files.extend(event.data.get("files", []))
|
|
707
|
-
|
|
708
|
-
# 添加小延迟以改善视觉效果
|
|
709
|
-
if show_terminal:
|
|
710
|
-
time.sleep(0.05)
|
|
711
|
-
|
|
712
|
-
# 打印最终的累计 token 使用情况
|
|
713
|
-
if show_terminal:
|
|
714
|
-
self._print_final_token_usage()
|
|
715
|
-
|
|
716
|
-
return CodeModificationResult(
|
|
717
|
-
success=success,
|
|
718
|
-
message="".join(messages),
|
|
719
|
-
modified_files=modified_files,
|
|
720
|
-
created_files=created_files,
|
|
721
|
-
deleted_files=deleted_files,
|
|
722
|
-
error_details=error_details,
|
|
723
|
-
metadata={
|
|
724
|
-
"pre_commit": pre_commit,
|
|
725
|
-
"extra_args": extra_args or {}
|
|
726
|
-
}
|
|
727
|
-
)
|
|
728
|
-
|
|
729
|
-
except Exception as e:
|
|
730
|
-
# 在异常时也打印累计的 token 使用情况
|
|
731
|
-
if show_terminal:
|
|
732
|
-
self._print_final_token_usage()
|
|
733
|
-
self._console.print(Panel(
|
|
734
|
-
f"[bold red]FATAL ERROR:[/bold red]\n{str(e)}",
|
|
735
|
-
title="🔥 System Error",
|
|
736
|
-
border_style="red"
|
|
737
|
-
))
|
|
738
|
-
return CodeModificationResult(
|
|
739
|
-
success=False,
|
|
740
|
-
message="",
|
|
741
|
-
error_details=str(e),
|
|
742
|
-
metadata={"exception_type": type(e).__name__}
|
|
743
|
-
)
|
|
744
|
-
|
|
745
|
-
async def modify_code_stream(
|
|
746
|
-
self,
|
|
747
|
-
prompt: str,
|
|
748
|
-
pre_commit: bool = False,
|
|
749
|
-
extra_args: Optional[Dict[str, Any]] = None,
|
|
750
|
-
show_terminal: bool = True
|
|
751
|
-
) -> AsyncIterator[StreamEvent]:
|
|
752
|
-
"""
|
|
753
|
-
异步流式代码修改接口
|
|
754
|
-
|
|
755
|
-
Args:
|
|
756
|
-
prompt: 修改提示
|
|
757
|
-
pre_commit: 是否预提交
|
|
758
|
-
extra_args: 额外参数
|
|
759
|
-
show_terminal: 是否显示到终端
|
|
760
|
-
|
|
761
|
-
Yields:
|
|
762
|
-
StreamEvent: 修改事件流
|
|
763
|
-
"""
|
|
764
|
-
try:
|
|
765
|
-
# 重置累计的 token 使用情况
|
|
766
|
-
self._reset_token_usage()
|
|
767
|
-
|
|
768
|
-
loop = asyncio.get_event_loop()
|
|
769
|
-
|
|
770
|
-
# 在线程池中执行同步调用
|
|
771
|
-
event_stream = await loop.run_in_executor(
|
|
772
|
-
self._executor,
|
|
773
|
-
self._sync_run_auto_command,
|
|
774
|
-
prompt,
|
|
775
|
-
pre_commit,
|
|
776
|
-
extra_args
|
|
777
|
-
)
|
|
778
|
-
|
|
779
|
-
# 处理并转发事件流
|
|
780
|
-
for event in event_stream:
|
|
781
|
-
# 渲染事件到终端
|
|
782
|
-
self._render_stream_event(event, show_terminal)
|
|
783
|
-
|
|
784
|
-
# 转发事件
|
|
785
|
-
yield event
|
|
786
|
-
|
|
787
|
-
# 添加小延迟以改善视觉效果
|
|
788
|
-
if show_terminal:
|
|
789
|
-
time.sleep(0.05)
|
|
790
|
-
|
|
791
|
-
# 打印最终的累计 token 使用情况
|
|
792
|
-
if show_terminal:
|
|
793
|
-
self._print_final_token_usage()
|
|
794
|
-
|
|
795
|
-
except Exception as e:
|
|
796
|
-
# 在异常时也打印累计的 token 使用情况
|
|
797
|
-
if show_terminal:
|
|
798
|
-
self._print_final_token_usage()
|
|
799
|
-
|
|
800
|
-
error_event = StreamEvent(
|
|
801
|
-
event_type="error",
|
|
802
|
-
data={"error": str(e), "error_type": type(e).__name__}
|
|
803
|
-
)
|
|
804
|
-
self._render_stream_event(error_event, show_terminal)
|
|
805
|
-
yield error_event
|
|
806
|
-
|
|
807
655
|
def _sync_run_auto_command(
|
|
808
656
|
self,
|
|
809
657
|
prompt: str,
|
|
810
658
|
pre_commit: bool = False,
|
|
659
|
+
pr: Optional[bool] = None,
|
|
811
660
|
extra_args: Optional[Dict[str, Any]] = None
|
|
812
661
|
) -> Iterator[StreamEvent]:
|
|
813
662
|
"""
|
|
@@ -816,14 +665,20 @@ class AutoCoderCore:
|
|
|
816
665
|
Args:
|
|
817
666
|
prompt: 查询提示
|
|
818
667
|
pre_commit: 是否预提交
|
|
668
|
+
pr: 是否创建 PR,如果为None则使用配置中的值
|
|
819
669
|
extra_args: 额外参数
|
|
820
670
|
|
|
821
671
|
Returns:
|
|
822
672
|
Iterator[StreamEvent]: 事件流
|
|
823
673
|
"""
|
|
674
|
+
# 如果没有明确指定pr参数,使用配置中的值
|
|
675
|
+
if pr is None:
|
|
676
|
+
pr = self.options.pr
|
|
677
|
+
|
|
824
678
|
return self.bridge.call_run_auto_command(
|
|
825
679
|
query=prompt,
|
|
826
680
|
pre_commit=pre_commit,
|
|
681
|
+
pr=pr,
|
|
827
682
|
extra_args=extra_args or {},
|
|
828
683
|
stream=True
|
|
829
684
|
)
|
autocoder/sdk/core/bridge.py
CHANGED
|
@@ -56,15 +56,14 @@ class AutoCoderBridge:
|
|
|
56
56
|
pass
|
|
57
57
|
|
|
58
58
|
def init_project_if_required(self):
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
["auto-coder", "init", "--source_dir", "."], check=True
|
|
62
|
-
)
|
|
59
|
+
from autocoder.auto_coder_runner import init_project_if_required as init_project_if_required_buildin
|
|
60
|
+
init_project_if_required_buildin(self.project_root,".py,.ts")
|
|
63
61
|
|
|
64
62
|
def call_run_auto_command(
|
|
65
63
|
self,
|
|
66
64
|
query: str,
|
|
67
65
|
pre_commit: bool = False,
|
|
66
|
+
pr: bool = False,
|
|
68
67
|
extra_args: Optional[Dict[str, Any]] = None,
|
|
69
68
|
stream: bool = True
|
|
70
69
|
) -> Iterator[StreamEvent]:
|
|
@@ -74,6 +73,7 @@ class AutoCoderBridge:
|
|
|
74
73
|
Args:
|
|
75
74
|
query: 查询内容
|
|
76
75
|
pre_commit: 是否预提交
|
|
76
|
+
pr: 是否预提交
|
|
77
77
|
extra_args: 额外参数
|
|
78
78
|
stream: 是否流式返回
|
|
79
79
|
|
|
@@ -103,6 +103,7 @@ class AutoCoderBridge:
|
|
|
103
103
|
events = run_auto_command(
|
|
104
104
|
query=query,
|
|
105
105
|
pre_commit=pre_commit,
|
|
106
|
+
pr=pr,
|
|
106
107
|
extra_args=extra_args
|
|
107
108
|
)
|
|
108
109
|
|
autocoder/sdk/models/options.py
CHANGED
|
@@ -52,6 +52,7 @@ class AutoCodeOptions:
|
|
|
52
52
|
timeout: int = 30
|
|
53
53
|
verbose: bool = False
|
|
54
54
|
include_project_structure: bool = True
|
|
55
|
+
pr: bool = False # 是否创建 PR
|
|
55
56
|
|
|
56
57
|
def __post_init__(self):
|
|
57
58
|
"""初始化后验证"""
|
|
@@ -61,12 +62,12 @@ class AutoCodeOptions:
|
|
|
61
62
|
def validate(self) -> None:
|
|
62
63
|
"""验证配置选项"""
|
|
63
64
|
|
|
64
|
-
# 验证max_turns
|
|
65
|
-
if self.max_turns <= 0:
|
|
66
|
-
raise ValidationError("max_turns", "must be positive integer")
|
|
65
|
+
# 验证max_turns(-1表示不限制)
|
|
66
|
+
if self.max_turns <= 0 and self.max_turns != -1:
|
|
67
|
+
raise ValidationError("max_turns", "must be positive integer or -1 (unlimited)")
|
|
67
68
|
|
|
68
|
-
if self.max_turns > 100:
|
|
69
|
-
raise ValidationError("max_turns", "cannot exceed 100")
|
|
69
|
+
if self.max_turns > 100 and self.max_turns != -1:
|
|
70
|
+
raise ValidationError("max_turns", "cannot exceed 100 (unless -1 for unlimited)")
|
|
70
71
|
|
|
71
72
|
# 验证output_format
|
|
72
73
|
if self.output_format not in OUTPUT_FORMATS:
|
|
@@ -140,7 +141,8 @@ class AutoCodeOptions:
|
|
|
140
141
|
"temperature": self.temperature,
|
|
141
142
|
"timeout": self.timeout,
|
|
142
143
|
"verbose": self.verbose,
|
|
143
|
-
"include_project_structure": self.include_project_structure
|
|
144
|
+
"include_project_structure": self.include_project_structure,
|
|
145
|
+
"pr": self.pr
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
@classmethod
|
autocoder/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "0.
|
|
1
|
+
__version__ = "1.0.0"
|
|
2
2
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|