auto-coder 0.1.341__py3-none-any.whl → 0.1.342__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.341
3
+ Version: 0.1.342
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -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=_SCar82QIeBFTZZBdM2jPS6atKVhHnvE0gX3V0CsxD4,11590
16
16
  autocoder/run_context.py,sha256=IUfSO6_gp2Wt1blFWAmOpN0b0nDrTTk4LmtCYUBIoro,1643
17
- autocoder/version.py,sha256=LegJaIowJMsa5uThYESSu9bRr94ij_6zuPr7GfWvb-4,23
17
+ autocoder/version.py,sha256=EolTlQKlIqZEveTaGm_5Y3zX1HFWEe5tn-3pZ2Yg2Yk,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
@@ -126,18 +126,18 @@ autocoder/common/v2/code_editblock_manager.py,sha256=G0CIuV9Ki0FqMLnpA8nBT4pnkCN
126
126
  autocoder/common/v2/code_manager.py,sha256=C403bS-f6urixwitlKHcml-J03hci-UyNwHJOqBiY6Q,9182
127
127
  autocoder/common/v2/code_strict_diff_manager.py,sha256=v-J1kDyLg7tLGg_6_lbO9S4fNkx7M_L8Xr2G7fPptiU,9347
128
128
  autocoder/common/v2/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- autocoder/common/v2/agent/agentic_edit.py,sha256=e35KhV0hTz973RcF98qylVFCaBoWtC0EufmEZgHrHD4,91123
129
+ autocoder/common/v2/agent/agentic_edit.py,sha256=Nw2rXRMhiPzrd69eRuZOzbHYY_Qk9Ph4WiERU2Zqwec,91585
130
130
  autocoder/common/v2/agent/agentic_edit_conversation.py,sha256=qLLhTegH619JQTp3s1bj5FVn2hAcoV-DlhGO3UyIOMc,7338
131
131
  autocoder/common/v2/agent/agentic_edit_types.py,sha256=6qBLLmvdlcsbzrpMHsYQVIHqbOWubMXOnmkqTs1pBWQ,4629
132
132
  autocoder/common/v2/agent/agentic_tool_display.py,sha256=WKirt-2V346KLnbHgH3NVJiK3xvriD9oaCWj2IdvzLU,7309
133
133
  autocoder/common/v2/agent/agentic_edit_tools/__init__.py,sha256=wGICCc1dYh07osB21j62zOQ9Ws0PyyOQ12UYRHmHrtI,1229
134
- autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py,sha256=pjrukXjWXMIfUAUzoHzr7j2Onf1L7bxmjsUR1gGaFoA,2809
134
+ autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py,sha256=YktmocUR0ygth8CVq9gXdUzIhX3FicULhwmnA_DTfik,3099
135
135
  autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py,sha256=82ZGKeRBSDKeead_XVBW4FxpiE-5dS7tBOk_3RZ6B5s,1511
136
136
  autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py,sha256=Zid2m1uZd-2wVFGc_n_KAViXZyNjbdLSpI5n7ut1RUQ,1036
137
137
  autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py,sha256=GueQfIY2hVu2R5j9R5rBtn2znl5MlmEdGtsa6snsMHs,4112
138
138
  autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py,sha256=8QoMsADUDWliqiDt_dpguz31403syB8eeW0Pcw-qfb8,3842
139
139
  autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py,sha256=ERM5E7s2azQ8vcvogan4A_LZci8Pmhmxw1uQaNQhon4,5469
140
- autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py,sha256=SZwFUxK6d2BaKWqQXi_c3IVe2iffviF6VUXJA9T9sx0,1492
140
+ autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py,sha256=lGT4_QYJK6Fa9f6HVSGo0cSsGK7qCsDYgJGUowNxPzk,1499
141
141
  autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py,sha256=9Bh0KVbL0qiIqwChlb77biiBiETQ3zekxGe5Fj7hXAg,2800
142
142
  autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py,sha256=lpD4fCbVR8GTrynqXON69IjM94nPy3nuUL62Ashm5O4,7988
143
143
  autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py,sha256=ew0RwJ4oGjnpBOyYYtfxbFqU5W_kclT6FrCkpOB-tgs,6058
@@ -168,8 +168,8 @@ autocoder/dispacher/actions/plugins/action_regex_project.py,sha256=sbK9yFRaq8Ryt
168
168
  autocoder/dispacher/actions/plugins/action_translate.py,sha256=GEn7dZA22jy5WyzINomjmzzB795p2Olg-CJla97lRF8,7744
169
169
  autocoder/events/__init__.py,sha256=1x_juwr9Ows2RADDa2LyI4QlmPxOVOXZeLO1cht-slM,1443
170
170
  autocoder/events/event_content.py,sha256=eLHf5M1BifSqhzzEBgAWKn3JD5_z_1mWeNdZ53TpMqk,12240
171
- autocoder/events/event_manager.py,sha256=VLHrMGlCmuhi0bhLwKyHOQNZrm3ZlB9yfN2lH_phcYQ,11839
172
- autocoder/events/event_manager_singleton.py,sha256=8aBp97fgbas0KYrpHbljTg2n4RcWd85SOgQITu47ZWA,8809
171
+ autocoder/events/event_manager.py,sha256=ObbvPfNrrhC85w5VvsnLS9oy92oHEwqMN08qGPReNNA,11884
172
+ autocoder/events/event_manager_singleton.py,sha256=UubD6HQSDBmA0nBQyo6zr8ctzAPYTiA87ykOoNUCPZk,8895
173
173
  autocoder/events/event_store.py,sha256=y6tT3P-o3yhDptrKi-UmqI_ZBNg7v21FriI3f7lo_ME,12709
174
174
  autocoder/events/event_types.py,sha256=W_S6PTDIBdufcuPosgz64iITzQy79flL8s3hWB-vZ9o,3638
175
175
  autocoder/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -276,9 +276,9 @@ autocoder/utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
276
  autocoder/utils/auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
277
277
  autocoder/utils/auto_coder_utils/chat_stream_out.py,sha256=KW0mlmcHlStXi8-_6fXZ2-ifeJ5mgP0OV7DQFzCtIsw,14008
278
278
  autocoder/utils/chat_auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
279
- auto_coder-0.1.341.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
280
- auto_coder-0.1.341.dist-info/METADATA,sha256=nXClzn15uBj3sXwn4stOcwYHoOwt52vJTA1_uE9Xa0o,2728
281
- auto_coder-0.1.341.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
282
- auto_coder-0.1.341.dist-info/entry_points.txt,sha256=0nzHtHH4pNcM7xq4EBA2toS28Qelrvcbrr59GqD_0Ak,350
283
- auto_coder-0.1.341.dist-info/top_level.txt,sha256=Jqc0_uJSw2GwoFQAa9iJxYns-2mWla-9ok_Y3Gcznjk,10
284
- auto_coder-0.1.341.dist-info/RECORD,,
279
+ auto_coder-0.1.342.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
280
+ auto_coder-0.1.342.dist-info/METADATA,sha256=X_VZm5Bu13vhsbigTQzgyiMGwH3q9cmZkouvkn-S-0k,2728
281
+ auto_coder-0.1.342.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
282
+ auto_coder-0.1.342.dist-info/entry_points.txt,sha256=0nzHtHH4pNcM7xq4EBA2toS28Qelrvcbrr59GqD_0Ak,350
283
+ auto_coder-0.1.342.dist-info/top_level.txt,sha256=Jqc0_uJSw2GwoFQAa9iJxYns-2mWla-9ok_Y3Gcznjk,10
284
+ auto_coder-0.1.342.dist-info/RECORD,,
@@ -938,16 +938,23 @@ class AgenticEdit:
938
938
  if 'requires_approval' in params:
939
939
  params['requires_approval'] = params['requires_approval'].lower(
940
940
  ) == 'true'
941
- # Attempt to handle JSON parsing for arguments in use_mcp_tool
942
- # if tool_tag == 'use_mcp_tool' and 'query' in params:
943
- # try:
944
- # params['arguments'] = json.loads(
945
- # params['arguments'])
946
- # except json.JSONDecodeError:
947
- # logger.warning(
948
- # f"Could not decode JSON arguments for use_mcp_tool: {params['arguments']}")
949
- # # Keep as string or handle error? Let's keep as string for now.
950
- # pass
941
+ # Attempt to handle JSON parsing for ask_followup_question_tool
942
+ if tool_tag == 'ask_followup_question' and 'options' in params:
943
+ try:
944
+ params['options'] = json.loads(
945
+ params['options'])
946
+ except json.JSONDecodeError:
947
+ logger.warning(
948
+ f"Could not decode JSON options for ask_followup_question_tool: {params['options']}")
949
+ # Keep as string or handle error? Let's keep as string for now.
950
+ pass
951
+ if tool_tag == 'plan_mode_respond' and 'options' in params:
952
+ try:
953
+ params['options'] = json.loads(
954
+ params['options'])
955
+ except json.JSONDecodeError:
956
+ logger.warning(
957
+ f"Could not decode JSON options for plan_mode_respond_tool: {params['options']}")
951
958
  # Handle recursive for list_files
952
959
  if tool_tag == 'list_files' and 'recursive' in params:
953
960
  params['recursive'] = params['recursive'].lower() == 'true'
@@ -12,6 +12,7 @@ from prompt_toolkit.styles import Style
12
12
  from rich.console import Console
13
13
  from rich.panel import Panel
14
14
  from rich.text import Text
15
+ from autocoder.common.result_manager import ResultManager
15
16
 
16
17
  if typing.TYPE_CHECKING:
17
18
  from autocoder.common.v2.agent.agentic_edit import AgenticEdit
@@ -20,6 +21,7 @@ class AskFollowupQuestionToolResolver(BaseToolResolver):
20
21
  def __init__(self, agent: Optional['AgenticEdit'], tool: AskFollowupQuestionTool, args: AutoCoderArgs):
21
22
  super().__init__(agent, tool, args)
22
23
  self.tool: AskFollowupQuestionTool = tool # For type hinting
24
+ self.result_manager = ResultManager()
23
25
 
24
26
  def resolve(self) -> ToolResult:
25
27
  """
@@ -28,17 +30,17 @@ class AskFollowupQuestionToolResolver(BaseToolResolver):
28
30
  """
29
31
  question = self.tool.question
30
32
  options = self.tool.options
31
-
33
+ options_text = "\n".join([f"{i+1}. {option}" for i, option in enumerate(options)])
32
34
  if get_run_context().is_web():
33
35
  answer = get_event_manager(
34
36
  self.args.event_file).ask_user(prompt=question)
35
- self.result_manager.append(content=answer, meta={
37
+ self.result_manager.append(content=answer + "\n" + options_text, meta={
36
38
  "action": "ask_user",
37
39
  "input": {
38
40
  "question": question
39
41
  }
40
42
  })
41
- return answer
43
+ return ToolResult(success=True, message="Follow-up question prepared.", content=answer)
42
44
 
43
45
  console = Console()
44
46
 
@@ -18,8 +18,7 @@ class PlanModeRespondToolResolver(BaseToolResolver):
18
18
  Packages the response and options for Plan Mode interaction.
19
19
  """
20
20
  response_text = self.tool.response
21
- options = self.tool.options
22
-
21
+ options = self.tool.options
23
22
  logger.info(f"Resolving PlanModeRespondTool: Response='{response_text[:100]}...', Options={options}")
24
23
 
25
24
  if not response_text:
@@ -138,7 +138,7 @@ class EventManager:
138
138
  blocker = threading.Event()
139
139
  self.event_store.append_event(event)
140
140
  self._blocking_events[event.event_id] = blocker
141
- logger.debug(f"self._blocking_events: {self._blocking_events}")
141
+ logger.info(f"ASK_USER: {self} {self.event_store.file_path} self._blocking_events: {self._blocking_events}")
142
142
  if callback:
143
143
  self._response_callbacks[event.event_id] = callback
144
144
  logger.debug(f"Registered callback for event: {event.event_id}")
@@ -194,7 +194,7 @@ class EventManager:
194
194
  Returns:
195
195
  The created response event
196
196
  """
197
- logger.debug(f"respond_to_user called for event: {ask_event_id} with response: '{response}'")
197
+ logger.info(f"respond_to_user called for event: {ask_event_id} with response: '{response}'")
198
198
 
199
199
  # 创建响应事件
200
200
  event = ResponseEvent(
@@ -205,7 +205,7 @@ class EventManager:
205
205
 
206
206
  # 存储响应事件
207
207
  self.event_store.append_event(event)
208
- logger.debug(f"Response event created and stored with ID: {event.event_id}")
208
+ logger.info(f"Response event created and stored with ID: {event.event_id}")
209
209
 
210
210
  # 获取回调和阻塞器
211
211
  callback = None
@@ -214,29 +214,28 @@ class EventManager:
214
214
  if ask_event_id in self._response_callbacks:
215
215
  callback = self._response_callbacks[ask_event_id]
216
216
  # 暂时不删除回调,确保不会丢失
217
- logger.debug(f"Retrieved callback for event: {ask_event_id}")
217
+ logger.info(f"Retrieved callback for event: {ask_event_id}")
218
218
  else:
219
- logger.debug(f"No callback found for event: {ask_event_id}")
219
+ logger.info(f"No callback found for event: {ask_event_id}")
220
220
 
221
221
 
222
222
  # 如果找到了回调,执行它
223
223
  if callback:
224
224
  try:
225
- logger.debug(f"Executing callback for event: {ask_event_id}")
225
+ logger.info(f"Executing callback for event: {ask_event_id}")
226
226
  callback(response)
227
- logger.debug(f"Callback execution completed for event: {ask_event_id}")
228
-
229
- # 回调执行后再移除它
227
+ logger.info(f"Callback execution completed for event: {ask_event_id}")
228
+
230
229
  if ask_event_id in self._response_callbacks:
231
230
  del self._response_callbacks[ask_event_id]
232
231
  except Exception as e:
233
232
  logger.error(f"Error in response callback: {e}")
234
233
 
235
234
  # 检查是否存在对应的阻塞事件
236
- logger.debug(f"self._blocking_events: {self._blocking_events}")
235
+ logger.info(f"RESPONSD_TO_USER: {self} {self.event_store.file_path} self._blocking_events: {self._blocking_events}")
237
236
  if ask_event_id in self._blocking_events:
238
237
  self._blocking_events[ask_event_id].set()
239
- logger.debug(f"Unblocked event: {ask_event_id}")
238
+ logger.info(f"Unblocked event: {ask_event_id}")
240
239
  else:
241
240
  logger.warning(f"No blocking event found for event_id: {ask_event_id}")
242
241
 
@@ -93,8 +93,9 @@ def gengerate_event_file_path(project_path: Optional[str] = None) -> Tuple[str,s
93
93
  # 组合文件名
94
94
  file_name = f"{file_id}.jsonl"
95
95
 
96
+ # 要使用绝对路径,否则会被认为产生两个event_manager
96
97
  if project_path is None:
97
- return os.path.join(".auto-coder", "events", file_name),file_id
98
+ return os.path.join(os.getcwd(),".auto-coder", "events", file_name),file_id
98
99
  else:
99
100
  return os.path.join(project_path, ".auto-coder", "events", file_name),file_id
100
101
 
autocoder/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.341"
1
+ __version__ = "0.1.342"