jarvis-ai-assistant 0.1.125__py3-none-any.whl → 0.1.126__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 jarvis-ai-assistant might be problematic. Click here for more details.

Files changed (44) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +116 -116
  3. jarvis/jarvis_code_agent/code_agent.py +96 -100
  4. jarvis/jarvis_code_agent/patch.py +39 -47
  5. jarvis/jarvis_code_agent/shell_input_handler.py +22 -0
  6. jarvis/jarvis_codebase/main.py +83 -84
  7. jarvis/jarvis_dev/main.py +691 -713
  8. jarvis/jarvis_lsp/base.py +0 -12
  9. jarvis/jarvis_lsp/cpp.py +0 -9
  10. jarvis/jarvis_lsp/go.py +0 -9
  11. jarvis/jarvis_lsp/python.py +0 -28
  12. jarvis/jarvis_lsp/registry.py +0 -1
  13. jarvis/jarvis_lsp/rust.py +0 -9
  14. jarvis/jarvis_multi_agent/__init__.py +52 -52
  15. jarvis/jarvis_tools/ask_codebase.py +6 -6
  16. jarvis/jarvis_tools/ask_user.py +2 -2
  17. jarvis/jarvis_tools/base.py +4 -4
  18. jarvis/jarvis_tools/chdir.py +8 -8
  19. jarvis/jarvis_tools/code_review.py +6 -6
  20. jarvis/jarvis_tools/create_code_agent.py +4 -4
  21. jarvis/jarvis_tools/create_sub_agent.py +7 -7
  22. jarvis/jarvis_tools/execute_shell.py +54 -21
  23. jarvis/jarvis_tools/execute_shell_script.py +3 -3
  24. jarvis/jarvis_tools/file_operation.py +36 -8
  25. jarvis/jarvis_tools/git_commiter.py +16 -16
  26. jarvis/jarvis_tools/lsp_find_definition.py +7 -7
  27. jarvis/jarvis_tools/lsp_prepare_rename.py +7 -7
  28. jarvis/jarvis_tools/methodology.py +6 -6
  29. jarvis/jarvis_tools/rag.py +5 -5
  30. jarvis/jarvis_tools/read_webpage.py +2 -2
  31. jarvis/jarvis_tools/registry.py +139 -139
  32. jarvis/jarvis_tools/search_web.py +5 -5
  33. jarvis/jarvis_tools/select_code_files.py +3 -3
  34. jarvis/jarvis_tools/tool_generator.py +33 -34
  35. jarvis/jarvis_utils/methodology.py +5 -5
  36. {jarvis_ai_assistant-0.1.125.dist-info → jarvis_ai_assistant-0.1.126.dist-info}/METADATA +31 -17
  37. jarvis_ai_assistant-0.1.126.dist-info/RECORD +74 -0
  38. {jarvis_ai_assistant-0.1.125.dist-info → jarvis_ai_assistant-0.1.126.dist-info}/WHEEL +1 -1
  39. jarvis/jarvis_tools/lsp_validate_edit.py +0 -141
  40. jarvis/jarvis_tools/read_code.py +0 -192
  41. jarvis_ai_assistant-0.1.125.dist-info/RECORD +0 -75
  42. {jarvis_ai_assistant-0.1.125.dist-info → jarvis_ai_assistant-0.1.126.dist-info}/LICENSE +0 -0
  43. {jarvis_ai_assistant-0.1.125.dist-info → jarvis_ai_assistant-0.1.126.dist-info}/entry_points.txt +0 -0
  44. {jarvis_ai_assistant-0.1.125.dist-info → jarvis_ai_assistant-0.1.126.dist-info}/top_level.txt +0 -0
@@ -16,41 +16,41 @@ from jarvis.jarvis_utils.output import OutputType, PrettyOutput
16
16
 
17
17
 
18
18
  tool_call_help = """
19
- # 🛠️ Tool Usage System
20
- You are using a tool execution system that requires precise formatting and strict rules.
19
+ # 🛠️ 工具使用系统
20
+ 您正在使用一个需要精确格式和严格规则的工具执行系统。
21
21
 
22
- # 📋 Tool Call Format
22
+ # 📋 工具调用格式
23
23
  <TOOL_CALL>
24
- name: tool_name
24
+ name: 工具名称
25
25
  arguments:
26
- param1: value1
27
- param2: value2
26
+ param1: 值1
27
+ param2: 值2
28
28
  </TOOL_CALL>
29
29
 
30
- # ❗ Critical Rules
31
- 1. ONE Tool Per Turn
32
- - Execute only ONE tool at a time
33
- - Wait for results before next action
30
+ # ❗ 关键规则
31
+ 1. 每次只使用一个工具
32
+ - 一次只执行一个工具
33
+ - 等待结果后再进行下一步
34
34
 
35
- 2. Strict Format Adherence
36
- - Follow exact format shown above
37
- - Use proper YAML indentation
38
- - Include all required parameters
35
+ 2. 严格遵守格式
36
+ - 完全按照上述格式
37
+ - 使用正确的YAML缩进
38
+ - 包含所有必需参数
39
39
 
40
- 3. Result Handling
41
- - Wait for execution results
42
- - Never assume outcomes
43
- - Don't create fake responses
44
- - Don't imagine dialogues
40
+ 3. 结果处理
41
+ - 等待执行结果
42
+ - 不要假设结果
43
+ - 不要创建虚假响应
44
+ - 不要想象对话
45
45
 
46
- 4. Information Management
47
- - Ask user if info is insufficient
48
- - Skip unnecessary steps
49
- - Request guidance if stuck
50
- - Don't proceed with incomplete info
46
+ 4. 信息管理
47
+ - 如果信息不足,询问用户
48
+ - 跳过不必要的步骤
49
+ - 如果卡住,请求指导
50
+ - 不要在没有完整信息的情况下继续
51
51
 
52
- # 📝 String Parameter Format
53
- ALWAYS use | syntax for string parameters:
52
+ # 📝 字符串参数格式
53
+ 始终使用 | 语法表示字符串参数:
54
54
 
55
55
  <TOOL_CALL>
56
56
  name: execute_shell
@@ -59,19 +59,19 @@ arguments:
59
59
  git status --porcelain
60
60
  </TOOL_CALL>
61
61
 
62
- # 💡 Best Practices
63
- - Start execution immediately when ready
64
- - No need to ask for permission to begin
65
- - Use proper string formatting
66
- - Monitor progress and adjust
67
- - Request help when stuck
68
-
69
- # ⚠️ Common Mistakes to Avoid
70
- - Multiple tool calls at once
71
- - Missing | for string parameters
72
- - Assuming tool results
73
- - Creating fictional dialogues
74
- - Proceeding without required info
62
+ # 💡 最佳实践
63
+ - 准备好后立即开始执行
64
+ - 无需请求许可即可开始
65
+ - 使用正确的字符串格式
66
+ - 监控进度并调整
67
+ - 遇到困难时请求帮助
68
+
69
+ # ⚠️ 常见错误
70
+ - 同时调用多个工具
71
+ - 字符串参数缺少 |
72
+ - 假设工具结果
73
+ - 创建虚构对话
74
+ - 在没有所需信息的情况下继续
75
75
  """
76
76
 
77
77
  class ToolRegistry(OutputHandler):
@@ -85,14 +85,14 @@ class ToolRegistry(OutputHandler):
85
85
  return False
86
86
 
87
87
  def prompt(self) -> str:
88
- """Load tools"""
88
+ """加载工具"""
89
89
  tools = self.get_all_tools()
90
90
  if tools:
91
- tools_prompt = "## Available tools:\n"
91
+ tools_prompt = "## 可用工具:\n"
92
92
  for tool in tools:
93
- tools_prompt += f"- Name: {tool['name']}\n"
94
- tools_prompt += f" Description: {tool['description']}\n"
95
- tools_prompt += f" Parameters: {tool['parameters']}\n"
93
+ tools_prompt += f"- 名称: {tool['name']}\n"
94
+ tools_prompt += f" 描述: {tool['description']}\n"
95
+ tools_prompt += f" 参数: {tool['parameters']}\n"
96
96
  tools_prompt += tool_call_help
97
97
  return tools_prompt
98
98
  return ""
@@ -101,87 +101,87 @@ class ToolRegistry(OutputHandler):
101
101
  tool_calls = self._extract_tool_calls(response)
102
102
  if len(tool_calls) > 1:
103
103
  PrettyOutput.print(f"操作失败:检测到多个操作。一次只能执行一个操作。尝试执行的操作:{', '.join([tool_call['name'] for tool_call in tool_calls])}", OutputType.WARNING)
104
- return False, f"Call failed: Handle multiple tool calls, please ONLY handle one tool call at a time."
104
+ return False, f"调用失败:请一次只处理一个工具调用。"
105
105
  if len(tool_calls) == 0:
106
106
  return False, ""
107
107
  tool_call = tool_calls[0]
108
108
  return False, self.handle_tool_calls(tool_call)
109
109
 
110
110
  def __init__(self):
111
- """Initialize tool registry"""
111
+ """初始化工具注册表"""
112
112
  self.tools: Dict[str, Tool] = {}
113
- # Load built-in tools and external tools
113
+ # 加载内置工具和外部工具
114
114
  self._load_builtin_tools()
115
115
  self._load_external_tools()
116
- # Ensure max_token_count is an integer
116
+ # 确保max_token_count是整数
117
117
  self.max_token_count = int(get_max_token_count() * 0.8)
118
118
 
119
119
  def use_tools(self, name: List[str]):
120
- """Use specified tools"""
120
+ """使用指定工具"""
121
121
  missing_tools = [tool_name for tool_name in name if tool_name not in self.tools]
122
122
  if missing_tools:
123
123
  PrettyOutput.print(f"工具 {missing_tools} 不存在,可用的工具有: {', '.join(self.tools.keys())}", OutputType.WARNING)
124
124
  self.tools = {tool_name: self.tools[tool_name] for tool_name in name}
125
125
 
126
126
  def dont_use_tools(self, names: List[str]):
127
- """Remove specified tools from the registry"""
127
+ """从注册表中移除指定工具"""
128
128
  self.tools = {name: tool for name, tool in self.tools.items() if name not in names}
129
129
 
130
130
  def _load_builtin_tools(self):
131
- """Load tools from the built-in tools directory"""
131
+ """从内置工具目录加载工具"""
132
132
  tools_dir = Path(__file__).parent
133
133
 
134
- # Iterate through all .py files in the directory
134
+ # 遍历目录中的所有.py文件
135
135
  for file_path in tools_dir.glob("*.py"):
136
- # Skip base.py and __init__.py
136
+ # 跳过base.py__init__.py
137
137
  if file_path.name in ["base.py", "__init__.py", "registry.py"]:
138
138
  continue
139
139
 
140
140
  self.register_tool_by_file(str(file_path))
141
141
 
142
142
  def _load_external_tools(self):
143
- """Load external tools from ~/.jarvis/tools"""
143
+ """从~/.jarvis/tools加载外部工具"""
144
144
  external_tools_dir = Path.home() / '.jarvis/tools'
145
145
  if not external_tools_dir.exists():
146
146
  return
147
147
 
148
- # Iterate through all .py files in the directory
148
+ # 遍历目录中的所有.py文件
149
149
  for file_path in external_tools_dir.glob("*.py"):
150
- # Skip __init__.py
150
+ # 跳过__init__.py
151
151
  if file_path.name == "__init__.py":
152
152
  continue
153
153
 
154
154
  self.register_tool_by_file(str(file_path))
155
155
 
156
156
  def register_tool_by_file(self, file_path: str):
157
- """Load and register tools from a specified file
157
+ """从指定文件加载并注册工具
158
158
 
159
- Args:
160
- file_path: The path of the tool file
159
+ 参数:
160
+ file_path: 工具文件的路径
161
161
 
162
- Returns:
163
- bool: Whether the tool is loaded successfully
162
+ 返回:
163
+ bool: 工具是否加载成功
164
164
  """
165
165
  try:
166
- p_file_path = Path(file_path).resolve() # Get the absolute path
166
+ p_file_path = Path(file_path).resolve() # 获取绝对路径
167
167
  if not p_file_path.exists() or not p_file_path.is_file():
168
168
  PrettyOutput.print(f"文件不存在: {p_file_path}", OutputType.ERROR)
169
169
  return False
170
170
 
171
- # Add the parent directory to sys.path temporarily
171
+ # 临时将父目录添加到sys.path
172
172
  parent_dir = str(p_file_path.parent)
173
173
  sys.path.insert(0, parent_dir)
174
174
 
175
175
  try:
176
- # Import the module using standard import mechanism
176
+ # 使用标准导入机制导入模块
177
177
  module_name = p_file_path.stem
178
178
  module = __import__(module_name)
179
179
 
180
- # Find the tool class in the module
180
+ # 在模块中查找工具类
181
181
  tool_found = False
182
182
  for item_name in dir(module):
183
183
  item = getattr(module, item_name)
184
- # Check if it is a class and has the necessary attributes
184
+ # 检查是否是类并具有必要属性
185
185
  if (isinstance(item, type) and
186
186
  hasattr(item, 'name') and
187
187
  hasattr(item, 'description') and
@@ -193,10 +193,10 @@ class ToolRegistry(OutputHandler):
193
193
  if not item.check():
194
194
  continue
195
195
 
196
- # Instantiate the tool class
196
+ # 实例化工具类
197
197
  tool_instance = item()
198
198
 
199
- # Register the tool
199
+ # 注册工具
200
200
  self.register_tool(
201
201
  name=tool_instance.name,
202
202
  description=tool_instance.description,
@@ -212,7 +212,7 @@ class ToolRegistry(OutputHandler):
212
212
  return True
213
213
 
214
214
  finally:
215
- # Remove the directory from sys.path
215
+ # sys.path中移除目录
216
216
  sys.path.remove(parent_dir)
217
217
 
218
218
  except Exception as e:
@@ -220,18 +220,18 @@ class ToolRegistry(OutputHandler):
220
220
  return False
221
221
  @staticmethod
222
222
  def _extract_tool_calls(content: str) -> List[Dict]:
223
- """Extract tool calls from content.
223
+ """从内容中提取工具调用。
224
224
 
225
- Args:
226
- content: The content containing tool calls
225
+ 参数:
226
+ content: 包含工具调用的内容
227
227
 
228
- Returns:
229
- List[Dict]: List of extracted tool calls with name and arguments
228
+ 返回:
229
+ List[Dict]: 包含名称和参数的提取工具调用列表
230
230
 
231
- Raises:
232
- Exception: If tool call is missing necessary fields
231
+ 异常:
232
+ Exception: 如果工具调用缺少必要字段
233
233
  """
234
- # Split content into lines
234
+ # 将内容拆分为行
235
235
  data = re.findall(r'<TOOL_CALL>(.*?)</TOOL_CALL>', content, re.DOTALL)
236
236
  ret = []
237
237
  for item in data:
@@ -244,68 +244,68 @@ class ToolRegistry(OutputHandler):
244
244
  return ret
245
245
 
246
246
  def register_tool(self, name: str, description: str, parameters: Dict, func: Callable):
247
- """Register a new tool"""
247
+ """注册新工具"""
248
248
  self.tools[name] = Tool(name, description, parameters, func)
249
249
 
250
250
  def get_tool(self, name: str) -> Optional[Tool]:
251
- """Get a tool"""
251
+ """获取工具"""
252
252
  return self.tools.get(name)
253
253
 
254
254
  def get_all_tools(self) -> List[Dict]:
255
- """Get all tools in Ollama format definition"""
255
+ """获取所有工具(Ollama格式定义)"""
256
256
  return [tool.to_dict() for tool in self.tools.values()]
257
257
 
258
258
  def execute_tool(self, name: str, arguments: Dict) -> Dict[str, Any]:
259
- """Execute a specified tool"""
259
+ """执行指定工具"""
260
260
  tool = self.get_tool(name)
261
261
  if tool is None:
262
- return {"success": False, "stderr": f"Tool {name} does not exist, available tools: {', '.join(self.tools.keys())}", "stdout": ""}
262
+ return {"success": False, "stderr": f"工具 {name} 不存在,可用的工具有: {', '.join(self.tools.keys())}", "stdout": ""}
263
263
  return tool.execute(arguments)
264
264
 
265
265
  def handle_tool_calls(self, tool_call: Dict) -> str:
266
- """Handle tool calls, only process the first tool"""
266
+ """处理工具调用,只处理第一个工具"""
267
267
  try:
268
- # Only process the first tool call
268
+ # 只处理第一个工具调用
269
269
  name = tool_call["name"]
270
270
  args = tool_call["arguments"]
271
271
 
272
272
  tool_call_help = """
273
- # 🛠️ Tool Usage System
274
- You are using a tool execution system that requires precise formatting and strict rules.
273
+ # 🛠️ 工具使用系统
274
+ 您正在使用一个需要精确格式和严格规则的工具执行系统。
275
275
 
276
- # 📋 Tool Call Format
276
+ # 📋 工具调用格式
277
277
 
278
278
  <TOOL_CALL>
279
- name: tool_name
279
+ name: 工具名称
280
280
  arguments:
281
- param1: value1
282
- param2: value2
281
+ param1: 值1
282
+ param2: 值2
283
283
  </TOOL_CALL>
284
284
 
285
- # ❗ Critical Rules
286
- 1. ONE Tool Per Turn
287
- - Execute only ONE tool at a time
288
- - Wait for results before next action
285
+ # ❗ 关键规则
286
+ 1. 每次只使用一个工具
287
+ - 一次只执行一个工具
288
+ - 等待结果后再进行下一步
289
289
 
290
- 2. Strict Format Adherence
291
- - Follow exact format shown above
292
- - Use proper YAML indentation
293
- - Include all required parameters
290
+ 2. 严格遵守格式
291
+ - 完全按照上述格式
292
+ - 使用正确的YAML缩进
293
+ - 包含所有必需参数
294
294
 
295
- 3. Result Handling
296
- - Wait for execution results
297
- - Never assume outcomes
298
- - Don't create fake responses
299
- - Don't imagine dialogues
295
+ 3. 结果处理
296
+ - 等待执行结果
297
+ - 不要假设结果
298
+ - 不要创建虚假响应
299
+ - 不要想象对话
300
300
 
301
- 4. Information Management
302
- - Ask user if info is insufficient
303
- - Skip unnecessary steps
304
- - Request guidance if stuck
305
- - Don't proceed with incomplete info
301
+ 4. 信息管理
302
+ - 如果信息不足,询问用户
303
+ - 跳过不必要的步骤
304
+ - 如果卡住,请求指导
305
+ - 不要在没有完整信息的情况下继续
306
306
 
307
- # 📝 String Parameter Format
308
- ALWAYS use | syntax for string parameters:
307
+ # 📝 字符串参数格式
308
+ 始终使用 | 语法表示字符串参数:
309
309
 
310
310
  <TOOL_CALL>
311
311
  name: execute_shell
@@ -314,19 +314,19 @@ arguments:
314
314
  git status --porcelain
315
315
  </TOOL_CALL>
316
316
 
317
- # 💡 Best Practices
318
- - Start execution immediately when ready
319
- - No need to ask for permission to begin
320
- - Use proper string formatting
321
- - Monitor progress and adjust
322
- - Request help when stuck
323
-
324
- # ⚠️ Common Mistakes to Avoid
325
- - Multiple tool calls at once
326
- - Missing | for string parameters
327
- - Assuming tool results
328
- - Creating fictional dialogues
329
- - Proceeding without required info
317
+ # 💡 最佳实践
318
+ - 准备好后立即开始执行
319
+ - 无需请求许可即可开始
320
+ - 使用正确的字符串格式
321
+ - 监控进度并调整
322
+ - 遇到困难时请求帮助
323
+
324
+ # ⚠️ 常见错误
325
+ - 同时调用多个工具
326
+ - 字符串参数缺少 |
327
+ - 假设工具结果
328
+ - 创建虚构对话
329
+ - 在没有所需信息的情况下继续
330
330
  """
331
331
 
332
332
  if isinstance(args, str):
@@ -354,11 +354,11 @@ arguments:
354
354
  stderr = result.get("stderr", "")
355
355
  output_parts = []
356
356
  if stdout:
357
- output_parts.append(f"Output:\n{stdout}")
357
+ output_parts.append(f"输出:\n{stdout}")
358
358
  if stderr:
359
- output_parts.append(f"Error:\n{stderr}")
359
+ output_parts.append(f"错误:\n{stderr}")
360
360
  output = "\n\n".join(output_parts)
361
- output = "no output and error" if not output else output
361
+ output = "无输出和错误" if not output else output
362
362
 
363
363
  # Process the result
364
364
  if result["success"]:
@@ -375,33 +375,33 @@ arguments:
375
375
  max_count = self.max_token_count
376
376
  if get_context_token_count(output) > max_count:
377
377
  output_to_summarize = output[-max_count:]
378
- truncation_notice = f"\n(Note: Due to the length of the output, only the last {max_count} characters are summarized)"
378
+ truncation_notice = f"\n(注意:由于输出过长,仅总结最后 {max_count} 个字符)"
379
379
  else:
380
380
  output_to_summarize = output
381
381
  truncation_notice = ""
382
382
 
383
- prompt = f"""Please summarize the execution result of the following tool, extracting key information and important results. Note:
384
- 1. Keep all important numerical values, paths, error information, etc.
385
- 2. Maintain the accuracy of the results
386
- 3. Describe the main content in concise language
387
- 4. If there is error information, ensure it is included in the summary
383
+ prompt = f"""请总结以下工具的执行结果,提取关键信息和重要结果。注意:
384
+ 1. 保留所有重要的数值、路径、错误信息等
385
+ 2. 保持结果的准确性
386
+ 3. 用简洁的语言描述主要内容
387
+ 4. 如果有错误信息,确保包含在总结中
388
388
 
389
- Tool name: {name}
390
- Execution result:
389
+ 工具名称: {name}
390
+ 执行结果:
391
391
  {output_to_summarize}
392
392
 
393
- Please provide a summary:"""
393
+ 请提供总结:"""
394
394
 
395
395
  summary = model.chat_until_success(prompt)
396
- output = f"""--- Original output is too long, here is the summary ---{truncation_notice}
396
+ output = f"""--- 原始输出过长,以下是总结 ---{truncation_notice}
397
397
 
398
398
  {summary}
399
399
 
400
- --- Summary ends ---"""
400
+ --- 总结结束 ---"""
401
401
 
402
402
  except Exception as e:
403
403
  PrettyOutput.print(f"总结失败: {str(e)}", OutputType.ERROR)
404
- output = f"Output is too long ({len(output)} characters), it is recommended to view the original output.\nPreview of the first 300 characters:\n{output[:300]}..."
404
+ output = f"输出过长 ({len(output)} 字符),建议查看原始输出。\n前300字符预览:\n{output[:300]}..."
405
405
 
406
406
  else:
407
407
  PrettyOutput.section("执行失败", OutputType.WARNING)
@@ -410,4 +410,4 @@ Please provide a summary:"""
410
410
 
411
411
  except Exception as e:
412
412
  PrettyOutput.print(f"工具执行失败:{str(e)}", OutputType.ERROR)
413
- return f"Tool call failed: {str(e)}"
413
+ return f"工具调用失败: {str(e)}"
@@ -66,21 +66,21 @@ def bing_search(query):
66
66
 
67
67
  class SearchTool:
68
68
  name = "search_web"
69
- description = "Use Bing search engine to search for information, and extract key information based on the question"
69
+ description = "使用Bing搜索引擎搜索信息,并根据问题提取关键信息"
70
70
  parameters = {
71
71
  "type": "object",
72
72
  "properties": {
73
73
  "query": {
74
74
  "type": "string",
75
- "description": "Search keywords"
75
+ "description": "搜索关键词"
76
76
  },
77
77
  "question": {
78
78
  "type": "string",
79
- "description": "Specific question to answer, used to extract relevant information from search results"
79
+ "description": "要回答的具体问题,用于从搜索结果中提取相关信息"
80
80
  },
81
81
  "max_results": {
82
82
  "type": "integer",
83
- "description": "Maximum number of search results",
83
+ "description": "最大搜索结果数量",
84
84
  "default": 3
85
85
  }
86
86
  },
@@ -293,4 +293,4 @@ def main():
293
293
  sys.exit(1)
294
294
 
295
295
  if __name__ == "__main__":
296
- main()
296
+ main()
@@ -6,7 +6,7 @@ from jarvis.jarvis_utils.output import OutputType, PrettyOutput
6
6
 
7
7
  class CodeFileSelecterTool:
8
8
  name = "select_code_files"
9
- description = "Select and manage code files for modification with interactive file selection"
9
+ description = "通过交互式文件选择工具选择和修改代码文件"
10
10
  parameters = {
11
11
  "type": "object",
12
12
  "properties": {
@@ -15,12 +15,12 @@ class CodeFileSelecterTool:
15
15
  "items": {
16
16
  "type": "string",
17
17
  },
18
- "description": "List of initially related files",
18
+ "description": "初始相关的文件列表",
19
19
  "default": []
20
20
  },
21
21
  "root_dir": {
22
22
  "type": "string",
23
- "description": "Root directory of the codebase",
23
+ "description": "代码库的根目录",
24
24
  "default": "."
25
25
  }
26
26
  },