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.

Files changed (71) hide show
  1. {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/METADATA +1 -1
  2. {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/RECORD +71 -35
  3. autocoder/agent/agentic_filter.py +1 -1
  4. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +1 -1
  5. autocoder/auto_coder_runner.py +121 -26
  6. autocoder/chat_auto_coder.py +81 -22
  7. autocoder/commands/auto_command.py +1 -1
  8. autocoder/common/__init__.py +2 -2
  9. autocoder/common/ac_style_command_parser/parser.py +27 -12
  10. autocoder/common/auto_coder_lang.py +78 -0
  11. autocoder/common/command_completer_v2.py +1 -1
  12. autocoder/common/file_monitor/test_file_monitor.py +307 -0
  13. autocoder/common/git_utils.py +7 -2
  14. autocoder/common/pruner/__init__.py +0 -0
  15. autocoder/common/pruner/agentic_conversation_pruner.py +197 -0
  16. autocoder/common/pruner/context_pruner.py +574 -0
  17. autocoder/common/pruner/conversation_pruner.py +132 -0
  18. autocoder/common/pruner/test_agentic_conversation_pruner.py +342 -0
  19. autocoder/common/pruner/test_context_pruner.py +546 -0
  20. autocoder/common/pull_requests/__init__.py +256 -0
  21. autocoder/common/pull_requests/base_provider.py +191 -0
  22. autocoder/common/pull_requests/config.py +66 -0
  23. autocoder/common/pull_requests/example.py +1 -0
  24. autocoder/common/pull_requests/exceptions.py +46 -0
  25. autocoder/common/pull_requests/manager.py +201 -0
  26. autocoder/common/pull_requests/models.py +164 -0
  27. autocoder/common/pull_requests/providers/__init__.py +23 -0
  28. autocoder/common/pull_requests/providers/gitcode_provider.py +19 -0
  29. autocoder/common/pull_requests/providers/gitee_provider.py +20 -0
  30. autocoder/common/pull_requests/providers/github_provider.py +214 -0
  31. autocoder/common/pull_requests/providers/gitlab_provider.py +29 -0
  32. autocoder/common/pull_requests/test_module.py +1 -0
  33. autocoder/common/pull_requests/utils.py +344 -0
  34. autocoder/common/tokens/__init__.py +77 -0
  35. autocoder/common/tokens/counter.py +231 -0
  36. autocoder/common/tokens/file_detector.py +105 -0
  37. autocoder/common/tokens/filters.py +111 -0
  38. autocoder/common/tokens/models.py +28 -0
  39. autocoder/common/v2/agent/agentic_edit.py +538 -590
  40. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +8 -1
  41. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
  42. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +43 -0
  43. autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
  44. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +1 -1
  45. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +1 -1
  46. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +33 -88
  47. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +8 -8
  48. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +118 -0
  49. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +324 -0
  50. autocoder/common/v2/agent/agentic_edit_types.py +47 -4
  51. autocoder/common/v2/agent/runner/__init__.py +31 -0
  52. autocoder/common/v2/agent/runner/base_runner.py +106 -0
  53. autocoder/common/v2/agent/runner/event_runner.py +216 -0
  54. autocoder/common/v2/agent/runner/sdk_runner.py +40 -0
  55. autocoder/common/v2/agent/runner/terminal_runner.py +283 -0
  56. autocoder/common/v2/agent/runner/tool_display.py +191 -0
  57. autocoder/index/entry.py +1 -1
  58. autocoder/plugins/token_helper_plugin.py +107 -7
  59. autocoder/run_context.py +9 -0
  60. autocoder/sdk/__init__.py +114 -81
  61. autocoder/sdk/cli/handlers.py +2 -1
  62. autocoder/sdk/cli/main.py +9 -2
  63. autocoder/sdk/cli/options.py +4 -3
  64. autocoder/sdk/core/auto_coder_core.py +7 -152
  65. autocoder/sdk/core/bridge.py +5 -4
  66. autocoder/sdk/models/options.py +8 -6
  67. autocoder/version.py +1 -1
  68. {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/WHEEL +0 -0
  69. {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/entry_points.txt +0 -0
  70. {auto_coder-0.1.399.dist-info → auto_coder-1.0.0.dist-info}/licenses/LICENSE +0 -0
  71. {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
  )
@@ -56,15 +56,14 @@ class AutoCoderBridge:
56
56
  pass
57
57
 
58
58
  def init_project_if_required(self):
59
- if not os.path.exists(".auto-coder") or not os.path.exists("actions"):
60
- subprocess.run(
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
 
@@ -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.399"
1
+ __version__ = "1.0.0"
2
2