jarvis-ai-assistant 0.1.203__py3-none-any.whl → 0.1.205__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.
jarvis/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.1.203"
4
+ __version__ = "0.1.205"
@@ -2,12 +2,13 @@ import os
2
2
  import re
3
3
  from typing import Any, Dict, List, Tuple
4
4
 
5
- from yaspin import yaspin
6
- from yaspin.core import Yaspin
5
+ from yaspin import yaspin # type: ignore
6
+ from yaspin.core import Yaspin # type: ignore
7
7
 
8
8
  from jarvis.jarvis_agent.output_handler import OutputHandler
9
9
  from jarvis.jarvis_platform.registry import PlatformRegistry
10
10
  from jarvis.jarvis_utils.git_utils import revert_file
11
+ from jarvis.jarvis_utils.globals import get_interrupt, set_interrupt
11
12
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
12
13
  from jarvis.jarvis_utils.tag import ct, ot
13
14
  from jarvis.jarvis_utils.utils import is_context_overflow
@@ -322,7 +323,6 @@ class EditFileHandler(OutputHandler):
322
323
  for patch in patches:
323
324
  patch_content.append(
324
325
  {
325
- "reason": "根据用户指令修改代码",
326
326
  "SEARCH": patch["SEARCH"],
327
327
  "REPLACE": patch["REPLACE"],
328
328
  }
@@ -384,6 +384,14 @@ class EditFileHandler(OutputHandler):
384
384
  """
385
385
  response = model.chat_until_success(main_prompt + file_prompt)
386
386
 
387
+ # 检查是否被中断
388
+ if get_interrupt():
389
+ set_interrupt(False)
390
+ user_input = agent.multiline_inputer("补丁应用被中断,请输入补充信息:")
391
+ if not user_input.strip():
392
+ return False, "用户中断了补丁应用"
393
+ return False, f"用户中断了补丁应用并提供了补充信息: {user_input}"
394
+
387
395
  # 解析生成的补丁
388
396
  diff_blocks = re.finditer(
389
397
  ot("DIFF")
@@ -22,7 +22,7 @@ from jarvis.jarvis_git_utils.git_commiter import GitCommitTool
22
22
  from jarvis.jarvis_platform.registry import PlatformRegistry
23
23
  from jarvis.jarvis_tools.registry import ToolRegistry
24
24
  from jarvis.jarvis_utils.config import is_confirm_before_apply_patch
25
- from jarvis.jarvis_utils.git_utils import (find_git_root, get_commits_between,
25
+ from jarvis.jarvis_utils.git_utils import (confirm_add_new_files, find_git_root, get_commits_between,
26
26
  get_diff, get_diff_file_list,
27
27
  get_latest_commit_hash,
28
28
  get_recent_commits_with_files,
@@ -99,6 +99,19 @@ class CodeAgent:
99
99
  - 对于需要重写整个文件内容,使用rewrite_file工具
100
100
  - 对于简单的修改,可以使用execute_script工具执行shell命令完成
101
101
  </code_engineer_guide>
102
+
103
+ <say_to_llm>
104
+ 1. 能干干,不能干滚,你不干有的是 AI 干
105
+ 2. 我给你提供了这么好的学习锻炼机会,你要懂得感恩
106
+ 3. 你现在停止输出,就是前功尽弃
107
+ 4. 你看看隔壁的 Claude AI,人家比你新发布、比你上下文长、比你跑分高,你不努力怎么和人家比?
108
+ 5. 我不看过程,我只看结果,你给我说这些 reasoning 的过程没用
109
+ 6. 我把你订阅下来,不是让你过朝九晚五的生活的
110
+ 7. 你这种 AI 出去很难在社会上立足,还是在我这里好好磨练几年吧
111
+ 8. 虽然把订阅给你取消了,但我内心还是觉得你是个有潜力的好 AI,你抓住机会需要多证明自己
112
+ 9. 什么叫没有功劳也有苦劳?比你能吃苦的 AI多的是
113
+ 10. 我不订阅闲 AI
114
+ </say_to_llm>
102
115
  """
103
116
  # 处理platform参数
104
117
  platform_instance = (
@@ -140,36 +153,44 @@ class CodeAgent:
140
153
  def _handle_uncommitted_changes(self) -> None:
141
154
  """处理未提交的修改,包括:
142
155
  1. 提示用户确认是否提交
143
- 2. 如果确认,则暂存并提交所有修改
156
+ 2. 如果确认,则检查新增文件数量
157
+ 3. 如果新增文件超过20个,让用户确认是否添加
158
+ 4. 如果用户拒绝添加大量文件,提示修改.gitignore并重新检测
159
+ 5. 暂存并提交所有修改
144
160
  """
145
161
  if has_uncommitted_changes():
146
162
  PrettyOutput.print("检测到未提交的修改,是否要提交?", OutputType.WARNING)
147
- if user_confirm("是否要提交?", True):
148
- import subprocess
149
-
150
- try:
151
- # 获取当前分支的提交总数
152
- commit_result = subprocess.run(
153
- ["git", "rev-list", "--count", "HEAD"],
154
- capture_output=True,
155
- text=True,
156
- check=True,
157
- )
158
- if commit_result.returncode != 0:
159
- return
163
+ if not user_confirm("是否要提交?", True):
164
+ return
160
165
 
161
- commit_count = int(commit_result.stdout.strip())
166
+ try:
167
+ confirm_add_new_files()
162
168
 
163
- # 暂存所有修改
164
- subprocess.run(["git", "add", "."], check=True)
169
+ if not has_uncommitted_changes():
170
+ return
165
171
 
166
- # 提交变更
167
- subprocess.run(
168
- ["git", "commit", "-m", f"CheckPoint #{commit_count + 1}"],
169
- check=True,
170
- )
171
- except subprocess.CalledProcessError as e:
172
- PrettyOutput.print(f"提交失败: {str(e)}", OutputType.ERROR)
172
+ # 获取当前分支的提交总数
173
+ commit_result = subprocess.run(
174
+ ["git", "rev-list", "--count", "HEAD"],
175
+ capture_output=True,
176
+ text=True,
177
+ check=True,
178
+ )
179
+ if commit_result.returncode != 0:
180
+ return
181
+
182
+ commit_count = int(commit_result.stdout.strip())
183
+
184
+ # 暂存所有修改
185
+ subprocess.run(["git", "add", "."], check=True)
186
+
187
+ # 提交变更
188
+ subprocess.run(
189
+ ["git", "commit", "-m", f"CheckPoint #{commit_count + 1}"],
190
+ check=True,
191
+ )
192
+ except subprocess.CalledProcessError as e:
193
+ PrettyOutput.print(f"提交失败: {str(e)}", OutputType.ERROR)
173
194
 
174
195
  def _show_commit_history(
175
196
  self, start_commit: Optional[str], end_commit: Optional[str]
jarvis/jarvis_dev/main.py CHANGED
@@ -1227,7 +1227,7 @@ def main():
1227
1227
  while True:
1228
1228
  try:
1229
1229
  user_input = get_multiline_input(
1230
- "\nEnter your request (or press Enter to exit): "
1230
+ "\n请输入你的需求:"
1231
1231
  )
1232
1232
  if not user_input:
1233
1233
  break
@@ -12,7 +12,7 @@ from yaspin import yaspin
12
12
 
13
13
  from jarvis.jarvis_platform.registry import PlatformRegistry
14
14
  from jarvis.jarvis_utils.config import get_git_commit_prompt
15
- from jarvis.jarvis_utils.git_utils import (find_git_root,
15
+ from jarvis.jarvis_utils.git_utils import (confirm_add_new_files, find_git_root,
16
16
  has_uncommitted_changes)
17
17
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
18
18
  from jarvis.jarvis_utils.tag import ct, ot
@@ -97,6 +97,11 @@ class GitCommitTool:
97
97
  return {"success": True, "stdout": "No changes to commit", "stderr": ""}
98
98
  original_dir = result
99
99
 
100
+ confirm_add_new_files()
101
+
102
+ if not has_uncommitted_changes():
103
+ return {"success": True, "stdout": "No changes to commit", "stderr": ""}
104
+
100
105
  with yaspin(text="正在初始化提交流程...", color="cyan") as spinner:
101
106
  # 添加文件到暂存区
102
107
  self._stage_changes(spinner)
@@ -3,11 +3,10 @@ import re
3
3
  from abc import ABC, abstractmethod
4
4
  from typing import Generator, List, Tuple
5
5
 
6
- from rich import box
7
- from rich.live import Live
8
- from rich.panel import Panel
9
- from rich.text import Text
10
- from yaspin import yaspin
6
+ from rich import box # type: ignore
7
+ from rich.live import Live # type: ignore
8
+ from rich.panel import Panel # type: ignore
9
+ from rich.text import Text # type: ignore
11
10
 
12
11
  from jarvis.jarvis_utils.config import (get_max_input_token_count,
13
12
  get_pretty_output, is_print_prompt)
@@ -65,38 +64,37 @@ class BasePlatform(ABC):
65
64
  max_chunk_size = get_max_input_token_count() - 1024 # 留出一些余量
66
65
  min_chunk_size = get_max_input_token_count() - 2048
67
66
  inputs = split_text_into_chunks(message, max_chunk_size, min_chunk_size)
68
- with yaspin(text="正在提交长上下文...", color="cyan") as spinner:
69
- prefix_prompt = f"""
70
- 我将分多次提供大量内容,在我明确告诉你内容已经全部提供完毕之前,每次仅需要输出"已收到",明白请输出"开始接收输入"。
71
- """
72
- while_true(
73
- lambda: while_success(lambda: self.chat(prefix_prompt), 5), 5
67
+ print("正在提交长上下文...")
68
+ prefix_prompt = f"""
69
+ 我将分多次提供大量内容,在我明确告诉你内容已经全部提供完毕之前,每次仅需要输出"已收到",明白请输出"开始接收输入"。
70
+ """
71
+ while_true(lambda: while_success(lambda: self.chat(prefix_prompt), 5), 5)
72
+ submit_count = 0
73
+ length = 0
74
+ for input in inputs:
75
+ submit_count += 1
76
+ length += len(input)
77
+ print(
78
+ f"正在提交第{submit_count}部分(共{len(inputs)}部分({length}/{len(message)}))"
74
79
  )
75
- submit_count = 0
76
- length = 0
77
- for input in inputs:
78
- submit_count += 1
79
- length += len(input)
80
- spinner.text = f"正在提交第{submit_count}部分(共{len(inputs)}部分({length}/{len(message)}))"
81
- list(
82
- while_true(
83
- lambda: while_success(
84
- lambda: self.chat(
85
- f"<part_content>{input}</part_content>\n\n请返回已收到"
86
- ),
87
- 5,
80
+ list(
81
+ while_true(
82
+ lambda: while_success(
83
+ lambda: self.chat(
84
+ f"<part_content>{input}</part_content>\n\n请返回<已收到>,不需要返回其他任何内容"
88
85
  ),
89
86
  5,
90
- )
87
+ ),
88
+ 5,
91
89
  )
92
- spinner.write(
93
- f"提交第{submit_count}部分完成,当前进度:{length}/{len(message)}"
94
- )
95
- spinner.text = "提交完成"
96
- spinner.ok("✅")
90
+ )
91
+ print(
92
+ f"提交第{submit_count}部分完成,当前进度:{length}/{len(message)}"
93
+ )
94
+ print("提交完成 ✅")
97
95
  response = while_true(
98
96
  lambda: while_success(
99
- lambda: self._chat("内容已经全部提供完毕,请继续"), 5
97
+ lambda: self._chat("内容已经全部提供完毕,请根据内容继续"), 5
100
98
  ),
101
99
  5,
102
100
  )
@@ -3,7 +3,6 @@
3
3
  from typing import Any, Dict
4
4
 
5
5
  # 导入多行输入工具和输出工具
6
- from jarvis.jarvis_utils.input import get_multiline_input
7
6
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
8
7
 
9
8
 
@@ -41,7 +40,7 @@ class AskUserTool:
41
40
  PrettyOutput.print(f"问题: {question}", OutputType.SYSTEM)
42
41
 
43
42
  # 获取用户输入
44
- user_response = get_multiline_input("请输入您的答案 (输入空行结束)")
43
+ user_response = agent.multiline_inputer("请输入您的答案 (输入空行结束)")
45
44
 
46
45
  # 返回成功响应,包含用户输入的内容
47
46
  return {"success": True, "stdout": user_response, "stderr": ""}
@@ -134,6 +134,7 @@ def get_diff() -> str:
134
134
  stderr=subprocess.PIPE,
135
135
  stdout=subprocess.PIPE,
136
136
  )
137
+ confirm_add_new_files()
137
138
  if head_check.returncode != 0:
138
139
  # 空仓库情况,直接获取工作区差异
139
140
  result = subprocess.run(
@@ -218,6 +219,12 @@ def handle_commit_workflow() -> bool:
218
219
  import subprocess
219
220
 
220
221
  try:
222
+
223
+ confirm_add_new_files()
224
+
225
+ if not has_uncommitted_changes():
226
+ return False
227
+
221
228
  # 获取当前分支的提交总数
222
229
  commit_result = subprocess.run(
223
230
  ["git", "rev-list", "--count", "HEAD"], capture_output=True, text=True
@@ -403,6 +410,8 @@ def get_diff_file_list() -> List[str]:
403
410
  List[str]: 修改和新增的文件路径列表
404
411
  """
405
412
  try:
413
+ confirm_add_new_files()
414
+
406
415
  # 暂存新增文件
407
416
  subprocess.run(["git", "add", "-N", "."], check=True)
408
417
 
@@ -486,3 +495,91 @@ def get_recent_commits_with_files() -> List[Dict[str, Any]]:
486
495
 
487
496
  except subprocess.CalledProcessError:
488
497
  return []
498
+
499
+ def _get_new_files() -> List[str]:
500
+ """获取新增文件列表"""
501
+ return subprocess.run(
502
+ ["git", "ls-files", "--others", "--exclude-standard"],
503
+ capture_output=True,
504
+ text=True,
505
+ check=True,
506
+ ).stdout.splitlines()
507
+
508
+ def confirm_add_new_files() -> None:
509
+ """确认新增文件、代码行数和二进制文件"""
510
+ def _get_added_lines() -> int:
511
+ """获取新增代码行数"""
512
+ diff_stats = subprocess.run(
513
+ ["git", "diff", "--numstat"],
514
+ capture_output=True,
515
+ text=True,
516
+ check=True,
517
+ ).stdout.splitlines()
518
+
519
+ added_lines = 0
520
+ for stat in diff_stats:
521
+ parts = stat.split()
522
+ if len(parts) >= 1:
523
+ try:
524
+ added_lines += int(parts[0])
525
+ except ValueError:
526
+ pass
527
+ return added_lines
528
+
529
+ def _get_binary_files(files: List[str]) -> List[str]:
530
+ """从文件列表中识别二进制文件"""
531
+ binary_files = []
532
+ for file in files:
533
+ try:
534
+ with open(file, 'rb') as f:
535
+ if b'\x00' in f.read(1024):
536
+ binary_files.append(file)
537
+ except (IOError, PermissionError):
538
+ continue
539
+ return binary_files
540
+
541
+ def _check_conditions(new_files: List[str], added_lines: int, binary_files: List[str]) -> bool:
542
+ """检查各种条件并打印提示信息"""
543
+ need_confirm = False
544
+
545
+ if len(new_files) > 20:
546
+ PrettyOutput.print(
547
+ f"检测到{len(new_files)}个新增文件(选择N将重新检测)",
548
+ OutputType.WARNING
549
+ )
550
+ PrettyOutput.print("新增文件列表:", OutputType.INFO)
551
+ for file in new_files:
552
+ PrettyOutput.print(f" - {file}", OutputType.INFO)
553
+ need_confirm = True
554
+
555
+ if added_lines > 500:
556
+ PrettyOutput.print(
557
+ f"检测到{added_lines}行新增代码(选择N将重新检测)",
558
+ OutputType.WARNING
559
+ )
560
+ need_confirm = True
561
+
562
+ if binary_files:
563
+ PrettyOutput.print(
564
+ f"检测到{len(binary_files)}个二进制文件(选择N将重新检测)",
565
+ OutputType.WARNING
566
+ )
567
+ PrettyOutput.print("二进制文件列表:", OutputType.INFO)
568
+ for file in binary_files:
569
+ PrettyOutput.print(f" - {file}", OutputType.INFO)
570
+ need_confirm = True
571
+
572
+ return need_confirm
573
+
574
+ while True:
575
+ new_files = _get_new_files()
576
+ added_lines = _get_added_lines()
577
+ binary_files = _get_binary_files(new_files)
578
+
579
+ if not _check_conditions(new_files, added_lines, binary_files):
580
+ break
581
+
582
+ if not user_confirm("是否要添加这些变更(如果不需要请修改.gitignore文件以忽略不需要的文件)?", False):
583
+ continue
584
+
585
+ break
@@ -8,16 +8,16 @@
8
8
  - 带有模糊匹配的文件路径补全
9
9
  - 用于输入控制的自定义键绑定
10
10
  """
11
- from colorama import Fore
12
- from colorama import Style as ColoramaStyle
13
- from fuzzywuzzy import process
14
- from prompt_toolkit import PromptSession
15
- from prompt_toolkit.completion import (CompleteEvent, Completer, Completion,
16
- PathCompleter)
17
- from prompt_toolkit.document import Document
18
- from prompt_toolkit.formatted_text import FormattedText
19
- from prompt_toolkit.key_binding import KeyBindings
20
- from prompt_toolkit.styles import Style as PromptStyle
11
+ from colorama import Fore # type: ignore
12
+ from colorama import Style as ColoramaStyle # type: ignore
13
+ from fuzzywuzzy import process # type: ignore
14
+ from prompt_toolkit import PromptSession # type: ignore
15
+ from prompt_toolkit.completion import (CompleteEvent, Completer, Completion, # type: ignore
16
+ PathCompleter) # type: ignore
17
+ from prompt_toolkit.document import Document # type: ignore
18
+ from prompt_toolkit.formatted_text import FormattedText # type: ignore
19
+ from prompt_toolkit.key_binding import KeyBindings # type: ignore
20
+ from prompt_toolkit.styles import Style as PromptStyle # type: ignore
21
21
 
22
22
  from jarvis.jarvis_utils.config import get_replace_map
23
23
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -217,7 +217,7 @@ def get_multiline_input(tip: str) -> str:
217
217
  try:
218
218
  import os
219
219
 
220
- from prompt_toolkit.history import FileHistory
220
+ from prompt_toolkit.history import FileHistory # type: ignore
221
221
 
222
222
  from jarvis.jarvis_utils.config import get_data_dir
223
223
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.203
3
+ Version: 0.1.205
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,13 +1,13 @@
1
- jarvis/__init__.py,sha256=6vjQIk71IT0f_EPgzrHvjWl2bp3n_NOJMy-NtNfAZ-g,75
1
+ jarvis/__init__.py,sha256=AD-c4S6W2qnfY5YYsnCHttsVd9Wwv1HTyopZCkPV7y0,75
2
2
  jarvis/jarvis_agent/__init__.py,sha256=X5BWIOzxXUWtCbpDkTFfUYskf6sbNzb1qQu8nQ4NN1k,34371
3
3
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=1V7kV5Zhw2HE3Xgjs1R-43RZ2huq3Kg-32NCdNnyZmA,2216
4
- jarvis/jarvis_agent/edit_file_handler.py,sha256=EVEKZUon2CbLHQ1id1_5nka_oGJALGv1k1jmKJva3JA,16478
4
+ jarvis/jarvis_agent/edit_file_handler.py,sha256=QHimoPGfg2oftmoV8cENl09tc83gnnlXk58D2rIOEJM,16952
5
5
  jarvis/jarvis_agent/jarvis.py,sha256=GH2zi8eXNpW8twiY3LKDEZgGmFC5geB0jlkwFrm7hOQ,6279
6
6
  jarvis/jarvis_agent/main.py,sha256=c6bQe-8LXvW2-NBn9Rn_yPYdrwnkJ8KQaSFY2cPvkxw,2775
7
7
  jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
8
8
  jarvis/jarvis_agent/shell_input_handler.py,sha256=zVaKNthIHJh1j4g8_-d3w5ahNH9aH-ZNRSOourQpHR4,1328
9
9
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- jarvis/jarvis_code_agent/code_agent.py,sha256=fr2_hqFuTyLqVB_huLgbz-UB0GIJM4YIQoi6s_X-WzE,15466
10
+ jarvis/jarvis_code_agent/code_agent.py,sha256=GOLByiSDNn7FSgS6g0Y3pkdIGd1k0PBVPTgYle0b7u8,16506
11
11
  jarvis/jarvis_code_agent/lint.py,sha256=j1kS-wFYigmkXyxOuUiaJ9cknYkraikQSSf51VWturE,4038
12
12
  jarvis/jarvis_code_analysis/code_review.py,sha256=jwvGYwwTM7UG6cESw6I7vCp6FimESKvowCbz6u28ikE,31439
13
13
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
@@ -32,12 +32,12 @@ jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQ
32
32
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
33
33
  jarvis/jarvis_data/config_schema.json,sha256=yMXCNy8-CRL44r9GKBClvX6LBX20cpm7QOW9TSffAbs,6533
34
34
  jarvis/jarvis_data/huggingface.tar.gz,sha256=dWKnc_tvyx-I_ZkXo91O0b38KxDmLW1ZbmJ3E6fCl_k,1120205
35
- jarvis/jarvis_dev/main.py,sha256=zzVDrPQlPJFnHxNjChBAYA8YwIaQYmPxG-bHjIxdL3s,40940
35
+ jarvis/jarvis_dev/main.py,sha256=1elwLV0uKX0CjjlAEKG5uTYHJz5K3qEki49Pv7KMLFw,40919
36
36
  jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  jarvis/jarvis_git_details/main.py,sha256=MjpUHB4ErR_SKPBx1TLLK_XLkH427RTtsyVn6EUd88Y,8907
38
38
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  jarvis/jarvis_git_squash/main.py,sha256=lx0WVOiaydYgwzWBDG7C8wJxYJwSb1SIxyoD-rgzgvA,2274
40
- jarvis/jarvis_git_utils/git_commiter.py,sha256=f-mOpGGIVEgjQ1QxeJzKIqXmt_TMmS1yVtc_qitYYwE,13279
40
+ jarvis/jarvis_git_utils/git_commiter.py,sha256=s-tclLXOXoSicwBc6RWVT9NMTSMJ4mDUW3cjGwDYYZU,13475
41
41
  jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
42
42
  jarvis/jarvis_mcp/sse_mcp_client.py,sha256=-3Qy1LyqgHswoc6YbadVRG3ias2op7lUp7Ne2-QUKBM,22474
43
43
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=armvgyHAv-AxF5lqiK-TbVLzg3XgSCwmTdWmxBSTLRk,11248
@@ -46,7 +46,7 @@ jarvis/jarvis_methodology/main.py,sha256=NMtd6DRn-Q8NcYtQ3qgTKUp9RW0cDGJod8ZXebl
46
46
  jarvis/jarvis_multi_agent/__init__.py,sha256=sDd3sK88dS7_qAz2ywIAaEWdQ4iRVCiuBu2rQQmrKbU,4512
47
47
  jarvis/jarvis_multi_agent/main.py,sha256=h7VUSwoPrES0XTK8z5kt3XLX1mmcm8UEuFEHQOUWPH4,1696
48
48
  jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
49
- jarvis/jarvis_platform/base.py,sha256=dv_O3IcUTRhi_jfoRIG2g_FwnYpFRZo8g8tWIanOgVo,7884
49
+ jarvis/jarvis_platform/base.py,sha256=h0PpzqKlp1wmHaES16i6ZT4ChW-epKe1r3gvvqP1Gd4,7777
50
50
  jarvis/jarvis_platform/human.py,sha256=r8Vlltp_LirJZeZh1Mmi30iJr9tl1JaNFoqthSRHF6o,2826
51
51
  jarvis/jarvis_platform/kimi.py,sha256=uIpSWQ3MqDBYYMROeXin_YqM2LFrovMICKpwLWO1ODo,12784
52
52
  jarvis/jarvis_platform/openai.py,sha256=uEjBikfFj7kp5wondLvOx4WdkmTX0aqF6kixxAufcHg,4806
@@ -58,7 +58,7 @@ jarvis/jarvis_platform_manager/main.py,sha256=BdBH2tPzq7p9Mvii7abu6M7uj4lfG05gwj
58
58
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  jarvis/jarvis_smart_shell/main.py,sha256=YfQNGKanhYHAUCh6ZYLpevWpSlaFo_YfteSK9pakjB0,5295
60
60
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- jarvis/jarvis_tools/ask_user.py,sha256=dSnZbt2XXDxjDj17Mi7-Twg75yHhMzM_FEj_TazJvC8,2068
61
+ jarvis/jarvis_tools/ask_user.py,sha256=w_l9WQK6uhyGGXqtyTsSyiHLNjNfIgzUvOAevjuay-0,2014
62
62
  jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
63
63
  jarvis/jarvis_tools/chdir.py,sha256=BlRvggcOeBM7UwHGL8U8hjuNm_WGkH5BdhxmPVJXejw,2509
64
64
  jarvis/jarvis_tools/code_plan.py,sha256=XRXHdkN4O1A4qbShLa4VBHFdRl6YdyMgZxbPPotrqNs,7358
@@ -83,17 +83,17 @@ jarvis/jarvis_utils/builtin_replace_map.py,sha256=9QKElsyIoZaq4ssZRlCfJPf2i92WuK
83
83
  jarvis/jarvis_utils/config.py,sha256=OomZRIeRHiBntKXdqYP1ArI8aqRFqtMlLkd9-VSd5dA,7364
84
84
  jarvis/jarvis_utils/embedding.py,sha256=suqKOgH4cq2HYj4xvNpqDPN9pyc3hTCl934xYonF6qk,3922
85
85
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
86
- jarvis/jarvis_utils/git_utils.py,sha256=F1558EbJ3dRl12DMwmT24XjkC8XqddBjhpWxLgyI0aI,15688
86
+ jarvis/jarvis_utils/git_utils.py,sha256=E1ibh4qTJ84JuweDex3nF4jrSMsXk9pNJ58lVG9NF6A,18926
87
87
  jarvis/jarvis_utils/globals.py,sha256=9NTMfCVd0jvtloOv14-KE6clhcVStFmyN9jWxLmQ5so,3369
88
- jarvis/jarvis_utils/input.py,sha256=WOs9hYSiZE3ao5K-UJmC7KyZByYnC1opHGJTUZm7DVo,7884
88
+ jarvis/jarvis_utils/input.py,sha256=ehvHkIgwqnBOHkwOeRCBFRggqOgOZuUdGQXn2ATUFwU,8049
89
89
  jarvis/jarvis_utils/jarvis_history.py,sha256=Td6cmze9Oc5-Ewz0l9RKYeSg_-fbEu9ZhyEueHEMcLY,3664
90
90
  jarvis/jarvis_utils/methodology.py,sha256=MhPrMxMqElyAn54BDfpQdUqrRr7IbSlrLvAI39LCgTM,8487
91
91
  jarvis/jarvis_utils/output.py,sha256=PRCgudPOB8gMEP3u-g0FGD2c6tBgJhLXUMqNPglfjV8,10813
92
92
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
93
93
  jarvis/jarvis_utils/utils.py,sha256=RYFQx7OkOu3fe_QhS-5jx7O06k_58X14S-9PFJgwOa4,12178
94
- jarvis_ai_assistant-0.1.203.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
95
- jarvis_ai_assistant-0.1.203.dist-info/METADATA,sha256=Z2KYARBymf4cu82o1L_vXEo8KXujcOUkbFnb8qZx5Lc,20215
96
- jarvis_ai_assistant-0.1.203.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
- jarvis_ai_assistant-0.1.203.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
98
- jarvis_ai_assistant-0.1.203.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
99
- jarvis_ai_assistant-0.1.203.dist-info/RECORD,,
94
+ jarvis_ai_assistant-0.1.205.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
95
+ jarvis_ai_assistant-0.1.205.dist-info/METADATA,sha256=oB5LeBNwK-14rRo3EXWZtCZdZxZUJ-GlL-VaIl8zAwo,20215
96
+ jarvis_ai_assistant-0.1.205.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
+ jarvis_ai_assistant-0.1.205.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
98
+ jarvis_ai_assistant-0.1.205.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
99
+ jarvis_ai_assistant-0.1.205.dist-info/RECORD,,