jarvis-ai-assistant 0.1.92__tar.gz → 0.1.93__tar.gz

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 (54) hide show
  1. {jarvis_ai_assistant-0.1.92/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.93}/PKG-INFO +1 -1
  2. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/pyproject.toml +2 -1
  3. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/setup.py +2 -1
  4. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/__init__.py +1 -1
  5. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/agent.py +4 -4
  6. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/jarvis_codebase/main.py +7 -13
  7. jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_coder/git_utils.py +64 -0
  8. jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_coder/main.py +630 -0
  9. jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_coder/patch_handler.py +493 -0
  10. jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_coder/plan_generator.py +75 -0
  11. jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  12. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/main.py +1 -1
  13. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/ai8.py +4 -3
  14. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/openai.py +2 -2
  15. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/oyi.py +13 -13
  16. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/ask_user.py +1 -2
  17. jarvis_ai_assistant-0.1.93/src/jarvis/tools/coder.py +69 -0
  18. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/utils.py +25 -1
  19. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93/src/jarvis_ai_assistant.egg-info}/PKG-INFO +1 -1
  20. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +6 -0
  21. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis_ai_assistant.egg-info/entry_points.txt +1 -0
  22. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/LICENSE +0 -0
  23. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/MANIFEST.in +0 -0
  24. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/README.md +0 -0
  25. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/setup.cfg +0 -0
  26. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/jarvis_codebase/__init__.py +0 -0
  27. {jarvis_ai_assistant-0.1.92/src/jarvis/jarvis_platform → jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_coder}/__init__.py +0 -0
  28. {jarvis_ai_assistant-0.1.92/src/jarvis/jarvis_rag → jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_platform}/__init__.py +0 -0
  29. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/jarvis_platform/main.py +0 -0
  30. {jarvis_ai_assistant-0.1.92/src/jarvis/jarvis_smart_shell → jarvis_ai_assistant-0.1.93/src/jarvis/jarvis_rag}/__init__.py +0 -0
  31. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/jarvis_rag/main.py +0 -0
  32. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/jarvis_smart_shell/main.py +0 -0
  33. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/__init__.py +0 -0
  34. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/base.py +0 -0
  35. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/kimi.py +0 -0
  36. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/ollama.py +0 -0
  37. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/models/registry.py +0 -0
  38. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/__init__.py +0 -0
  39. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/base.py +0 -0
  40. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/chdir.py +0 -0
  41. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/codebase_qa.py +0 -0
  42. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/file_ops.py +0 -0
  43. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/generator.py +0 -0
  44. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/methodology.py +0 -0
  45. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/rag.py +0 -0
  46. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/registry.py +0 -0
  47. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/search.py +0 -0
  48. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/shell.py +0 -0
  49. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/sub_agent.py +0 -0
  50. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/thinker.py +0 -0
  51. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis/tools/webpage.py +0 -0
  52. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  53. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -0
  54. {jarvis_ai_assistant-0.1.92 → jarvis_ai_assistant-0.1.93}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.92
3
+ Version: 0.1.93
4
4
  Summary: Jarvis: An AI assistant that uses tools to interact with the system
5
5
  Home-page: https://github.com/skyfireitdiy/Jarvis
6
6
  Author: skyfire
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jarvis-ai-assistant"
7
- version = "0.1.92"
7
+ version = "0.1.93"
8
8
  description = "Jarvis: An AI assistant that uses tools to interact with the system"
9
9
  readme = "README.md"
10
10
  authors = [{ name = "Your Name", email = "your.email@example.com" }]
@@ -48,6 +48,7 @@ Homepage = "https://github.com/skyfireitdiy/Jarvis"
48
48
 
49
49
  [project.scripts]
50
50
  jarvis = "jarvis.main:main"
51
+ jarvis-coder = "jarvis.jarvis_coder.main:main"
51
52
  jarvis-codebase = "jarvis.jarvis_codebase.main:main"
52
53
  jarvis-rag = "jarvis.jarvis_rag.main:main"
53
54
  jarvis-smart-shell = "jarvis.jarvis_smart_shell.main:main"
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="jarvis-ai-assistant",
5
- version="0.1.92",
5
+ version="0.1.93",
6
6
  author="skyfire",
7
7
  author_email="skyfireitdiy@hotmail.com",
8
8
  description="An AI assistant that uses various tools to interact with the system",
@@ -33,6 +33,7 @@ setup(
33
33
  entry_points={
34
34
  "console_scripts": [
35
35
  "jarvis=jarvis.main:main",
36
+ "jarvis-coder=jarvis.jarvis_coder.main:main",
36
37
  "jarvis-codebase=jarvis.jarvis_codebase.main:main",
37
38
  "jarvis-rag=jarvis.jarvis_rag.main:main",
38
39
  "jarvis-smart-shell=jarvis.jarvis_smart_shell.main:main",
@@ -1,3 +1,3 @@
1
1
  """Jarvis AI Assistant"""
2
2
 
3
- __version__ = "0.1.92"
3
+ __version__ = "0.1.93"
@@ -140,7 +140,7 @@ class Agent:
140
140
 
141
141
  def _load_methodology(self, user_input: str) -> Dict[str, str]:
142
142
  """加载方法论并构建向量索引"""
143
- PrettyOutput.print("加载方法论...", OutputType.PLANNING)
143
+ PrettyOutput.print("加载方法论...", OutputType.PROGRESS)
144
144
  user_jarvis_methodology = os.path.expanduser("~/.jarvis_methodology")
145
145
  if not os.path.exists(user_jarvis_methodology):
146
146
  return {}
@@ -165,13 +165,13 @@ class Agent:
165
165
 
166
166
  if vectors:
167
167
  vectors_array = np.vstack(vectors)
168
- self.methodology_index.add_with_ids(vectors_array, np.array(ids))
168
+ self.methodology_index.add_with_ids(vectors_array, np.array(ids)) # type: ignore
169
169
  query_embedding = self._create_methodology_embedding(user_input)
170
170
  k = min(5, len(self.methodology_data))
171
171
  PrettyOutput.print(f"检索方法论...", OutputType.INFO)
172
172
  distances, indices = self.methodology_index.search(
173
173
  query_embedding.reshape(1, -1), k
174
- )
174
+ ) # type: ignore
175
175
 
176
176
  relevant_methodologies = {}
177
177
  for dist, idx in zip(distances[0], indices[0]):
@@ -208,7 +208,7 @@ class Agent:
208
208
  """
209
209
  # 创建一个新的模型实例来做总结,避免影响主对话
210
210
 
211
- PrettyOutput.print("总结对话历史,准备生成总结,开始新的对话...", OutputType.PLANNING)
211
+ PrettyOutput.print("总结对话历史,准备生成总结,开始新的对话...", OutputType.PROGRESS)
212
212
 
213
213
  prompt = """请总结之前对话中的关键信息,包括:
214
214
  1. 当前任务目标
@@ -93,16 +93,10 @@ class CodeBase:
93
93
  model = PlatformRegistry.get_global_platform_registry().get_cheap_platform()
94
94
  model.set_suppress_output(True)
95
95
  prompt = f"""请分析以下代码文件,并生成一个详细的描述。描述应该包含以下要点:
96
+ 1. 整个文件的功能描述,不超过100个字
97
+ 2. 每个全局变量的函数、类型定义、类、方法等代码元素的一句话描述,不超过50字
96
98
 
97
- 1. 主要功能和用途
98
- 2. 关键类和方法的作用
99
- 3. 重要的依赖和技术特征(如使用了什么框架、算法、设计模式等)
100
- 4. 代码处理的主要数据类型和数据结构
101
- 5. 关键业务逻辑和处理流程
102
- 6. 特殊功能点和亮点特性
103
-
104
- 请用简洁专业的语言描述,突出代码的技术特征和功能特点,以便后续进行关联代码检索。
105
-
99
+ 请用简洁专业的语言描述,突出代码的技术功能,以便后续进行关联代码检索。
106
100
  文件路径:{file_path}
107
101
  代码内容:
108
102
  {content}
@@ -210,7 +204,7 @@ class CodeBase:
210
204
  except Exception as e:
211
205
  PrettyOutput.print(f"Error vectorizing file {file_path}: {str(e)}",
212
206
  output_type=OutputType.ERROR)
213
- return np.zeros(self.vector_dim, dtype=np.float32)
207
+ return np.zeros(self.vector_dim, dtype=np.float32) # type: ignore
214
208
 
215
209
  def clean_cache(self) -> bool:
216
210
  """清理过期的缓存记录,返回是否有文件被删除"""
@@ -296,7 +290,7 @@ class CodeBase:
296
290
 
297
291
  if vectors:
298
292
  vectors = np.vstack(vectors)
299
- self.index.add_with_ids(vectors, np.array(ids))
293
+ self.index.add_with_ids(vectors, np.array(ids)) # type: ignore
300
294
  else:
301
295
  self.index = None
302
296
 
@@ -563,7 +557,7 @@ class CodeBase:
563
557
  query_vector = self.get_embedding(query)
564
558
  query_vector = query_vector.reshape(1, -1)
565
559
 
566
- distances, indices = self.index.search(query_vector, top_k)
560
+ distances, indices = self.index.search(query_vector, top_k) # type: ignore
567
561
 
568
562
  for i, distance in zip(indices[0], distances[0]):
569
563
  if i == -1:
@@ -717,4 +711,4 @@ def main():
717
711
 
718
712
 
719
713
  if __name__ == "__main__":
720
- exit(main())
714
+ exit(main())
@@ -0,0 +1,64 @@
1
+ import os
2
+ from typing import List
3
+ import yaml
4
+ import time
5
+ from jarvis.utils import OutputType, PrettyOutput, while_success
6
+ from jarvis.models.registry import PlatformRegistry
7
+
8
+ def has_uncommitted_files() -> bool:
9
+ """判断代码库是否有未提交的文件"""
10
+ # 获取未暂存的修改
11
+ unstaged = os.popen("git diff --name-only").read()
12
+ # 获取已暂存但未提交的修改
13
+ staged = os.popen("git diff --cached --name-only").read()
14
+ # 获取未跟踪的文件
15
+ untracked = os.popen("git ls-files --others --exclude-standard").read()
16
+
17
+ return bool(unstaged or staged or untracked)
18
+
19
+ def generate_commit_message(git_diff: str, feature: str) -> str:
20
+ """根据git diff和功能描述生成commit信息"""
21
+ prompt = f"""你是一个经验丰富的程序员,请根据以下代码变更和功能描述生成简洁明了的commit信息:
22
+
23
+ 功能描述:
24
+ {feature}
25
+
26
+ 代码变更:
27
+ Git Diff:
28
+ {git_diff}
29
+
30
+ 请遵循以下规则:
31
+ 1. 使用英文编写
32
+ 2. 采用常规的commit message格式:<type>(<scope>): <subject>
33
+ 3. 保持简洁,不超过50个字符
34
+ 4. 准确描述代码变更的主要内容
35
+ 5. 优先考虑功能描述和git diff中的变更内容
36
+ 6. 仅生成commit信息的文本,不要输出任何其他内容
37
+ """
38
+
39
+ model = PlatformRegistry().get_global_platform_registry().get_codegen_platform()
40
+ response = while_success(lambda: model.chat(prompt), 5)
41
+
42
+ return response.strip().split("\n")[0]
43
+
44
+ def save_edit_record(record_dir: str, commit_message: str, git_diff: str) -> None:
45
+ """保存代码修改记录"""
46
+ # 获取下一个序号
47
+ existing_records = [f for f in os.listdir(record_dir) if f.endswith('.yaml')]
48
+ next_num = 1
49
+ if existing_records:
50
+ last_num = max(int(f[:4]) for f in existing_records)
51
+ next_num = last_num + 1
52
+
53
+ # 创建记录文件
54
+ record = {
55
+ "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
56
+ "commit_message": commit_message,
57
+ "git_diff": git_diff
58
+ }
59
+
60
+ record_path = os.path.join(record_dir, f"{next_num:04d}.yaml")
61
+ with open(record_path, "w", encoding="utf-8") as f:
62
+ yaml.safe_dump(record, f, allow_unicode=True)
63
+
64
+ PrettyOutput.print(f"已保存修改记录: {record_path}", OutputType.SUCCESS)