jarvis-ai-assistant 0.3.33__py3-none-any.whl → 0.4.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.
@@ -24,6 +24,7 @@ from jarvis.jarvis_utils.config import (
24
24
  is_confirm_before_apply_patch,
25
25
  is_enable_static_analysis,
26
26
  get_git_check_mode,
27
+ set_config,
27
28
  )
28
29
  from jarvis.jarvis_utils.git_utils import (
29
30
  confirm_add_new_files,
@@ -90,11 +91,6 @@ class CodeAgent:
90
91
  auto_complete=False,
91
92
  output_handler=[tool_registry, EditFileHandler()], # type: ignore
92
93
  model_group=model_group,
93
- input_handler=[
94
- shell_input_handler,
95
- file_context_handler,
96
- builtin_input_handler,
97
- ],
98
94
  need_summary=need_summary,
99
95
  use_methodology=False, # 禁用方法论
100
96
  use_analysis=False, # 禁用分析
@@ -775,7 +771,6 @@ class CodeAgent:
775
771
 
776
772
  @app.command()
777
773
  def cli(
778
-
779
774
  model_group: Optional[str] = typer.Option(
780
775
  None, "-g", "--llm-group", help="使用的模型组,覆盖配置文件中的设置"
781
776
  ),
@@ -806,13 +801,44 @@ def cli(
806
801
  "--suffix",
807
802
  help="提交信息后缀(用换行分隔)",
808
803
  ),
804
+ non_interactive: bool = typer.Option(
805
+ False, "-n", "--non-interactive", help="启用非交互模式:用户无法与命令交互,脚本执行超时限制为5分钟"
806
+ ),
809
807
  ) -> None:
810
808
  """Jarvis主入口点。"""
809
+ # CLI 标志:非交互模式(不依赖配置文件)
810
+ if non_interactive:
811
+ try:
812
+ os.environ["JARVIS_NON_INTERACTIVE"] = "true"
813
+ except Exception:
814
+ pass
815
+ # 注意:全局配置同步放在 init_env 之后执行,避免被 init_env 覆盖
816
+ # 非交互模式要求从命令行传入任务
817
+ if non_interactive and not (requirement and str(requirement).strip()):
818
+ PrettyOutput.print(
819
+ "非交互模式已启用:必须使用 --requirement 传入任务内容,因多行输入不可用。",
820
+ OutputType.ERROR,
821
+ )
822
+ raise typer.Exit(code=2)
811
823
  init_env(
812
824
  "欢迎使用 Jarvis-CodeAgent,您的代码工程助手已准备就绪!",
813
825
  config_file=config_file,
814
826
  )
815
827
 
828
+ # 在初始化环境后同步 CLI 选项到全局配置,避免被 init_env 覆盖
829
+ try:
830
+ if model_group:
831
+ set_config("JARVIS_LLM_GROUP", str(model_group))
832
+ if tool_group:
833
+ set_config("JARVIS_TOOL_GROUP", str(tool_group))
834
+ if restore_session:
835
+ set_config("JARVIS_RESTORE_SESSION", True)
836
+ if non_interactive:
837
+ set_config("JARVIS_NON_INTERACTIVE", True)
838
+ except Exception:
839
+ # 静默忽略同步异常,不影响主流程
840
+ pass
841
+
816
842
  try:
817
843
  subprocess.run(
818
844
  ["git", "rev-parse", "--git-dir"],
@@ -188,6 +188,11 @@
188
188
  "description": "AI工具筛选阈值:当可用工具数量超过此值时触发AI筛选",
189
189
  "default": 30
190
190
  },
191
+ "JARVIS_SCRIPT_EXECUTION_TIMEOUT": {
192
+ "type": "number",
193
+ "description": "脚本执行的超时时间(秒),仅在非交互模式下生效。",
194
+ "default": 300
195
+ },
191
196
  "JARVIS_CONFIRM_BEFORE_APPLY_PATCH": {
192
197
  "type": "boolean",
193
198
  "description": "应用补丁前是否需要确认",
@@ -3,10 +3,12 @@ from typing import Optional
3
3
 
4
4
  import typer
5
5
  import yaml # type: ignore[import-untyped]
6
+ import os
6
7
 
7
8
  from jarvis.jarvis_multi_agent import MultiAgent
8
9
  from jarvis.jarvis_utils.input import get_multiline_input
9
10
  from jarvis.jarvis_utils.utils import init_env
11
+ from jarvis.jarvis_utils.config import set_config
10
12
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
11
13
 
12
14
  app = typer.Typer(help="多智能体系统启动器")
@@ -18,9 +20,34 @@ def cli(
18
20
  user_input: Optional[str] = typer.Option(
19
21
  None, "--input", "-i", help="用户输入(可选)"
20
22
  ),
23
+ non_interactive: bool = typer.Option(
24
+ False, "-n", "--non-interactive", help="启用非交互模式:用户无法与命令交互,脚本执行超时限制为5分钟"
25
+ ),
21
26
  ):
22
27
  """从YAML配置文件初始化并运行多智能体系统"""
28
+ # CLI 标志:非交互模式(不依赖配置文件)
29
+ if non_interactive:
30
+ try:
31
+ os.environ["JARVIS_NON_INTERACTIVE"] = "true"
32
+ except Exception:
33
+ pass
34
+ # 注意:全局配置同步在 init_env 之后执行,避免被覆盖
35
+ # 非交互模式要求从命令行传入任务
36
+ if non_interactive and not (user_input and str(user_input).strip()):
37
+ PrettyOutput.print(
38
+ "非交互模式已启用:必须使用 --input 传入任务内容,因多行输入不可用。",
39
+ OutputType.ERROR,
40
+ )
41
+ raise typer.Exit(code=2)
23
42
  init_env("欢迎使用 Jarvis-MultiAgent,您的多智能体系统已准备就绪!")
43
+
44
+ # 在初始化环境后同步 CLI 选项到全局配置,避免被 init_env 覆盖
45
+ try:
46
+ if non_interactive:
47
+ set_config("JARVIS_NON_INTERACTIVE", True)
48
+ except Exception:
49
+ # 静默忽略同步异常,不影响主流程
50
+ pass
24
51
 
25
52
  try:
26
53
  with open(config, "r", errors="ignore") as f:
@@ -223,6 +223,7 @@ class BasePlatform(ABC):
223
223
  duration = end_time - start_time
224
224
  panel.subtitle = f"[bold green]✓ 对话完成耗时: {duration:.2f}秒[/bold green]"
225
225
  live.update(panel)
226
+ console.print()
226
227
  else:
227
228
  # Print a clear prefix line before streaming model output (non-pretty mode)
228
229
  console.print(
@@ -19,6 +19,7 @@ class ScriptTool:
19
19
  + "注意:由于模型上下文长度限制,请避免在脚本中输出大量信息,应该使用rg过滤输出。"
20
20
  + "与virtual_tty不同,此工具会创建一个临时的脚本文件,并使用脚本命令执行脚本,不具备交互式操作的能力,"
21
21
  + "适用于需要执行脚本并获取结果的场景。不适合需要交互式操作的场景(如:ssh连接、sftp传输、gdb/dlv调试等)。"
22
+ + "在非交互模式(JARVIS_NON_INTERACTIVE=true)下:脚本执行时间限制为5分钟,超时将被终止并返回超时信息;用户无法与命令交互,请不要执行需要交互的命令。"
22
23
  )
23
24
  parameters = {
24
25
  "type": "object",
@@ -115,8 +116,37 @@ class ScriptTool:
115
116
  f"script -q -c '{interpreter} {script_path}' {output_file}"
116
117
  )
117
118
 
118
- # Execute command and capture return code
119
- os.system(tee_command)
119
+ # Execute command with optional timeout in non-interactive mode
120
+ from jarvis.jarvis_utils.config import get_script_execution_timeout, is_non_interactive
121
+ import subprocess
122
+
123
+ timed_out = False
124
+ if is_non_interactive():
125
+ try:
126
+ proc = subprocess.Popen(tee_command, shell=True)
127
+ try:
128
+ proc.wait(timeout=get_script_execution_timeout())
129
+ except subprocess.TimeoutExpired:
130
+ timed_out = True
131
+ try:
132
+ proc.kill()
133
+ except Exception:
134
+ pass
135
+ except Exception as e:
136
+ PrettyOutput.print(str(e), OutputType.ERROR)
137
+ # Attempt to read any partial output if available
138
+ try:
139
+ output = self.get_display_output(output_file)
140
+ except Exception as ee:
141
+ output = f"读取输出文件失败: {str(ee)}"
142
+ return {
143
+ "success": False,
144
+ "stdout": output,
145
+ "stderr": f"执行脚本失败: {str(e)}",
146
+ }
147
+ else:
148
+ # Execute command and capture return code
149
+ os.system(tee_command)
120
150
 
121
151
  # Read and process output file
122
152
  try:
@@ -125,12 +155,19 @@ class ScriptTool:
125
155
  except Exception as e:
126
156
  output = f"读取输出文件失败: {str(e)}"
127
157
 
128
- # Return successful result
129
- return {
130
- "success": True,
131
- "stdout": output,
132
- "stderr": "",
133
- }
158
+ # Return result (handle timeout in non-interactive mode)
159
+ if is_non_interactive() and timed_out:
160
+ return {
161
+ "success": False,
162
+ "stdout": output,
163
+ "stderr": f"执行超时(超过{get_script_execution_timeout()}秒),进程已被终止(非交互模式)。",
164
+ }
165
+ else:
166
+ return {
167
+ "success": True,
168
+ "stdout": output,
169
+ "stderr": "",
170
+ }
134
171
 
135
172
  finally:
136
173
  # Clean up temporary files
@@ -137,14 +137,12 @@ class SubAgentTool:
137
137
  # 基于父Agent(如有)继承部分配置后创建子Agent
138
138
  parent_agent = args.get("agent", None)
139
139
  parent_model_group = None
140
- parent_input_handler = None
141
140
  parent_execute_tool_confirm = None
142
141
  parent_multiline_inputer = None
143
142
  try:
144
143
  if parent_agent is not None:
145
144
  if getattr(parent_agent, "model", None):
146
145
  parent_model_group = getattr(parent_agent.model, "model_group", None)
147
- parent_input_handler = getattr(parent_agent, "input_handler", None)
148
146
  parent_execute_tool_confirm = getattr(parent_agent, "execute_tool_confirm", None)
149
147
  parent_multiline_inputer = getattr(parent_agent, "multiline_inputer", None)
150
148
  except Exception:
@@ -160,7 +158,6 @@ class SubAgentTool:
160
158
  auto_complete=auto_complete,
161
159
  output_handler=None,
162
160
  use_tools=None,
163
- input_handler=parent_input_handler,
164
161
  execute_tool_confirm=parent_execute_tool_confirm,
165
162
  need_summary=need_summary,
166
163
  multiline_inputer=parent_multiline_inputer,
@@ -81,10 +81,10 @@ def get_max_token_count(model_group_override: Optional[str] = None) -> int:
81
81
  获取模型允许的最大token数量。
82
82
 
83
83
  返回:
84
- int: 模型能处理的最大token数量,为最大输入token数量的100倍。
84
+ int: 模型能处理的最大token数量,为最大输入token数量的30倍。
85
85
  """
86
86
  max_input_tokens = get_max_input_token_count(model_group_override)
87
- return max_input_tokens * 100
87
+ return max_input_tokens * 30
88
88
 
89
89
 
90
90
  def get_max_input_token_count(model_group_override: Optional[str] = None) -> int:
@@ -712,6 +712,16 @@ def get_tool_filter_threshold() -> int:
712
712
  return int(GLOBAL_CONFIG_DATA.get("JARVIS_TOOL_FILTER_THRESHOLD", 30))
713
713
 
714
714
 
715
+ def get_script_execution_timeout() -> int:
716
+ """
717
+ 获取脚本执行的超时时间(秒)。
718
+
719
+ 返回:
720
+ int: 超时时间,默认为300秒(5分钟)
721
+ """
722
+ return int(GLOBAL_CONFIG_DATA.get("JARVIS_SCRIPT_EXECUTION_TIMEOUT", 300))
723
+
724
+
715
725
  def is_enable_git_repo_jca_switch() -> bool:
716
726
  """
717
727
  是否启用:在初始化环境前检测Git仓库并提示可切换到代码开发模式(jca)
@@ -746,3 +756,26 @@ def is_immediate_abort() -> bool:
746
756
  默认关闭
747
757
  """
748
758
  return GLOBAL_CONFIG_DATA.get("JARVIS_IMMEDIATE_ABORT", False) is True
759
+
760
+
761
+ def is_non_interactive() -> bool:
762
+ """
763
+ 获取是否启用非交互模式。
764
+
765
+ 返回:
766
+ bool: 如果启用非交互模式则返回True,默认为False
767
+ """
768
+ # 优先读取环境变量,确保 CLI 标志生效且不被配置覆盖
769
+ try:
770
+ import os
771
+ v = os.getenv("JARVIS_NON_INTERACTIVE")
772
+ if v is not None:
773
+ val = str(v).strip().lower()
774
+ if val in ("1", "true", "yes", "on"):
775
+ return True
776
+ if val in ("0", "false", "no", "off"):
777
+ return False
778
+ except Exception:
779
+ # 忽略环境变量解析异常,回退到配置
780
+ pass
781
+ return GLOBAL_CONFIG_DATA.get("JARVIS_NON_INTERACTIVE", False) is True
@@ -366,6 +366,9 @@ class FileCompleter(Completer):
366
366
  def user_confirm(tip: str, default: bool = True) -> bool:
367
367
  """提示用户确认是/否问题"""
368
368
  try:
369
+ from jarvis.jarvis_utils.config import is_non_interactive
370
+ if is_non_interactive():
371
+ return default
369
372
  suffix = "[Y/n]" if default else "[y/N]"
370
373
  ret = get_single_line_input(f"{tip} {suffix}: ")
371
374
  return default if ret == "" else ret.lower() == "y"
@@ -663,6 +666,9 @@ def get_multiline_input(tip: str, print_on_empty: bool = True) -> str:
663
666
  preset: Optional[str] = None
664
667
  preset_cursor: Optional[int] = None
665
668
  while True:
669
+ from jarvis.jarvis_utils.config import is_non_interactive
670
+ if is_non_interactive():
671
+ return "我无法与你交互,所有的事情你都自我决策,如果无法决策,就完成任务"
666
672
  user_input = _get_multiline_input_internal(
667
673
  tip, preset=preset, preset_cursor=preset_cursor
668
674
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.33
3
+ Version: 0.4.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
@@ -1,16 +1,16 @@
1
- jarvis/__init__.py,sha256=pK5l6XHBkpMUJjvRS5nGlvLwpzdLLQEAyFtF-qstkkM,74
2
- jarvis/jarvis_agent/__init__.py,sha256=Mp0lcivL99cL2eIjHz-D1C86XMOhJkFYtnQcJoflfH4,49033
3
- jarvis/jarvis_agent/agent_manager.py,sha256=UgMUz6fSV2XhQHhmIGHF53MyUytAPvZ1yC2f29LcTO8,3235
1
+ jarvis/__init__.py,sha256=nXZdIlK3JANzS2OXYhyGTfXHFCA3Sxt4SPv2LQJaElU,73
2
+ jarvis/jarvis_agent/__init__.py,sha256=e3K_Ee9x6iadYIvZAurfBxMRGlCzxooGWQUl69_5YBg,49251
3
+ jarvis/jarvis_agent/agent_manager.py,sha256=2VTGfwXViNF9y4xUYGPQA0LGzITdha3JDzOBLLFdSBM,3635
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
+ jarvis/jarvis_agent/config.py,sha256=7rSYmgx9hI-PnWA2PLjubOxAbH7_NEDmnDvy6iAnPbQ,3362
6
6
  jarvis/jarvis_agent/config_editor.py,sha256=hlb9EYxKWcR_qdW2O89CgNDdciR9Isi743JU_1gD8j4,1927
7
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_context_handler.py,sha256=2MPn_O_2llX39meFg272Cjk3wMPn5nmgbGMUyX06YQo,2113
11
11
  jarvis/jarvis_agent/file_methodology_manager.py,sha256=LnhgTx5xQXCBK8esjCkFbgFm9iEyFX7TryUlC40Kzpw,4428
12
- jarvis/jarvis_agent/jarvis.py,sha256=CNuVLxbl9erQkEq41oWI7tFGi-AMiNBEJ56alQLm_m4,29111
13
- jarvis/jarvis_agent/main.py,sha256=bFcwXWC6O05jQiXy6ED_bHjdjDo5VwV_i1BoBEAzgP0,3336
12
+ jarvis/jarvis_agent/jarvis.py,sha256=GqLHYUMZRlr_W4A16NVZSA8YMBTqcMz87ZxnctlmcCQ,47142
13
+ jarvis/jarvis_agent/main.py,sha256=IgS7d3rng2vFlu983OUeCkOAosKjFAn1sFCk3gT9J9Q,4563
14
14
  jarvis/jarvis_agent/memory_manager.py,sha256=WSyUffx9xTmkcj4QrSLEfsjI3sTMUwZmkkC9_N_gTjo,8042
15
15
  jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
16
16
  jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
@@ -22,14 +22,18 @@ jarvis/jarvis_agent/run_loop.py,sha256=OWdJSq1dLC6xPx4EQBfSnD_rb3IwszwZp4KbXYiJt
22
22
  jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
23
23
  jarvis/jarvis_agent/share_manager.py,sha256=MF2RlomcgPxF8nVUk28DP6IRddZ_tot5l_YRvy0qXSQ,8726
24
24
  jarvis/jarvis_agent/shell_input_handler.py,sha256=wiAPjB-9uTkcLszbO5dlOUwIfaeR39RgRcZhahIGqoA,2018
25
+ jarvis/jarvis_agent/stdio_redirect.py,sha256=xqF-sENitpefCT3TA9oRwATFqbDrU2dvqM-UiMZRhbE,9944
25
26
  jarvis/jarvis_agent/task_analyzer.py,sha256=JXc-63hnTD7oSX-nIfRcgxqCMhh4fM4QYVc7C1gp--M,7813
26
27
  jarvis/jarvis_agent/task_manager.py,sha256=lme_aN8vaF_a4Tvv2kaSEnWATy8RPSjogTxeLnEYZdg,6504
27
28
  jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
28
29
  jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
29
30
  jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
30
31
  jarvis/jarvis_agent/utils.py,sha256=ldgfuNTNu4JU7Y1LtystBl85OC6H3A4OMycg0XBt_Cs,1615
32
+ jarvis/jarvis_agent/web_bridge.py,sha256=h15PXuPWWfZynWt8bPW4BDeCpIVoIOlRXfO0je6HDx4,6673
33
+ jarvis/jarvis_agent/web_output_sink.py,sha256=sZ6WbLZnuCdT5dS9d8msHY_g-pnj-dvML-I6uJ7-sbc,1733
34
+ jarvis/jarvis_agent/web_server.py,sha256=U2A35vhaIoBCz0Gh37tpyYBLPaJnylOEZlOWEKf-Tho,23596
31
35
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- jarvis/jarvis_code_agent/code_agent.py,sha256=lAnVTFxnnOsd2Vih9c-nSuczfz6CKTMhUQnhj8UcwWk,36735
36
+ jarvis/jarvis_code_agent/code_agent.py,sha256=hKna15DuCKUeosMYjARf6eajlQk3gl-rJDlJ9JpqqHc,37944
33
37
  jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
34
38
  jarvis/jarvis_code_analysis/code_review.py,sha256=Z0JsvyVPPHPm6rfo4fqaQr7CdZKIllo9jqStzV0i_-o,34470
35
39
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
@@ -52,7 +56,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
52
56
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
53
57
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
54
58
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
55
- jarvis/jarvis_data/config_schema.json,sha256=K6Q4ltnULhIVqYTLUSIyiGcZiOaMwkpbhUXQ4U-kDqI,14307
59
+ jarvis/jarvis_data/config_schema.json,sha256=IlQ2u6lNvn1y31NNr544cUkH8GS9wQSbWJCiOlGjZMo,14497
56
60
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
57
61
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
62
  jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
@@ -65,10 +69,10 @@ jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
65
69
  jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=CMFL46vvtpcTI6oS3CAlYteR6xAlwCkvVJmMT22uDRw,26295
66
70
  jarvis/jarvis_methodology/main.py,sha256=uiNzk5b5O6xdvRhsOuD7ubxdd2tPcDsFFnvmes8uH8I,11370
67
71
  jarvis/jarvis_multi_agent/__init__.py,sha256=fBWmW5S9gpEEYzCBJizyE2q0Jj2LUzj4yh7sfoe3Qrc,7170
68
- jarvis/jarvis_multi_agent/main.py,sha256=b9IThFMeUZCYSlgT-VT8r7xeBdrEE_zNT11awEc8IdY,1853
72
+ jarvis/jarvis_multi_agent/main.py,sha256=vh3fV2YIrg5xJ9cj8jttYvjmqRqBlLW4RkSV6upxiGw,2995
69
73
  jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
70
74
  jarvis/jarvis_platform/ai8.py,sha256=g8JkqPGs9SEbqstNMCc5rCHO0QcPHX9LNvb7HMWwB-Q,11471
71
- jarvis/jarvis_platform/base.py,sha256=NhhiAiACNsL462zljtGsG61SD8X-RRJyOAz1n1ocAPw,15947
75
+ jarvis/jarvis_platform/base.py,sha256=7T0m5acGo0hN9GxqqRkeNu77d7wTQ4AHwm9aYQVarCM,15983
72
76
  jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
73
77
  jarvis/jarvis_platform/kimi.py,sha256=KLsf9udAsPRMbQ2JkBeiAlXkupCBwdtMaJ-hpH4Jdkc,15711
74
78
  jarvis/jarvis_platform/openai.py,sha256=4YapmkmJmPGfrjktORcIejlB98b83Wsi_48zjBymHAc,9500
@@ -99,7 +103,7 @@ jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb
99
103
  jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
100
104
  jarvis/jarvis_tools/clear_memory.py,sha256=8DOq6dHLemfKTJqu227PWBIp8Iu5K7EXwINzL8DYk8M,8205
101
105
  jarvis/jarvis_tools/edit_file.py,sha256=UcJNTVCDEmRaQsN_7_Ip2LjrTDm4wWzj2deuZHiBvLI,9026
102
- jarvis/jarvis_tools/execute_script.py,sha256=oDOMn8GcV6qKP4d0RFT6xbHGTazRmaOlp-h_e_Wj80c,6227
106
+ jarvis/jarvis_tools/execute_script.py,sha256=kjl-c6OmQPEeGqEjbuEGoGhb2nAiQoYzz2_2_Y3tIlY,8277
103
107
  jarvis/jarvis_tools/file_analyzer.py,sha256=jzVb8fAJn3dWwpCiYH-Wuxva4kpHqBB2_V3x3mzY0Gs,4158
104
108
  jarvis/jarvis_tools/generate_new_tool.py,sha256=tJz0YtfDwyH9y00VEWw3Btqr9JCNhvtI8BN9i5hYk_M,8560
105
109
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
@@ -110,7 +114,7 @@ jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh5
110
114
  jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
111
115
  jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
112
116
  jarvis/jarvis_tools/search_web.py,sha256=Hi8WBxcRH02qjOF1qcJP2qSqs3kVOKGFAARfh548Ii4,6370
113
- jarvis/jarvis_tools/sub_agent.py,sha256=kjMZBXQE3OUgm5eO9lNkOuBnugWQGZbCpVP0HNW5W2s,8905
117
+ jarvis/jarvis_tools/sub_agent.py,sha256=mZqMyHgDXpZgFWxq8lwwCst2SDXbNyeX7_87fDuA_DQ,8725
114
118
  jarvis/jarvis_tools/sub_code_agent.py,sha256=vVPcGKfgyhbZzl8vp2HHbgR1oQzC0TlS0G3THoZgU5Q,9453
115
119
  jarvis/jarvis_tools/virtual_tty.py,sha256=L7-J00ARQvIa25T45Hhqg2eCBl6W2LFgqDlWMWf-7dk,25275
116
120
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -118,21 +122,21 @@ jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVP
118
122
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
119
123
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
120
124
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
121
- jarvis/jarvis_utils/config.py,sha256=e5S6-H0Up3OupUu0ATESh3UWkjEfsbkyxDf_0fPPBpU,21372
125
+ jarvis/jarvis_utils/config.py,sha256=vdScoPR-07nv9nJJV8kV5t-VQvvZhOH8eJUXfPG5IWs,22361
122
126
  jarvis/jarvis_utils/embedding.py,sha256=x6mrkL7Bc3qgfuBDsjc4fg4nKG8ofGxVLVVydbsb8PY,2838
123
127
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
124
128
  jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
125
129
  jarvis/jarvis_utils/git_utils.py,sha256=zxjdxbFb_X6aYo-w1fbMx3d2n1ScbmmaAYlE3wGaaSg,24071
126
130
  jarvis/jarvis_utils/globals.py,sha256=7Xvf9HY6jYJL4vSD1F1WCoxHkHCAyltJUYt4V9gGVU4,8865
127
131
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
128
- jarvis/jarvis_utils/input.py,sha256=BT-aAaOBFsb4YeqR5ceIsa-j_MYEmsAvQqrXQSknA7c,36536
132
+ jarvis/jarvis_utils/input.py,sha256=muopeZc68N-_tM7ERI2aazqernLumF-sQqS_JfWI0jI,36879
129
133
  jarvis/jarvis_utils/methodology.py,sha256=z_renvRGgHiC-XTQPuN6rvrJ_ffHlwxK_b1BU_jmNAQ,12800
130
134
  jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
131
135
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
132
136
  jarvis/jarvis_utils/utils.py,sha256=uMtfaStxDtp2i9AFIxwtPKgSxLwQxw8Z2rXsX-ZGlis,72728
133
- jarvis_ai_assistant-0.3.33.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
134
- jarvis_ai_assistant-0.3.33.dist-info/METADATA,sha256=GnrDTF9-OWDXNJUjGxlbBxUFUXR5ZmWCopRNw6YiVsk,18752
135
- jarvis_ai_assistant-0.3.33.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
136
- jarvis_ai_assistant-0.3.33.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
137
- jarvis_ai_assistant-0.3.33.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
138
- jarvis_ai_assistant-0.3.33.dist-info/RECORD,,
137
+ jarvis_ai_assistant-0.4.0.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
138
+ jarvis_ai_assistant-0.4.0.dist-info/METADATA,sha256=K2JtrCGOAwMGOrFlsDW4D0rFQDNFMdjVbf02_GjhDkI,18751
139
+ jarvis_ai_assistant-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
+ jarvis_ai_assistant-0.4.0.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
141
+ jarvis_ai_assistant-0.4.0.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
142
+ jarvis_ai_assistant-0.4.0.dist-info/RECORD,,