jarvis-ai-assistant 0.3.6__py3-none-any.whl → 0.3.8__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.
- jarvis/__init__.py +1 -1
- jarvis/jarvis_utils/config.py +1 -1
- jarvis/jarvis_utils/git_utils.py +33 -3
- jarvis/jarvis_utils/utils.py +101 -7
- {jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/RECORD +10 -10
- {jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/top_level.txt +0 -0
jarvis/__init__.py
CHANGED
jarvis/jarvis_utils/config.py
CHANGED
jarvis/jarvis_utils/git_utils.py
CHANGED
@@ -427,10 +427,40 @@ def check_and_update_git_repo(repo_path: str) -> bool:
|
|
427
427
|
is_uv_env = True
|
428
428
|
|
429
429
|
# 根据环境选择安装命令
|
430
|
-
|
431
|
-
|
430
|
+
# 检测是否安装了 RAG 特性
|
431
|
+
rag_installed = False
|
432
|
+
try:
|
433
|
+
import langchain # noqa
|
434
|
+
|
435
|
+
rag_installed = True
|
436
|
+
except ImportError:
|
437
|
+
pass
|
438
|
+
|
439
|
+
# 根据环境和 RAG 特性选择安装命令
|
440
|
+
if rag_installed:
|
441
|
+
if is_uv_env:
|
442
|
+
install_cmd = ["uv", "pip", "install", "-e", ".[rag]"]
|
443
|
+
else:
|
444
|
+
install_cmd = [
|
445
|
+
sys.executable,
|
446
|
+
"-m",
|
447
|
+
"pip",
|
448
|
+
"install",
|
449
|
+
"-e",
|
450
|
+
".[rag]",
|
451
|
+
]
|
432
452
|
else:
|
433
|
-
|
453
|
+
if is_uv_env:
|
454
|
+
install_cmd = ["uv", "pip", "install", "-e", "."]
|
455
|
+
else:
|
456
|
+
install_cmd = [
|
457
|
+
sys.executable,
|
458
|
+
"-m",
|
459
|
+
"pip",
|
460
|
+
"install",
|
461
|
+
"-e",
|
462
|
+
".",
|
463
|
+
]
|
434
464
|
|
435
465
|
# 尝试安装
|
436
466
|
result = subprocess.run(
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -9,7 +9,7 @@ import sys
|
|
9
9
|
import time
|
10
10
|
from pathlib import Path
|
11
11
|
from typing import Any, Callable, Dict, List, Optional
|
12
|
-
from datetime import datetime
|
12
|
+
from datetime import datetime, date
|
13
13
|
|
14
14
|
import yaml # type: ignore
|
15
15
|
from rich.align import Align
|
@@ -79,16 +79,110 @@ def _setup_signal_handler() -> None:
|
|
79
79
|
signal.signal(signal.SIGINT, sigint_handler)
|
80
80
|
|
81
81
|
|
82
|
-
def
|
83
|
-
"""
|
82
|
+
def _check_pip_updates() -> bool:
|
83
|
+
"""检查pip安装的Jarvis是否有更新
|
84
|
+
|
85
|
+
返回:
|
86
|
+
bool: 是否执行了更新(总是返回False,因为pip更新需要用户手动执行)
|
87
|
+
"""
|
88
|
+
import urllib.request
|
89
|
+
import urllib.error
|
90
|
+
from packaging import version
|
91
|
+
|
92
|
+
# 检查上次检查日期
|
93
|
+
last_check_file = Path(get_data_dir()) / "last_pip_check"
|
94
|
+
today_str = date.today().strftime("%Y-%m-%d")
|
95
|
+
|
96
|
+
if last_check_file.exists():
|
97
|
+
try:
|
98
|
+
last_check_date = last_check_file.read_text().strip()
|
99
|
+
if last_check_date == today_str:
|
100
|
+
return False
|
101
|
+
except Exception:
|
102
|
+
pass
|
103
|
+
|
104
|
+
try:
|
105
|
+
# 获取PyPI上的最新版本
|
106
|
+
url = "https://pypi.org/pypi/jarvis-ai-assistant/json"
|
107
|
+
try:
|
108
|
+
with urllib.request.urlopen(url, timeout=5) as response:
|
109
|
+
data = json.loads(response.read().decode())
|
110
|
+
latest_version = data["info"]["version"]
|
111
|
+
except (urllib.error.URLError, KeyError, json.JSONDecodeError) as e:
|
112
|
+
return False
|
113
|
+
|
114
|
+
# 比较版本
|
115
|
+
current_ver = version.parse(__version__)
|
116
|
+
latest_ver = version.parse(latest_version)
|
117
|
+
|
118
|
+
if latest_ver > current_ver:
|
119
|
+
PrettyOutput.print(
|
120
|
+
f"检测到新版本 v{latest_version} (当前版本: v{__version__})",
|
121
|
+
OutputType.INFO,
|
122
|
+
)
|
123
|
+
|
124
|
+
# 检测是否在虚拟环境中
|
125
|
+
in_venv = hasattr(sys, "real_prefix") or (
|
126
|
+
hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
|
127
|
+
)
|
128
|
+
|
129
|
+
# 检测是否使用uv
|
130
|
+
is_uv_env = False
|
131
|
+
if in_venv:
|
132
|
+
if sys.platform == "win32":
|
133
|
+
uv_path = Path(sys.prefix) / "Scripts" / "uv.exe"
|
134
|
+
else:
|
135
|
+
uv_path = Path(sys.prefix) / "bin" / "uv"
|
136
|
+
if uv_path.exists():
|
137
|
+
is_uv_env = True
|
138
|
+
|
139
|
+
# 检测是否安装了 RAG 特性
|
140
|
+
rag_installed = False
|
141
|
+
try:
|
142
|
+
import langchain # noqa
|
143
|
+
|
144
|
+
rag_installed = True
|
145
|
+
except ImportError:
|
146
|
+
pass
|
147
|
+
|
148
|
+
# 提供更新命令
|
149
|
+
package_spec = (
|
150
|
+
"jarvis-ai-assistant[rag]" if rag_installed else "jarvis-ai-assistant"
|
151
|
+
)
|
152
|
+
if is_uv_env:
|
153
|
+
update_cmd = f"uv pip install --upgrade {package_spec}"
|
154
|
+
else:
|
155
|
+
update_cmd = f"{sys.executable} -m pip install --upgrade {package_spec}"
|
156
|
+
|
157
|
+
PrettyOutput.print(f"请手动执行以下命令更新: {update_cmd}", OutputType.INFO)
|
158
|
+
|
159
|
+
# 更新检查日期
|
160
|
+
last_check_file.write_text(today_str)
|
161
|
+
|
162
|
+
except Exception as e:
|
163
|
+
# 静默处理错误,不影响正常使用
|
164
|
+
pass
|
165
|
+
|
166
|
+
return False
|
167
|
+
|
168
|
+
|
169
|
+
def _check_jarvis_updates() -> bool:
|
170
|
+
"""检查并更新Jarvis本身(git仓库或pip包)
|
84
171
|
|
85
172
|
返回:
|
86
173
|
bool: 是否需要重启进程
|
87
174
|
"""
|
88
175
|
script_dir = Path(os.path.dirname(os.path.dirname(__file__)))
|
89
|
-
from jarvis.jarvis_utils.git_utils import check_and_update_git_repo
|
90
176
|
|
91
|
-
|
177
|
+
# 先检查是否是git源码安装
|
178
|
+
git_dir = script_dir / ".git"
|
179
|
+
if git_dir.exists():
|
180
|
+
from jarvis.jarvis_utils.git_utils import check_and_update_git_repo
|
181
|
+
|
182
|
+
return check_and_update_git_repo(str(script_dir))
|
183
|
+
|
184
|
+
# 检查是否是pip/uv pip安装的版本
|
185
|
+
return _check_pip_updates()
|
92
186
|
|
93
187
|
|
94
188
|
def _show_usage_stats(welcome_str: str) -> None:
|
@@ -531,8 +625,8 @@ def init_env(welcome_str: str, config_file: Optional[str] = None) -> None:
|
|
531
625
|
if welcome_str:
|
532
626
|
_show_usage_stats(welcome_str)
|
533
627
|
|
534
|
-
# 5. 检查
|
535
|
-
if
|
628
|
+
# 5. 检查Jarvis更新
|
629
|
+
if _check_jarvis_updates():
|
536
630
|
os.execv(sys.executable, [sys.executable] + sys.argv)
|
537
631
|
sys.exit(0)
|
538
632
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=v5YcQ0Ez7aCUxmeZE7-B-WO0DwFAP8zg1gHfdxy9-eo,73
|
2
2
|
jarvis/jarvis_agent/__init__.py,sha256=NF_eUF85RRplGJyLmInIsTn-09aEPtjj4utYvEALvJw,31802
|
3
3
|
jarvis/jarvis_agent/agent_manager.py,sha256=YzpMiF0H2-eyk2kn2o24Bkj3bXsQx7Pv2vfD4gWepo0,2893
|
4
4
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
|
@@ -108,20 +108,20 @@ jarvis/jarvis_tools/cli/main.py,sha256=GsfZJ4OS4Hvxh0H2XiLkgbzm-ajBsb4c0LyjuIAAa
|
|
108
108
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
109
109
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
|
110
110
|
jarvis/jarvis_utils/clipboard.py,sha256=WgbQIQR2sh7_5ZzeX04eT3zXx_mxQbKyJOZXgGX_TcI,2907
|
111
|
-
jarvis/jarvis_utils/config.py,sha256=
|
111
|
+
jarvis/jarvis_utils/config.py,sha256=HmQfPe05rLZ4e1R_qv40rTHsiCNYtPLzi12UndR01i0,15380
|
112
112
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
113
113
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
114
|
-
jarvis/jarvis_utils/git_utils.py,sha256
|
114
|
+
jarvis/jarvis_utils/git_utils.py,sha256=AkczUiRcGcOnPfz2v3mdLwV1S41IopiAYD2tjeMTDrE,23586
|
115
115
|
jarvis/jarvis_utils/globals.py,sha256=aTrOHcCgPAeZFLFIWMAMiJCYlmr4XhdFZf5gZ745hnE,8900
|
116
116
|
jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
|
117
117
|
jarvis/jarvis_utils/input.py,sha256=pl8SanShzaEJZybvNHTjnFdKC2VxDPS1IwONtbwe-7U,12765
|
118
118
|
jarvis/jarvis_utils/methodology.py,sha256=IIMU17WVSunsWXsnXROd4G77LxgYs4xEC_xm_0CDkjw,12554
|
119
119
|
jarvis/jarvis_utils/output.py,sha256=QRLlKObQKT0KuRSeZRqYb7NlTQvsd1oZXZ41WxeWEuU,10894
|
120
120
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
121
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
122
|
-
jarvis_ai_assistant-0.3.
|
123
|
-
jarvis_ai_assistant-0.3.
|
124
|
-
jarvis_ai_assistant-0.3.
|
125
|
-
jarvis_ai_assistant-0.3.
|
126
|
-
jarvis_ai_assistant-0.3.
|
127
|
-
jarvis_ai_assistant-0.3.
|
121
|
+
jarvis/jarvis_utils/utils.py,sha256=LiVui9RMsbfUdzbvBBwbGNC4uniGnLp3LFsk7LXGrQE,47370
|
122
|
+
jarvis_ai_assistant-0.3.8.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
123
|
+
jarvis_ai_assistant-0.3.8.dist-info/METADATA,sha256=5h0sEIQsEFZ1lrU4nb22YbwiccopozZDg4n9GEygOPo,18184
|
124
|
+
jarvis_ai_assistant-0.3.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
125
|
+
jarvis_ai_assistant-0.3.8.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
|
126
|
+
jarvis_ai_assistant-0.3.8.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
127
|
+
jarvis_ai_assistant-0.3.8.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.6.dist-info → jarvis_ai_assistant-0.3.8.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|