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.
- {jarvis_ai_assistant-0.1.148/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.149}/PKG-INFO +24 -27
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/README.md +6 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/pyproject.toml +18 -27
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/setup.py +18 -27
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/main.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/patch.py +42 -7
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/code_review.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_utils/git_commiter.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/base.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/cpp.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/go.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/python.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/rust.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/base.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/kimi.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/code_plan.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/file_analyzer.py +1 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/read_code.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/search_web.py +0 -1
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/embedding.py +2 -6
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/git_utils.py +19 -8
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/output.py +0 -1
- jarvis_ai_assistant-0.1.149/src/jarvis/jarvis_utils/utils.py +154 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149/src/jarvis_ai_assistant.egg-info}/PKG-INFO +24 -27
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -1
- jarvis_ai_assistant-0.1.149/src/jarvis_ai_assistant.egg-info/requires.txt +23 -0
- jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_platform_manager/openai_test.py +0 -138
- jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_utils/utils.py +0 -352
- jarvis_ai_assistant-0.1.148/src/jarvis_ai_assistant.egg-info/requires.txt +0 -32
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/file_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/jarvis.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_agent/code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_dev/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_details/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_details/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_lsp/registry.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/yuanbao.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform_manager/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_smart_shell/main.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/ask_codebase.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/chdir.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/file_operation.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/registry.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/config.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {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.
|
|
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
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
Requires-Dist:
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
Requires-Dist:
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist: docx
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist:
|
|
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
|
+
[](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
|
+
[](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.
|
|
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
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"docx
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
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.
|
|
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
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"docx
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
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": [
|
{jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_agent/patch.py
RENAMED
|
@@ -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
|
-
|
|
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
|
-
|
|
258
|
-
|
|
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=
|
|
291
|
+
text=False,
|
|
271
292
|
check=True
|
|
272
293
|
)
|
|
273
|
-
|
|
274
|
-
|
|
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:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import shutil
|
|
3
3
|
import subprocess
|
|
4
|
-
from typing import List, Dict, Optional,
|
|
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,
|
|
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,
|
|
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
|
{jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/base.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
import re
|
|
3
|
-
from typing import
|
|
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
|
{jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_platform/kimi.py
RENAMED
|
@@ -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"""
|
{jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_tools/code_plan.py
RENAMED
|
@@ -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
|
"""用于代码修改规划和需求分析的工具
|
{jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/embedding.py
RENAMED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import os
|
|
2
|
-
|
|
3
|
-
import
|
|
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
|
# 全局缓存,避免重复加载模型
|
{jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.149}/src/jarvis/jarvis_utils/git_utils.py
RENAMED
|
@@ -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=
|
|
77
|
+
text=False # 禁用自动文本解码
|
|
78
78
|
)
|
|
79
79
|
if result.returncode != 0:
|
|
80
|
-
|
|
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
|
|
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=
|
|
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]]:
|
|
@@ -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
|
+
|