jarvis-ai-assistant 0.3.28__py3-none-any.whl → 0.3.30__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 (40) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +154 -32
  3. jarvis/jarvis_agent/event_bus.py +2 -2
  4. jarvis/jarvis_agent/events.py +157 -0
  5. jarvis/jarvis_agent/file_methodology_manager.py +17 -4
  6. jarvis/jarvis_agent/jarvis.py +3 -3
  7. jarvis/jarvis_agent/memory_manager.py +4 -3
  8. jarvis/jarvis_agent/prompts.py +2 -2
  9. jarvis/jarvis_agent/protocols.py +4 -1
  10. jarvis/jarvis_agent/run_loop.py +10 -27
  11. jarvis/jarvis_agent/shell_input_handler.py +6 -1
  12. jarvis/jarvis_agent/task_analyzer.py +18 -13
  13. jarvis/jarvis_agent/task_manager.py +6 -4
  14. jarvis/jarvis_agent/utils.py +50 -0
  15. jarvis/jarvis_code_agent/code_agent.py +3 -2
  16. jarvis/jarvis_data/config_schema.json +8 -0
  17. jarvis/jarvis_mcp/sse_mcp_client.py +1 -1
  18. jarvis/jarvis_memory_organizer/memory_organizer.py +4 -4
  19. jarvis/jarvis_platform/kimi.py +1 -1
  20. jarvis/jarvis_platform/tongyi.py +1 -1
  21. jarvis/jarvis_platform/yuanbao.py +1 -1
  22. jarvis/jarvis_rag/retriever.py +3 -3
  23. jarvis/jarvis_stats/stats.py +2 -2
  24. jarvis/jarvis_stats/storage.py +3 -3
  25. jarvis/jarvis_tools/edit_file.py +3 -3
  26. jarvis/jarvis_tools/execute_script.py +2 -2
  27. jarvis/jarvis_tools/generate_new_tool.py +13 -2
  28. jarvis/jarvis_tools/sub_agent.py +2 -2
  29. jarvis/jarvis_tools/sub_code_agent.py +2 -2
  30. jarvis/jarvis_utils/config.py +17 -3
  31. jarvis/jarvis_utils/fzf.py +4 -3
  32. jarvis/jarvis_utils/git_utils.py +20 -16
  33. jarvis/jarvis_utils/input.py +5 -5
  34. jarvis/jarvis_utils/utils.py +109 -20
  35. {jarvis_ai_assistant-0.3.28.dist-info → jarvis_ai_assistant-0.3.30.dist-info}/METADATA +1 -1
  36. {jarvis_ai_assistant-0.3.28.dist-info → jarvis_ai_assistant-0.3.30.dist-info}/RECORD +40 -38
  37. {jarvis_ai_assistant-0.3.28.dist-info → jarvis_ai_assistant-0.3.30.dist-info}/WHEEL +0 -0
  38. {jarvis_ai_assistant-0.3.28.dist-info → jarvis_ai_assistant-0.3.30.dist-info}/entry_points.txt +0 -0
  39. {jarvis_ai_assistant-0.3.28.dist-info → jarvis_ai_assistant-0.3.30.dist-info}/licenses/LICENSE +0 -0
  40. {jarvis_ai_assistant-0.3.28.dist-info → jarvis_ai_assistant-0.3.30.dist-info}/top_level.txt +0 -0
@@ -417,25 +417,32 @@ def check_and_update_git_repo(repo_path: str) -> bool:
417
417
  hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
418
418
  )
419
419
 
420
- is_uv_env = False
421
- if in_venv:
422
- # 检查是否在uv创建的虚拟环境内
423
- if sys.platform == "win32":
424
- uv_path = os.path.join(sys.prefix, "Scripts", "uv.exe")
425
- else:
426
- uv_path = os.path.join(sys.prefix, "bin", "uv")
427
- if os.path.exists(uv_path):
428
- is_uv_env = True
420
+ # 检测 uv 可用性:优先虚拟环境内的 uv,其次 PATH 中的 uv
421
+ from shutil import which as _which
422
+ uv_executable = None
423
+ if sys.platform == "win32":
424
+ venv_uv = os.path.join(sys.prefix, "Scripts", "uv.exe")
425
+ else:
426
+ venv_uv = os.path.join(sys.prefix, "bin", "uv")
427
+ if os.path.exists(venv_uv):
428
+ uv_executable = venv_uv
429
+ else:
430
+ path_uv = _which("uv")
431
+ if path_uv:
432
+ uv_executable = path_uv
429
433
 
430
434
  # 根据环境选择安装命令
431
435
  # 检测是否安装了 RAG 特性(更精确)
432
436
  rag_installed = is_rag_installed()
433
437
 
434
- # 根据环境和 RAG 特性选择安装命令
435
- if rag_installed:
436
- if is_uv_env:
437
- install_cmd = ["uv", "pip", "install", "-e", ".[rag]"]
438
+ # 根据 uv 可用性与 RAG 特性选择安装命令(优先使用 uv)
439
+ if uv_executable:
440
+ if rag_installed:
441
+ install_cmd = [uv_executable, "pip", "install", "-e", ".[rag]"]
438
442
  else:
443
+ install_cmd = [uv_executable, "pip", "install", "-e", "."]
444
+ else:
445
+ if rag_installed:
439
446
  install_cmd = [
440
447
  sys.executable,
441
448
  "-m",
@@ -444,9 +451,6 @@ def check_and_update_git_repo(repo_path: str) -> bool:
444
451
  "-e",
445
452
  ".[rag]",
446
453
  ]
447
- else:
448
- if is_uv_env:
449
- install_cmd = ["uv", "pip", "install", "-e", "."]
450
454
  else:
451
455
  install_cmd = [
452
456
  sys.executable,
@@ -11,7 +11,7 @@
11
11
  import os
12
12
  import sys
13
13
  import base64
14
- from typing import Iterable, List
14
+ from typing import Iterable, List, Optional
15
15
  import wcwidth
16
16
 
17
17
  from colorama import Fore
@@ -308,7 +308,7 @@ class FileCompleter(Completer):
308
308
  import os as _os
309
309
 
310
310
  if self._all_files_cache is None:
311
- files: list[str] = []
311
+ files: List[str] = []
312
312
  for root, dirs, fnames in _os.walk(".", followlinks=False):
313
313
  # Exclude .git directory
314
314
  dirs[:] = [d for d in dirs if d != ".git"]
@@ -429,7 +429,7 @@ def _show_history_and_copy():
429
429
 
430
430
 
431
431
  def _get_multiline_input_internal(
432
- tip: str, preset: str | None = None, preset_cursor: int | None = None
432
+ tip: str, preset: Optional[str] = None, preset_cursor: Optional[int] = None
433
433
  ) -> str:
434
434
  """
435
435
  Internal function to get multiline input using prompt_toolkit.
@@ -660,8 +660,8 @@ def get_multiline_input(tip: str, print_on_empty: bool = True) -> str:
660
660
  tip: 提示文本,将显示在底部工具栏中
661
661
  print_on_empty: 当输入为空字符串时,是否打印“输入已取消”提示。默认打印。
662
662
  """
663
- preset: str | None = None
664
- preset_cursor: int | None = None
663
+ preset: Optional[str] = None
664
+ preset_cursor: Optional[int] = None
665
665
  while True:
666
666
  user_input = _get_multiline_input_internal(
667
667
  tip, preset=preset, preset_cursor=preset_cursor
@@ -7,7 +7,7 @@ import subprocess
7
7
  import sys
8
8
  import time
9
9
  from pathlib import Path
10
- from typing import Any, Callable, Dict, List, Optional
10
+ from typing import Any, Callable, Dict, List, Optional, Tuple
11
11
  from datetime import datetime, date
12
12
 
13
13
  import yaml # type: ignore
@@ -97,6 +97,98 @@ def is_rag_installed() -> bool:
97
97
  return len(get_missing_rag_modules()) == 0
98
98
 
99
99
 
100
+ def is_editable_install() -> bool:
101
+ """
102
+ 检测当前 Jarvis 是否以可编辑模式安装(pip/uv install -e .)。
103
+
104
+ 判断顺序:
105
+ 1. 读取 PEP 610 的 direct_url.json(dir_info.editable)
106
+ 2. 兼容旧式 .egg-link 安装
107
+ 3. 启发式回退:源码路径上游存在 .git 且不在 site-packages/dist-packages
108
+ """
109
+ # 优先使用 importlib.metadata 读取 distribution 的 direct_url.json
110
+ try:
111
+ import importlib.metadata as metadata # Python 3.8+
112
+ except Exception:
113
+ metadata = None # type: ignore
114
+
115
+ def _check_direct_url() -> Optional[bool]:
116
+ if metadata is None:
117
+ return None
118
+ candidates = ["jarvis-ai-assistant", "jarvis_ai_assistant"]
119
+ for name in candidates:
120
+ try:
121
+ dist = metadata.distribution(name)
122
+ except Exception:
123
+ continue
124
+ try:
125
+ files = dist.files or []
126
+ for f in files:
127
+ try:
128
+ if f.name == "direct_url.json":
129
+ p = Path(str(dist.locate_file(f)))
130
+ if p.exists():
131
+ with open(p, "r", encoding="utf-8", errors="ignore") as fp:
132
+ info = json.load(fp)
133
+ dir_info = info.get("dir_info") or {}
134
+ if isinstance(dir_info, dict) and bool(dir_info.get("editable")):
135
+ return True
136
+ # 兼容部分工具可能写入顶层 editable 字段
137
+ if bool(info.get("editable")):
138
+ return True
139
+ return False # 找到了 direct_url.json 但未标记 editable
140
+ except Exception:
141
+ continue
142
+ except Exception:
143
+ continue
144
+ return None
145
+
146
+ res = _check_direct_url()
147
+ if res is True:
148
+ return True
149
+ if res is False:
150
+ # 明确不是可编辑安装
151
+ return False
152
+
153
+ # 兼容旧式 .egg-link 可编辑安装
154
+ try:
155
+ module_path = Path(__file__).resolve()
156
+ pkg_root = module_path.parent.parent # jarvis 包根目录
157
+ for entry in sys.path:
158
+ try:
159
+ p = Path(entry)
160
+ if not p.exists() or not p.is_dir():
161
+ continue
162
+ for egg in p.glob("*.egg-link"):
163
+ try:
164
+ text = egg.read_text(encoding="utf-8", errors="ignore")
165
+ first_line = (text.strip().splitlines() or [""])[0]
166
+ if not first_line:
167
+ continue
168
+ src_path = Path(first_line).resolve()
169
+ # 当前包根目录在 egg-link 指向的源码路径下,视为可编辑安装
170
+ if str(pkg_root).startswith(str(src_path)):
171
+ return True
172
+ except Exception:
173
+ continue
174
+ except Exception:
175
+ continue
176
+ except Exception:
177
+ pass
178
+
179
+ # 启发式回退:源码仓库路径
180
+ try:
181
+ parents = list(Path(__file__).resolve().parents)
182
+ has_git = any((d / ".git").exists() for d in parents)
183
+ in_site = any(("site-packages" in str(d)) or ("dist-packages" in str(d)) for d in parents)
184
+ if has_git and not in_site:
185
+ return True
186
+ except Exception:
187
+ pass
188
+
189
+ return False
190
+
191
+
100
192
  def _setup_signal_handler() -> None:
101
193
  """设置SIGINT信号处理函数"""
102
194
  original_sigint = signal.getsignal(signal.SIGINT)
@@ -124,7 +216,7 @@ def _check_pip_updates() -> bool:
124
216
  from packaging import version
125
217
 
126
218
  # 检查上次检查日期
127
- last_check_file = Path(get_data_dir()) / "last_pip_check"
219
+ last_check_file = Path(str(get_data_dir())) / "last_pip_check"
128
220
  today_str = date.today().strftime("%Y-%m-%d")
129
221
 
130
222
  if last_check_file.exists():
@@ -160,17 +252,19 @@ def _check_pip_updates() -> bool:
160
252
  hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
161
253
  )
162
254
 
163
- # 检测是否使用uv
164
- is_uv_env = False
255
+ # 检测是否可用 uv(优先使用虚拟环境内的uv,其次PATH中的uv)
256
+ from shutil import which as _which
165
257
  uv_executable: Optional[str] = None
166
- if in_venv:
167
- if sys.platform == "win32":
168
- uv_path = Path(sys.prefix) / "Scripts" / "uv.exe"
169
- else:
170
- uv_path = Path(sys.prefix) / "bin" / "uv"
171
- if uv_path.exists():
172
- is_uv_env = True
173
- uv_executable = str(uv_path)
258
+ if sys.platform == "win32":
259
+ venv_uv = Path(sys.prefix) / "Scripts" / "uv.exe"
260
+ else:
261
+ venv_uv = Path(sys.prefix) / "bin" / "uv"
262
+ if venv_uv.exists():
263
+ uv_executable = str(venv_uv)
264
+ else:
265
+ path_uv = _which("uv")
266
+ if path_uv:
267
+ uv_executable = path_uv
174
268
 
175
269
  # 检测是否安装了 RAG 特性(更精确)
176
270
  from jarvis.jarvis_utils.utils import (
@@ -182,7 +276,7 @@ def _check_pip_updates() -> bool:
182
276
  package_spec = (
183
277
  "jarvis-ai-assistant[rag]" if rag_installed else "jarvis-ai-assistant"
184
278
  )
185
- if is_uv_env and uv_executable:
279
+ if uv_executable:
186
280
  cmd_list = [uv_executable, "pip", "install", "--upgrade", package_spec]
187
281
  update_cmd = f"uv pip install --upgrade {package_spec}"
188
282
  else:
@@ -867,7 +961,6 @@ def load_config():
867
961
  _load_and_process_config(str(config_file_path.parent), str(config_file_path))
868
962
 
869
963
 
870
- from typing import Tuple
871
964
 
872
965
 
873
966
  def _load_config_file(config_file: str) -> Tuple[str, dict]:
@@ -1235,11 +1328,7 @@ def _collect_optional_config_interactively(
1235
1328
  " 适用于您希望绕过检查并自行管理仓库状态的场景。"
1236
1329
  )
1237
1330
 
1238
- try:
1239
- # 查找当前模式在选项中的索引
1240
- default_index = choices.index(current_mode)
1241
- except ValueError:
1242
- default_index = 0 # 默认为第一个选项
1331
+
1243
1332
 
1244
1333
  new_mode = get_choice(
1245
1334
  tip,
@@ -1848,7 +1937,7 @@ def daily_check_git_updates(repo_dirs: List[str], repo_type: str):
1848
1937
  repo_dirs (List[str]): 需要检查的git仓库目录列表。
1849
1938
  repo_type (str): 仓库的类型名称,例如 "工具" 或 "方法论",用于日志输出。
1850
1939
  """
1851
- data_dir = Path(get_data_dir())
1940
+ data_dir = Path(str(get_data_dir()))
1852
1941
  last_check_file = data_dir / f"{repo_type}_updates_last_check.txt"
1853
1942
  should_check_for_updates = True
1854
1943
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.28
3
+ Version: 0.3.30
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
@@ -1,32 +1,34 @@
1
- jarvis/__init__.py,sha256=1K9v5i77_4p2eML-QPikTWjE-oPcbpklsA_9cmXVITc,74
2
- jarvis/jarvis_agent/__init__.py,sha256=eBUO23ysoct4oCZxi3ITuiPsdnEvFR0bKZVdycDRAhw,42606
1
+ jarvis/__init__.py,sha256=UpbmB-TeVTIG-j9qC27w2Pdl9nDtcZc6sO3wyLbGRJ8,74
2
+ jarvis/jarvis_agent/__init__.py,sha256=BmIyS7P47Z9Ora2YfywMhvp1G2CYyU2WAzuOM1YgnuU,47962
3
3
  jarvis/jarvis_agent/agent_manager.py,sha256=qNcMy5Xc5ZT26JfczBg4b4D5udKVHSFsCFjlpbIdmPo,3076
4
4
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
5
5
  jarvis/jarvis_agent/config.py,sha256=Ni1aTVzmdERJ89A1jsC21Tsys_9MM-TTx1w5XwxyEwA,3130
6
6
  jarvis/jarvis_agent/config_editor.py,sha256=hlb9EYxKWcR_qdW2O89CgNDdciR9Isi743JU_1gD8j4,1927
7
7
  jarvis/jarvis_agent/edit_file_handler.py,sha256=5sFz84jqy2gpc0aLOre2bvz8_DitlBoWZs_cQwftWLw,11570
8
- jarvis/jarvis_agent/event_bus.py,sha256=-QVAGTe3B2Cu3-FGkw78l8XikS4vPZ-D61ajUtplOCU,1515
9
- jarvis/jarvis_agent/file_methodology_manager.py,sha256=xaxG_TwS_eenYgbTn9tuSc54uZ6ByEQDe0o6sABGYA4,4136
10
- jarvis/jarvis_agent/jarvis.py,sha256=AEloRaSg2hletd5JhpjbfsNInZCtSCSFmtFqkmjzlvY,24362
8
+ jarvis/jarvis_agent/event_bus.py,sha256=pRdfk7d0OG18K6yNfWlCvAh_dW5p9sBtT2Yc3jGmzgo,1519
9
+ jarvis/jarvis_agent/events.py,sha256=rmFQ37PasImCh7OCdCzNBvubk-kHwcUiYLgzmL0t0_4,3689
10
+ jarvis/jarvis_agent/file_methodology_manager.py,sha256=LnhgTx5xQXCBK8esjCkFbgFm9iEyFX7TryUlC40Kzpw,4428
11
+ jarvis/jarvis_agent/jarvis.py,sha256=IW3BlErR_B6UxreTdmD9tIMy0C3xb593LOtCUdFChQs,24368
11
12
  jarvis/jarvis_agent/main.py,sha256=bFcwXWC6O05jQiXy6ED_bHjdjDo5VwV_i1BoBEAzgP0,3336
12
- jarvis/jarvis_agent/memory_manager.py,sha256=BJ1-dEyFV9DcJCWrKdH3mEoe2rrD1T_Zaa_4ja5Tp4k,7958
13
+ jarvis/jarvis_agent/memory_manager.py,sha256=WSyUffx9xTmkcj4QrSLEfsjI3sTMUwZmkkC9_N_gTjo,8042
13
14
  jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
14
15
  jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
15
16
  jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
16
17
  jarvis/jarvis_agent/prompt_manager.py,sha256=_1qLBSA3yn4nT_N3X2npTpW40Cp-pMeyvnzu-pnG0iU,2720
17
- jarvis/jarvis_agent/prompts.py,sha256=X6cXa-n0xqBQ8LDTgLsD0kqziAh1s0cNp89i4mxcvHg,9444
18
- jarvis/jarvis_agent/protocols.py,sha256=JWnJDikFEuwvFUv7uzXu0ggJ4O9K2FkMnfVCwIJ5REw,873
19
- jarvis/jarvis_agent/run_loop.py,sha256=MccMT_8lPS4H8QaF7YuatKZR4ucBzy71H-_6mIZliB4,4885
18
+ jarvis/jarvis_agent/prompts.py,sha256=CvbPYx_klEz6OQrxVReZAnC2uQNo53rWkkucmh30uKg,9531
19
+ jarvis/jarvis_agent/protocols.py,sha256=YFJaC9MHi7JfLzmvlyotJDjiCO4Z07XJXy1gKhVdUy4,956
20
+ jarvis/jarvis_agent/run_loop.py,sha256=GdOERKfQUTx5EtHMA-4ilmA__SJzXksheP44Oo6HF9c,4300
20
21
  jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
21
22
  jarvis/jarvis_agent/share_manager.py,sha256=MF2RlomcgPxF8nVUk28DP6IRddZ_tot5l_YRvy0qXSQ,8726
22
- jarvis/jarvis_agent/shell_input_handler.py,sha256=ts9XNvRs_LYX9Hh6hdYEinuAsJfj1PsaOgQHDdlldVk,1859
23
- jarvis/jarvis_agent/task_analyzer.py,sha256=tA9_LX-lyYJqiJBqPWmfQYQZ6fe07ZGTJEWP_zCp2FM,7643
24
- jarvis/jarvis_agent/task_manager.py,sha256=voR-L8okMWRKxZh79FsER0DaUHk-fKOzijXlDiQzJxs,6399
23
+ jarvis/jarvis_agent/shell_input_handler.py,sha256=wiAPjB-9uTkcLszbO5dlOUwIfaeR39RgRcZhahIGqoA,2018
24
+ jarvis/jarvis_agent/task_analyzer.py,sha256=JXc-63hnTD7oSX-nIfRcgxqCMhh4fM4QYVc7C1gp--M,7813
25
+ jarvis/jarvis_agent/task_manager.py,sha256=lme_aN8vaF_a4Tvv2kaSEnWATy8RPSjogTxeLnEYZdg,6504
25
26
  jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
26
27
  jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
27
28
  jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
29
+ jarvis/jarvis_agent/utils.py,sha256=ldgfuNTNu4JU7Y1LtystBl85OC6H3A4OMycg0XBt_Cs,1615
28
30
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- jarvis/jarvis_code_agent/code_agent.py,sha256=mt78h3VLAbTAjTHOwjxNDOllHqfiHwFcAfmvUjiJFQI,32227
31
+ jarvis/jarvis_code_agent/code_agent.py,sha256=0DjuaKSCz3vnS82EsjU9XB2Dc4si7Ryhbne9kL7IS14,32367
30
32
  jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
31
33
  jarvis/jarvis_code_analysis/code_review.py,sha256=Z0JsvyVPPHPm6rfo4fqaQr7CdZKIllo9jqStzV0i_-o,34470
32
34
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
@@ -49,17 +51,17 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
49
51
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
50
52
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
51
53
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
52
- jarvis/jarvis_data/config_schema.json,sha256=fXISAybgeJOmXHPK0j3XjBgA25mn6ZHz7Qq8dl1O9wU,12863
54
+ jarvis/jarvis_data/config_schema.json,sha256=GIzimcbNNedR3Fy_WwVdWAOgi-ODVerpWX83kYHF0NM,13068
53
55
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
54
56
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
57
  jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
56
58
  jarvis/jarvis_git_utils/git_commiter.py,sha256=9JoQz6dhzYPyvLrbRBJmcLf28S8_lKFW-TmO-u-hFns,16357
57
59
  jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
58
- jarvis/jarvis_mcp/sse_mcp_client.py,sha256=UIDBaFNuuaJE0YiKmtbZTqwZpkDI5SaS0my1DIJj-3g,22831
60
+ jarvis/jarvis_mcp/sse_mcp_client.py,sha256=okbuSxmY2HrDoqcuvZv2UWDmDCrB5fb-FAeduYNBpdg,22831
59
61
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=sdVwHgBoXa95WeUTmFIq9ys3eRgEB5Psalfqq5FzMMI,11277
60
62
  jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=BenOeZGNHdUOJT5Z3cc5MhS6aOeKQgqXm1ED-BqsLCY,15511
61
63
  jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=RQeuQGUDOVXDFws-AptDRjJgUqt4UYSAFRhT1jdZe-M,26295
64
+ jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=CMFL46vvtpcTI6oS3CAlYteR6xAlwCkvVJmMT22uDRw,26295
63
65
  jarvis/jarvis_methodology/main.py,sha256=uiNzk5b5O6xdvRhsOuD7ubxdd2tPcDsFFnvmes8uH8I,11370
64
66
  jarvis/jarvis_multi_agent/__init__.py,sha256=OD3ZyuxPNPHaqjQqiKiW0HuB0DI_sdv41wFlCISHWIQ,6084
65
67
  jarvis/jarvis_multi_agent/main.py,sha256=b9IThFMeUZCYSlgT-VT8r7xeBdrEE_zNT11awEc8IdY,1853
@@ -67,11 +69,11 @@ jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB
67
69
  jarvis/jarvis_platform/ai8.py,sha256=g8JkqPGs9SEbqstNMCc5rCHO0QcPHX9LNvb7HMWwB-Q,11471
68
70
  jarvis/jarvis_platform/base.py,sha256=u1XvfE83-S-3W_euMrMaaa8NdXeIHlo7VSxLBbN3K-Y,13504
69
71
  jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
70
- jarvis/jarvis_platform/kimi.py,sha256=dLES_E0VmDQ3TwjTZk5vCGdbvdBeSVvvlXR90m6vPfY,15711
72
+ jarvis/jarvis_platform/kimi.py,sha256=KLsf9udAsPRMbQ2JkBeiAlXkupCBwdtMaJ-hpH4Jdkc,15711
71
73
  jarvis/jarvis_platform/openai.py,sha256=0YSeDGHRSPQP2haEzFARx_aZH_d_UZ-HSCsJLh2hW5k,8037
72
74
  jarvis/jarvis_platform/registry.py,sha256=YqaFM2LXcHvqMQrTEQ_cVo8V-wQ8HhOeSdC8DdjvC00,8045
73
- jarvis/jarvis_platform/tongyi.py,sha256=0UM1VLbBYrlNF5dSRqp2Kefeb0FkXhKhc7PnrsZWqOQ,23456
74
- jarvis/jarvis_platform/yuanbao.py,sha256=oeoomh7RjF4Y3bOF-ooUv6wE6UU13Cmi2K6NfoCwpi0,23954
75
+ jarvis/jarvis_platform/tongyi.py,sha256=QQHDn-kNcb_UH-B49lVIQTlHzYd_O8CFWN7SZqy38S4,23456
76
+ jarvis/jarvis_platform/yuanbao.py,sha256=jlttNWq-Bq9JLxaI6MOsxKZaNEXF1EfVVB7mjtVcYMA,23954
75
77
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
78
  jarvis/jarvis_platform_manager/main.py,sha256=yv7m8cNRBe4nk0Kui1w2PKTUr9Sb3wrQirvmyAUbr5U,20400
77
79
  jarvis/jarvis_platform_manager/service.py,sha256=kFIsFTwaMZ1ooQNFAwvUXjB7G2enbAqHExCdO3jskzQ,14892
@@ -83,22 +85,22 @@ jarvis/jarvis_rag/llm_interface.py,sha256=ntZzJtq-74d8ljqm-_flHaFys_RHjMMZRCKcMd
83
85
  jarvis/jarvis_rag/query_rewriter.py,sha256=LGAWZ8kwH_dpquuYqc4QWC7IXmHX3SsnPSYMWOn-nDE,4072
84
86
  jarvis/jarvis_rag/rag_pipeline.py,sha256=aaTuxiArtVaPemWeySApw64q204JeLNXpOEtq7Adn1I,13797
85
87
  jarvis/jarvis_rag/reranker.py,sha256=7Azc3y5fngwfPKtzZ8tx6iGKNeqC8uDy8yo8VCyLyL4,2670
86
- jarvis/jarvis_rag/retriever.py,sha256=BNEFZAgxTbmkxzBP1uy1wz3MX8wJN1wx5EtfsHqakqE,18374
88
+ jarvis/jarvis_rag/retriever.py,sha256=J4jO0492yHEwxJz_Cp2WP3vGHRHKj56rDyWZQ2W0XdA,18374
87
89
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
90
  jarvis/jarvis_smart_shell/main.py,sha256=lUJPwLR9RlaaVv0lx3ojjjv5dELHOaindlsLDDkpssQ,14960
89
91
  jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
90
92
  jarvis/jarvis_stats/cli.py,sha256=TsX4JQmEKjkFLkO_e81w7_6mXMin-7Mv_It_dols0q8,11477
91
- jarvis/jarvis_stats/stats.py,sha256=MrVX0nJatCMd-ceijOVuY7jofwMxsf4QYMujyacvgAM,25355
92
- jarvis/jarvis_stats/storage.py,sha256=Lo2kPpqM4RDW0llkDWBTlij9B2k1FfmYgo05ekiaqoQ,22079
93
+ jarvis/jarvis_stats/stats.py,sha256=_z7ZEZHGy8aLbcDJ0qTGrrl9M6bOix_-hveN2Af5GiI,25375
94
+ jarvis/jarvis_stats/storage.py,sha256=ztahlCf5ZaHizcJ3Kijmx6irTbzU_I9UEOgEwHZF84s,22084
93
95
  jarvis/jarvis_stats/visualizer.py,sha256=ZIBmGELzs6c7qM01tQql1HF6eFKn6HDGVQfKXRUUIY0,8529
94
96
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
97
  jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
96
98
  jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
97
99
  jarvis/jarvis_tools/clear_memory.py,sha256=8DOq6dHLemfKTJqu227PWBIp8Iu5K7EXwINzL8DYk8M,8205
98
- jarvis/jarvis_tools/edit_file.py,sha256=t76zzfHjbAnx_7ZUqu9SvzGxnfMMZQXZxX3tPX7JkdE,7099
99
- jarvis/jarvis_tools/execute_script.py,sha256=UeOTv5Vf6KqmPH-gSwFf2xz4pRAADo9KTUUpi6yU138,6221
100
+ jarvis/jarvis_tools/edit_file.py,sha256=a6iyeH2MroejGCoaNDkXwGbSfqFikKbh6tG6Woljvi8,7105
101
+ jarvis/jarvis_tools/execute_script.py,sha256=oDOMn8GcV6qKP4d0RFT6xbHGTazRmaOlp-h_e_Wj80c,6227
100
102
  jarvis/jarvis_tools/file_analyzer.py,sha256=jzVb8fAJn3dWwpCiYH-Wuxva4kpHqBB2_V3x3mzY0Gs,4158
101
- jarvis/jarvis_tools/generate_new_tool.py,sha256=KBx0uxpdmqqGuK-DjaNrepp-JCTFJbgBh02sfQsVeqw,7792
103
+ jarvis/jarvis_tools/generate_new_tool.py,sha256=tJz0YtfDwyH9y00VEWw3Btqr9JCNhvtI8BN9i5hYk_M,8560
102
104
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
103
105
  jarvis/jarvis_tools/read_code.py,sha256=qeQZ_emyPI5RTFx4HSgLBtWSwh8V5chqMjxu2uKzmfY,6100
104
106
  jarvis/jarvis_tools/read_webpage.py,sha256=YTmoalY8y-jdQuoj9IL6ZjXPOevUj2P_9arJngPhbUY,5317
@@ -107,29 +109,29 @@ jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh5
107
109
  jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
108
110
  jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
109
111
  jarvis/jarvis_tools/search_web.py,sha256=nkbmyIquGLl2JkgWP6pQ9dPcLlfQCuegwt_RKE0YWU0,6158
110
- jarvis/jarvis_tools/sub_agent.py,sha256=KLaRjBfSAjnWm5SIvm4_yk0AXcb7ck6C5UBkzqXBEJQ,8899
111
- jarvis/jarvis_tools/sub_code_agent.py,sha256=K9UaLOIQqV8cXHhNcVZ508a81C-qKNAg_j6wMziZ75s,9447
112
+ jarvis/jarvis_tools/sub_agent.py,sha256=kjMZBXQE3OUgm5eO9lNkOuBnugWQGZbCpVP0HNW5W2s,8905
113
+ jarvis/jarvis_tools/sub_code_agent.py,sha256=vVPcGKfgyhbZzl8vp2HHbgR1oQzC0TlS0G3THoZgU5Q,9453
112
114
  jarvis/jarvis_tools/virtual_tty.py,sha256=L7-J00ARQvIa25T45Hhqg2eCBl6W2LFgqDlWMWf-7dk,25275
113
115
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
116
  jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVPxs,9323
115
117
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
116
118
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
117
119
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
118
- jarvis/jarvis_utils/config.py,sha256=FjoSL6CHF-i18RwLDKPR7GIEJ2GlORdsjeJw2oXjs0g,20044
120
+ jarvis/jarvis_utils/config.py,sha256=YpIwuRxLhChe0XYoh7nVK0peEILo1NCBvAnxzouHRag,20407
119
121
  jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
120
122
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
121
- jarvis/jarvis_utils/fzf.py,sha256=92u4w5pd6cyxBJlmyw3rXNyxToSAalK79m_aEBmkgV0,1590
122
- jarvis/jarvis_utils/git_utils.py,sha256=Ed-11luixxuWKw4pT7Nq3vxU1G7DMBBya_CA7Xanzjk,23495
123
+ jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
124
+ jarvis/jarvis_utils/git_utils.py,sha256=vclHYC2LzyyyHQCMaYENGUwfr7NoajpG8aJ_qr3LgJo,23731
123
125
  jarvis/jarvis_utils/globals.py,sha256=7Xvf9HY6jYJL4vSD1F1WCoxHkHCAyltJUYt4V9gGVU4,8865
124
126
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
125
- jarvis/jarvis_utils/input.py,sha256=J4ot3ldeCLbhrJdsoQVdl8L6BHg-dJhcrnP3UYL4vis,36502
127
+ jarvis/jarvis_utils/input.py,sha256=EBdjPopkxVpG4JsnP9gtTSJ10u_scagujyKyOMhatLQ,36524
126
128
  jarvis/jarvis_utils/methodology.py,sha256=z_renvRGgHiC-XTQPuN6rvrJ_ffHlwxK_b1BU_jmNAQ,12800
127
129
  jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
128
130
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
129
- jarvis/jarvis_utils/utils.py,sha256=CJwytbsM0rZjfWDNnYsW1iLNkFap2_JbjuSg5Yq33W0,67136
130
- jarvis_ai_assistant-0.3.28.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
131
- jarvis_ai_assistant-0.3.28.dist-info/METADATA,sha256=DiuU2MhlO7Q5Z7NbFq5RVouUnOeYozBwjF7NtHQ-XTY,18752
132
- jarvis_ai_assistant-0.3.28.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
133
- jarvis_ai_assistant-0.3.28.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
134
- jarvis_ai_assistant-0.3.28.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
135
- jarvis_ai_assistant-0.3.28.dist-info/RECORD,,
131
+ jarvis/jarvis_utils/utils.py,sha256=U3B_uz0-iZa4412krx37AsB6PXBJAvVyxOSlsLjPbRM,70590
132
+ jarvis_ai_assistant-0.3.30.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
133
+ jarvis_ai_assistant-0.3.30.dist-info/METADATA,sha256=VnXgGix74c52WCbc-y1dLDDxayj4RK2zCZBVokpw4PQ,18752
134
+ jarvis_ai_assistant-0.3.30.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
+ jarvis_ai_assistant-0.3.30.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
136
+ jarvis_ai_assistant-0.3.30.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
137
+ jarvis_ai_assistant-0.3.30.dist-info/RECORD,,