jarvis-ai-assistant 0.5.0__py3-none-any.whl → 0.6.0__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 (41) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +114 -6
  3. jarvis/jarvis_agent/agent_manager.py +3 -0
  4. jarvis/jarvis_agent/jarvis.py +45 -9
  5. jarvis/jarvis_agent/run_loop.py +6 -1
  6. jarvis/jarvis_agent/task_planner.py +219 -0
  7. jarvis/jarvis_c2rust/__init__.py +13 -0
  8. jarvis/jarvis_c2rust/cli.py +405 -0
  9. jarvis/jarvis_c2rust/collector.py +209 -0
  10. jarvis/jarvis_c2rust/library_replacer.py +933 -0
  11. jarvis/jarvis_c2rust/llm_module_agent.py +1265 -0
  12. jarvis/jarvis_c2rust/scanner.py +1671 -0
  13. jarvis/jarvis_c2rust/transpiler.py +1236 -0
  14. jarvis/jarvis_code_agent/code_agent.py +151 -18
  15. jarvis/jarvis_data/config_schema.json +13 -3
  16. jarvis/jarvis_sec/README.md +180 -0
  17. jarvis/jarvis_sec/__init__.py +674 -0
  18. jarvis/jarvis_sec/checkers/__init__.py +33 -0
  19. jarvis/jarvis_sec/checkers/c_checker.py +1269 -0
  20. jarvis/jarvis_sec/checkers/rust_checker.py +367 -0
  21. jarvis/jarvis_sec/cli.py +110 -0
  22. jarvis/jarvis_sec/prompts.py +324 -0
  23. jarvis/jarvis_sec/report.py +260 -0
  24. jarvis/jarvis_sec/types.py +20 -0
  25. jarvis/jarvis_sec/workflow.py +513 -0
  26. jarvis/jarvis_tools/cli/main.py +1 -0
  27. jarvis/jarvis_tools/execute_script.py +1 -1
  28. jarvis/jarvis_tools/read_code.py +11 -1
  29. jarvis/jarvis_tools/read_symbols.py +129 -0
  30. jarvis/jarvis_tools/registry.py +9 -1
  31. jarvis/jarvis_tools/sub_agent.py +4 -3
  32. jarvis/jarvis_tools/sub_code_agent.py +3 -3
  33. jarvis/jarvis_utils/config.py +28 -6
  34. jarvis/jarvis_utils/git_utils.py +39 -0
  35. jarvis/jarvis_utils/utils.py +150 -7
  36. {jarvis_ai_assistant-0.5.0.dist-info → jarvis_ai_assistant-0.6.0.dist-info}/METADATA +13 -1
  37. {jarvis_ai_assistant-0.5.0.dist-info → jarvis_ai_assistant-0.6.0.dist-info}/RECORD +41 -22
  38. {jarvis_ai_assistant-0.5.0.dist-info → jarvis_ai_assistant-0.6.0.dist-info}/entry_points.txt +4 -0
  39. {jarvis_ai_assistant-0.5.0.dist-info → jarvis_ai_assistant-0.6.0.dist-info}/WHEEL +0 -0
  40. {jarvis_ai_assistant-0.5.0.dist-info → jarvis_ai_assistant-0.6.0.dist-info}/licenses/LICENSE +0 -0
  41. {jarvis_ai_assistant-0.5.0.dist-info → jarvis_ai_assistant-0.6.0.dist-info}/top_level.txt +0 -0
@@ -175,7 +175,15 @@ class ToolRegistry(OutputHandlerProtocol):
175
175
  try:
176
176
  tool_call, err_msg, auto_completed = self._extract_tool_calls(response)
177
177
  if err_msg:
178
- return False, err_msg
178
+ # 只要工具解析错误,追加工具使用帮助信息(相当于一次 <ToolUsage>)
179
+ try:
180
+ from jarvis.jarvis_agent import Agent
181
+ agent: Agent = agent_
182
+ tool_usage = agent.get_tool_usage_prompt()
183
+ return False, f"{err_msg}\n\n{tool_usage}"
184
+ except Exception:
185
+ # 兼容处理:无法获取Agent或ToolUsage时,至少返回工具系统帮助信息
186
+ return False, f"{err_msg}\n\n{tool_call_help}"
179
187
  result = self.handle_tool_calls(tool_call, agent_)
180
188
  if auto_completed:
181
189
  # 如果自动补全了结束标签,在结果中添加说明信息
@@ -4,7 +4,9 @@ sub_agent 工具
4
4
  将子任务交给通用 Agent 执行,并返回执行结果。
5
5
 
6
6
  约定:
7
- - 必填参数:task, name, background, system_prompt, summary_prompt, use_tools
7
+ - 必填参数:task, name, system_prompt, summary_prompt
8
+ - 可选参数:background
9
+ - 工具集:默认使用系统工具集(无需传入 use_tools)
8
10
  - 继承父 Agent 的部分配置:model_group、input_handler、execute_tool_confirm、multiline_inputer、non_interactive、use_methodology、use_analysis;其他参数需显式提供
9
11
  - 子Agent必须自动完成(auto_complete=True)且需要summary(need_summary=True)
10
12
  """
@@ -41,7 +43,7 @@ class SubAgentTool:
41
43
  },
42
44
  "background": {
43
45
  "type": "string",
44
- "description": "任务背景与已知信息(必填,将与任务一并提供给子Agent)",
46
+ "description": "任务背景与已知信息(可选,将与任务一并提供给子Agent)",
45
47
  },
46
48
  "system_prompt": {
47
49
  "type": "string",
@@ -59,7 +61,6 @@ class SubAgentTool:
59
61
  "required": [
60
62
  "task",
61
63
  "name",
62
- "background",
63
64
  "system_prompt",
64
65
  "summary_prompt",
65
66
  ],
@@ -4,7 +4,8 @@ sub_code_agent 工具
4
4
  将子任务交给 CodeAgent 执行,并返回执行结果。
5
5
 
6
6
  约定:
7
- - 仅接收一个参数:task
7
+ - 必填参数:task
8
+ - 可选参数:background
8
9
  - 不依赖父 Agent,所有配置使用系统默认与全局变量
9
10
  - 子Agent必须自动完成(auto_complete=True)且需要summary(need_summary=True)
10
11
  """
@@ -196,7 +197,6 @@ class SubCodeAgentTool:
196
197
 
197
198
  # 执行子任务(无提交信息前后缀)
198
199
  ret = code_agent.run(enhanced_task, prefix="", suffix="")
199
- stdout = ret if isinstance(ret, str) and ret else "任务执行完成"
200
200
 
201
201
  # 主动清理内部 Agent,避免污染父Agent的全局状态
202
202
  try:
@@ -207,7 +207,7 @@ class SubCodeAgentTool:
207
207
 
208
208
  return {
209
209
  "success": True,
210
- "stdout": json.dumps({"result": stdout}, ensure_ascii=False, indent=2),
210
+ "stdout": ret,
211
211
  "stderr": "",
212
212
  }
213
213
  except Exception as e:
@@ -700,6 +700,28 @@ def get_tool_filter_threshold() -> int:
700
700
  """
701
701
  return int(GLOBAL_CONFIG_DATA.get("JARVIS_TOOL_FILTER_THRESHOLD", 30))
702
702
 
703
+ def get_plan_max_depth() -> int:
704
+ """
705
+ 获取任务规划的最大层数。
706
+
707
+ 返回:
708
+ int: 最大规划层数,默认为2(可通过 GLOBAL_CONFIG_DATA['JARVIS_PLAN_MAX_DEPTH'] 配置)
709
+ """
710
+ try:
711
+ return int(GLOBAL_CONFIG_DATA.get("JARVIS_PLAN_MAX_DEPTH", 2))
712
+ except Exception:
713
+ return 2
714
+
715
+
716
+ def is_plan_enabled() -> bool:
717
+ """
718
+ 获取是否默认启用任务规划。
719
+
720
+ 返回:
721
+ bool: 如果启用任务规划则返回True,默认为False
722
+ """
723
+ return GLOBAL_CONFIG_DATA.get("JARVIS_PLAN_ENABLED", False) is True
724
+
703
725
 
704
726
  def get_auto_summary_rounds() -> int:
705
727
  """
@@ -709,9 +731,9 @@ def get_auto_summary_rounds() -> int:
709
731
  int: 轮次阈值,默认20
710
732
  """
711
733
  try:
712
- return int(GLOBAL_CONFIG_DATA.get("JARVIS_AUTO_SUMMARY_ROUNDS", 20))
734
+ return int(GLOBAL_CONFIG_DATA.get("JARVIS_AUTO_SUMMARY_ROUNDS", 50))
713
735
  except Exception:
714
- return 20
736
+ return 50
715
737
 
716
738
 
717
739
 
@@ -730,18 +752,18 @@ def get_script_execution_timeout() -> int:
730
752
  def is_enable_git_repo_jca_switch() -> bool:
731
753
  """
732
754
  是否启用:在初始化环境前检测Git仓库并提示可切换到代码开发模式(jca)
733
- 默认关闭
755
+ 默认开启
734
756
  """
735
- return GLOBAL_CONFIG_DATA.get("JARVIS_ENABLE_GIT_JCA_SWITCH", False) is True
757
+ return GLOBAL_CONFIG_DATA.get("JARVIS_ENABLE_GIT_JCA_SWITCH", True) is True
736
758
 
737
759
 
738
760
  def is_enable_builtin_config_selector() -> bool:
739
761
  """
740
762
  是否启用:在进入默认通用代理前,列出可用配置(agent/multi_agent/roles)供选择
741
- 默认关闭
763
+ 默认开启
742
764
  """
743
765
  return (
744
- GLOBAL_CONFIG_DATA.get("JARVIS_ENABLE_STARTUP_CONFIG_SELECTOR", False) is True
766
+ GLOBAL_CONFIG_DATA.get("JARVIS_ENABLE_STARTUP_CONFIG_SELECTOR", True) is True
745
767
  )
746
768
 
747
769
 
@@ -719,6 +719,45 @@ def confirm_add_new_files() -> None:
719
719
  "是否要添加这些变更(如果不需要请修改.gitignore文件以忽略不需要的文件)?",
720
720
  False,
721
721
  ):
722
+ # 用户选择 N:自动将未跟踪文件列表添加到仓库根目录的 .gitignore
723
+ try:
724
+ repo_root_result = subprocess.run(
725
+ ["git", "rev-parse", "--show-toplevel"],
726
+ capture_output=True,
727
+ text=True,
728
+ check=True,
729
+ )
730
+ repo_root = repo_root_result.stdout.strip() or "."
731
+ except Exception:
732
+ repo_root = "."
733
+ gitignore_path = os.path.join(repo_root, ".gitignore")
734
+
735
+ # 仅对未跟踪的新文件进行忽略(已跟踪文件无法通过 .gitignore 忽略)
736
+ files_to_ignore = sorted(set(new_files))
737
+
738
+ # 读取已存在的 .gitignore 以避免重复添加
739
+ existing_lines: Set[str] = set()
740
+ try:
741
+ if os.path.exists(gitignore_path):
742
+ with open(gitignore_path, "r", encoding="utf-8") as f:
743
+ existing_lines = set(line.strip() for line in f if line.strip())
744
+ except Exception:
745
+ existing_lines = set()
746
+
747
+ # 追加未存在的文件路径到 .gitignore(使用相对于仓库根目录的路径)
748
+ try:
749
+ with open(gitignore_path, "a", encoding="utf-8") as f:
750
+ for file in files_to_ignore:
751
+ abs_path = os.path.abspath(file)
752
+ rel_path = os.path.relpath(abs_path, repo_root)
753
+ # 避免无效的相对路径(不应出现 .. 前缀),有则回退用原始值
754
+ entry = rel_path if not rel_path.startswith("..") else file
755
+ if entry not in existing_lines:
756
+ f.write(entry + "\n")
757
+ PrettyOutput.print("已将未跟踪文件添加到 .gitignore,正在重新检测...", OutputType.INFO)
758
+ except Exception as e:
759
+ PrettyOutput.print(f"更新 .gitignore 失败: {str(e)}", OutputType.WARNING)
760
+
722
761
  continue
723
762
 
724
763
  break
@@ -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
 
@@ -338,14 +464,22 @@ def _check_jarvis_updates() -> bool:
338
464
  返回:
339
465
  bool: 是否需要重启进程
340
466
  """
341
- script_dir = Path(os.path.dirname(os.path.dirname(__file__)))
467
+ # 从当前文件目录向上查找包含 .git 的仓库根目录,修复原先只检查 src/jarvis 的问题
468
+ try:
469
+ script_path = Path(__file__).resolve()
470
+ repo_root: Optional[Path] = None
471
+ for d in [script_path.parent] + list(script_path.parents):
472
+ if (d / ".git").exists():
473
+ repo_root = d
474
+ break
475
+ except Exception:
476
+ repo_root = None
342
477
 
343
- # 先检查是否是git源码安装
344
- git_dir = script_dir / ".git"
345
- if git_dir.exists():
478
+ # 先检查是否是git源码安装(找到仓库根目录即认为是源码安装)
479
+ if repo_root and (repo_root / ".git").exists():
346
480
  from jarvis.jarvis_utils.git_utils import check_and_update_git_repo
347
481
 
348
- return check_and_update_git_repo(str(script_dir))
482
+ return check_and_update_git_repo(str(repo_root))
349
483
 
350
484
  # 检查是否是pip/uv pip安装的版本
351
485
  return _check_pip_updates()
@@ -1289,12 +1423,21 @@ def _collect_optional_config_interactively(
1289
1423
  )
1290
1424
  or changed
1291
1425
  )
1426
+ # 规划相关:最大递归层数(仅在启用规划时生效,CLI --plan/--no-plan 控制启用)
1427
+ changed = (
1428
+ _ask_and_set_int(
1429
+ "JARVIS_PLAN_MAX_DEPTH",
1430
+ "任务规划的最大层数(限制递归拆分深度,默认2;仅在启用规划时生效)",
1431
+ 3,
1432
+ )
1433
+ or changed
1434
+ )
1292
1435
  # 新增:自动总结轮次与脚本超时
1293
1436
  changed = (
1294
1437
  _ask_and_set_int(
1295
1438
  "JARVIS_AUTO_SUMMARY_ROUNDS",
1296
- "基于对话轮次的自动总结阈值(达到该轮次后自动总结并清理历史,默认20)",
1297
- 20,
1439
+ "基于对话轮次的自动总结阈值(达到该轮次后自动总结并清理历史,默认50)",
1440
+ 50,
1298
1441
  )
1299
1442
  or changed
1300
1443
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.5.0
3
+ Version: 0.6.0
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
@@ -78,6 +78,18 @@ Requires-Dist: sentence-transformers==2.7.0; extra == "rag"
78
78
  Requires-Dist: torch>=2.6; extra == "rag"
79
79
  Requires-Dist: unstructured[md]; extra == "rag"
80
80
  Requires-Dist: rank-bm25; extra == "rag"
81
+ Provides-Extra: clang16
82
+ Requires-Dist: clang==16.*; extra == "clang16"
83
+ Provides-Extra: clang17
84
+ Requires-Dist: clang==17.*; extra == "clang17"
85
+ Provides-Extra: clang18
86
+ Requires-Dist: clang==18.*; extra == "clang18"
87
+ Provides-Extra: clang19
88
+ Requires-Dist: clang==19.*; extra == "clang19"
89
+ Provides-Extra: clang20
90
+ Requires-Dist: clang==20.*; extra == "clang20"
91
+ Provides-Extra: clang21
92
+ Requires-Dist: clang==21.*; extra == "clang21"
81
93
  Dynamic: author
82
94
  Dynamic: home-page
83
95
  Dynamic: license-file
@@ -1,6 +1,6 @@
1
- jarvis/__init__.py,sha256=oTkuIy1EsFy9C2D4yYth5JohcbEgLLtiPlfbyY7LvrM,73
2
- jarvis/jarvis_agent/__init__.py,sha256=uq8p8ruYW5CjN8J8fncYAe7YrRORXjm183TSu_0ST2Y,51837
3
- jarvis/jarvis_agent/agent_manager.py,sha256=Q0S-mYTPt8Xd7RKGoLWoWU_RP_wEXFWxCjve8_t2f2A,3807
1
+ jarvis/__init__.py,sha256=TsTXCP60vIrsxYvAjdU8MfwI2cuIMAl-r5V3YdZLVj0,73
2
+ jarvis/jarvis_agent/__init__.py,sha256=ZrRwvproslqcmJ0wa3Bj820CYZWOSwkvEEZICLaU0ZA,57394
3
+ jarvis/jarvis_agent/agent_manager.py,sha256=x79JTCJV-xTzX8ndmsyqSgsE1a2Ci4krcySx31JK0eU,3897
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
6
6
  jarvis/jarvis_agent/edit_file_handler.py,sha256=8j7SRSWTw468fTuR-ueNKFK_0pR1GwDxTvsGGmm3zlA,24714
@@ -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=euX9K8rTc4qTaFIHJhjnpG2EZNYnMfUW-wDc3usO8SQ,50127
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
@@ -18,13 +18,14 @@ jarvis/jarvis_agent/prompt_manager.py,sha256=_1qLBSA3yn4nT_N3X2npTpW40Cp-pMeyvnz
18
18
  jarvis/jarvis_agent/prompts.py,sha256=CvbPYx_klEz6OQrxVReZAnC2uQNo53rWkkucmh30uKg,9531
19
19
  jarvis/jarvis_agent/protocols.py,sha256=YFJaC9MHi7JfLzmvlyotJDjiCO4Z07XJXy1gKhVdUy4,956
20
20
  jarvis/jarvis_agent/rewrite_file_handler.py,sha256=FVSrfrC115_cGvdPW9RIn3A-gQAhok7GyyBfnOFdpXs,5276
21
- jarvis/jarvis_agent/run_loop.py,sha256=iGfa28J2K6I07k6p66O3WJFSk9z4uOarqe6CLqALIsk,6167
21
+ jarvis/jarvis_agent/run_loop.py,sha256=-GqU2gAS3nbAr6GxJfEbupz-Cv0JsE0bEJdHH1L4EVs,6507
22
22
  jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
23
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=TRNZROyQPedB6vrUnp0wGcZztIK6mpZaefjSdGhw29s,10691
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
@@ -32,8 +33,15 @@ jarvis/jarvis_agent/utils.py,sha256=WJmKys_ceDALL73GdMCOgmjGHBzeRSPj7rmc8Pkrvzc,
32
33
  jarvis/jarvis_agent/web_bridge.py,sha256=h15PXuPWWfZynWt8bPW4BDeCpIVoIOlRXfO0je6HDx4,6673
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
36
+ jarvis/jarvis_c2rust/__init__.py,sha256=piredVT3roAgl6Sq3fqtS9MGc7QeSneH2-7zUbQ1bRo,328
37
+ jarvis/jarvis_c2rust/cli.py,sha256=BE6LBjIeB6wmp9fOcz3rcduXhc5oGsLOrHL_lm2VAuY,17623
38
+ jarvis/jarvis_c2rust/collector.py,sha256=tF02dyGNH3ldIsPAggAf610nMLJOPOAA6tnWZrOLmec,7286
39
+ jarvis/jarvis_c2rust/library_replacer.py,sha256=nhBNOL5ttSrVdxjFcUNWWXXaI7h9kyKyo6zQwDxtulQ,40047
40
+ jarvis/jarvis_c2rust/llm_module_agent.py,sha256=3SIPVXwMaOJQCrFzb51hgjZ8rcJWiY3nti5ujgx82zc,55255
41
+ jarvis/jarvis_c2rust/scanner.py,sha256=qxDNFaHmy6YuJPnNAKwrUbLorGOMZws6OyQ8bb2YpM8,62626
42
+ jarvis/jarvis_c2rust/transpiler.py,sha256=MtbrGFOsxEt742PUVVVSqCsXyGz4RWfBRUZu7wUq7MI,56025
35
43
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- jarvis/jarvis_code_agent/code_agent.py,sha256=JtUZ6maMxOic5g5THCoOpgv9hyYecJZL71QR7nE2KDM,42269
44
+ jarvis/jarvis_code_agent/code_agent.py,sha256=knN8niW9jh5F1fFXHaIOWIyx9J1_1tPq6cRPFm46Nu8,46680
37
45
  jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
38
46
  jarvis/jarvis_code_analysis/code_review.py,sha256=48r0UE4pmOUaRgBJIJrpPW307sKGo1rnTNkWdsqkOrY,29889
39
47
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
@@ -56,7 +64,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
56
64
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
57
65
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
58
66
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
59
- jarvis/jarvis_data/config_schema.json,sha256=1c8h8kDlcBqqiX2uHhajgT70F9o88QR1ee-zk2GJJ6w,15093
67
+ jarvis/jarvis_data/config_schema.json,sha256=qb5kyUD-_DPV2aWzyqA2Aasdllzfy__qt3eiht5Dnk8,15583
60
68
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
61
69
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
70
  jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
@@ -91,6 +99,16 @@ jarvis/jarvis_rag/query_rewriter.py,sha256=LGAWZ8kwH_dpquuYqc4QWC7IXmHX3SsnPSYMW
91
99
  jarvis/jarvis_rag/rag_pipeline.py,sha256=aaTuxiArtVaPemWeySApw64q204JeLNXpOEtq7Adn1I,13797
92
100
  jarvis/jarvis_rag/reranker.py,sha256=7Azc3y5fngwfPKtzZ8tx6iGKNeqC8uDy8yo8VCyLyL4,2670
93
101
  jarvis/jarvis_rag/retriever.py,sha256=J4jO0492yHEwxJz_Cp2WP3vGHRHKj56rDyWZQ2W0XdA,18374
102
+ jarvis/jarvis_sec/README.md,sha256=0GpTAOAupOGEAv0juLJXEBBfaa6KL74t2nRbj0N5Mkw,7621
103
+ jarvis/jarvis_sec/__init__.py,sha256=SYgHZcxoV4xgjdal1S04u7QXCQJdgPpwiAxmEcK1pYg,25690
104
+ jarvis/jarvis_sec/cli.py,sha256=_DWWcYscLWCyIs5k7bKjXSBkQPxLbYLJKkU0QuTaeZs,3494
105
+ jarvis/jarvis_sec/prompts.py,sha256=ObGFNvrCtbIhsWlJHYQ5tcsTkuBlID0FozncYCv8S8k,14165
106
+ jarvis/jarvis_sec/report.py,sha256=5wLKqK-CDFZ2fPtwP3sGYgjAi69TKoYizyLK1cchDVA,8516
107
+ jarvis/jarvis_sec/types.py,sha256=_C3IHwnni3kApryP3c_UTYdvFdmlJSVXQLLefX94zl0,365
108
+ jarvis/jarvis_sec/workflow.py,sha256=DokD8ZBcAfyiq078OM7rmZdpWrOXAL_7ZGkLF2TOqcc,20187
109
+ jarvis/jarvis_sec/checkers/__init__.py,sha256=ZF7zHJS6P6cu9VE3kMc66DK7m-Ki2bmMkwkap5mm26g,786
110
+ jarvis/jarvis_sec/checkers/c_checker.py,sha256=ezW_-9wwzLxYEENd3HhdgDnLfJiLccJacJklTOnVXgw,53498
111
+ jarvis/jarvis_sec/checkers/rust_checker.py,sha256=SBobyUjN1rDzFPESZ6uif3PR3HUW6Mux2ofxeqRUJ2Q,13483
94
112
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
113
  jarvis/jarvis_smart_shell/main.py,sha256=lUJPwLR9RlaaVv0lx3ojjjv5dELHOaindlsLDDkpssQ,14960
96
114
  jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
@@ -102,39 +120,40 @@ jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
102
120
  jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
103
121
  jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
104
122
  jarvis/jarvis_tools/clear_memory.py,sha256=8DOq6dHLemfKTJqu227PWBIp8Iu5K7EXwINzL8DYk8M,8205
105
- jarvis/jarvis_tools/execute_script.py,sha256=kjl-c6OmQPEeGqEjbuEGoGhb2nAiQoYzz2_2_Y3tIlY,8277
123
+ jarvis/jarvis_tools/execute_script.py,sha256=AQ9Krh6GuhzHzLPZ7HFpCe7UMtVtkI-ua3bTiQ2QShQ,8257
106
124
  jarvis/jarvis_tools/file_analyzer.py,sha256=jzVb8fAJn3dWwpCiYH-Wuxva4kpHqBB2_V3x3mzY0Gs,4158
107
125
  jarvis/jarvis_tools/generate_new_tool.py,sha256=tJz0YtfDwyH9y00VEWw3Btqr9JCNhvtI8BN9i5hYk_M,8560
108
126
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
109
- jarvis/jarvis_tools/read_code.py,sha256=F1RuO0c69t0h7CvrUGqrTyNcOCcUrFQPACc61O_YSso,6382
127
+ jarvis/jarvis_tools/read_code.py,sha256=os7VCHc24WYdjpWTG7YQKddmRL9aDD2xXKiitc2yryM,6861
128
+ jarvis/jarvis_tools/read_symbols.py,sha256=GI8Q12P2ABbedgGtZfvzMVXyqWykh8wi4aapnRqvb8o,5246
110
129
  jarvis/jarvis_tools/read_webpage.py,sha256=dfyXJ9vaX-ZRbua1P5ZlaU_SlSzKkeNw-1kI_3-gxFE,5433
111
- jarvis/jarvis_tools/registry.py,sha256=KDDuaQC_Ej8nGKk2P5W7uMV22BQQx_lSf9dLrLZ6ocY,34033
130
+ jarvis/jarvis_tools/registry.py,sha256=ryHc6JJ-flkICoA4I8wvUxgMezqBHSabk-zLAp_ZnCQ,34561
112
131
  jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh58qZNZApKc,8624
113
132
  jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
114
133
  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
134
+ jarvis/jarvis_tools/sub_agent.py,sha256=oV_-R5kAnocA3X8yrxtccGKa6UIo08_YbMQB0ozCPzU,8534
135
+ jarvis/jarvis_tools/sub_code_agent.py,sha256=F9iY0XgYsHJEdfMo_0UR646qYbj61t4jIUVnrq9zPuE,9479
117
136
  jarvis/jarvis_tools/virtual_tty.py,sha256=L7-J00ARQvIa25T45Hhqg2eCBl6W2LFgqDlWMWf-7dk,25275
118
137
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
- jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVPxs,9323
138
+ jarvis/jarvis_tools/cli/main.py,sha256=0JTAj2vPc410Noj_bcJBF4AijovYQTIFBp7cO8LlRfA,9324
120
139
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
121
140
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
122
141
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
123
- jarvis/jarvis_utils/config.py,sha256=jOVCrlD597U6FTu8j-lyO93Mpoyqv3Do7Seja_XrRfE,22580
142
+ jarvis/jarvis_utils/config.py,sha256=UqDj2wWSDyXT5FfXx3iUNTzPdHbzBQdyx_srt6vc2rw,23163
124
143
  jarvis/jarvis_utils/embedding.py,sha256=x6mrkL7Bc3qgfuBDsjc4fg4nKG8ofGxVLVVydbsb8PY,2838
125
144
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
126
145
  jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
127
- jarvis/jarvis_utils/git_utils.py,sha256=zxjdxbFb_X6aYo-w1fbMx3d2n1ScbmmaAYlE3wGaaSg,24071
146
+ jarvis/jarvis_utils/git_utils.py,sha256=_UFVUr73cMn_YGQw8HK3ws1mPaItlCX0kMF6RcDfGrU,26111
128
147
  jarvis/jarvis_utils/globals.py,sha256=7Xvf9HY6jYJL4vSD1F1WCoxHkHCAyltJUYt4V9gGVU4,8865
129
148
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
130
149
  jarvis/jarvis_utils/input.py,sha256=4VXpUZoAocW1mldlZd4bmXI8a_CmcQj7IPLBNgNLGSI,40045
131
150
  jarvis/jarvis_utils/methodology.py,sha256=YuuKBjr58cu8QWcniU7QVlEM9Cem6wo4IYcq1iwSDMw,13158
132
151
  jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
133
152
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
134
- jarvis/jarvis_utils/utils.py,sha256=uBWPwVmzM23HUDjnFdEOEsPF50cjJvC7lMvJqXHyjJ0,74276
135
- jarvis_ai_assistant-0.5.0.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
136
- jarvis_ai_assistant-0.5.0.dist-info/METADATA,sha256=Y1rxsB9YwcJmuEDvCayrnpUAVx87Nq-yVdjuBWo_g8U,18751
137
- jarvis_ai_assistant-0.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
138
- jarvis_ai_assistant-0.5.0.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
139
- jarvis_ai_assistant-0.5.0.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
140
- jarvis_ai_assistant-0.5.0.dist-info/RECORD,,
153
+ jarvis/jarvis_utils/utils.py,sha256=FnPhuwUII9N-HLgIF68nJ5gHJWUYsbw7dbu6GUBh0A8,79095
154
+ jarvis_ai_assistant-0.6.0.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
155
+ jarvis_ai_assistant-0.6.0.dist-info/METADATA,sha256=_cEYvREbrWC-QzPMNToJZa9PxMPhO7Bf140Ko9wtOYo,19177
156
+ jarvis_ai_assistant-0.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
157
+ jarvis_ai_assistant-0.6.0.dist-info/entry_points.txt,sha256=Uxk2_VeucH_m7EwH2mw0SlEYHIUmbzXkjTb15z_lcko,1552
158
+ jarvis_ai_assistant-0.6.0.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
159
+ jarvis_ai_assistant-0.6.0.dist-info/RECORD,,
@@ -2,6 +2,7 @@
2
2
  ja = jarvis.jarvis_agent.main:main
3
3
  jarvis = jarvis.jarvis_agent.jarvis:main
4
4
  jarvis-agent = jarvis.jarvis_agent.main:main
5
+ jarvis-c2rust = jarvis.jarvis_c2rust.cli:main
5
6
  jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
6
7
  jarvis-code-review = jarvis.jarvis_code_analysis.code_review:main
7
8
  jarvis-git-commit = jarvis.jarvis_git_utils.git_commiter:main
@@ -11,9 +12,11 @@ jarvis-methodology = jarvis.jarvis_methodology.main:main
11
12
  jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
12
13
  jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
13
14
  jarvis-rag = jarvis.jarvis_rag.cli:main
15
+ jarvis-sec = jarvis.jarvis_sec.cli:main
14
16
  jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
15
17
  jarvis-stats = jarvis.jarvis_stats.cli:main
16
18
  jarvis-tool = jarvis.jarvis_tools.cli.main:main
19
+ jc2r = jarvis.jarvis_c2rust.cli:main
17
20
  jca = jarvis.jarvis_code_agent.code_agent:main
18
21
  jcr = jarvis.jarvis_code_analysis.code_review:main
19
22
  jgc = jarvis.jarvis_git_utils.git_commiter:main
@@ -23,6 +26,7 @@ jma = jarvis.jarvis_multi_agent.main:main
23
26
  jmo = jarvis.jarvis_memory_organizer.memory_organizer:main
24
27
  jpm = jarvis.jarvis_platform_manager.main:main
25
28
  jrg = jarvis.jarvis_rag.cli:main
29
+ jsec = jarvis.jarvis_sec.cli:main
26
30
  jss = jarvis.jarvis_smart_shell.main:main
27
31
  jst = jarvis.jarvis_stats.cli:main
28
32
  jt = jarvis.jarvis_tools.cli.main:main