jarvis-ai-assistant 0.3.30__py3-none-any.whl → 0.3.32__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.
@@ -679,7 +679,7 @@ def _show_usage_stats(welcome_str: str) -> None:
679
679
 
680
680
  # 愿景 Panel
681
681
  vision_text = Text(
682
- "重新定义开发者体验,打破人与工具的界限,构建开发者与AI之间真正的共生伙伴关系。",
682
+ "让开发者与AI成为共生伙伴",
683
683
  justify="center",
684
684
  style="italic",
685
685
  )
@@ -694,7 +694,7 @@ def _show_usage_stats(welcome_str: str) -> None:
694
694
 
695
695
  # 使命 Panel
696
696
  mission_text = Text(
697
- "通过深度人机协作,将开发者的灵感(Vibe)高效落地为代码与行动,释放创造之力。",
697
+ "让灵感高效落地为代码与行动",
698
698
  justify="center",
699
699
  style="italic",
700
700
  )
@@ -1142,11 +1142,17 @@ def _collect_optional_config_interactively(
1142
1142
  )
1143
1143
 
1144
1144
  # 新增的配置项交互(通用体验相关)
1145
+ # 根据平台统一默认值:Windows下为False,其它平台为True(与config.get_pretty_output一致)
1146
+ try:
1147
+ import platform as _platform_mod
1148
+ _default_pretty = False if _platform_mod.system() == "Windows" else True
1149
+ except Exception:
1150
+ _default_pretty = True
1145
1151
  changed = (
1146
1152
  _ask_and_set(
1147
1153
  "JARVIS_PRETTY_OUTPUT",
1148
1154
  "是否启用更美观的终端输出(Pretty Output)?",
1149
- False,
1155
+ _default_pretty,
1150
1156
  "bool",
1151
1157
  )
1152
1158
  or changed
@@ -1200,7 +1206,7 @@ def _collect_optional_config_interactively(
1200
1206
  _ask_and_set(
1201
1207
  "JARVIS_FORCE_SAVE_MEMORY",
1202
1208
  "是否强制保存会话记忆?",
1203
- True,
1209
+ False,
1204
1210
  "bool",
1205
1211
  )
1206
1212
  or changed
@@ -1330,6 +1336,38 @@ def _collect_optional_config_interactively(
1330
1336
 
1331
1337
 
1332
1338
 
1339
+ new_mode = get_choice(
1340
+ tip,
1341
+ choices,
1342
+ )
1343
+
1344
+ if new_mode == current_mode:
1345
+ return False
1346
+
1347
+ config_data[_key] = new_mode
1348
+ return True
1349
+ except Exception:
1350
+ return False
1351
+
1352
+ def _ask_patch_format_mode() -> bool:
1353
+ try:
1354
+ _key = "JARVIS_PATCH_FORMAT"
1355
+ if not ask_all and _key in config_data:
1356
+ return False
1357
+
1358
+ from jarvis.jarvis_utils.input import get_choice
1359
+ from jarvis.jarvis_utils.config import get_patch_format
1360
+
1361
+ current_mode = config_data.get(_key, get_patch_format())
1362
+ choices = ["all", "search", "search_range"]
1363
+ tip = (
1364
+ "请选择补丁格式处理模式 (JARVIS_PATCH_FORMAT):\n"
1365
+ "该设置影响 edit_file_handler 在处理补丁时允许的匹配方式。\n"
1366
+ " - all: 同时支持 SEARCH 与 SEARCH_START/SEARCH_END 两种模式(默认)。\n"
1367
+ " - search: 仅允许精确片段匹配(SEARCH)。更稳定,适合较弱模型或严格控制改动。\n"
1368
+ " - search_range: 仅允许范围匹配(SEARCH_START/SEARCH_END)。更灵活,适合较强模型和块内细粒度修改。"
1369
+ )
1370
+
1333
1371
  new_mode = get_choice(
1334
1372
  tip,
1335
1373
  choices,
@@ -1344,6 +1382,7 @@ def _collect_optional_config_interactively(
1344
1382
  return False
1345
1383
 
1346
1384
  changed = _ask_git_check_mode() or changed
1385
+ changed = _ask_patch_format_mode() or changed
1347
1386
 
1348
1387
  # Git 提交提示词(可选)
1349
1388
  changed = (
@@ -1680,11 +1719,11 @@ def while_success(func: Callable[[], Any], sleep_time: float = 0.1, max_retries:
1680
1719
  try:
1681
1720
  result = func()
1682
1721
  break
1683
- except Exception:
1722
+ except Exception as e:
1684
1723
  retry_count += 1
1685
1724
  if retry_count < max_retries:
1686
1725
  PrettyOutput.print(
1687
- f"发生异常,重试中 ({retry_count}/{max_retries}),等待 {sleep_time}s...",
1726
+ f"发生异常:\n{e}\n重试中 ({retry_count}/{max_retries}),等待 {sleep_time}s...",
1688
1727
  OutputType.WARNING,
1689
1728
  )
1690
1729
  time.sleep(sleep_time)
@@ -1730,9 +1769,22 @@ def get_file_md5(filepath: str) -> str:
1730
1769
  filepath: 要计算哈希的文件路径
1731
1770
 
1732
1771
  返回:
1733
- str: 文件内容的MD5哈希值
1772
+ str: 文件内容的MD5哈希值(为降低内存占用,仅读取前100MB进行计算)
1734
1773
  """
1735
- return hashlib.md5(open(filepath, "rb").read(100 * 1024 * 1024)).hexdigest()
1774
+ # 采用流式读取,避免一次性加载100MB到内存
1775
+ h = hashlib.md5()
1776
+ max_bytes = 100 * 1024 * 1024 # 与原实现保持一致:仅读取前100MB
1777
+ buf_size = 8 * 1024 * 1024 # 8MB缓冲
1778
+ read_bytes = 0
1779
+ with open(filepath, "rb") as f:
1780
+ while read_bytes < max_bytes:
1781
+ to_read = min(buf_size, max_bytes - read_bytes)
1782
+ chunk = f.read(to_read)
1783
+ if not chunk:
1784
+ break
1785
+ h.update(chunk)
1786
+ read_bytes += len(chunk)
1787
+ return h.hexdigest()
1736
1788
 
1737
1789
 
1738
1790
  def get_file_line_count(filename: str) -> int:
@@ -1745,7 +1797,9 @@ def get_file_line_count(filename: str) -> int:
1745
1797
  int: 文件中的行数,如果文件无法读取则返回0
1746
1798
  """
1747
1799
  try:
1748
- return len(open(filename, "r", encoding="utf-8", errors="ignore").readlines())
1800
+ # 使用流式逐行计数,避免将整个文件读入内存
1801
+ with open(filename, "r", encoding="utf-8", errors="ignore") as f:
1802
+ return sum(1 for _ in f)
1749
1803
  except Exception:
1750
1804
  return 0
1751
1805
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.30
3
+ Version: 0.3.32
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,14 +1,14 @@
1
- jarvis/__init__.py,sha256=UpbmB-TeVTIG-j9qC27w2Pdl9nDtcZc6sO3wyLbGRJ8,74
2
- jarvis/jarvis_agent/__init__.py,sha256=BmIyS7P47Z9Ora2YfywMhvp1G2CYyU2WAzuOM1YgnuU,47962
1
+ jarvis/__init__.py,sha256=FrY3n45NnZ384YSR1UaQF1-ryuCK5R3PbKYXg7dMa7I,74
2
+ jarvis/jarvis_agent/__init__.py,sha256=Mp0lcivL99cL2eIjHz-D1C86XMOhJkFYtnQcJoflfH4,49033
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
- jarvis/jarvis_agent/edit_file_handler.py,sha256=5sFz84jqy2gpc0aLOre2bvz8_DitlBoWZs_cQwftWLw,11570
7
+ jarvis/jarvis_agent/edit_file_handler.py,sha256=7xkEvlER6pNHtxyGad_ol23NeDGsYMunq4XmTAx86kw,24722
8
8
  jarvis/jarvis_agent/event_bus.py,sha256=pRdfk7d0OG18K6yNfWlCvAh_dW5p9sBtT2Yc3jGmzgo,1519
9
9
  jarvis/jarvis_agent/events.py,sha256=rmFQ37PasImCh7OCdCzNBvubk-kHwcUiYLgzmL0t0_4,3689
10
10
  jarvis/jarvis_agent/file_methodology_manager.py,sha256=LnhgTx5xQXCBK8esjCkFbgFm9iEyFX7TryUlC40Kzpw,4428
11
- jarvis/jarvis_agent/jarvis.py,sha256=IW3BlErR_B6UxreTdmD9tIMy0C3xb593LOtCUdFChQs,24368
11
+ jarvis/jarvis_agent/jarvis.py,sha256=20xdLdAaiOo5nriIt3ZkRzOBW_UTrFrPvwjfDp62tKU,27083
12
12
  jarvis/jarvis_agent/main.py,sha256=bFcwXWC6O05jQiXy6ED_bHjdjDo5VwV_i1BoBEAzgP0,3336
13
13
  jarvis/jarvis_agent/memory_manager.py,sha256=WSyUffx9xTmkcj4QrSLEfsjI3sTMUwZmkkC9_N_gTjo,8042
14
14
  jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
@@ -28,7 +28,7 @@ jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8Nk
28
28
  jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
29
29
  jarvis/jarvis_agent/utils.py,sha256=ldgfuNTNu4JU7Y1LtystBl85OC6H3A4OMycg0XBt_Cs,1615
30
30
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- jarvis/jarvis_code_agent/code_agent.py,sha256=0DjuaKSCz3vnS82EsjU9XB2Dc4si7Ryhbne9kL7IS14,32367
31
+ jarvis/jarvis_code_agent/code_agent.py,sha256=nCe0GP6mIzAjJBn2aFqVrDRSjMHnenkDrSoaM0VY87U,36576
32
32
  jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
33
33
  jarvis/jarvis_code_analysis/code_review.py,sha256=Z0JsvyVPPHPm6rfo4fqaQr7CdZKIllo9jqStzV0i_-o,34470
34
34
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
@@ -51,7 +51,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
51
51
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
52
52
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
53
53
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
54
- jarvis/jarvis_data/config_schema.json,sha256=GIzimcbNNedR3Fy_WwVdWAOgi-ODVerpWX83kYHF0NM,13068
54
+ jarvis/jarvis_data/config_schema.json,sha256=q5kXr067yPYcebEWyhqFBmfX1KgyjTAr_hCku__zSZ4,14166
55
55
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
56
56
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
@@ -70,7 +70,7 @@ jarvis/jarvis_platform/ai8.py,sha256=g8JkqPGs9SEbqstNMCc5rCHO0QcPHX9LNvb7HMWwB-Q
70
70
  jarvis/jarvis_platform/base.py,sha256=u1XvfE83-S-3W_euMrMaaa8NdXeIHlo7VSxLBbN3K-Y,13504
71
71
  jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
72
72
  jarvis/jarvis_platform/kimi.py,sha256=KLsf9udAsPRMbQ2JkBeiAlXkupCBwdtMaJ-hpH4Jdkc,15711
73
- jarvis/jarvis_platform/openai.py,sha256=0YSeDGHRSPQP2haEzFARx_aZH_d_UZ-HSCsJLh2hW5k,8037
73
+ jarvis/jarvis_platform/openai.py,sha256=4YapmkmJmPGfrjktORcIejlB98b83Wsi_48zjBymHAc,9500
74
74
  jarvis/jarvis_platform/registry.py,sha256=YqaFM2LXcHvqMQrTEQ_cVo8V-wQ8HhOeSdC8DdjvC00,8045
75
75
  jarvis/jarvis_platform/tongyi.py,sha256=QQHDn-kNcb_UH-B49lVIQTlHzYd_O8CFWN7SZqy38S4,23456
76
76
  jarvis/jarvis_platform/yuanbao.py,sha256=jlttNWq-Bq9JLxaI6MOsxKZaNEXF1EfVVB7mjtVcYMA,23954
@@ -97,14 +97,14 @@ jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
97
97
  jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
98
98
  jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
99
99
  jarvis/jarvis_tools/clear_memory.py,sha256=8DOq6dHLemfKTJqu227PWBIp8Iu5K7EXwINzL8DYk8M,8205
100
- jarvis/jarvis_tools/edit_file.py,sha256=a6iyeH2MroejGCoaNDkXwGbSfqFikKbh6tG6Woljvi8,7105
100
+ jarvis/jarvis_tools/edit_file.py,sha256=UcJNTVCDEmRaQsN_7_Ip2LjrTDm4wWzj2deuZHiBvLI,9026
101
101
  jarvis/jarvis_tools/execute_script.py,sha256=oDOMn8GcV6qKP4d0RFT6xbHGTazRmaOlp-h_e_Wj80c,6227
102
102
  jarvis/jarvis_tools/file_analyzer.py,sha256=jzVb8fAJn3dWwpCiYH-Wuxva4kpHqBB2_V3x3mzY0Gs,4158
103
103
  jarvis/jarvis_tools/generate_new_tool.py,sha256=tJz0YtfDwyH9y00VEWw3Btqr9JCNhvtI8BN9i5hYk_M,8560
104
104
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
105
- jarvis/jarvis_tools/read_code.py,sha256=qeQZ_emyPI5RTFx4HSgLBtWSwh8V5chqMjxu2uKzmfY,6100
105
+ jarvis/jarvis_tools/read_code.py,sha256=F1RuO0c69t0h7CvrUGqrTyNcOCcUrFQPACc61O_YSso,6382
106
106
  jarvis/jarvis_tools/read_webpage.py,sha256=YTmoalY8y-jdQuoj9IL6ZjXPOevUj2P_9arJngPhbUY,5317
107
- jarvis/jarvis_tools/registry.py,sha256=iUzHEia3ufWqfLqlBRJl5KwKCU_0EvqEEiO136NHvRs,32846
107
+ jarvis/jarvis_tools/registry.py,sha256=yVXBrJ7plyn7Dr3dD6mPmgd6eiBftmd19Cc84-PwVN8,33312
108
108
  jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh58qZNZApKc,8624
109
109
  jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
110
110
  jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
@@ -117,21 +117,21 @@ jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVP
117
117
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
118
118
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
119
119
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
120
- jarvis/jarvis_utils/config.py,sha256=YpIwuRxLhChe0XYoh7nVK0peEILo1NCBvAnxzouHRag,20407
121
- jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
120
+ jarvis/jarvis_utils/config.py,sha256=AbDfL6hBpD6G_cRlr_bOAXECsj_vIq9tHXgkbsBIv5E,21119
121
+ jarvis/jarvis_utils/embedding.py,sha256=x6mrkL7Bc3qgfuBDsjc4fg4nKG8ofGxVLVVydbsb8PY,2838
122
122
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
123
123
  jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
124
- jarvis/jarvis_utils/git_utils.py,sha256=vclHYC2LzyyyHQCMaYENGUwfr7NoajpG8aJ_qr3LgJo,23731
124
+ jarvis/jarvis_utils/git_utils.py,sha256=zxjdxbFb_X6aYo-w1fbMx3d2n1ScbmmaAYlE3wGaaSg,24071
125
125
  jarvis/jarvis_utils/globals.py,sha256=7Xvf9HY6jYJL4vSD1F1WCoxHkHCAyltJUYt4V9gGVU4,8865
126
126
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
127
- jarvis/jarvis_utils/input.py,sha256=EBdjPopkxVpG4JsnP9gtTSJ10u_scagujyKyOMhatLQ,36524
127
+ jarvis/jarvis_utils/input.py,sha256=BT-aAaOBFsb4YeqR5ceIsa-j_MYEmsAvQqrXQSknA7c,36536
128
128
  jarvis/jarvis_utils/methodology.py,sha256=z_renvRGgHiC-XTQPuN6rvrJ_ffHlwxK_b1BU_jmNAQ,12800
129
129
  jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
130
130
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
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,,
131
+ jarvis/jarvis_utils/utils.py,sha256=uMtfaStxDtp2i9AFIxwtPKgSxLwQxw8Z2rXsX-ZGlis,72728
132
+ jarvis_ai_assistant-0.3.32.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
133
+ jarvis_ai_assistant-0.3.32.dist-info/METADATA,sha256=LOLHRMK96T6elM3uhhd7Isu3xNPlhJkYYtt3Ok3lGts,18752
134
+ jarvis_ai_assistant-0.3.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
+ jarvis_ai_assistant-0.3.32.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
136
+ jarvis_ai_assistant-0.3.32.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
137
+ jarvis_ai_assistant-0.3.32.dist-info/RECORD,,