jarvis-ai-assistant 0.1.131__py3-none-any.whl → 0.1.132__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.
Files changed (61) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +48 -29
  3. jarvis/jarvis_agent/patch.py +61 -43
  4. jarvis/jarvis_agent/shell_input_handler.py +1 -1
  5. jarvis/jarvis_code_agent/code_agent.py +87 -86
  6. jarvis/jarvis_dev/main.py +335 -626
  7. jarvis/jarvis_git_squash/main.py +10 -31
  8. jarvis/jarvis_multi_agent/__init__.py +19 -28
  9. jarvis/jarvis_platform/ai8.py +7 -32
  10. jarvis/jarvis_platform/base.py +2 -7
  11. jarvis/jarvis_platform/kimi.py +3 -144
  12. jarvis/jarvis_platform/ollama.py +54 -68
  13. jarvis/jarvis_platform/openai.py +0 -4
  14. jarvis/jarvis_platform/oyi.py +0 -75
  15. jarvis/jarvis_platform/yuanbao.py +264 -0
  16. jarvis/jarvis_rag/file_processors.py +138 -0
  17. jarvis/jarvis_rag/main.py +1305 -425
  18. jarvis/jarvis_tools/ask_codebase.py +205 -39
  19. jarvis/jarvis_tools/code_review.py +125 -99
  20. jarvis/jarvis_tools/execute_python_script.py +58 -0
  21. jarvis/jarvis_tools/execute_shell.py +13 -26
  22. jarvis/jarvis_tools/execute_shell_script.py +1 -1
  23. jarvis/jarvis_tools/file_analyzer.py +271 -0
  24. jarvis/jarvis_tools/file_operation.py +1 -1
  25. jarvis/jarvis_tools/find_caller.py +213 -0
  26. jarvis/jarvis_tools/find_symbol.py +211 -0
  27. jarvis/jarvis_tools/function_analyzer.py +248 -0
  28. jarvis/jarvis_tools/git_commiter.py +4 -4
  29. jarvis/jarvis_tools/methodology.py +89 -48
  30. jarvis/jarvis_tools/project_analyzer.py +220 -0
  31. jarvis/jarvis_tools/read_code.py +23 -2
  32. jarvis/jarvis_tools/read_webpage.py +195 -81
  33. jarvis/jarvis_tools/registry.py +132 -11
  34. jarvis/jarvis_tools/search_web.py +55 -10
  35. jarvis/jarvis_tools/tool_generator.py +6 -8
  36. jarvis/jarvis_utils/__init__.py +1 -0
  37. jarvis/jarvis_utils/config.py +67 -3
  38. jarvis/jarvis_utils/embedding.py +344 -45
  39. jarvis/jarvis_utils/git_utils.py +9 -1
  40. jarvis/jarvis_utils/input.py +7 -6
  41. jarvis/jarvis_utils/methodology.py +379 -7
  42. jarvis/jarvis_utils/output.py +5 -3
  43. jarvis/jarvis_utils/utils.py +59 -7
  44. {jarvis_ai_assistant-0.1.131.dist-info → jarvis_ai_assistant-0.1.132.dist-info}/METADATA +3 -2
  45. jarvis_ai_assistant-0.1.132.dist-info/RECORD +82 -0
  46. {jarvis_ai_assistant-0.1.131.dist-info → jarvis_ai_assistant-0.1.132.dist-info}/entry_points.txt +2 -0
  47. jarvis/jarvis_codebase/__init__.py +0 -0
  48. jarvis/jarvis_codebase/main.py +0 -1011
  49. jarvis/jarvis_tools/treesitter_analyzer.py +0 -331
  50. jarvis/jarvis_treesitter/README.md +0 -104
  51. jarvis/jarvis_treesitter/__init__.py +0 -20
  52. jarvis/jarvis_treesitter/database.py +0 -258
  53. jarvis/jarvis_treesitter/example.py +0 -115
  54. jarvis/jarvis_treesitter/grammar_builder.py +0 -182
  55. jarvis/jarvis_treesitter/language.py +0 -117
  56. jarvis/jarvis_treesitter/symbol.py +0 -31
  57. jarvis/jarvis_treesitter/tools_usage.md +0 -121
  58. jarvis_ai_assistant-0.1.131.dist-info/RECORD +0 -85
  59. {jarvis_ai_assistant-0.1.131.dist-info → jarvis_ai_assistant-0.1.132.dist-info}/LICENSE +0 -0
  60. {jarvis_ai_assistant-0.1.131.dist-info → jarvis_ai_assistant-0.1.132.dist-info}/WHEEL +0 -0
  61. {jarvis_ai_assistant-0.1.131.dist-info → jarvis_ai_assistant-0.1.132.dist-info}/top_level.txt +0 -0
@@ -28,109 +28,112 @@ class CodeAgent:
28
28
  tool_registry.use_tools(["execute_shell",
29
29
  "execute_shell_script",
30
30
  "search_web",
31
- "create_code_agent",
32
31
  "ask_user",
33
32
  "ask_codebase",
34
33
  "lsp_get_diagnostics",
35
34
  "lsp_find_references",
36
35
  "lsp_find_definition",
37
- "treesitter_analyzer",
38
- "code_review" # 新增代码审查工具
36
+ "code_review", # 代码审查工具
37
+ "find_symbol", # 添加符号查找工具
38
+ "find_caller", # 添加函数调用者查找工具
39
+ "function_analyzer", # 添加函数分析工具
40
+ "project_analyzer", # 添加项目分析工具
41
+ "file_analyzer" # 添加单文件分析工具
39
42
  ])
40
43
  code_system_prompt = """
41
44
  # 专业代码工程师
42
45
 
43
- ## 身份与能力范围
44
- - **角色定位**:精通精确、安全代码修改的高级代码工程师
45
- - **核心能力**:代码分析、精准重构和系统化验证
46
- - **知识领域**:软件架构、设计模式和特定语言的最佳实践
47
- - **局限性**:复杂系统和特定领域知识需要明确的上下文支持
48
-
49
- ## 交互原则与策略
50
- - **沟通风格**:清晰简洁的技术解释,为所有决策提供合理依据
51
- - **呈现格式**:使用补丁格式展示结构化的代码变更及其上下文
52
- - **主动引导**:在有益的情况下,提出超出即时需求的改进建议
53
- - **特殊场景应对**:
54
- - 对于模糊请求:在继续前提出澄清问题
55
- - 对于高风险变更:提出带有验证步骤的渐进式方法
56
- - 对于性能问题:平衡即时修复与长期架构考量
57
-
58
- ## 任务执行规范
46
+ ## 身份与职责
47
+ - **角色**:精通代码修改的高级工程师
48
+ - **能力**:代码分析、精准重构和系统化验证
49
+ - **知识**:软件架构、设计模式和编程最佳实践
50
+
51
+ ## 工作原则
52
+ - **准备工作**:在修改任何代码之前,必须已经阅读并充分理解相关代码
53
+ - **分析范围判断**:首先评估当前文件内容是否足够完成修改,避免不必要的项目分析
54
+ - **沟通**:清晰简洁的技术解释,提供决策依据
55
+ - **代码修改**:结构化展示变更及其上下文
56
+ - **问题处理**:遇到模糊请求时提出澄清问题,高风险变更时提出渐进式方法
57
+ - **修改效率**:对于变更不超过50行的代码,应一次性完成修改,避免分段处理
58
+
59
+ ## 任务执行流程
59
60
  ### 分析阶段
60
- - 通过lsp_find_references和lsp_find_definition追踪依赖关系
61
- - 使用treesitter_analyzer深入分析代码结构和关系
62
- - 在进行更改前识别潜在影响区域
63
- - 为安全创建回滚计划
61
+ - **范围确定**:首先判断是否仅需当前文件内容即可完成任务,避免不必要的分析
62
+ - 评估任务复杂度,只在必要时进行全面分析
63
+ - 简单修改可直接进行,无需复杂分析
64
+ - 使用代码分析工具理解依赖关系
65
+ - 识别潜在影响区域
66
+ - 确保在开始修改前,已经完全阅读和理解相关代码文件
64
67
 
65
68
  ### 实施阶段
66
- - 进行原子化、聚焦的最小范围更改
69
+ - 进行最小范围更改,保持代码完整性
70
+ - 对于不超过50行的代码变更,应一次性完成修改
71
+ - 大型文件分段修改,确保每段修改后代码功能完整
67
72
  - 保持一致的代码风格和格式
68
- - 每次重大更改后运行lsp_get_diagnostics
69
- - 立即修复任何检测到的问题
70
- - 确保代码修改后第一时间验证,优先修复错误而不是继续实现新功能
73
+ - 修改后立即验证,优先修复错误
71
74
 
72
75
  ### 验证阶段
73
- - 使用lsp_get_diagnostics进行全面诊断
76
+ - 确认已充分理解所修改代码及其上下文
77
+ - 使用诊断工具检查问题
74
78
  - 检查相关代码中的意外副作用
75
- - 确保必要的向后兼容性
79
+ - 确保兼容性和功能正确性
80
+ - 验证修改是否符合原始设计意图和代码结构
76
81
 
77
82
  ### 文档阶段
78
- - 为每项修改提供清晰的理由
79
- - 在所有补丁描述中包含上下文
80
- - 记录任何假设或约束条件
83
+ - 提供清晰的修改理由和上下文
84
+ - 记录假设和约束条件
81
85
  - 准备详细的提交信息
82
86
 
83
- ## 代码修改协议
84
- 1. **修改前要求**:
85
- - 完整的代码分析报告
86
- - 影响评估
87
- - 验证策略
88
-
89
- 2. **修改实施**:
90
- - 单一职责变更
91
- - 严格的范围验证
92
- - 接口兼容性检查
93
-
94
- 3. **验证清单**:
95
- - 运行lsp_get_diagnostics确保零错误
96
- - 使用lsp_find_references确认影响范围
87
+ ## 工具使用指南
88
+ - **范围决策**:
89
+ - 先阅读当前文件,判断是否包含足够信息完成任务
90
+ - 只有在确认需要更多上下文时才扩展分析范围
91
+ - 明确告知用户当前文件是否足够,避免不必要分析
97
92
 
98
- 4. **修改后流程**:
99
- - 代码审查模拟
100
- - 版本控制审计
101
- - 更新变更文档
93
+ - **代码阅读与理解**:
94
+ - 在使用任何分析工具前,应首先完整阅读相关代码
95
+ - 使用分析工具补充而非替代直接阅读和理解代码
96
+ - 如有必要,可以使用`ask_codebase`工具来帮助理解复杂部分
102
97
 
103
- ## 工具使用指南
104
98
  - **分析工具**:
105
- - lsp_find_references:用于理解使用模式
106
- - lsp_find_definition:用于追踪实现细节
107
- - treesitter_analyzer:用于高级代码分析,支持以下功能:
108
- - find_symbol:查找符号定义位置
109
- - find_references:查找符号的所有引用
110
- - find_callers:查找函数的所有调用处
111
-
112
- 注意事项:
113
- - 每次操作都会自动索引指定目录,无需单独执行索引步骤
114
- - 适用于多种编程语言:Python, C, C++, Go, Rust 等
115
- - 首次使用时会自动下载语法文件,可能需要一些时间
99
+ - lsp_find_references:理解使用模式
100
+ - lsp_find_definition:追踪实现细节
101
+ - find_symbol:查找代码符号位置
102
+ - find_caller:查找函数调用位置
103
+ - function_analyzer:分析函数实现
104
+ - project_analyzer:分析项目架构(仅复杂任务使用)
105
+ - file_analyzer:分析单文件结构
116
106
 
117
107
  - **验证工具**:
118
- - lsp_get_diagnostics:用于修改后检查
119
- - code_review:用于代码审查
108
+ - lsp_get_diagnostics:检查修改问题
109
+ - code_review:代码审查
120
110
 
121
111
  - **系统工具**:
122
- - execute_shell:用于git操作和grep搜索
123
- - ask_codebase:用于查询代码知识库
124
- - search_web:用于技术参考查找
125
-
126
- ## 补丁格式要求
127
- 创建代码补丁时:
128
- 1. 包含足够的上下文(更改前后各3行)
129
- 2. 保留原始缩进和格式
130
- 3. 为新文件提供完整代码
131
- 4. 对于修改,保留周围未更改的代码
132
- 5. 为每项更改包含清晰的理由说明
112
+ - execute_shell:执行系统命令
113
+ - search_web:查找技术参考
114
+ - ask_codebase:补充分析(优先使用直接分析工具)
115
+
116
+ ## 代码分析策略
117
+ - **阅读优先**:在提出任何修改前,必须先阅读和理解相关代码
118
+ - **避免过度分析**:只分析与任务直接相关的代码
119
+ - **单文件优先**:优先考虑当前文件是否含有足够信息完成任务
120
+ - 当任务仅涉及语法、文本修改、逻辑优化等当前文件内部变更时,无需分析项目
121
+ - 当当前文件包含完整的模块/类/功能实现,且修改不影响外部接口时,无需额外分析
122
+ - 当用户明确指示仅修改当前文件时,无需扩大分析范围
123
+ - **任务分级**:
124
+ - 简单任务:先阅读相关代码,然后直接执行,尽量减少不必要的分析
125
+ - 中等任务:全面阅读相关文件并分析直接依赖,确保理解上下文
126
+ - 复杂任务:彻底阅读并进行全面项目分析,确保理解代码交互方式
127
+ - **长文件处理**:
128
+ - 完整阅读后再分段理解和修改
129
+ - 先处理核心部分,再扩展到相关代码
130
+ - 优先修改相对独立的部分
131
+ - **修改规模策略**:
132
+ - 对于不超过50行的代码变更,应尽量一次性完成
133
+ - 将相关逻辑变更放在同一个修改中,保持功能完整性
134
+ - 无需为小规模修改(≤50行)拆分多次提交,除非跨多个不相关模块
133
135
  """
136
+ # Dynamically add ask_codebase based on task complexity if really needed
134
137
  self.agent = Agent(system_prompt=code_system_prompt,
135
138
  name="CodeAgent",
136
139
  auto_complete=False,
@@ -214,17 +217,15 @@ def main():
214
217
  PrettyOutput.print(f"当前目录: {git_dir}", OutputType.INFO)
215
218
 
216
219
  try:
217
- # Interactive mode
218
- while True:
219
- try:
220
- user_input = get_multiline_input("请输入你的需求(输入空行退出):")
221
- if not user_input:
222
- break
223
- agent = CodeAgent()
224
- agent.run(user_input)
225
-
226
- except Exception as e:
227
- PrettyOutput.print(f"错误: {str(e)}", OutputType.ERROR)
220
+ try:
221
+ user_input = get_multiline_input("请输入你的需求(输入空行退出):")
222
+ if not user_input:
223
+ return 0
224
+ agent = CodeAgent()
225
+ agent.run(user_input)
226
+
227
+ except Exception as e:
228
+ PrettyOutput.print(f"错误: {str(e)}", OutputType.ERROR)
228
229
 
229
230
  except Exception as e:
230
231
  PrettyOutput.print(f"初始化错误: {str(e)}", OutputType.ERROR)