auto-coder 0.1.334__py3-none-any.whl → 0.1.340__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 (70) hide show
  1. {auto_coder-0.1.334.dist-info → auto_coder-0.1.340.dist-info}/METADATA +2 -2
  2. {auto_coder-0.1.334.dist-info → auto_coder-0.1.340.dist-info}/RECORD +70 -34
  3. autocoder/agent/agentic_edit.py +833 -0
  4. autocoder/agent/agentic_edit_tools/__init__.py +28 -0
  5. autocoder/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +32 -0
  6. autocoder/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +29 -0
  7. autocoder/agent/agentic_edit_tools/base_tool_resolver.py +29 -0
  8. autocoder/agent/agentic_edit_tools/execute_command_tool_resolver.py +84 -0
  9. autocoder/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +75 -0
  10. autocoder/agent/agentic_edit_tools/list_files_tool_resolver.py +62 -0
  11. autocoder/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +30 -0
  12. autocoder/agent/agentic_edit_tools/read_file_tool_resolver.py +36 -0
  13. autocoder/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +95 -0
  14. autocoder/agent/agentic_edit_tools/search_files_tool_resolver.py +70 -0
  15. autocoder/agent/agentic_edit_tools/use_mcp_tool_resolver.py +55 -0
  16. autocoder/agent/agentic_edit_tools/write_to_file_tool_resolver.py +98 -0
  17. autocoder/agent/agentic_edit_types.py +124 -0
  18. autocoder/agent/agentic_filter.py +14 -7
  19. autocoder/auto_coder.py +39 -18
  20. autocoder/auto_coder_rag.py +18 -9
  21. autocoder/auto_coder_runner.py +107 -8
  22. autocoder/chat_auto_coder.py +1 -2
  23. autocoder/chat_auto_coder_lang.py +18 -2
  24. autocoder/commands/tools.py +5 -1
  25. autocoder/common/__init__.py +2 -0
  26. autocoder/common/auto_coder_lang.py +84 -8
  27. autocoder/common/code_auto_generate_diff.py +1 -1
  28. autocoder/common/code_auto_generate_editblock.py +1 -1
  29. autocoder/common/code_auto_generate_strict_diff.py +1 -1
  30. autocoder/common/mcp_hub.py +185 -2
  31. autocoder/common/mcp_server.py +243 -306
  32. autocoder/common/mcp_server_install.py +269 -0
  33. autocoder/common/mcp_server_types.py +169 -0
  34. autocoder/common/stream_out_type.py +3 -0
  35. autocoder/common/v2/agent/__init__.py +0 -0
  36. autocoder/common/v2/agent/agentic_edit.py +1433 -0
  37. autocoder/common/v2/agent/agentic_edit_conversation.py +179 -0
  38. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +28 -0
  39. autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +70 -0
  40. autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +35 -0
  41. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +33 -0
  42. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +88 -0
  43. autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +80 -0
  44. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +105 -0
  45. autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +35 -0
  46. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +51 -0
  47. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +153 -0
  48. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +104 -0
  49. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +46 -0
  50. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +58 -0
  51. autocoder/common/v2/agent/agentic_edit_types.py +167 -0
  52. autocoder/common/v2/agent/agentic_tool_display.py +184 -0
  53. autocoder/common/v2/code_agentic_editblock_manager.py +812 -0
  54. autocoder/common/v2/code_auto_generate.py +1 -1
  55. autocoder/common/v2/code_auto_generate_diff.py +1 -1
  56. autocoder/common/v2/code_auto_generate_editblock.py +1 -1
  57. autocoder/common/v2/code_auto_generate_strict_diff.py +1 -1
  58. autocoder/common/v2/code_editblock_manager.py +151 -178
  59. autocoder/compilers/provided_compiler.py +3 -2
  60. autocoder/events/event_manager.py +4 -4
  61. autocoder/events/event_types.py +1 -0
  62. autocoder/memory/active_context_manager.py +2 -29
  63. autocoder/models.py +10 -2
  64. autocoder/shadows/shadow_manager.py +1 -1
  65. autocoder/utils/llms.py +4 -2
  66. autocoder/version.py +1 -1
  67. {auto_coder-0.1.334.dist-info → auto_coder-0.1.340.dist-info}/LICENSE +0 -0
  68. {auto_coder-0.1.334.dist-info → auto_coder-0.1.340.dist-info}/WHEEL +0 -0
  69. {auto_coder-0.1.334.dist-info → auto_coder-0.1.340.dist-info}/entry_points.txt +0 -0
  70. {auto_coder-0.1.334.dist-info → auto_coder-0.1.340.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,184 @@
1
+ import json
2
+ from typing import Dict, Callable, Type
3
+ from autocoder.common.auto_coder_lang import get_system_language, format_str_jinja2
4
+ from autocoder.common.v2.agent.agentic_edit_types import (
5
+ BaseTool,
6
+ ReadFileTool, WriteToFileTool, ReplaceInFileTool, ExecuteCommandTool,
7
+ ListFilesTool, SearchFilesTool, ListCodeDefinitionNamesTool,
8
+ AskFollowupQuestionTool, UseMcpTool, AttemptCompletionTool
9
+ )
10
+
11
+ # Define message templates for each tool in English and Chinese
12
+ TOOL_DISPLAY_MESSAGES: Dict[Type[BaseTool], Dict[str, str]] = {
13
+ ReadFileTool: {
14
+ "en": "AutoCoder wants to read this file:\n[bold cyan]{{ path }}[/]",
15
+ "zh": "AutoCoder 想要读取此文件:\n[bold cyan]{{ path }}[/]"
16
+ },
17
+ WriteToFileTool: {
18
+ "en": (
19
+ "AutoCoder wants to write to this file:\n[bold cyan]{{ path }}[/]\n\n"
20
+ "[dim]Content Snippet:[/dim]\n{{ content_snippet }}{{ ellipsis }}"
21
+ ),
22
+ "zh": (
23
+ "AutoCoder 想要写入此文件:\n[bold cyan]{{ path }}[/]\n\n"
24
+ "[dim]内容片段:[/dim]\n{{ content_snippet }}{{ ellipsis }}"
25
+ )
26
+ },
27
+ ReplaceInFileTool: {
28
+ "en": (
29
+ "AutoCoder wants to replace content in this file:\n[bold cyan]{{ path }}[/]\n\n"
30
+ "[dim]Diff Snippet:[/dim]\n{{ diff_snippet }}{{ ellipsis }}"
31
+ ),
32
+ "zh": (
33
+ "AutoCoder 想要替换此文件中的内容:\n[bold cyan]{{ path }}[/]\n\n"
34
+ "[dim]差异片段:[/dim]\n{{ diff_snippet }}{{ ellipsis }}"
35
+ )
36
+ },
37
+ ExecuteCommandTool: {
38
+ "en": (
39
+ "AutoCoder wants to execute this command:\n[bold yellow]{{ command }}[/]\n"
40
+ "[dim](Requires Approval: {{ requires_approval }})[/]"
41
+ ),
42
+ "zh": (
43
+ "AutoCoder 想要执行此命令:\n[bold yellow]{{ command }}[/]\n"
44
+ "[dim](需要批准:{{ requires_approval }})[/]"
45
+ )
46
+ },
47
+ ListFilesTool: {
48
+ "en": (
49
+ "AutoCoder wants to list files in:\n[bold green]{{ path }}[/] "
50
+ "{{ recursive_text }}"
51
+ ),
52
+ "zh": (
53
+ "AutoCoder 想要列出此目录中的文件:\n[bold green]{{ path }}[/] "
54
+ "{{ recursive_text }}"
55
+ )
56
+ },
57
+ SearchFilesTool: {
58
+ "en": (
59
+ "AutoCoder wants to search files in:\n[bold green]{{ path }}[/]\n"
60
+ "[dim]File Pattern:[/dim] [yellow]{{ file_pattern }}[/]\n"
61
+ "[dim]Regex:[/dim] [yellow]{{ regex }}[/]"
62
+ ),
63
+ "zh": (
64
+ "AutoCoder 想要在此目录中搜索文件:\n[bold green]{{ path }}[/]\n"
65
+ "[dim]文件模式:[/dim] [yellow]{{ file_pattern }}[/]\n"
66
+ "[dim]正则表达式:[/dim] [yellow]{{ regex }}[/]"
67
+ )
68
+ },
69
+ ListCodeDefinitionNamesTool: {
70
+ "en": "AutoCoder wants to list definitions in:\n[bold green]{{ path }}[/]",
71
+ "zh": "AutoCoder 想要列出此路径中的定义:\n[bold green]{{ path }}[/]"
72
+ },
73
+ AskFollowupQuestionTool: {
74
+ "en": (
75
+ "AutoCoder is asking a question:\n[bold magenta]{{ question }}[/]\n"
76
+ "{{ options_text }}"
77
+ ),
78
+ "zh": (
79
+ "AutoCoder 正在提问:\n[bold magenta]{{ question }}[/]\n"
80
+ "{{ options_text }}"
81
+ )
82
+ },
83
+ UseMcpTool: {
84
+ "en": (
85
+ "AutoCoder wants to use an MCP tool:\n"
86
+ "[dim]Server:[/dim] [blue]{{ server_name }}[/]\n"
87
+ "[dim]Tool:[/dim] [blue]{{ tool_name }}[/]\n"
88
+ "[dim]Args:[/dim] {{ arguments_snippet }}{{ ellipsis }}"
89
+ ),
90
+ "zh": (
91
+ "AutoCoder 想要使用 MCP 工具:\n"
92
+ "[dim]服务器:[/dim] [blue]{{ server_name }}[/]\n"
93
+ "[dim]工具:[/dim] [blue]{{ tool_name }}[/]\n"
94
+ "[dim]参数:[/dim] {{ arguments_snippet }}{{ ellipsis }}"
95
+ )
96
+ }
97
+ # AttemptCompletionTool is handled separately in the display loop
98
+ }
99
+
100
+ def get_tool_display_message(tool: BaseTool) -> str:
101
+ """
102
+ Generates a user-friendly, internationalized string representation for a tool call.
103
+
104
+ Args:
105
+ tool: The tool instance (Pydantic model).
106
+
107
+ Returns:
108
+ A formatted string for display in the terminal.
109
+ """
110
+ lang = get_system_language()
111
+ tool_type = type(tool)
112
+
113
+ if tool_type not in TOOL_DISPLAY_MESSAGES:
114
+ # Fallback for unknown tools
115
+ return f"Unknown tool type: {tool_type.__name__}\nData: {tool.model_dump_json(indent=2)}"
116
+
117
+ templates = TOOL_DISPLAY_MESSAGES[tool_type]
118
+ template = templates.get(lang, templates.get("en", "Tool display template not found")) # Fallback to English
119
+
120
+ # Prepare context specific to each tool type
121
+ context = {}
122
+ if isinstance(tool, ReadFileTool):
123
+ context = {"path": tool.path}
124
+ elif isinstance(tool, WriteToFileTool):
125
+ snippet = tool.content[:150]
126
+ context = {
127
+ "path": tool.path,
128
+ "content_snippet": snippet,
129
+ "ellipsis": '...' if len(tool.content) > 150 else ''
130
+ }
131
+ elif isinstance(tool, ReplaceInFileTool):
132
+ snippet = tool.diff
133
+ context = {
134
+ "path": tool.path,
135
+ "diff_snippet": snippet,
136
+ "ellipsis": ''
137
+ }
138
+ elif isinstance(tool, ExecuteCommandTool):
139
+ context = {"command": tool.command, "requires_approval": tool.requires_approval}
140
+ elif isinstance(tool, ListFilesTool):
141
+ rec_text_en = '(Recursively)' if tool.recursive else '(Top Level)'
142
+ rec_text_zh = '(递归)' if tool.recursive else '(顶层)'
143
+ context = {
144
+ "path": tool.path,
145
+ "recursive_text": rec_text_zh if lang == 'zh' else rec_text_en
146
+ }
147
+ elif isinstance(tool, SearchFilesTool):
148
+ context = {
149
+ "path": tool.path,
150
+ "file_pattern": tool.file_pattern or '*',
151
+ "regex": tool.regex
152
+ }
153
+ elif isinstance(tool, ListCodeDefinitionNamesTool):
154
+ context = {"path": tool.path}
155
+ elif isinstance(tool, AskFollowupQuestionTool):
156
+ options_text_en = ""
157
+ options_text_zh = ""
158
+ if tool.options:
159
+ options_list_en = "\n".join([f"- {opt}" for opt in tool.options])
160
+ options_list_zh = "\n".join([f"- {opt}" for opt in tool.options]) # Assuming options are simple enough not to need translation
161
+ options_text_en = f"[dim]Options:[/dim]\n{options_list_en}"
162
+ options_text_zh = f"[dim]选项:[/dim]\n{options_list_zh}"
163
+ context = {
164
+ "question": tool.question,
165
+ "options_text": options_text_zh if lang == 'zh' else options_text_en
166
+ }
167
+ elif isinstance(tool, UseMcpTool):
168
+ args_str = tool.query
169
+ snippet = args_str[:100]
170
+ context = {
171
+ "server_name": tool.server_name,
172
+ "tool_name": tool.tool_name,
173
+ "arguments_snippet": snippet,
174
+ "ellipsis": '...' if len(args_str) > 100 else ''
175
+ }
176
+ else:
177
+ # Generic context for tools not specifically handled above
178
+ context = tool.model_dump()
179
+
180
+ try:
181
+ return format_str_jinja2(template, **context)
182
+ except Exception as e:
183
+ # Fallback in case of formatting errors
184
+ return f"Error formatting display for {tool_type.__name__}: {e}\nTemplate: {template}\nContext: {context}"