jarvis-ai-assistant 0.4.2__py3-none-any.whl → 0.5.1__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 (30) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +117 -6
  3. jarvis/jarvis_agent/jarvis.py +6 -0
  4. jarvis/jarvis_agent/share_manager.py +8 -1
  5. jarvis/jarvis_agent/task_planner.py +218 -0
  6. jarvis/jarvis_code_agent/code_agent.py +99 -3
  7. jarvis/jarvis_code_analysis/code_review.py +483 -568
  8. jarvis/jarvis_data/config_schema.json +8 -3
  9. jarvis/jarvis_sec/README.md +180 -0
  10. jarvis/jarvis_sec/__init__.py +674 -0
  11. jarvis/jarvis_sec/checkers/__init__.py +33 -0
  12. jarvis/jarvis_sec/checkers/c_checker.py +1269 -0
  13. jarvis/jarvis_sec/checkers/rust_checker.py +367 -0
  14. jarvis/jarvis_sec/cli.py +110 -0
  15. jarvis/jarvis_sec/prompts.py +324 -0
  16. jarvis/jarvis_sec/report.py +260 -0
  17. jarvis/jarvis_sec/types.py +20 -0
  18. jarvis/jarvis_sec/workflow.py +513 -0
  19. jarvis/jarvis_tools/registry.py +20 -14
  20. jarvis/jarvis_tools/sub_agent.py +4 -3
  21. jarvis/jarvis_tools/sub_code_agent.py +3 -3
  22. jarvis/jarvis_utils/config.py +14 -2
  23. jarvis/jarvis_utils/methodology.py +25 -19
  24. jarvis/jarvis_utils/utils.py +193 -2
  25. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/METADATA +1 -1
  26. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/RECORD +30 -19
  27. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/entry_points.txt +2 -0
  28. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/WHEEL +0 -0
  29. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/licenses/LICENSE +0 -0
  30. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/top_level.txt +0 -0
@@ -54,25 +54,31 @@ def _load_all_methodologies() -> Dict[str, str]:
54
54
  # 如果配置了中心方法论仓库,将其添加到加载路径
55
55
  central_repo = get_central_methodology_repo()
56
56
  if central_repo:
57
- # 中心方法论仓库存储在数据目录下的特定位置
58
- central_repo_path = os.path.join(get_data_dir(), "central_methodology_repo")
59
- methodology_dirs.append(central_repo_path)
60
-
61
- # 确保中心方法论仓库被克隆/更新
62
- if not os.path.exists(central_repo_path):
63
- try:
64
- import subprocess
65
-
66
- PrettyOutput.print(
67
- f"正在克隆中心方法论仓库: {central_repo}", OutputType.INFO
68
- )
69
- subprocess.run(
70
- ["git", "clone", central_repo, central_repo_path], check=True
71
- )
72
- except Exception as e:
73
- PrettyOutput.print(
74
- f"克隆中心方法论仓库失败: {str(e)}", OutputType.ERROR
75
- )
57
+ # 支持本地目录路径或Git仓库URL
58
+ expanded = os.path.expanduser(os.path.expandvars(central_repo))
59
+ if os.path.isdir(expanded):
60
+ # 直接使用本地目录(支持Git仓库的子目录)
61
+ methodology_dirs.append(expanded)
62
+ else:
63
+ # 中心方法论仓库存储在数据目录下的特定位置
64
+ central_repo_path = os.path.join(get_data_dir(), "central_methodology_repo")
65
+ methodology_dirs.append(central_repo_path)
66
+
67
+ # 确保中心方法论仓库被克隆/更新
68
+ if not os.path.exists(central_repo_path):
69
+ try:
70
+ import subprocess
71
+
72
+ PrettyOutput.print(
73
+ f"正在克隆中心方法论仓库: {central_repo}", OutputType.INFO
74
+ )
75
+ subprocess.run(
76
+ ["git", "clone", central_repo, central_repo_path], check=True
77
+ )
78
+ except Exception as e:
79
+ PrettyOutput.print(
80
+ f"克隆中心方法论仓库失败: {str(e)}", OutputType.ERROR
81
+ )
76
82
 
77
83
  # --- 全局每日更新检查 ---
78
84
  daily_check_git_updates(methodology_dirs, "methodologies")
@@ -6,6 +6,8 @@ import signal
6
6
  import subprocess
7
7
  import sys
8
8
  import time
9
+ import atexit
10
+ import errno
9
11
  from pathlib import Path
10
12
  from typing import Any, Callable, Dict, List, Optional, Tuple
11
13
  from datetime import datetime, date
@@ -205,6 +207,130 @@ def _setup_signal_handler() -> None:
205
207
  signal.signal(signal.SIGINT, sigint_handler)
206
208
 
207
209
 
210
+ # ----------------------------
211
+ # 单实例文件锁(放置于初始化早期使用)
212
+ # ----------------------------
213
+ _INSTANCE_LOCK_PATH: Optional[Path] = None
214
+
215
+
216
+ def _get_instance_lock_path(lock_name: str = "instance.lock") -> Path:
217
+ try:
218
+ data_dir = Path(str(get_data_dir()))
219
+ except Exception:
220
+ data_dir = Path(os.path.expanduser("~/.jarvis"))
221
+ data_dir.mkdir(parents=True, exist_ok=True)
222
+ return data_dir / lock_name
223
+
224
+
225
+ def _read_lock_owner_pid(lock_path: Path) -> Optional[int]:
226
+ try:
227
+ txt = lock_path.read_text(encoding="utf-8", errors="ignore").strip()
228
+ if not txt:
229
+ return None
230
+ try:
231
+ info = json.loads(txt)
232
+ pid = info.get("pid")
233
+ return int(pid) if pid is not None else None
234
+ except Exception:
235
+ # 兼容纯数字PID
236
+ return int(txt)
237
+ except Exception:
238
+ return None
239
+
240
+
241
+ def _is_process_alive(pid: int) -> bool:
242
+ if pid is None or pid <= 0:
243
+ return False
244
+ try:
245
+ os.kill(pid, 0)
246
+ except ProcessLookupError:
247
+ return False
248
+ except PermissionError:
249
+ # 无权限但进程存在
250
+ return True
251
+ except OSError as e:
252
+ # 某些平台上,EPERM 表示进程存在但无权限
253
+ if getattr(e, "errno", None) == errno.EPERM:
254
+ return True
255
+ return False
256
+ else:
257
+ return True
258
+
259
+
260
+ def _release_instance_lock() -> None:
261
+ global _INSTANCE_LOCK_PATH
262
+ try:
263
+ if _INSTANCE_LOCK_PATH and _INSTANCE_LOCK_PATH.exists():
264
+ _INSTANCE_LOCK_PATH.unlink()
265
+ except Exception:
266
+ # 清理失败不影响退出
267
+ pass
268
+ _INSTANCE_LOCK_PATH = None
269
+
270
+
271
+ def _acquire_single_instance_lock(lock_name: str = "instance.lock") -> None:
272
+ """
273
+ 在数据目录(~/.jarvis 或配置的数据目录)下创建实例锁,防止重复启动。
274
+ 如果检测到已有存活实例,提示后退出。
275
+ """
276
+ global _INSTANCE_LOCK_PATH
277
+ lock_path = _get_instance_lock_path(lock_name)
278
+
279
+ # 已存在锁:检查是否为有效存活实例
280
+ if lock_path.exists():
281
+ pid = _read_lock_owner_pid(lock_path)
282
+ if pid and _is_process_alive(pid):
283
+ PrettyOutput.print(
284
+ f"检测到已有一个 Jarvis 实例正在运行 (PID: {pid})。\n"
285
+ f"如果确认不存在正在运行的实例,请删除锁文件后重试:{lock_path}",
286
+ OutputType.WARNING,
287
+ )
288
+ sys.exit(0)
289
+ # 尝试移除陈旧锁
290
+ try:
291
+ lock_path.unlink()
292
+ except Exception:
293
+ PrettyOutput.print(
294
+ f"无法删除旧锁文件:{lock_path},请手动清理后重试。",
295
+ OutputType.ERROR,
296
+ )
297
+ sys.exit(1)
298
+
299
+ # 原子创建锁文件,避免并发竞争
300
+ flags = os.O_CREAT | os.O_EXCL | os.O_WRONLY
301
+ try:
302
+ fd = os.open(str(lock_path), flags)
303
+ with os.fdopen(fd, "w", encoding="utf-8") as fp:
304
+ payload = {
305
+ "pid": os.getpid(),
306
+ "time": int(time.time()),
307
+ "argv": sys.argv[:10],
308
+ }
309
+ try:
310
+ fp.write(json.dumps(payload, ensure_ascii=False))
311
+ except Exception:
312
+ fp.write(str(os.getpid()))
313
+ _INSTANCE_LOCK_PATH = lock_path
314
+ atexit.register(_release_instance_lock)
315
+ except FileExistsError:
316
+ # 极端并发下再次校验
317
+ pid = _read_lock_owner_pid(lock_path)
318
+ if pid and _is_process_alive(pid):
319
+ PrettyOutput.print(
320
+ f"检测到已有一个 Jarvis 实例正在运行 (PID: {pid})。",
321
+ OutputType.WARNING,
322
+ )
323
+ sys.exit(0)
324
+ PrettyOutput.print(
325
+ f"锁文件已存在但可能为陈旧状态:{lock_path},请手动删除后重试。",
326
+ OutputType.ERROR,
327
+ )
328
+ sys.exit(1)
329
+ except Exception as e:
330
+ PrettyOutput.print(f"创建实例锁失败: {e}", OutputType.ERROR)
331
+ sys.exit(1)
332
+
333
+
208
334
  def _check_pip_updates() -> bool:
209
335
  """检查pip安装的Jarvis是否有更新
210
336
 
@@ -1212,6 +1338,37 @@ def _collect_optional_config_interactively(
1212
1338
  or changed
1213
1339
  )
1214
1340
 
1341
+ # 新增:会话与调试相关配置
1342
+ changed = (
1343
+ _ask_and_set(
1344
+ "JARVIS_SAVE_SESSION_HISTORY",
1345
+ "是否保存会话记录?",
1346
+ False,
1347
+ "bool",
1348
+ )
1349
+ or changed
1350
+ )
1351
+ changed = (
1352
+ _ask_and_set(
1353
+ "JARVIS_PRINT_ERROR_TRACEBACK",
1354
+ "是否在错误输出时打印回溯调用链?",
1355
+ False,
1356
+ "bool",
1357
+ )
1358
+ or changed
1359
+ )
1360
+
1361
+ # 其它可选开关
1362
+ changed = (
1363
+ _ask_and_set(
1364
+ "JARVIS_SKIP_PREDEFINED_TASKS",
1365
+ "是否跳过预定义任务加载(不读取 pre-command 列表)?",
1366
+ False,
1367
+ "bool",
1368
+ )
1369
+ or changed
1370
+ )
1371
+
1215
1372
  # 代码与工具操作安全提示
1216
1373
  changed = (
1217
1374
  _ask_and_set(
@@ -1258,6 +1415,32 @@ def _collect_optional_config_interactively(
1258
1415
  )
1259
1416
  or changed
1260
1417
  )
1418
+ # 规划相关:最大递归层数(仅在启用规划时生效,CLI --plan/--no-plan 控制启用)
1419
+ changed = (
1420
+ _ask_and_set_int(
1421
+ "JARVIS_PLAN_MAX_DEPTH",
1422
+ "任务规划的最大层数(限制递归拆分深度,默认2;仅在启用规划时生效)",
1423
+ 3,
1424
+ )
1425
+ or changed
1426
+ )
1427
+ # 新增:自动总结轮次与脚本超时
1428
+ changed = (
1429
+ _ask_and_set_int(
1430
+ "JARVIS_AUTO_SUMMARY_ROUNDS",
1431
+ "基于对话轮次的自动总结阈值(达到该轮次后自动总结并清理历史,默认50)",
1432
+ 50,
1433
+ )
1434
+ or changed
1435
+ )
1436
+ changed = (
1437
+ _ask_and_set_int(
1438
+ "JARVIS_SCRIPT_EXECUTION_TIMEOUT",
1439
+ "脚本执行超时时间(秒,默认300,仅非交互模式生效)",
1440
+ 300,
1441
+ )
1442
+ or changed
1443
+ )
1261
1444
 
1262
1445
  # 目录类配置(逗号分隔)
1263
1446
  changed = (
@@ -1295,6 +1478,14 @@ def _collect_optional_config_interactively(
1295
1478
  )
1296
1479
  or changed
1297
1480
  )
1481
+ # 新增:工具调用后回调实现目录
1482
+ changed = (
1483
+ _ask_and_set_list(
1484
+ "JARVIS_AFTER_TOOL_CALL_CB_DIRS",
1485
+ "指定工具调用后回调实现目录(逗号分隔,留空跳过):",
1486
+ )
1487
+ or changed
1488
+ )
1298
1489
 
1299
1490
  # Web 搜索配置(可选)
1300
1491
  changed = (
@@ -1439,7 +1630,7 @@ def _collect_optional_config_interactively(
1439
1630
  changed = (
1440
1631
  _ask_and_set(
1441
1632
  "JARVIS_CENTRAL_METHODOLOGY_REPO",
1442
- "请输入中心方法论仓库地址(可留空跳过):",
1633
+ "请输入中心方法论仓库路径或Git地址(可留空跳过):",
1443
1634
  "",
1444
1635
  "str",
1445
1636
  )
@@ -1448,7 +1639,7 @@ def _collect_optional_config_interactively(
1448
1639
  changed = (
1449
1640
  _ask_and_set(
1450
1641
  "JARVIS_CENTRAL_TOOL_REPO",
1451
- "请输入中心工具仓库地址(可留空跳过):",
1642
+ "请输入中心工具仓库路径或Git地址(可留空跳过):",
1452
1643
  "",
1453
1644
  "str",
1454
1645
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.4.2
3
+ Version: 0.5.1
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,5 +1,5 @@
1
- jarvis/__init__.py,sha256=NIbT8I8sAw3cCWWXtArSe6_eWeB17Gf7WmiF9nyxdKs,73
2
- jarvis/jarvis_agent/__init__.py,sha256=OOoHubIIQ3A9xB7jHFRpJKDtAk0or8Y7TmUkdq00l4Q,51386
1
+ jarvis/__init__.py,sha256=sOKEklWEZaCxQadO6f1UkOMRanbgJ3rJjjBTWjm6JC4,73
2
+ jarvis/jarvis_agent/__init__.py,sha256=uEd9UrrHK5CRpOVSCxPESfxcAclMfoRacQrzVzQLiEk,56763
3
3
  jarvis/jarvis_agent/agent_manager.py,sha256=Q0S-mYTPt8Xd7RKGoLWoWU_RP_wEXFWxCjve8_t2f2A,3807
4
4
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
5
5
  jarvis/jarvis_agent/config_editor.py,sha256=hlb9EYxKWcR_qdW2O89CgNDdciR9Isi743JU_1gD8j4,1927
@@ -8,7 +8,7 @@ jarvis/jarvis_agent/event_bus.py,sha256=pRdfk7d0OG18K6yNfWlCvAh_dW5p9sBtT2Yc3jGm
8
8
  jarvis/jarvis_agent/events.py,sha256=rmFQ37PasImCh7OCdCzNBvubk-kHwcUiYLgzmL0t0_4,3689
9
9
  jarvis/jarvis_agent/file_context_handler.py,sha256=2MPn_O_2llX39meFg272Cjk3wMPn5nmgbGMUyX06YQo,2113
10
10
  jarvis/jarvis_agent/file_methodology_manager.py,sha256=LnhgTx5xQXCBK8esjCkFbgFm9iEyFX7TryUlC40Kzpw,4428
11
- jarvis/jarvis_agent/jarvis.py,sha256=4HlG4Wfs0HRqLq3mLHx3kt5MV--yjLpAkK7KtIhskwQ,48591
11
+ jarvis/jarvis_agent/jarvis.py,sha256=eZpONtA7mFZtG6v-xQeVElXAWtl3ZZrrp4jgvtlK96c,48925
12
12
  jarvis/jarvis_agent/main.py,sha256=IgS7d3rng2vFlu983OUeCkOAosKjFAn1sFCk3gT9J9Q,4563
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
@@ -20,11 +20,12 @@ jarvis/jarvis_agent/protocols.py,sha256=YFJaC9MHi7JfLzmvlyotJDjiCO4Z07XJXy1gKhVd
20
20
  jarvis/jarvis_agent/rewrite_file_handler.py,sha256=FVSrfrC115_cGvdPW9RIn3A-gQAhok7GyyBfnOFdpXs,5276
21
21
  jarvis/jarvis_agent/run_loop.py,sha256=iGfa28J2K6I07k6p66O3WJFSk9z4uOarqe6CLqALIsk,6167
22
22
  jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
23
- jarvis/jarvis_agent/share_manager.py,sha256=MF2RlomcgPxF8nVUk28DP6IRddZ_tot5l_YRvy0qXSQ,8726
23
+ jarvis/jarvis_agent/share_manager.py,sha256=Nl7zvy5PbcYAPXUgfnvatoUB0V4sIQOt61LyYkp5-2w,9127
24
24
  jarvis/jarvis_agent/shell_input_handler.py,sha256=wiAPjB-9uTkcLszbO5dlOUwIfaeR39RgRcZhahIGqoA,2018
25
25
  jarvis/jarvis_agent/stdio_redirect.py,sha256=xqF-sENitpefCT3TA9oRwATFqbDrU2dvqM-UiMZRhbE,9944
26
26
  jarvis/jarvis_agent/task_analyzer.py,sha256=JXc-63hnTD7oSX-nIfRcgxqCMhh4fM4QYVc7C1gp--M,7813
27
27
  jarvis/jarvis_agent/task_manager.py,sha256=lme_aN8vaF_a4Tvv2kaSEnWATy8RPSjogTxeLnEYZdg,6504
28
+ jarvis/jarvis_agent/task_planner.py,sha256=MaoyyMkpbs-QmYjLZOKmNLsDXmlKwM89_UaqGI1geGw,10600
28
29
  jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
29
30
  jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
30
31
  jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
@@ -33,9 +34,9 @@ jarvis/jarvis_agent/web_bridge.py,sha256=h15PXuPWWfZynWt8bPW4BDeCpIVoIOlRXfO0je6
33
34
  jarvis/jarvis_agent/web_output_sink.py,sha256=sZ6WbLZnuCdT5dS9d8msHY_g-pnj-dvML-I6uJ7-sbc,1733
34
35
  jarvis/jarvis_agent/web_server.py,sha256=oZZy4nAOPhRWJn7K8VjBlho1F9AsvLEYiusKgipjO94,28204
35
36
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- jarvis/jarvis_code_agent/code_agent.py,sha256=UaYppteSUzwni-ZUDAKDrGTDijBrXU1Ia91OoLdfYLs,38072
37
+ jarvis/jarvis_code_agent/code_agent.py,sha256=1jdIZUgHFoevFljoZiDOO0Zxs_oKR_vJS4-eUSTSqPY,42720
37
38
  jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
38
- jarvis/jarvis_code_analysis/code_review.py,sha256=A3LaxFAlIH5qCfMajIr02ExG6YiolIVpjl9blsLh4SY,34402
39
+ jarvis/jarvis_code_analysis/code_review.py,sha256=48r0UE4pmOUaRgBJIJrpPW307sKGo1rnTNkWdsqkOrY,29889
39
40
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
40
41
  jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
41
42
  jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
@@ -56,7 +57,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
56
57
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
57
58
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
58
59
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
59
- jarvis/jarvis_data/config_schema.json,sha256=VlPqakEXx7k2wm5Uv-ZlbKeIPbHNc98r1pHFtXEBBBY,14884
60
+ jarvis/jarvis_data/config_schema.json,sha256=5tNhALZ61smZP7VzppWxs99LP21RY3gB1wrqemQ-xoo,15358
60
61
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
61
62
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
63
  jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
@@ -91,6 +92,16 @@ jarvis/jarvis_rag/query_rewriter.py,sha256=LGAWZ8kwH_dpquuYqc4QWC7IXmHX3SsnPSYMW
91
92
  jarvis/jarvis_rag/rag_pipeline.py,sha256=aaTuxiArtVaPemWeySApw64q204JeLNXpOEtq7Adn1I,13797
92
93
  jarvis/jarvis_rag/reranker.py,sha256=7Azc3y5fngwfPKtzZ8tx6iGKNeqC8uDy8yo8VCyLyL4,2670
93
94
  jarvis/jarvis_rag/retriever.py,sha256=J4jO0492yHEwxJz_Cp2WP3vGHRHKj56rDyWZQ2W0XdA,18374
95
+ jarvis/jarvis_sec/README.md,sha256=0GpTAOAupOGEAv0juLJXEBBfaa6KL74t2nRbj0N5Mkw,7621
96
+ jarvis/jarvis_sec/__init__.py,sha256=SYgHZcxoV4xgjdal1S04u7QXCQJdgPpwiAxmEcK1pYg,25690
97
+ jarvis/jarvis_sec/cli.py,sha256=_DWWcYscLWCyIs5k7bKjXSBkQPxLbYLJKkU0QuTaeZs,3494
98
+ jarvis/jarvis_sec/prompts.py,sha256=ObGFNvrCtbIhsWlJHYQ5tcsTkuBlID0FozncYCv8S8k,14165
99
+ jarvis/jarvis_sec/report.py,sha256=5wLKqK-CDFZ2fPtwP3sGYgjAi69TKoYizyLK1cchDVA,8516
100
+ jarvis/jarvis_sec/types.py,sha256=_C3IHwnni3kApryP3c_UTYdvFdmlJSVXQLLefX94zl0,365
101
+ jarvis/jarvis_sec/workflow.py,sha256=DokD8ZBcAfyiq078OM7rmZdpWrOXAL_7ZGkLF2TOqcc,20187
102
+ jarvis/jarvis_sec/checkers/__init__.py,sha256=ZF7zHJS6P6cu9VE3kMc66DK7m-Ki2bmMkwkap5mm26g,786
103
+ jarvis/jarvis_sec/checkers/c_checker.py,sha256=ezW_-9wwzLxYEENd3HhdgDnLfJiLccJacJklTOnVXgw,53498
104
+ jarvis/jarvis_sec/checkers/rust_checker.py,sha256=SBobyUjN1rDzFPESZ6uif3PR3HUW6Mux2ofxeqRUJ2Q,13483
94
105
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
106
  jarvis/jarvis_smart_shell/main.py,sha256=lUJPwLR9RlaaVv0lx3ojjjv5dELHOaindlsLDDkpssQ,14960
96
107
  jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
@@ -108,19 +119,19 @@ jarvis/jarvis_tools/generate_new_tool.py,sha256=tJz0YtfDwyH9y00VEWw3Btqr9JCNhvtI
108
119
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
109
120
  jarvis/jarvis_tools/read_code.py,sha256=F1RuO0c69t0h7CvrUGqrTyNcOCcUrFQPACc61O_YSso,6382
110
121
  jarvis/jarvis_tools/read_webpage.py,sha256=dfyXJ9vaX-ZRbua1P5ZlaU_SlSzKkeNw-1kI_3-gxFE,5433
111
- jarvis/jarvis_tools/registry.py,sha256=9gIhiyh7jAAnLeGBIDyUUHwOeDtgOx3UUWk6kRN1sJg,33670
122
+ jarvis/jarvis_tools/registry.py,sha256=KDDuaQC_Ej8nGKk2P5W7uMV22BQQx_lSf9dLrLZ6ocY,34033
112
123
  jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh58qZNZApKc,8624
113
124
  jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
114
125
  jarvis/jarvis_tools/search_web.py,sha256=Hi8WBxcRH02qjOF1qcJP2qSqs3kVOKGFAARfh548Ii4,6370
115
- jarvis/jarvis_tools/sub_agent.py,sha256=Fn2RZ7jLD4cZCWt0HnpSLkdIbeqeZq-1h97Nfg2RAqE,8485
116
- jarvis/jarvis_tools/sub_code_agent.py,sha256=KpwTCU89kq_RGNpfyA1C0bTl-f0dTvsCyDKplU-hrds,9600
126
+ jarvis/jarvis_tools/sub_agent.py,sha256=oV_-R5kAnocA3X8yrxtccGKa6UIo08_YbMQB0ozCPzU,8534
127
+ jarvis/jarvis_tools/sub_code_agent.py,sha256=F9iY0XgYsHJEdfMo_0UR646qYbj61t4jIUVnrq9zPuE,9479
117
128
  jarvis/jarvis_tools/virtual_tty.py,sha256=L7-J00ARQvIa25T45Hhqg2eCBl6W2LFgqDlWMWf-7dk,25275
118
129
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
130
  jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVPxs,9323
120
131
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
121
132
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
122
133
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
123
- jarvis/jarvis_utils/config.py,sha256=jOVCrlD597U6FTu8j-lyO93Mpoyqv3Do7Seja_XrRfE,22580
134
+ jarvis/jarvis_utils/config.py,sha256=7aGTlZMpXC0PhZeu3WD3asBAC0hf4xlAmFep-ObwtR0,22918
124
135
  jarvis/jarvis_utils/embedding.py,sha256=x6mrkL7Bc3qgfuBDsjc4fg4nKG8ofGxVLVVydbsb8PY,2838
125
136
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
126
137
  jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
@@ -128,13 +139,13 @@ jarvis/jarvis_utils/git_utils.py,sha256=zxjdxbFb_X6aYo-w1fbMx3d2n1ScbmmaAYlE3wGa
128
139
  jarvis/jarvis_utils/globals.py,sha256=7Xvf9HY6jYJL4vSD1F1WCoxHkHCAyltJUYt4V9gGVU4,8865
129
140
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
130
141
  jarvis/jarvis_utils/input.py,sha256=4VXpUZoAocW1mldlZd4bmXI8a_CmcQj7IPLBNgNLGSI,40045
131
- jarvis/jarvis_utils/methodology.py,sha256=z_renvRGgHiC-XTQPuN6rvrJ_ffHlwxK_b1BU_jmNAQ,12800
142
+ jarvis/jarvis_utils/methodology.py,sha256=YuuKBjr58cu8QWcniU7QVlEM9Cem6wo4IYcq1iwSDMw,13158
132
143
  jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
133
144
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
134
- jarvis/jarvis_utils/utils.py,sha256=uMtfaStxDtp2i9AFIxwtPKgSxLwQxw8Z2rXsX-ZGlis,72728
135
- jarvis_ai_assistant-0.4.2.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
136
- jarvis_ai_assistant-0.4.2.dist-info/METADATA,sha256=etNq0w20riwTP8aha2pt_wXBdC6SZHhrjTVeV5K4K38,18751
137
- jarvis_ai_assistant-0.4.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
138
- jarvis_ai_assistant-0.4.2.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
139
- jarvis_ai_assistant-0.4.2.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
140
- jarvis_ai_assistant-0.4.2.dist-info/RECORD,,
145
+ jarvis/jarvis_utils/utils.py,sha256=bN7HxVBs3Hoa8xM4NtOaKXpSm7WbhwwRyU4jE0v8NjY,78702
146
+ jarvis_ai_assistant-0.5.1.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
147
+ jarvis_ai_assistant-0.5.1.dist-info/METADATA,sha256=DeO39HTIYe-SziDd5J0lWoiPuADScAqzRdC7hIgiL6o,18751
148
+ jarvis_ai_assistant-0.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
149
+ jarvis_ai_assistant-0.5.1.dist-info/entry_points.txt,sha256=wS5YtI-Patr7PIB_DaKzlbDuQ2cDmQSDljA6psIkjbM,1469
150
+ jarvis_ai_assistant-0.5.1.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
151
+ jarvis_ai_assistant-0.5.1.dist-info/RECORD,,
@@ -11,6 +11,7 @@ jarvis-methodology = jarvis.jarvis_methodology.main:main
11
11
  jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
12
12
  jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
13
13
  jarvis-rag = jarvis.jarvis_rag.cli:main
14
+ jarvis-sec = jarvis.jarvis_sec.cli:main
14
15
  jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
15
16
  jarvis-stats = jarvis.jarvis_stats.cli:main
16
17
  jarvis-tool = jarvis.jarvis_tools.cli.main:main
@@ -23,6 +24,7 @@ jma = jarvis.jarvis_multi_agent.main:main
23
24
  jmo = jarvis.jarvis_memory_organizer.memory_organizer:main
24
25
  jpm = jarvis.jarvis_platform_manager.main:main
25
26
  jrg = jarvis.jarvis_rag.cli:main
27
+ jsec = jarvis.jarvis_sec.cli:main
26
28
  jss = jarvis.jarvis_smart_shell.main:main
27
29
  jst = jarvis.jarvis_stats.cli:main
28
30
  jt = jarvis.jarvis_tools.cli.main:main