jarvis-ai-assistant 0.1.148__tar.gz → 0.1.149__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 (101) hide show
  1. {jarvis_ai_assistant-0.1.148/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.149}/PKG-INFO +24 -27
  2. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/README.md +6 -0
  3. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/pyproject.toml +18 -27
  4. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/setup.py +18 -27
  5. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/__init__.py +1 -1
  6. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/main.py +0 -1
  7. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/patch.py +42 -7
  8. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/code_review.py +0 -1
  9. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_utils/git_commiter.py +0 -1
  10. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/base.py +1 -1
  11. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/cpp.py +1 -1
  12. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/go.py +1 -1
  13. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/python.py +1 -1
  14. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/rust.py +1 -1
  15. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/base.py +1 -1
  16. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/kimi.py +0 -1
  17. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/code_plan.py +0 -1
  18. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/file_analyzer.py +1 -1
  19. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/read_code.py +0 -1
  20. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/search_web.py +0 -1
  21. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/embedding.py +2 -6
  22. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/git_utils.py +19 -8
  23. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/output.py +0 -1
  24. jarvis_ai_assistant-0.1.149/src/jarvis/jarvis_utils/utils.py +154 -0
  25. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149/src/jarvis_ai_assistant.egg-info}/PKG-INFO +24 -27
  26. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -1
  27. jarvis_ai_assistant-0.1.149/src/jarvis_ai_assistant.egg-info/requires.txt +23 -0
  28. jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_platform_manager/openai_test.py +0 -138
  29. jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_utils/utils.py +0 -352
  30. jarvis_ai_assistant-0.1.148/src/jarvis_ai_assistant.egg-info/requires.txt +0 -32
  31. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/LICENSE +0 -0
  32. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/MANIFEST.in +0 -0
  33. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/setup.cfg +0 -0
  34. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/__init__.py +0 -0
  35. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
  36. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/file_input_handler.py +0 -0
  37. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/jarvis.py +0 -0
  38. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  39. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  40. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  41. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_agent/code_agent.py +0 -0
  42. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  43. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  44. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  45. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  46. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  47. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  48. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  49. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  50. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  51. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  52. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  53. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  54. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  55. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  56. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  57. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  58. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  59. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  60. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  61. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  62. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_dev/main.py +0 -0
  63. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_details/__init__.py +0 -0
  64. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_details/main.py +0 -0
  65. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
  66. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_squash/main.py +0 -0
  67. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/registry.py +0 -0
  68. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_methodology/main.py +0 -0
  69. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
  70. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_multi_agent/main.py +0 -0
  71. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/__init__.py +0 -0
  72. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/registry.py +0 -0
  73. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/yuanbao.py +0 -0
  74. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
  75. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform_manager/main.py +0 -0
  76. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  77. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_smart_shell/main.py +0 -0
  78. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/__init__.py +0 -0
  79. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/ask_codebase.py +0 -0
  80. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  81. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/base.py +0 -0
  82. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/chdir.py +0 -0
  83. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
  84. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
  85. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/execute_script.py +0 -0
  86. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/file_operation.py +0 -0
  87. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
  88. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
  89. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/methodology.py +0 -0
  90. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
  91. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/registry.py +0 -0
  92. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
  93. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/__init__.py +0 -0
  94. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/config.py +0 -0
  95. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/file_processors.py +0 -0
  96. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/globals.py +0 -0
  97. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/input.py +0 -0
  98. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/methodology.py +0 -0
  99. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  100. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
  101. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.148
3
+ Version: 0.1.149
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
@@ -40,32 +40,23 @@ Classifier: Programming Language :: Python :: 3.11
40
40
  Requires-Python: >=3.8
41
41
  Description-Content-Type: text/markdown
42
42
  License-File: LICENSE
43
- Requires-Dist: requests>=2.25.1
44
- Requires-Dist: pyyaml>=5.1
45
- Requires-Dist: colorama>=0.4.6
46
- Requires-Dist: prompt_toolkit>=3.0.0
47
- Requires-Dist: openai>=1.20.0
48
- Requires-Dist: numpy>=1.19.5
49
- Requires-Dist: faiss-cpu>=1.8.0
50
- Requires-Dist: sentence-transformers>=2.2.2
51
- Requires-Dist: bs4>=0.0.1
52
- Requires-Dist: PyMuPDF>=1.21.0
53
- Requires-Dist: python-docx>=0.8.11
54
- Requires-Dist: tiktoken>=0.3.0
55
- Requires-Dist: tqdm>=4.65.0
56
- Requires-Dist: docx>=0.2.4
57
- Requires-Dist: yaspin>=2.4.0
58
- Requires-Dist: rich>=13.3.1
59
- Requires-Dist: pygments>=2.15.0
60
- Requires-Dist: fuzzywuzzy>=0.18.0
61
- Requires-Dist: python-Levenshtein>=0.25.0
62
- Requires-Dist: jedi>=0.17.2
63
- Requires-Dist: psutil>=7.0.0
64
- Requires-Dist: fastapi>=0.115.4
65
- Requires-Dist: uvicorn>=0.33.0
66
- Requires-Dist: python-pptx>=1.0.0
67
- Requires-Dist: pandas>=2.0.0
68
- Requires-Dist: html2text>=2024.2.26
43
+ Requires-Dist: requests==2.32.3
44
+ Requires-Dist: colorama==0.4.6
45
+ Requires-Dist: prompt_toolkit==3.0.50
46
+ Requires-Dist: PyMuPDF==1.24.11
47
+ Requires-Dist: yaspin==2.4.0
48
+ Requires-Dist: pygments==2.19.1
49
+ Requires-Dist: fuzzywuzzy==0.18.0
50
+ Requires-Dist: jedi==0.19.2
51
+ Requires-Dist: fastapi==0.115.12
52
+ Requires-Dist: uvicorn==0.33.0
53
+ Requires-Dist: pandas==2.0.3
54
+ Requires-Dist: rich==14.0.0
55
+ Requires-Dist: transformers==4.46.3
56
+ Requires-Dist: python-docx==1.1.2
57
+ Requires-Dist: python-pptx==1.0.2
58
+ Requires-Dist: torch==2.4.1
59
+ Requires-Dist: python-Levenshtein==0.25.1
69
60
  Provides-Extra: dev
70
61
  Requires-Dist: pytest; extra == "dev"
71
62
  Requires-Dist: black; extra == "dev"
@@ -82,6 +73,7 @@ Requires-Dist: mypy; extra == "dev"
82
73
 
83
74
  *您的智能开发和系统交互助手*
84
75
 
76
+ [视频介绍](#video-introduction) •
85
77
  [快速开始](#quick-start) •
86
78
  [配置说明](#configuration) •
87
79
  [工具说明](#tools) •
@@ -92,6 +84,11 @@ Requires-Dist: mypy; extra == "dev"
92
84
 
93
85
  ---
94
86
 
87
+ ## 📺 视频介绍<a id="video-introduction"></a>
88
+
89
+ [![视频介绍](docs/images/intro.png)](https://player.bilibili.com/player.html?isOutside=true&aid=114306578382907&bvid=BV1x2dAYeEpM&cid=29314583629&p=1)
90
+
91
+
95
92
  ## 🚀 快速开始 <a id="quick-start"></a>
96
93
  ### 安装
97
94
  ```bash
@@ -8,6 +8,7 @@
8
8
 
9
9
  *您的智能开发和系统交互助手*
10
10
 
11
+ [视频介绍](#video-introduction) •
11
12
  [快速开始](#quick-start) •
12
13
  [配置说明](#configuration) •
13
14
  [工具说明](#tools) •
@@ -18,6 +19,11 @@
18
19
 
19
20
  ---
20
21
 
22
+ ## 📺 视频介绍<a id="video-introduction"></a>
23
+
24
+ [![视频介绍](docs/images/intro.png)](https://player.bilibili.com/player.html?isOutside=true&aid=114306578382907&bvid=BV1x2dAYeEpM&cid=29314583629&p=1)
25
+
26
+
21
27
  ## 🚀 快速开始 <a id="quick-start"></a>
22
28
  ### 安装
23
29
  ```bash
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jarvis-ai-assistant"
7
- version = "0.1.148"
7
+ version = "0.1.149"
8
8
  description = "Jarvis: An AI assistant that uses tools to interact with the system"
9
9
  readme = "README.md"
10
10
  authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
@@ -22,32 +22,23 @@ classifiers = [
22
22
  ]
23
23
  keywords = ["jarvis", "ai", "assistant", "tools", "automation"]
24
24
  dependencies = [
25
- "requests>=2.25.1",
26
- "pyyaml>=5.1",
27
- "colorama>=0.4.6",
28
- "prompt_toolkit>=3.0.0",
29
- "openai>=1.20.0",
30
- "numpy>=1.19.5",
31
- "faiss-cpu>=1.8.0",
32
- "sentence-transformers>=2.2.2",
33
- "bs4>=0.0.1",
34
- "PyMuPDF>=1.21.0",
35
- "python-docx>=0.8.11",
36
- "tiktoken>=0.3.0",
37
- "tqdm>=4.65.0",
38
- "docx>=0.2.4",
39
- "yaspin>=2.4.0",
40
- "rich>=13.3.1",
41
- "pygments>=2.15.0",
42
- "fuzzywuzzy>=0.18.0",
43
- "python-Levenshtein>=0.25.0",
44
- "jedi>=0.17.2",
45
- "psutil>=7.0.0",
46
- "fastapi>=0.115.4",
47
- "uvicorn>=0.33.0",
48
- "python-pptx>=1.0.0",
49
- "pandas>=2.0.0",
50
- "html2text>=2024.2.26",
25
+ "requests==2.32.3",
26
+ "colorama==0.4.6",
27
+ "prompt_toolkit==3.0.50",
28
+ "PyMuPDF==1.24.11",
29
+ "yaspin==2.4.0",
30
+ "pygments==2.19.1",
31
+ "fuzzywuzzy==0.18.0",
32
+ "jedi==0.19.2",
33
+ "fastapi==0.115.12",
34
+ "uvicorn==0.33.0",
35
+ "pandas==2.0.3",
36
+ "rich==14.0.0",
37
+ "transformers==4.46.3",
38
+ "python-docx==1.1.2",
39
+ "python-pptx==1.0.2",
40
+ "torch==2.4.1",
41
+ "python-Levenshtein==0.25.1",
51
42
  ]
52
43
  requires-python = ">=3.8"
53
44
 
@@ -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.148",
5
+ version="0.1.149",
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",
@@ -13,32 +13,23 @@ setup(
13
13
  package_dir={"": "src"},
14
14
  include_package_data=True,
15
15
  install_requires=[
16
- "requests>=2.25.1",
17
- "pyyaml>=5.1",
18
- "colorama>=0.4.6",
19
- "prompt_toolkit>=3.0.0",
20
- "openai>=1.20.0",
21
- "numpy>=1.19.5",
22
- "faiss-cpu>=1.8.0",
23
- "sentence-transformers>=2.2.2",
24
- "bs4>=0.0.1",
25
- "PyMuPDF>=1.21.0",
26
- "python-docx>=0.8.11",
27
- "tiktoken>=0.3.0",
28
- "tqdm>=4.65.0",
29
- "docx>=0.2.4",
30
- "yaspin>=2.4.0",
31
- "rich>=13.3.1",
32
- "pygments>=2.15.0",
33
- "fuzzywuzzy>=0.18.0",
34
- "python-Levenshtein>=0.25.0",
35
- "jedi>=0.17.2",
36
- "psutil>=7.0.0",
37
- "fastapi>=0.115.4",
38
- "uvicorn>=0.33.0",
39
- "python-pptx>=1.0.0",
40
- "pandas>=2.0.0",
41
- "html2text>=2024.2.26",
16
+ "requests==2.32.3",
17
+ "colorama==0.4.6",
18
+ "prompt_toolkit==3.0.50",
19
+ "PyMuPDF==1.24.11",
20
+ "yaspin==2.4.0",
21
+ "pygments==2.19.1",
22
+ "fuzzywuzzy==0.18.0",
23
+ "jedi==0.19.2",
24
+ "fastapi==0.115.12",
25
+ "uvicorn==0.33.0",
26
+ "pandas==2.0.3",
27
+ "rich==14.0.0",
28
+ "transformers==4.46.3",
29
+ "python-docx==1.1.2",
30
+ "python-pptx==1.0.2",
31
+ "torch==2.4.1",
32
+ "python-Levenshtein==0.25.1",
42
33
  ],
43
34
  entry_points={
44
35
  "console_scripts": [
@@ -1,3 +1,3 @@
1
1
  """Jarvis AI Assistant"""
2
2
 
3
- __version__ = "0.1.148"
3
+ __version__ = "0.1.149"
@@ -1,7 +1,6 @@
1
1
  import argparse
2
2
  import yaml
3
3
  import os
4
- from typing import Optional, List
5
4
  from jarvis.jarvis_agent import Agent
6
5
  from jarvis.jarvis_utils.input import get_multiline_input
7
6
  from jarvis.jarvis_utils.output import PrettyOutput, OutputType
@@ -238,7 +238,8 @@ def revert_file(filepath: str):
238
238
  # 检查文件是否在版本控制中
239
239
  result = subprocess.run(
240
240
  ['git', 'ls-files', '--error-unmatch', filepath],
241
- stderr=subprocess.PIPE
241
+ stderr=subprocess.PIPE,
242
+ text=False # 禁用自动文本解码
242
243
  )
243
244
  if result.returncode == 0:
244
245
  subprocess.run(['git', 'checkout', 'HEAD',
@@ -248,33 +249,67 @@ def revert_file(filepath: str):
248
249
  os.remove(filepath)
249
250
  subprocess.run(['git', 'clean', '-f', '--', filepath], check=True)
250
251
  except subprocess.CalledProcessError as e:
251
- PrettyOutput.print(f"恢复文件失败: {str(e)}", OutputType.ERROR)
252
+ error_msg = e.stderr.decode('utf-8', errors='replace') if e.stderr else str(e)
253
+ PrettyOutput.print(f"恢复文件失败: {error_msg}", OutputType.ERROR)
252
254
  # 修改后的恢复函数
253
255
 
254
256
 
255
257
  def revert_change():
258
+ """恢复所有未提交的修改到HEAD状态"""
256
259
  import subprocess
257
- subprocess.run(['git', 'reset', '--hard', 'HEAD'], check=True)
258
- subprocess.run(['git', 'clean', '-fd'], check=True)
260
+ try:
261
+ # 检查是否为空仓库
262
+ head_check = subprocess.run(
263
+ ['git', 'rev-parse', '--verify', 'HEAD'],
264
+ stderr=subprocess.PIPE,
265
+ stdout=subprocess.PIPE
266
+ )
267
+ if head_check.returncode == 0:
268
+ subprocess.run(['git', 'reset', '--hard', 'HEAD'], check=True)
269
+ subprocess.run(['git', 'clean', '-fd'], check=True)
270
+ except subprocess.CalledProcessError as e:
271
+ return f"恢复更改失败: {str(e)}"
259
272
  # 修改后的获取差异函数
260
273
 
261
274
 
262
275
  def get_diff() -> str:
263
276
  """使用git获取暂存区差异"""
264
277
  import subprocess
278
+
279
+ # 初始化状态
280
+ need_reset = False
281
+
265
282
  try:
283
+ # 暂存所有修改
266
284
  subprocess.run(['git', 'add', '.'], check=True)
285
+ need_reset = True
286
+
287
+ # 获取差异
267
288
  result = subprocess.run(
268
289
  ['git', 'diff', '--cached'],
269
290
  capture_output=True,
270
- text=True,
291
+ text=False,
271
292
  check=True
272
293
  )
273
- ret = result.stdout
274
- subprocess.run(['git', "reset", "--mixed", "HEAD"], check=True)
294
+
295
+ # 解码输出
296
+ try:
297
+ ret = result.stdout.decode('utf-8')
298
+ except UnicodeDecodeError:
299
+ ret = result.stdout.decode('utf-8', errors='replace')
300
+
301
+ # 重置暂存区
302
+ subprocess.run(['git', "reset", "--mixed"], check=False)
275
303
  return ret
304
+
276
305
  except subprocess.CalledProcessError as e:
306
+ if need_reset:
307
+ subprocess.run(['git', "reset", "--mixed"], check=False)
277
308
  return f"获取差异失败: {str(e)}"
309
+ except Exception as e:
310
+ if need_reset:
311
+ subprocess.run(['git', "reset", "--mixed"], check=False)
312
+ return f"发生意外错误: {str(e)}"
278
313
 
279
314
 
280
315
  def handle_commit_workflow() -> bool:
@@ -4,7 +4,6 @@ import os
4
4
  import re
5
5
  import tempfile
6
6
 
7
- from httpx import get
8
7
  from yaspin import yaspin
9
8
  from jarvis.jarvis_platform.registry import PlatformRegistry
10
9
  from jarvis.jarvis_tools.read_code import ReadCodeTool
@@ -3,7 +3,6 @@ import shlex
3
3
  import subprocess
4
4
  from typing import Dict, Any, Optional
5
5
  import tempfile
6
- from click import Option
7
6
  import yaml
8
7
  from yaspin import yaspin
9
8
  from jarvis.jarvis_platform.registry import PlatformRegistry
@@ -1,5 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import List, Dict, Optional, Tuple, Any, Union
2
+ from typing import List, Dict, Any, Union
3
3
 
4
4
  class BaseLSP(ABC):
5
5
  """Base class for Language Server Protocol integration.
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import shutil
3
3
  import subprocess
4
- from typing import List, Dict, Optional, Tuple, Any
4
+ from typing import List, Dict, Optional, Any
5
5
  import json
6
6
  from jarvis.jarvis_lsp.base import BaseLSP
7
7
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import shutil
3
3
  import subprocess
4
- from typing import List, Dict, Optional, Tuple, Any
4
+ from typing import List, Dict, Optional, Any
5
5
  import json
6
6
  from jarvis.jarvis_lsp.base import BaseLSP
7
7
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -1,4 +1,4 @@
1
- from typing import List, Dict, Optional, Tuple, Any
1
+ from typing import List, Dict, Any
2
2
  import jedi
3
3
  from jarvis.jarvis_lsp.base import BaseLSP
4
4
 
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import shutil
3
3
  import subprocess
4
- from typing import List, Dict, Optional, Tuple, Any
4
+ from typing import List, Dict, Optional, Any
5
5
  import json
6
6
  from jarvis.jarvis_lsp.base import BaseLSP
7
7
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -1,6 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
2
  import re
3
- from typing import Dict, List, Tuple
3
+ from typing import List, Tuple
4
4
  from jarvis.jarvis_utils.globals import clear_read_file_record
5
5
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
6
6
  from jarvis.jarvis_utils.utils import ct, ot, get_context_token_count, while_success, while_true
@@ -7,7 +7,6 @@ import time
7
7
  from jarvis.jarvis_platform.base import BasePlatform
8
8
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
9
9
  from jarvis.jarvis_utils.utils import while_success
10
- from yaspin import yaspin
11
10
 
12
11
  class KimiModel(BasePlatform):
13
12
  """Kimi model implementation"""
@@ -15,7 +15,6 @@ from jarvis.jarvis_agent import Agent
15
15
  from jarvis.jarvis_platform.registry import PlatformRegistry
16
16
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
17
17
  from jarvis.jarvis_utils.git_utils import find_git_root
18
- from jarvis.jarvis_utils.utils import init_env
19
18
 
20
19
  class CodePlanTool:
21
20
  """用于代码修改规划和需求分析的工具
@@ -1,4 +1,4 @@
1
- from typing import Dict, Any, List
1
+ from typing import Dict, Any
2
2
  import os
3
3
 
4
4
  from jarvis.jarvis_platform.registry import PlatformRegistry
@@ -1,7 +1,6 @@
1
1
  from typing import Dict, Any
2
2
  import os
3
3
 
4
- from pkg_resources import add_activation_listener
5
4
  from yaspin import yaspin
6
5
 
7
6
  from jarvis.jarvis_utils.globals import add_read_file_record
@@ -1,5 +1,4 @@
1
1
  import os
2
- import statistics
3
2
  from typing import Any, Dict
4
3
  from jarvis.jarvis_platform.registry import PlatformRegistry
5
4
 
@@ -1,12 +1,8 @@
1
1
  import os
2
- import numpy as np
3
- import torch
4
- from sentence_transformers import SentenceTransformer
5
- from transformers import AutoTokenizer, AutoModelForSequenceClassification
6
- from typing import List, Any, Optional, Tuple
2
+ from transformers import AutoTokenizer
3
+ from typing import List
7
4
  import functools
8
5
 
9
- from yaspin.api import Yaspin
10
6
  from jarvis.jarvis_utils.output import PrettyOutput, OutputType
11
7
 
12
8
  # 全局缓存,避免重复加载模型
@@ -74,14 +74,16 @@ def get_commits_between(start_hash: str, end_hash: str) -> List[Tuple[str, str]]
74
74
  ['git', 'log', f'{start_hash}..{end_hash}', '--pretty=format:%H|%s'],
75
75
  stdout=subprocess.PIPE,
76
76
  stderr=subprocess.PIPE,
77
- text=True
77
+ text=False # 禁用自动文本解码
78
78
  )
79
79
  if result.returncode != 0:
80
- PrettyOutput.print(f"获取commit历史失败: {result.stderr}", OutputType.ERROR)
80
+ error_msg = result.stderr.decode('utf-8', errors='replace')
81
+ PrettyOutput.print(f"获取commit历史失败: {error_msg}", OutputType.ERROR)
81
82
  return []
82
83
 
84
+ output = result.stdout.decode('utf-8', errors='replace')
83
85
  commits = []
84
- for line in result.stdout.splitlines():
86
+ for line in output.splitlines():
85
87
  if '|' in line:
86
88
  commit_hash, message = line.split('|', 1)
87
89
  commits.append((commit_hash, message))
@@ -94,18 +96,27 @@ def get_latest_commit_hash() -> str:
94
96
  """获取当前Git仓库的最新提交哈希值
95
97
 
96
98
  返回:
97
- str: 提交哈希值,如果不在Git仓库或发生错误则返回空字符串
99
+ str: 提交哈希值,如果不在Git仓库、空仓库或发生错误则返回空字符串
98
100
  """
99
101
  try:
102
+ # 首先检查是否存在HEAD引用
103
+ head_check = subprocess.run(
104
+ ['git', 'rev-parse', '--verify', 'HEAD'],
105
+ stdout=subprocess.PIPE,
106
+ stderr=subprocess.PIPE,
107
+ text=False
108
+ )
109
+ if head_check.returncode != 0:
110
+ return "" # 空仓库或无效HEAD
111
+
112
+ # 获取HEAD的完整哈希值
100
113
  result = subprocess.run(
101
114
  ['git', 'rev-parse', 'HEAD'],
102
115
  stdout=subprocess.PIPE,
103
116
  stderr=subprocess.PIPE,
104
- text=True
117
+ text=False
105
118
  )
106
- if result.returncode == 0:
107
- return result.stdout.strip()
108
- return ""
119
+ return result.stdout.decode('utf-8', errors='replace').strip() if result.returncode == 0 else ""
109
120
  except Exception:
110
121
  return ""
111
122
  def get_modified_line_ranges() -> Dict[str, Tuple[int, int]]:
@@ -11,7 +11,6 @@ from enum import Enum
11
11
  from datetime import datetime
12
12
  from typing import Optional
13
13
  from rich.panel import Panel
14
- from rich.box import HEAVY
15
14
  from rich.text import Text
16
15
  from rich.syntax import Syntax
17
16
  from rich.style import Style as RichStyle
@@ -0,0 +1,154 @@
1
+ import os
2
+ import time
3
+ import hashlib
4
+ from pathlib import Path
5
+ from typing import List, Any, Callable
6
+ from jarvis.jarvis_utils.config import get_max_input_token_count
7
+ from jarvis.jarvis_utils.embedding import get_context_token_count
8
+ from jarvis.jarvis_utils.input import get_single_line_input
9
+ from jarvis.jarvis_utils.output import PrettyOutput, OutputType
10
+ def init_env() -> None:
11
+ """初始化环境变量从~/.jarvis/env文件
12
+
13
+ 功能:
14
+ 1. 创建不存在的.jarvis目录
15
+ 2. 加载环境变量到os.environ
16
+ 3. 处理文件读取异常
17
+ """
18
+ jarvis_dir = Path.home() / ".jarvis"
19
+ env_file = jarvis_dir / "env"
20
+
21
+ # 检查~/.jarvis目录是否存在
22
+ if not jarvis_dir.exists():
23
+ jarvis_dir.mkdir(parents=True)
24
+ if env_file.exists():
25
+ try:
26
+ with open(env_file, "r", encoding="utf-8", errors="ignore") as f:
27
+ for line in f:
28
+ line = line.strip()
29
+ if line and not line.startswith(("#", ";")):
30
+ try:
31
+ key, value = line.split("=", 1)
32
+ os.environ[key.strip()] = value.strip().strip("'").strip('"')
33
+ except ValueError:
34
+ continue
35
+ except Exception as e:
36
+ PrettyOutput.print(f"警告: 读取 {env_file} 失败: {e}", OutputType.WARNING)
37
+ def while_success(func: Callable[[], Any], sleep_time: float = 0.1) -> Any:
38
+ """循环执行函数直到成功
39
+
40
+ 参数:
41
+ func -- 要执行的函数
42
+ sleep_time -- 每次失败后的等待时间(秒)
43
+
44
+ 返回:
45
+ 函数执行结果
46
+ """
47
+ while True:
48
+ try:
49
+ return func()
50
+ except Exception as e:
51
+ PrettyOutput.print(f"执行失败: {str(e)}, 等待 {sleep_time}s...", OutputType.ERROR)
52
+ time.sleep(sleep_time)
53
+ continue
54
+ def while_true(func: Callable[[], bool], sleep_time: float = 0.1) -> Any:
55
+ """循环执行函数直到返回True"""
56
+ while True:
57
+ ret = func()
58
+ if ret:
59
+ break
60
+ PrettyOutput.print(f"执行失败, 等待 {sleep_time}s...", OutputType.WARNING)
61
+ time.sleep(sleep_time)
62
+ return ret
63
+ def get_file_md5(filepath: str)->str:
64
+ """计算文件内容的MD5哈希值
65
+
66
+ 参数:
67
+ filepath: 要计算哈希的文件路径
68
+
69
+ 返回:
70
+ str: 文件内容的MD5哈希值
71
+ """
72
+ return hashlib.md5(open(filepath, "rb").read(100*1024*1024)).hexdigest()
73
+ def user_confirm(tip: str, default: bool = True) -> bool:
74
+ """提示用户确认是/否问题
75
+
76
+ 参数:
77
+ tip: 显示给用户的消息
78
+ default: 用户直接回车时的默认响应
79
+
80
+ 返回:
81
+ bool: 用户确认返回True,否则返回False
82
+ """
83
+ suffix = "[Y/n]" if default else "[y/N]"
84
+ ret = get_single_line_input(f"{tip} {suffix}: ")
85
+ return default if ret == "" else ret.lower() == "y"
86
+
87
+ def get_file_line_count(filename: str) -> int:
88
+ """计算文件中的行数
89
+
90
+ 参数:
91
+ filename: 要计算行数的文件路径
92
+
93
+ 返回:
94
+ int: 文件中的行数,如果文件无法读取则返回0
95
+ """
96
+ try:
97
+ return len(open(filename, "r", encoding="utf-8", errors="ignore").readlines())
98
+ except Exception as e:
99
+ return 0
100
+
101
+
102
+ def is_long_context(files: List[str]) -> bool:
103
+ """检查文件列表是否属于长上下文
104
+
105
+ 判断标准:
106
+ 当总token数超过最大上下文长度的80%时视为长上下文
107
+
108
+ 参数:
109
+ files -- 要检查的文件路径列表
110
+
111
+ 返回:
112
+ 布尔值表示是否属于长上下文
113
+ """
114
+ max_input_token_count = get_max_input_token_count()
115
+ threshold = max_input_token_count * 0.8
116
+ total_tokens = 0
117
+
118
+ for file_path in files:
119
+ try:
120
+ with open(file_path, 'r', encoding='utf-8', errors="ignore") as f:
121
+ content = f.read()
122
+ total_tokens += get_context_token_count(content)
123
+
124
+ if total_tokens > threshold:
125
+ return True
126
+ except Exception as e:
127
+ PrettyOutput.print(f"读取文件 {file_path} 失败: {e}", OutputType.WARNING)
128
+ continue
129
+
130
+ return total_tokens > threshold
131
+
132
+
133
+ def ot(tag_name: str) -> str:
134
+ """生成HTML标签开始标记
135
+
136
+ 参数:
137
+ tag_name -- HTML标签名称
138
+
139
+ 返回:
140
+ 格式化的开始标签字符串
141
+ """
142
+ return f"<{tag_name}>"
143
+
144
+ def ct(tag_name: str) -> str:
145
+ """生成HTML标签结束标记
146
+
147
+ 参数:
148
+ tag_name -- HTML标签名称
149
+
150
+ 返回:
151
+ 格式化的结束标签字符串
152
+ """
153
+ return f"</{tag_name}>"
154
+