jarvis-ai-assistant 0.3.25__py3-none-any.whl → 0.3.27__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 (35) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +290 -169
  3. jarvis/jarvis_agent/config.py +92 -0
  4. jarvis/jarvis_agent/event_bus.py +48 -0
  5. jarvis/jarvis_agent/jarvis.py +69 -35
  6. jarvis/jarvis_agent/memory_manager.py +70 -2
  7. jarvis/jarvis_agent/prompt_manager.py +82 -0
  8. jarvis/jarvis_agent/run_loop.py +130 -0
  9. jarvis/jarvis_agent/task_analyzer.py +88 -9
  10. jarvis/jarvis_agent/task_manager.py +26 -0
  11. jarvis/jarvis_agent/user_interaction.py +42 -0
  12. jarvis/jarvis_code_agent/code_agent.py +18 -3
  13. jarvis/jarvis_code_agent/lint.py +5 -5
  14. jarvis/jarvis_data/config_schema.json +7 -6
  15. jarvis/jarvis_git_squash/main.py +6 -1
  16. jarvis/jarvis_git_utils/git_commiter.py +38 -12
  17. jarvis/jarvis_platform/base.py +4 -5
  18. jarvis/jarvis_platform_manager/main.py +28 -11
  19. jarvis/jarvis_rag/cli.py +5 -9
  20. jarvis/jarvis_stats/cli.py +13 -32
  21. jarvis/jarvis_stats/stats.py +179 -51
  22. jarvis/jarvis_tools/registry.py +15 -0
  23. jarvis/jarvis_tools/sub_agent.py +94 -84
  24. jarvis/jarvis_tools/sub_code_agent.py +12 -6
  25. jarvis/jarvis_utils/config.py +14 -0
  26. jarvis/jarvis_utils/fzf.py +56 -0
  27. jarvis/jarvis_utils/git_utils.py +3 -8
  28. jarvis/jarvis_utils/input.py +0 -3
  29. jarvis/jarvis_utils/utils.py +96 -16
  30. {jarvis_ai_assistant-0.3.25.dist-info → jarvis_ai_assistant-0.3.27.dist-info}/METADATA +2 -3
  31. {jarvis_ai_assistant-0.3.25.dist-info → jarvis_ai_assistant-0.3.27.dist-info}/RECORD +35 -29
  32. {jarvis_ai_assistant-0.3.25.dist-info → jarvis_ai_assistant-0.3.27.dist-info}/WHEEL +0 -0
  33. {jarvis_ai_assistant-0.3.25.dist-info → jarvis_ai_assistant-0.3.27.dist-info}/entry_points.txt +0 -0
  34. {jarvis_ai_assistant-0.3.25.dist-info → jarvis_ai_assistant-0.3.27.dist-info}/licenses/LICENSE +0 -0
  35. {jarvis_ai_assistant-0.3.25.dist-info → jarvis_ai_assistant-0.3.27.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,56 @@
1
+ # -*- coding: utf-8 -*-
2
+ """FZF selector utility."""
3
+ import shutil
4
+ import subprocess
5
+ from typing import List, Optional, Union
6
+
7
+ def fzf_select(
8
+ options: Union[List[str], List[dict]],
9
+ prompt: str = "SELECT> ",
10
+ key: Optional[str] = None,
11
+ ) -> Optional[str]:
12
+ """
13
+ Uses fzf to select an item from a list.
14
+
15
+ Args:
16
+ options: A list of strings or dicts to choose from.
17
+ prompt: The prompt to display in fzf.
18
+ key: If options is a list of dicts, this is the key to display.
19
+
20
+ Returns:
21
+ The selected item, or None if fzf is not available or the selection is cancelled.
22
+ """
23
+ if shutil.which("fzf") is None:
24
+ return None
25
+
26
+ if not options:
27
+ return None
28
+
29
+ if isinstance(options[0], dict):
30
+ if key is None:
31
+ raise ValueError("A key must be provided for a list of dicts.")
32
+ input_lines = [str(item.get(key, "")) for item in options]
33
+ else:
34
+ input_lines = [str(item) for item in options]
35
+
36
+ try:
37
+ process = subprocess.run(
38
+ [
39
+ "fzf",
40
+ "--prompt",
41
+ prompt,
42
+ "--height",
43
+ "40%",
44
+ "--border",
45
+ "--layout=reverse",
46
+ ],
47
+ input="\n".join(input_lines),
48
+ stdout=subprocess.PIPE,
49
+ stderr=subprocess.PIPE,
50
+ text=True,
51
+ check=True,
52
+ )
53
+ selected = process.stdout.strip()
54
+ return selected if selected else None
55
+ except (subprocess.CalledProcessError, FileNotFoundError):
56
+ return None
@@ -19,6 +19,7 @@ from typing import Any, Dict, List, Set, Tuple
19
19
  from jarvis.jarvis_utils.config import get_data_dir, is_confirm_before_apply_patch
20
20
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
21
21
  from jarvis.jarvis_utils.input import user_confirm
22
+ from jarvis.jarvis_utils.utils import is_rag_installed
22
23
 
23
24
 
24
25
  def find_git_root_and_cd(start_dir: str = ".") -> str:
@@ -427,14 +428,8 @@ def check_and_update_git_repo(repo_path: str) -> bool:
427
428
  is_uv_env = True
428
429
 
429
430
  # 根据环境选择安装命令
430
- # 检测是否安装了 RAG 特性
431
- rag_installed = False
432
- try:
433
- import langchain # noqa
434
-
435
- rag_installed = True
436
- except ImportError:
437
- pass
431
+ # 检测是否安装了 RAG 特性(更精确)
432
+ rag_installed = is_rag_installed()
438
433
 
439
434
  # 根据环境和 RAG 特性选择安装命令
440
435
  if rag_installed:
@@ -605,9 +605,6 @@ def _get_multiline_input_internal(
605
605
  ("class:bt.key", "Ctrl+O"),
606
606
  ("class:bt.label", " 历史复制 "),
607
607
  ("class:bt.sep", " • "),
608
- ("class:bt.key", "@"),
609
- ("class:bt.label", " FZF文件 "),
610
- ("class:bt.sep", " • "),
611
608
  ("class:bt.key", "Ctrl+T"),
612
609
  ("class:bt.label", " 终端(!SHELL) "),
613
610
  ("class:bt.sep", " • "),
@@ -65,6 +65,41 @@ COMMAND_MAPPING = {
65
65
  "jmo": "jarvis-memory-organizer",
66
66
  }
67
67
 
68
+ # RAG 依赖检测工具函数(更精确)
69
+ _RAG_REQUIRED_MODULES = [
70
+ "langchain",
71
+ "langchain_community",
72
+ "chromadb",
73
+ "sentence_transformers",
74
+ "rank_bm25",
75
+ "unstructured",
76
+ ]
77
+ _RAG_OPTIONAL_MODULES = [
78
+ "langchain_huggingface",
79
+ ]
80
+
81
+
82
+ def get_missing_rag_modules() -> List[str]:
83
+ """
84
+ 返回缺失的 RAG 关键依赖模块列表。
85
+ 仅检查必要模块,不导入模块,避免副作用。
86
+ """
87
+ try:
88
+ from importlib.util import find_spec
89
+
90
+ missing = [m for m in _RAG_REQUIRED_MODULES if find_spec(m) is None]
91
+ return missing
92
+ except Exception:
93
+ # 任何异常都视为无法确认,保持保守策略
94
+ return _RAG_REQUIRED_MODULES[:] # 视为全部缺失
95
+
96
+
97
+ def is_rag_installed() -> bool:
98
+ """
99
+ 更准确的 RAG 安装检测:确认关键依赖模块均可用。
100
+ """
101
+ return len(get_missing_rag_modules()) == 0
102
+
68
103
 
69
104
  def _setup_signal_handler() -> None:
70
105
  """设置SIGINT信号处理函数"""
@@ -139,14 +174,11 @@ def _check_pip_updates() -> bool:
139
174
  if uv_path.exists():
140
175
  is_uv_env = True
141
176
 
142
- # 检测是否安装了 RAG 特性
143
- rag_installed = False
144
- try:
145
- import langchain # type: ignore # noqa
146
-
147
- rag_installed = True
148
- except ImportError:
149
- pass
177
+ # 检测是否安装了 RAG 特性(更精确)
178
+ from jarvis.jarvis_utils.utils import (
179
+ is_rag_installed as _is_rag_installed,
180
+ ) # 延迟导入避免潜在循环依赖
181
+ rag_installed = _is_rag_installed()
150
182
 
151
183
  # 提供更新命令
152
184
  package_spec = (
@@ -1147,6 +1179,46 @@ def _collect_optional_config_interactively(
1147
1179
  or changed
1148
1180
  )
1149
1181
 
1182
+ # Git 校验模式
1183
+ def _ask_git_check_mode() -> bool:
1184
+ try:
1185
+ _key = "JARVIS_GIT_CHECK_MODE"
1186
+ if not ask_all and _key in config_data:
1187
+ return False
1188
+
1189
+ from jarvis.jarvis_utils.input import get_choice
1190
+ from jarvis.jarvis_utils.config import get_git_check_mode
1191
+
1192
+ current_mode = config_data.get(_key, get_git_check_mode())
1193
+ choices = ["strict", "warn"]
1194
+ tip = (
1195
+ "请选择 Git 仓库检查模式 (JARVIS_GIT_CHECK_MODE):\n"
1196
+ "此设置决定了当在 Git 仓库中检测到未提交的更改时,Jarvis应如何处理。\n"
1197
+ "这对于确保代码修改和提交操作在干净的工作区上进行至关重要。\n"
1198
+ " - strict: (推荐) 如果存在未提交的更改,则中断相关操作(如代码修改、自动提交)。\n"
1199
+ " 这可以防止意外覆盖或丢失本地工作。\n"
1200
+ " - warn: 如果存在未提交的更改,仅显示警告信息,然后继续执行操作。\n"
1201
+ " 适用于您希望绕过检查并自行管理仓库状态的场景。"
1202
+ )
1203
+
1204
+ try:
1205
+ # 查找当前模式在选项中的索引
1206
+ default_index = choices.index(current_mode)
1207
+ except ValueError:
1208
+ default_index = 0 # 默认为第一个选项
1209
+
1210
+ new_mode = get_choice(tip, choices, default_index)
1211
+
1212
+ if new_mode == current_mode:
1213
+ return False
1214
+
1215
+ config_data[_key] = new_mode
1216
+ return True
1217
+ except Exception:
1218
+ return False
1219
+
1220
+ changed = _ask_git_check_mode() or changed
1221
+
1150
1222
  # Git 提交提示词(可选)
1151
1223
  changed = (
1152
1224
  _ask_and_set_optional_str(
@@ -1466,34 +1538,39 @@ def _read_old_config_file(config_file):
1466
1538
  )
1467
1539
 
1468
1540
 
1469
- def while_success(func: Callable[[], Any], sleep_time: float = 0.1) -> Any:
1541
+ def while_success(func: Callable[[], Any], sleep_time: float = 0.1, max_retries: int = 5) -> Any:
1470
1542
  """循环执行函数直到成功(累计日志后统一打印,避免逐次加框)
1471
1543
 
1472
1544
  参数:
1473
1545
  func -- 要执行的函数
1474
1546
  sleep_time -- 每次失败后的等待时间(秒)
1547
+ max_retries -- 最大重试次数,默认5次
1475
1548
 
1476
1549
  返回:
1477
1550
  函数执行结果
1478
1551
  """
1479
1552
  result: Any = None
1480
- while True:
1553
+ retry_count = 0
1554
+ while retry_count < max_retries:
1481
1555
  try:
1482
1556
  result = func()
1483
1557
  break
1484
1558
  except Exception:
1485
- PrettyOutput.print(f"重试中,等待 {sleep_time}s...", OutputType.WARNING)
1486
- time.sleep(sleep_time)
1559
+ retry_count += 1
1560
+ if retry_count < max_retries:
1561
+ PrettyOutput.print(f"重试中 ({retry_count}/{max_retries}),等待 {sleep_time}s...", OutputType.WARNING)
1562
+ time.sleep(sleep_time)
1487
1563
  continue
1488
1564
  return result
1489
1565
 
1490
1566
 
1491
- def while_true(func: Callable[[], bool], sleep_time: float = 0.1) -> Any:
1567
+ def while_true(func: Callable[[], bool], sleep_time: float = 0.1, max_retries: int = 5) -> Any:
1492
1568
  """循环执行函数直到返回True(累计日志后统一打印,避免逐次加框)
1493
1569
 
1494
1570
  参数:
1495
1571
  func: 要执行的函数,必须返回布尔值
1496
1572
  sleep_time: 每次失败后的等待时间(秒)
1573
+ max_retries: 最大重试次数,默认5次
1497
1574
 
1498
1575
  返回:
1499
1576
  函数最终返回的True值
@@ -1503,12 +1580,15 @@ def while_true(func: Callable[[], bool], sleep_time: float = 0.1) -> Any:
1503
1580
  不捕获异常,异常会直接抛出
1504
1581
  """
1505
1582
  ret: bool = False
1506
- while True:
1583
+ retry_count = 0
1584
+ while retry_count < max_retries:
1507
1585
  ret = func()
1508
1586
  if ret:
1509
1587
  break
1510
- PrettyOutput.print(f"重试中,等待 {sleep_time}s...", OutputType.WARNING)
1511
- time.sleep(sleep_time)
1588
+ retry_count += 1
1589
+ if retry_count < max_retries:
1590
+ PrettyOutput.print(f"重试中 ({retry_count}/{max_retries}),等待 {sleep_time}s...", OutputType.WARNING)
1591
+ time.sleep(sleep_time)
1512
1592
  return ret
1513
1593
 
1514
1594
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.25
3
+ Version: 0.3.27
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
@@ -64,8 +64,7 @@ Requires-Dist: plotext==5.2.8
64
64
  Requires-Dist: packaging>=24.2
65
65
  Provides-Extra: dev
66
66
  Requires-Dist: pytest; extra == "dev"
67
- Requires-Dist: black; extra == "dev"
68
- Requires-Dist: isort; extra == "dev"
67
+ Requires-Dist: ruff; extra == "dev"
69
68
  Requires-Dist: mypy; extra == "dev"
70
69
  Requires-Dist: build; extra == "dev"
71
70
  Requires-Dist: twine; extra == "dev"
@@ -1,28 +1,33 @@
1
- jarvis/__init__.py,sha256=Y5YWCRMaj8nleHAZXhZE59v10sX-ZvJ5CW8wpIDG-SM,74
2
- jarvis/jarvis_agent/__init__.py,sha256=eLSiwd-Eo6KqG0qLJ5peI-symxWUrTsxWCBnOgEO474,37524
1
+ jarvis/__init__.py,sha256=DlhBYMC44U1RQMIeyt3Nd2Eh37aTzGgUrvliKlFIIBE,74
2
+ jarvis/jarvis_agent/__init__.py,sha256=TjR_LJ56XBYrh4ip1OWF6jYpJdAqTc_zJM2pjxjzYjI,42363
3
3
  jarvis/jarvis_agent/agent_manager.py,sha256=mmDe26Wa1Dnyp8CkTKupcKipC-5HSuCnk-oVJseOdTg,2801
4
4
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
5
+ jarvis/jarvis_agent/config.py,sha256=Ni1aTVzmdERJ89A1jsC21Tsys_9MM-TTx1w5XwxyEwA,3130
5
6
  jarvis/jarvis_agent/config_editor.py,sha256=IHyuwI4SRDrqxz8lO0NNgt2F3uYAw1WEKXMxQV49bYI,1928
6
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
7
9
  jarvis/jarvis_agent/file_methodology_manager.py,sha256=PwDUQwq7HVIyPInsN8fgWyMXLwi8heIXPrqfBZJhVHs,4260
8
- jarvis/jarvis_agent/jarvis.py,sha256=UNI4PoJpf4L7wp9y8-A6AfMXMQv7ikRk2YXmN5pRKUc,22383
10
+ jarvis/jarvis_agent/jarvis.py,sha256=IAt5QWOR2ZTAsuLGXPf13FZ-rixRZg3hDnk4cAZ9m70,24012
9
11
  jarvis/jarvis_agent/main.py,sha256=bFcwXWC6O05jQiXy6ED_bHjdjDo5VwV_i1BoBEAzgP0,3336
10
- jarvis/jarvis_agent/memory_manager.py,sha256=Ckt6wmXOduu97jfyWQbRDmNH6yX11XzLW2nMTeVhFeY,5316
12
+ jarvis/jarvis_agent/memory_manager.py,sha256=fOCmH3QDq9D-tsFKauI0GHER-gGfEPhRDo97MqeUBtg,8003
11
13
  jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
12
14
  jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
13
15
  jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
16
+ jarvis/jarvis_agent/prompt_manager.py,sha256=_1qLBSA3yn4nT_N3X2npTpW40Cp-pMeyvnzu-pnG0iU,2720
14
17
  jarvis/jarvis_agent/prompts.py,sha256=X6cXa-n0xqBQ8LDTgLsD0kqziAh1s0cNp89i4mxcvHg,9444
15
18
  jarvis/jarvis_agent/protocols.py,sha256=JWnJDikFEuwvFUv7uzXu0ggJ4O9K2FkMnfVCwIJ5REw,873
19
+ jarvis/jarvis_agent/run_loop.py,sha256=MccMT_8lPS4H8QaF7YuatKZR4ucBzy71H-_6mIZliB4,4885
16
20
  jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
17
21
  jarvis/jarvis_agent/share_manager.py,sha256=MF2RlomcgPxF8nVUk28DP6IRddZ_tot5l_YRvy0qXSQ,8726
18
22
  jarvis/jarvis_agent/shell_input_handler.py,sha256=YjzmtcBUqJDYeD1i1cA1betUKaGOcvKNo8biayYEfc8,1860
19
- jarvis/jarvis_agent/task_analyzer.py,sha256=HeGr2_aCNoZpsm5Am05yEXtVNUUk7bE7XIIcJdltiTE,4666
20
- jarvis/jarvis_agent/task_manager.py,sha256=7OpLHLwBmxRFN37CCoVOPCUxjyo3dtE3sJ5ojD28ThA,5033
23
+ jarvis/jarvis_agent/task_analyzer.py,sha256=5TcS9nltqcm_gb-6I3wuc0Tc8pOgTrQSiwrJdkGDdSw,7676
24
+ jarvis/jarvis_agent/task_manager.py,sha256=voR-L8okMWRKxZh79FsER0DaUHk-fKOzijXlDiQzJxs,6399
21
25
  jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
22
26
  jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
27
+ jarvis/jarvis_agent/user_interaction.py,sha256=rMQjJoTrabZMmt-SOtg1UPCqxTdPDOaPOhfmCwE773M,1463
23
28
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- jarvis/jarvis_code_agent/code_agent.py,sha256=7b9bSQxKIYWpKCLqbQUjSxr16GhGbVCzKSIaxpOHptM,31363
25
- jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
29
+ jarvis/jarvis_code_agent/code_agent.py,sha256=2er9wAgYeMibaZLgWBq5vDLjO734aWEaxkpKxCsw_XM,32101
30
+ jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
26
31
  jarvis/jarvis_code_analysis/code_review.py,sha256=99izndiYBDcDJBu-gAXqpUkN9usmFfYroqJkZUw7AwA,34481
27
32
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
28
33
  jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
@@ -44,11 +49,11 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
44
49
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
45
50
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
46
51
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
47
- jarvis/jarvis_data/config_schema.json,sha256=_O_FQwmEldoGpTJ0EjyDjI6Zc2wkyr_7yVn00WA_Qf4,12575
52
+ jarvis/jarvis_data/config_schema.json,sha256=fXISAybgeJOmXHPK0j3XjBgA25mn6ZHz7Qq8dl1O9wU,12863
48
53
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
49
54
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- jarvis/jarvis_git_squash/main.py,sha256=6PECdAbTbrsJBRLK1pXBh4hdJ_LADh-XXSic1xJi97E,2255
51
- jarvis/jarvis_git_utils/git_commiter.py,sha256=mtrZpdq42567dnX-Q8OJ6ZtSRaqRDDDQxHAGRMXdej0,14559
55
+ jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
56
+ jarvis/jarvis_git_utils/git_commiter.py,sha256=mWuP_undXLkrok26gmO83PjBDKc0dPolWEciemXRXos,15790
52
57
  jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
53
58
  jarvis/jarvis_mcp/sse_mcp_client.py,sha256=UIDBaFNuuaJE0YiKmtbZTqwZpkDI5SaS0my1DIJj-3g,22831
54
59
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
@@ -60,7 +65,7 @@ jarvis/jarvis_multi_agent/__init__.py,sha256=Ygp4DBBkmEXCRcQV3nr07zOxo2Tb4149mi4
60
65
  jarvis/jarvis_multi_agent/main.py,sha256=b9IThFMeUZCYSlgT-VT8r7xeBdrEE_zNT11awEc8IdY,1853
61
66
  jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
62
67
  jarvis/jarvis_platform/ai8.py,sha256=g8JkqPGs9SEbqstNMCc5rCHO0QcPHX9LNvb7HMWwB-Q,11471
63
- jarvis/jarvis_platform/base.py,sha256=5RLs5d4iYQ6PdSgKXj9idoCkln68Kmrv7-Sh7HBGbyw,13434
68
+ jarvis/jarvis_platform/base.py,sha256=wKZJConlNtqpr2w5IGIxu4fNMt8Yr2w8banQJH0wn64,13505
64
69
  jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
65
70
  jarvis/jarvis_platform/kimi.py,sha256=dLES_E0VmDQ3TwjTZk5vCGdbvdBeSVvvlXR90m6vPfY,15711
66
71
  jarvis/jarvis_platform/openai.py,sha256=0YSeDGHRSPQP2haEzFARx_aZH_d_UZ-HSCsJLh2hW5k,8037
@@ -68,11 +73,11 @@ jarvis/jarvis_platform/registry.py,sha256=uwQvivGKuDT2LI-e_jUPvPR8Qyc7KTANkWGZLM
68
73
  jarvis/jarvis_platform/tongyi.py,sha256=0UM1VLbBYrlNF5dSRqp2Kefeb0FkXhKhc7PnrsZWqOQ,23456
69
74
  jarvis/jarvis_platform/yuanbao.py,sha256=W0aIQOZoHt4QGYYBYzRbVWlgwAdhzoCv93xD7v8Lvqc,24004
70
75
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- jarvis/jarvis_platform_manager/main.py,sha256=tU25oVQzEFPB8aOqPec8SgnxsapCFuHBkYubxiutxqA,19662
76
+ jarvis/jarvis_platform_manager/main.py,sha256=yv7m8cNRBe4nk0Kui1w2PKTUr9Sb3wrQirvmyAUbr5U,20400
72
77
  jarvis/jarvis_platform_manager/service.py,sha256=WG2r0JRBGfSLGdsKxqYvmaacU_ne3PTn3RkczTzUb_M,14899
73
78
  jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
74
79
  jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
75
- jarvis/jarvis_rag/cli.py,sha256=l2TsLEC9plcJ5C2CF3JAYLigM-64QOPZR9Ywlb5FGiE,17454
80
+ jarvis/jarvis_rag/cli.py,sha256=4tcB76I87QNHCSp29JDslETJSH5oWPtNYMlos-6dZu0,17532
76
81
  jarvis/jarvis_rag/embedding_manager.py,sha256=SF7BW8hoZWzDhDqlOdhnX6XTw42Fx2GKs7Y_RUT1ydo,10400
77
82
  jarvis/jarvis_rag/llm_interface.py,sha256=DH46Vm3AgzK1o41X7wUUYUbbOOVPgmDCxS5l6djm9eA,4561
78
83
  jarvis/jarvis_rag/query_rewriter.py,sha256=LGAWZ8kwH_dpquuYqc4QWC7IXmHX3SsnPSYMWOn-nDE,4072
@@ -82,8 +87,8 @@ jarvis/jarvis_rag/retriever.py,sha256=BNEFZAgxTbmkxzBP1uy1wz3MX8wJN1wx5EtfsHqakq
82
87
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
88
  jarvis/jarvis_smart_shell/main.py,sha256=JizPfVI-7-GqnYxdg77RHietGet6hZE6xUZoUCwKShE,14971
84
89
  jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
85
- jarvis/jarvis_stats/cli.py,sha256=iWuhA1AQAIOccXVUaO-k87T2b10s08wyeKAY5lUQ4og,12702
86
- jarvis/jarvis_stats/stats.py,sha256=AiQck1ma78YGR4hjT-leab-6GRMIQQmCp7wcG5SRKWw,19379
90
+ jarvis/jarvis_stats/cli.py,sha256=ngKrJ5Y4fUqZ4ghcCTvk2mDZsKWZw1ZgvTtVWu9p9Ec,11552
91
+ jarvis/jarvis_stats/stats.py,sha256=XXBpU5vpi60rTpnTr3Nj7m7-uBQpnvopCj1CwU4rfew,25391
87
92
  jarvis/jarvis_stats/storage.py,sha256=Lo2kPpqM4RDW0llkDWBTlij9B2k1FfmYgo05ekiaqoQ,22079
88
93
  jarvis/jarvis_stats/visualizer.py,sha256=ZIBmGELzs6c7qM01tQql1HF6eFKn6HDGVQfKXRUUIY0,8529
89
94
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -97,33 +102,34 @@ jarvis/jarvis_tools/generate_new_tool.py,sha256=OCHkBOCQflgMZXRP4vgX3blnJOUq-_Qk
97
102
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
98
103
  jarvis/jarvis_tools/read_code.py,sha256=qeQZ_emyPI5RTFx4HSgLBtWSwh8V5chqMjxu2uKzmfY,6100
99
104
  jarvis/jarvis_tools/read_webpage.py,sha256=YTmoalY8y-jdQuoj9IL6ZjXPOevUj2P_9arJngPhbUY,5317
100
- jarvis/jarvis_tools/registry.py,sha256=BFo5ih929IKvgIKHB3_neXco6JLFqLqQw9FTYpOgcnI,32016
105
+ jarvis/jarvis_tools/registry.py,sha256=xjlOvyWM8xzT6WJs80G4AQN7ICMgXoPmOgKIKYPIn5U,32909
101
106
  jarvis/jarvis_tools/retrieve_memory.py,sha256=hQ3s4IgBHtmUPzuWFl5Pc2FLEuT2gdi4l4NlUoO9pQM,8640
102
107
  jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
103
108
  jarvis/jarvis_tools/save_memory.py,sha256=QKj6iYZL2XxPX0NnU9HqvoDOpJZ38mJmatDmHLK2r74,7012
104
109
  jarvis/jarvis_tools/search_web.py,sha256=8ugOcGBsAEg59pX_WS0WADuu7Klw7XGR6guEMz4OnwI,6181
105
- jarvis/jarvis_tools/sub_agent.py,sha256=GTn6JXIsomHw9M46HTybIYgyFHUc72AFrbI4l9cwUro,7983
106
- jarvis/jarvis_tools/sub_code_agent.py,sha256=JSQKJNBO3zQsCNk3x-CPzqTIRPeOt8rvP4WPC-JQOwI,7848
110
+ jarvis/jarvis_tools/sub_agent.py,sha256=r1RRZwqIp0qiix-EAH8gJA_xECVLpenoCvcqD0a-qEM,7784
111
+ jarvis/jarvis_tools/sub_code_agent.py,sha256=FzsZPSgevDToLBUXnJECIjNDhMn4st6IiRLLWjoYLQw,8149
107
112
  jarvis/jarvis_tools/virtual_tty.py,sha256=1AYrVNP5QCX1HGo-xi3XEP93cMWZUOkil4ki2gwf7dI,25504
108
113
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
114
  jarvis/jarvis_tools/cli/main.py,sha256=pyvSz0-hBduOqQShduv76UcB5wrK0v6MLonpub9AuXg,9334
110
115
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
111
116
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
112
117
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
113
- jarvis/jarvis_utils/config.py,sha256=44MIH-CLRYpv8ltpirnq5_EccE1fVVGQciCiWRuDYmo,18824
118
+ jarvis/jarvis_utils/config.py,sha256=F_sjwrO5_vyZIfev8EzgtBtSYFTMdIanQ1cLrH-9txk,19120
114
119
  jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
115
120
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
116
- jarvis/jarvis_utils/git_utils.py,sha256=AkczUiRcGcOnPfz2v3mdLwV1S41IopiAYD2tjeMTDrE,23586
121
+ jarvis/jarvis_utils/fzf.py,sha256=92u4w5pd6cyxBJlmyw3rXNyxToSAalK79m_aEBmkgV0,1590
122
+ jarvis/jarvis_utils/git_utils.py,sha256=X-j4aopmzmAW8Uv5rs3SDRnsAQYwJRnR6gR8yxXGEWg,23500
117
123
  jarvis/jarvis_utils/globals.py,sha256=aTrOHcCgPAeZFLFIWMAMiJCYlmr4XhdFZf5gZ745hnE,8900
118
124
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
119
- jarvis/jarvis_utils/input.py,sha256=tGIr3-t46gT3dD-Z6Bcb5xagIifM62cAHRkk3w9p7_Q,36635
125
+ jarvis/jarvis_utils/input.py,sha256=J4ot3ldeCLbhrJdsoQVdl8L6BHg-dJhcrnP3UYL4vis,36502
120
126
  jarvis/jarvis_utils/methodology.py,sha256=3PAMHVF85IflBBblV_mMwkYXMelUML0nZYZ8MOAYUJ8,12918
121
127
  jarvis/jarvis_utils/output.py,sha256=svCHLuXHe3Ta_qfoT5DxO80nyYyMfBFIKgziQS__Nmg,13632
122
128
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
123
- jarvis/jarvis_utils/utils.py,sha256=sK0-A6DVxqyxJE54K7j2vKGIAVQBpd7O54xOtBWLFt4,62268
124
- jarvis_ai_assistant-0.3.25.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
125
- jarvis_ai_assistant-0.3.25.dist-info/METADATA,sha256=x_-BQj684awisXcDf-gV-9T7ycgni8QWZiAAZI6KSrg,18790
126
- jarvis_ai_assistant-0.3.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
127
- jarvis_ai_assistant-0.3.25.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
128
- jarvis_ai_assistant-0.3.25.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
129
- jarvis_ai_assistant-0.3.25.dist-info/RECORD,,
129
+ jarvis/jarvis_utils/utils.py,sha256=CBEr4CeA8npCX7HQT0z2rpr1FmuehrtjWz1dpUW2Uk8,65391
130
+ jarvis_ai_assistant-0.3.27.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
131
+ jarvis_ai_assistant-0.3.27.dist-info/METADATA,sha256=7hKr_nyMqxJ1qysd1ihzY44fdDinvJ18UoJ2gQlDjCc,18752
132
+ jarvis_ai_assistant-0.3.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
133
+ jarvis_ai_assistant-0.3.27.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
134
+ jarvis_ai_assistant-0.3.27.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
135
+ jarvis_ai_assistant-0.3.27.dist-info/RECORD,,