jarvis-ai-assistant 0.1.189__py3-none-any.whl → 0.1.191__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.
@@ -98,7 +98,7 @@ def process_request(request: str) -> Optional[str]:
98
98
  输入: "查找Python文件"
99
99
  输出: find . -name "*.py"
100
100
  """
101
- model.set_system_message(system_message)
101
+ model.set_system_prompt(system_message)
102
102
 
103
103
  prefix = f"Current path: {current_path}\n"
104
104
  prefix += f"Current shell: {shell}\n"
@@ -79,7 +79,7 @@ class FileAnalyzerTool:
79
79
  system_message = """你是一个文件分析助手。你的任务是分析提供的文件内容,并根据用户的提示提取关键信息。
80
80
  请保持客观,只关注文件中实际存在的内容。如果无法确定某些信息,请明确指出。
81
81
  请以结构化的方式组织你的回答,使用标题、列表和代码块等格式来提高可读性。"""
82
- platform.set_system_message(system_message)
82
+ platform.set_system_prompt(system_message)
83
83
 
84
84
  # 上传文件
85
85
  with yaspin(Spinners.dots, text="正在上传文件...") as spinner:
@@ -1,7 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
- import re
3
2
  from pathlib import Path
4
- from typing import Any, Dict, Tuple
3
+ from typing import Any, Dict
5
4
 
6
5
  from jarvis.jarvis_utils.config import get_data_dir
7
6
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -14,20 +13,20 @@ class generate_new_tool:
14
13
  并自动注册到当前的工具注册表中。适用场景:1. 需要创建新的自定义工具;
15
14
  2. 扩展Jarvis功能;3. 自动化重复性操作;4. 封装特定领域的功能。
16
15
  """
17
-
16
+
18
17
  parameters = {
19
18
  "type": "object",
20
19
  "properties": {
21
20
  "tool_name": {
22
21
  "type": "string",
23
- "description": "新工具的名称,将用作文件名和工具类名"
22
+ "description": "新工具的名称,将用作文件名和工具类名",
24
23
  },
25
24
  "tool_code": {
26
25
  "type": "string",
27
- "description": "工具的完整Python代码,包含类定义、名称、描述、参数和execute方法"
28
- }
26
+ "description": "工具的完整Python代码,包含类定义、名称、描述、参数和execute方法",
27
+ },
29
28
  },
30
- "required": ["tool_name", "tool_code"]
29
+ "required": ["tool_name", "tool_code"],
31
30
  }
32
31
 
33
32
  @staticmethod
@@ -36,16 +35,18 @@ class generate_new_tool:
36
35
  # 检查数据目录是否存在
37
36
  data_dir = get_data_dir()
38
37
  tools_dir = Path(data_dir) / "tools"
39
-
38
+
40
39
  # 如果tools目录不存在,尝试创建
41
40
  if not tools_dir.exists():
42
41
  try:
43
42
  tools_dir.mkdir(parents=True, exist_ok=True)
44
43
  return True
45
44
  except Exception as e:
46
- PrettyOutput.print(f"无法创建工具目录 {tools_dir}: {e}", OutputType.ERROR)
45
+ PrettyOutput.print(
46
+ f"无法创建工具目录 {tools_dir}: {e}", OutputType.ERROR
47
+ )
47
48
  return False
48
-
49
+
49
50
  return True
50
51
 
51
52
  def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
@@ -64,83 +65,130 @@ class generate_new_tool:
64
65
  tool_name = args["tool_name"]
65
66
  tool_code = args["tool_code"]
66
67
  agent = args.get("agent", None)
67
-
68
+
68
69
  # 验证工具名称
69
70
  if not tool_name.isidentifier():
70
71
  return {
71
72
  "success": False,
72
73
  "stdout": "",
73
- "stderr": f"工具名称 '{tool_name}' 不是有效的Python标识符"
74
+ "stderr": f"工具名称 '{tool_name}' 不是有效的Python标识符",
74
75
  }
75
-
76
+
76
77
  # 准备工具目录
77
78
  tools_dir = Path(get_data_dir()) / "tools"
78
79
  tools_dir.mkdir(parents=True, exist_ok=True)
79
-
80
+
80
81
  # 生成工具文件路径
81
82
  tool_file_path = tools_dir / f"{tool_name}.py"
82
-
83
+
83
84
  # 检查是否已存在同名工具
84
85
  if tool_file_path.exists():
85
86
  return {
86
87
  "success": False,
87
88
  "stdout": "",
88
- "stderr": f"工具 '{tool_name}' 已经存在于 {tool_file_path}"
89
+ "stderr": f"工具 '{tool_name}' 已经存在于 {tool_file_path}",
89
90
  }
90
-
91
+
91
92
  # 写入工具文件
92
93
  with open(tool_file_path, "w", encoding="utf-8") as f:
93
94
  f.write(tool_code)
94
-
95
+
95
96
  # 注册新工具到当前的工具注册表
96
97
  success_message = f"工具 '{tool_name}' 已成功生成在 {tool_file_path}"
97
-
98
+
98
99
  registration_successful = False
99
100
  if agent:
100
101
  tool_registry = agent.get_tool_registry()
101
102
  if tool_registry:
102
103
  # 尝试加载并注册新工具
103
- PrettyOutput.print(f"正在注册工具 '{tool_name}'...", OutputType.INFO)
104
+ PrettyOutput.print(
105
+ f"正在注册工具 '{tool_name}'...", OutputType.INFO
106
+ )
104
107
  if tool_registry.register_tool_by_file(str(tool_file_path)):
105
108
  success_message += f"\n已成功注册到当前会话的工具注册表中"
106
109
  registration_successful = True
107
110
  else:
108
111
  # 注册失败,删除已创建的文件
109
- PrettyOutput.print(f"注册工具 '{tool_name}' 失败,正在删除文件...", OutputType.WARNING)
112
+ PrettyOutput.print(
113
+ f"注册工具 '{tool_name}' 失败,正在删除文件...",
114
+ OutputType.WARNING,
115
+ )
110
116
  if tool_file_path.exists():
111
117
  tool_file_path.unlink()
112
118
  return {
113
119
  "success": False,
114
120
  "stdout": "",
115
- "stderr": f"工具文件已生成,但注册失败。文件已被删除。"
121
+ "stderr": f"工具文件已生成,但注册失败。文件已被删除。",
116
122
  }
117
123
  else:
118
- PrettyOutput.print("未找到工具注册表,无法自动注册工具", OutputType.WARNING)
124
+ PrettyOutput.print(
125
+ "未找到工具注册表,无法自动注册工具", OutputType.WARNING
126
+ )
119
127
  success_message += f"\n注册到当前会话失败,可能需要重新启动Jarvis"
120
-
121
- PrettyOutput.print(f"工具 '{tool_name}' 创建" + ("并注册" if registration_successful else "") + "成功!", OutputType.SUCCESS)
122
- return {
123
- "success": True,
124
- "stdout": success_message,
125
- "stderr": ""
126
- }
127
-
128
+
129
+ PrettyOutput.print(
130
+ f"工具 '{tool_name}' 创建"
131
+ + ("并注册" if registration_successful else "")
132
+ + "成功!",
133
+ OutputType.SUCCESS,
134
+ )
135
+
136
+ # 检查并安装缺失的依赖
137
+ try:
138
+ import re
139
+
140
+ required_packages = set()
141
+
142
+ # 从代码中提取import语句
143
+ for line in tool_code.split("\n"):
144
+ if line.strip().startswith("import "):
145
+ # 处理 import a.b.c 形式
146
+ pkg = line.split()[1].split(".")[0]
147
+ required_packages.add(pkg)
148
+ elif line.strip().startswith("from "):
149
+ # 处理 from a.b.c import d 形式
150
+ parts = line.split()
151
+ if (
152
+ len(parts) >= 4
153
+ and parts[0] == "from"
154
+ and parts[2] == "import"
155
+ ):
156
+ pkg = parts[1].split(".")[0]
157
+ required_packages.add(pkg)
158
+
159
+ # 检查并安装缺失的包
160
+ for pkg in required_packages:
161
+ try:
162
+ __import__(pkg)
163
+ except ImportError:
164
+ PrettyOutput.print(
165
+ f"检测到缺失依赖: {pkg}, 正在尝试安装...", OutputType.INFO
166
+ )
167
+ import subprocess
168
+
169
+ subprocess.run(["pip", "install", pkg], check=True)
170
+ PrettyOutput.print(f"成功安装依赖: {pkg}", OutputType.SUCCESS)
171
+ except Exception as e:
172
+ PrettyOutput.print(f"依赖检查/安装失败: {str(e)}", OutputType.WARNING)
173
+
174
+ return {"success": True, "stdout": success_message, "stderr": ""}
175
+
128
176
  except Exception as e:
129
177
  # 如果发生异常,删除已创建的文件并返回失败响应
130
178
  error_msg = f"生成工具失败: {str(e)}"
131
179
  PrettyOutput.print(error_msg, OutputType.ERROR)
132
-
180
+
133
181
  # 删除已创建的文件
134
182
  if tool_file_path and tool_file_path.exists():
135
183
  try:
136
- PrettyOutput.print(f"正在删除已创建的文件 {tool_file_path}...", OutputType.INFO)
184
+ PrettyOutput.print(
185
+ f"正在删除已创建的文件 {tool_file_path}...", OutputType.INFO
186
+ )
137
187
  tool_file_path.unlink()
138
188
  PrettyOutput.print(f"文件已删除", OutputType.SUCCESS)
139
189
  except Exception as delete_error:
140
- PrettyOutput.print(f"删除文件失败: {str(delete_error)}", OutputType.ERROR)
141
-
142
- return {
143
- "success": False,
144
- "stdout": "",
145
- "stderr": error_msg
146
- }
190
+ PrettyOutput.print(
191
+ f"删除文件失败: {str(delete_error)}", OutputType.ERROR
192
+ )
193
+
194
+ return {"success": False, "stdout": "", "stderr": error_msg}
@@ -622,11 +622,11 @@ class ToolRegistry(OutputHandlerProtocol):
622
622
  """
623
623
  output_parts = []
624
624
  if stdout:
625
- output_parts.append(f"输出:\n{stdout}")
625
+ output_parts.append(f"<output>\n{stdout}\n</output>")
626
626
  if stderr:
627
- output_parts.append(f"错误:\n{stderr}")
627
+ output_parts.append(f"<error>\n{stderr}\n</error>")
628
628
  output = "\n\n".join(output_parts)
629
- return "无输出和错误" if not output else output
629
+ return "<无输出和错误>" if not output else output
630
630
 
631
631
  def _truncate_output(self, output: str) -> str:
632
632
  """截断过长的输出内容
@@ -685,6 +685,8 @@ class ToolRegistry(OutputHandlerProtocol):
685
685
  agent_instance.clear_history()
686
686
  upload_success = agent_instance.model.upload_files([output_file])
687
687
  if upload_success:
688
+ # 删除args的agent键
689
+ args.pop("agent", None)
688
690
  prompt = f"""
689
691
  以下是之前对话的关键信息总结:
690
692
 
@@ -21,6 +21,10 @@ os.environ["TOKENIZERS_PARALLELISM"] = "false"
21
21
  # 全局代理管理
22
22
  global_agents: Set[str] = set()
23
23
  current_agent_name: str = ""
24
+ # 表示与大模型交互的深度(>0表示正在交互)
25
+ g_in_chat: int = 0
26
+ # 表示是否接收到中断信号
27
+ g_interrupt: bool = False
24
28
  # 使用自定义主题配置rich控制台
25
29
  custom_theme = Theme({
26
30
  "INFO": "yellow",
@@ -83,3 +87,44 @@ def delete_agent(agent_name: str) -> None:
83
87
  global_agents.remove(agent_name)
84
88
  global current_agent_name
85
89
  current_agent_name = ""
90
+
91
+ def set_in_chat(status: bool) -> None:
92
+ """
93
+ 设置与大模型交互的状态。
94
+
95
+ 参数:
96
+ status: True表示增加交互深度,False表示减少
97
+ """
98
+ global g_in_chat
99
+ if status:
100
+ g_in_chat += 1
101
+ else:
102
+ g_in_chat = max(0, g_in_chat - 1)
103
+
104
+ def get_in_chat() -> bool:
105
+ """
106
+ 获取当前是否正在与大模型交互的状态。
107
+
108
+ 返回:
109
+ bool: 当前交互状态(>0表示正在交互)
110
+ """
111
+ return g_in_chat > 0
112
+
113
+ def set_interrupt(status: bool) -> None:
114
+ """
115
+ 设置中断信号状态。
116
+
117
+ 参数:
118
+ status: 中断状态
119
+ """
120
+ global g_interrupt
121
+ g_interrupt = status
122
+
123
+ def get_interrupt() -> bool:
124
+ """
125
+ 获取当前中断信号状态。
126
+
127
+ 返回:
128
+ bool: 当前中断状态
129
+ """
130
+ return g_interrupt
@@ -1,6 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import hashlib
3
3
  import os
4
+ import signal
4
5
  import subprocess
5
6
  import tarfile
6
7
  import time
@@ -14,6 +15,7 @@ from jarvis.jarvis_utils.config import get_data_dir, get_max_big_content_size, s
14
15
  from jarvis.jarvis_utils.embedding import get_context_token_count
15
16
  from jarvis.jarvis_utils.input import get_single_line_input
16
17
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
18
+ from jarvis.jarvis_utils.globals import get_in_chat, set_interrupt
17
19
 
18
20
 
19
21
 
@@ -25,11 +27,25 @@ def init_env(welcome_str: str, config_file: Optional[str] = None) -> None:
25
27
  3. 处理文件读取异常
26
28
  4. 检查git仓库状态并在落后时更新
27
29
  5. 统计当前命令使用次数
30
+ 6. 注册SIGINT信号处理函数
28
31
 
29
32
  参数:
30
33
  welcome_str: 欢迎信息字符串
31
34
  config_file: 配置文件路径,默认为None(使用~/.jarvis/config.yaml)
32
35
  """
36
+ # 保存原始信号处理函数
37
+ original_sigint = signal.getsignal(signal.SIGINT)
38
+
39
+ def sigint_handler(signum, frame):
40
+ if get_in_chat():
41
+ PrettyOutput.print("接收到SIGINT信号,正在设置中断标志...", OutputType.INFO)
42
+ set_interrupt(True)
43
+ else:
44
+ PrettyOutput.print("接收到SIGINT信号,正在优雅退出...", OutputType.INFO)
45
+ if original_sigint and callable(original_sigint):
46
+ original_sigint(signum, frame)
47
+
48
+ signal.signal(signal.SIGINT, sigint_handler)
33
49
  count_cmd_usage()
34
50
 
35
51
  jarvis_ascii_art = f"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.189
3
+ Version: 0.1.191
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
@@ -113,6 +113,18 @@ pip3 install -e .
113
113
  pip3 install jarvis-ai-assistant
114
114
  ```
115
115
 
116
+ ### 预定义任务(pre-command)
117
+
118
+ 您可以创建预定义任务文件来快速执行常用命令:
119
+
120
+ 1. 在`~/.jarvis/pre-command`或当前目录的`.jarvis/pre-command`文件中定义任务
121
+ 2. 使用YAML格式定义任务,例如:
122
+ ```yaml
123
+ build: "构建项目并运行测试"
124
+ deploy: "部署应用到生产环境"
125
+ ```
126
+ 3. 运行`jarvis`命令时会自动加载这些任务并提示选择执行
127
+
116
128
  ### 最小化配置
117
129
 
118
130
  将以下配置写入到`~/.jarvis/config.yaml`文件中。
@@ -215,10 +227,57 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
215
227
  | `jarvis-multi-agent` | - | 使用多代理功能 |
216
228
  | `jarvis-agent` | - | 使用agent功能 |
217
229
  | `jarvis-tool` | - | 使用工具功能 |
218
- | `jarvis-ask-codebase` | `jac` | 使用代码库查询功能 |
219
230
  | `jarvis-git-details` | - | 使用git details功能 |
220
231
  | `jarvis-methodology` | - | 使用方法论功能 |
221
232
 
233
+ ## 🏗️ 平台管理功能
234
+
235
+ `jarvis-platform-manager` 提供以下子命令来管理AI平台和模型:
236
+
237
+ ### 1. 列出支持的平台和模型
238
+ ```bash
239
+ jarvis-platform-manager info
240
+ ```
241
+ 显示所有支持的AI平台及其可用模型列表。
242
+
243
+ ### 2. 与指定平台和模型聊天
244
+ ```bash
245
+ jarvis-platform-manager chat -p <平台名称> -m <模型名称>
246
+ ```
247
+ 启动交互式聊天会话,支持以下命令:
248
+ - `/bye` - 退出聊天
249
+ - `/clear` - 清除当前会话
250
+ - `/upload <文件路径>` - 上传文件到当前会话
251
+ - `/shell <命令>` - 执行shell命令
252
+ - `/save <文件名>` - 保存最后一条消息
253
+ - `/saveall <文件名>` - 保存完整对话历史
254
+
255
+ ### 3. 启动OpenAI兼容的API服务
256
+ ```bash
257
+ jarvis-platform-manager service --host <IP地址> --port <端口号> -p <平台名称> -m <模型名称>
258
+ ```
259
+ 启动一个兼容OpenAI API的服务,可用于其他应用程序集成。
260
+
261
+ ### 4. 加载角色配置文件
262
+ ```bash
263
+ jarvis-platform-manager role -c <配置文件路径>
264
+ ```
265
+ 从YAML配置文件加载预定义角色进行对话。配置文件格式示例:
266
+ ```yaml
267
+ roles:
268
+ - name: "代码助手"
269
+ description: "专注于代码分析和生成的AI助手"
270
+ platform: "yuanbao"
271
+ model: "deep_seek_v3"
272
+ system_prompt: "你是一个专业的代码助手,专注于分析和生成高质量的代码"
273
+ - name: "文档撰写"
274
+ description: "帮助撰写技术文档的AI助手"
275
+ platform: "kimi"
276
+ model: "k1"
277
+ system_prompt: "你是一个技术文档撰写专家,擅长将复杂技术概念转化为清晰易懂的文字"
278
+ ```
279
+
280
+
222
281
  ---
223
282
 
224
283
  ## ⚙️ 配置说明 <a id="configuration"></a>
@@ -417,7 +476,7 @@ class CustomPlatform(BasePlatform):
417
476
  # 设置模型名称
418
477
  pass
419
478
 
420
- def set_system_message(self, message: str):
479
+ def set_system_prompt(self, message: str):
421
480
  # 设置系统消息
422
481
  pass
423
482
 
@@ -1,8 +1,8 @@
1
- jarvis/__init__.py,sha256=3RRAnaRmOaQpveMGk6AbLpN-Ndluqiwh0tdrx6SLMdg,74
2
- jarvis/jarvis_agent/__init__.py,sha256=utqI92rkiqiVR2zk5N-IQe2CeMSl-sNiLU429dLoGVw,30487
1
+ jarvis/__init__.py,sha256=cHZhc7P2GKlcTNqDbgIRmnJdpA9XNqfw_meJJM4O-sg,74
2
+ jarvis/jarvis_agent/__init__.py,sha256=NnHJY7yEthpS4w9Yt6cvOeQZGPy-Qx9bnjV-Qo7HE00,29774
3
3
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=f4DaEHPakXcAbgykFP-tiOQP6fh_yGFlZx_h91_j2tQ,1529
4
4
  jarvis/jarvis_agent/file_input_handler.py,sha256=OfoYI5on6w5BDUUg4OadFcfWzMsUF70GNrlt9QyauvA,4181
5
- jarvis/jarvis_agent/jarvis.py,sha256=gOZfTwVlG-GZxPjgCoSiIcFsl4RwwfPA0CGUjE5J7oU,6249
5
+ jarvis/jarvis_agent/jarvis.py,sha256=zfYlwXaZJYfwvNeU5IUSlURyY0pn7QxsHmXBqSptUo8,6105
6
6
  jarvis/jarvis_agent/main.py,sha256=miR8wnWBzmbhOfnscyiKo1oI4wZBRU6FEE-k1lkqtiI,2752
7
7
  jarvis/jarvis_agent/output_handler.py,sha256=7qori-RGrQmdiFepoEe3oPPKJIvRt90l_JDmvCoa4zA,1219
8
8
  jarvis/jarvis_agent/shell_input_handler.py,sha256=pi3AtPKrkKc6K9e99S1djKXQ_XrxtP6FrSWebQmRT6E,1261
@@ -38,7 +38,7 @@ jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
38
38
  jarvis/jarvis_git_details/main.py,sha256=4L60eVDBMv6RbocnVlzfOx7JZkHTzop3q7qui9d9LuU,9005
39
39
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  jarvis/jarvis_git_squash/main.py,sha256=q8-r0TtVOaCqY_uYwnWAY76k8YCDd5se_feB6ZWKo9M,2278
41
- jarvis/jarvis_git_utils/git_commiter.py,sha256=BpJ8py2JMnp8jcukyM3vxGNWtjOLTIvgqYOx-5OhvZo,13037
41
+ jarvis/jarvis_git_utils/git_commiter.py,sha256=CPIBfTJw10VRZRxREqnSnUhooOVGwobUCOzEjZ1kWas,13076
42
42
  jarvis/jarvis_mcp/__init__.py,sha256=NF_vqRxaNyz8ColcpRh0bOkinV90YLAKHEN--jkP-B8,2114
43
43
  jarvis/jarvis_mcp/sse_mcp_client.py,sha256=QNA7HqFvLbvhNaFp3ZsXzs2Rm6_gHUMcpd4t4qAzymY,23485
44
44
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=IEkas4ojP5J0TdVaUglvlEp61RyezBtuejv4lN3n1I4,11831
@@ -47,17 +47,17 @@ jarvis/jarvis_methodology/main.py,sha256=HhEArlKI5PCpGnBCwVrXMuDn2z84LgpgK7-aGSQ
47
47
  jarvis/jarvis_multi_agent/__init__.py,sha256=Xab5sFltJmX_9MoXqanmZs6FqKfUb2v_pG29Vk8ZXaw,4311
48
48
  jarvis/jarvis_multi_agent/main.py,sha256=KeGv8sdpSgTjW6VE4-tQ8BWDC_a0aE_4R3OqzPBd5N4,1646
49
49
  jarvis/jarvis_platform/__init__.py,sha256=0YnsUoM4JkIBOtImFdjfuDbrqQZT3dEaAwSJ62DrpCc,104
50
- jarvis/jarvis_platform/base.py,sha256=C_50l5kc2P1OP8NH4JbaMZdY-aWOfhfuECoUlRCriU8,7029
51
- jarvis/jarvis_platform/human.py,sha256=xwaTZ1zdrAYZZFXxkbHvUdECwCGsic0kgAFUncUr45g,2567
52
- jarvis/jarvis_platform/kimi.py,sha256=5-LUcvBoL_1Y8HZom9pkNFHO7ghstNCPEobVrVESOi4,12101
53
- jarvis/jarvis_platform/openai.py,sha256=VyX3bR1rGxrJdWOtUBf8PgSL9n06KaNbOewL1urzOnk,4741
54
- jarvis/jarvis_platform/registry.py,sha256=3djxE8AB4gwrdAOvRSL0612Rt_CcsaZhzZ0_oXHu6xk,7820
55
- jarvis/jarvis_platform/tongyi.py,sha256=1cecb2GofJ_7J3xEj_fBj4Ns7XuGIn5CpCi_DFmiP4s,21063
56
- jarvis/jarvis_platform/yuanbao.py,sha256=yOj5T3lo45ULrFkwHXdAsiLhfv141V0sPQplHGeLKNg,20751
50
+ jarvis/jarvis_platform/base.py,sha256=MAY2Xe8WECOfisd-7_F8LXqzsIswkVwlVzXEj-D5Vlg,7186
51
+ jarvis/jarvis_platform/human.py,sha256=MkKdwZ8oY5eacjHOEjUCUwDCJJnXtlzU8o8_jJAMdaA,2566
52
+ jarvis/jarvis_platform/kimi.py,sha256=m45UlTkE3XhZZ3XfQk4degpKWsy5yrdzBHi9pDvmoZk,12100
53
+ jarvis/jarvis_platform/openai.py,sha256=Kj0ZUQ9RRx1fpCN8J8sXcuXnK5bp9AmhzlcZLH9aWsc,4740
54
+ jarvis/jarvis_platform/registry.py,sha256=qq19f9HoISxpVf09t1oEuOgzLXP8QT1mDzWAI5ifIHc,7819
55
+ jarvis/jarvis_platform/tongyi.py,sha256=Q0MCqKofuoQpp6XiYBdgO6LA4vJPEiTvVvKGgwJcpII,21062
56
+ jarvis/jarvis_platform/yuanbao.py,sha256=wpJxYS8lF9c-1F5S6pFSdKhipXkQREtErtn5WgCblCQ,20750
57
57
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- jarvis/jarvis_platform_manager/main.py,sha256=7XfiP19Gv88sFkS__v83a-JTI-VUuyH3lWLr4_jTq1w,25863
58
+ jarvis/jarvis_platform_manager/main.py,sha256=klN8c0IItE1wg1V2tPkh2RoEJxXXCgO--Hf7mpmY39I,29558
59
59
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- jarvis/jarvis_smart_shell/main.py,sha256=k59o5UD7merbsPhJQzae95ThTmZY2EcNHB3Ov6kb0PA,5291
60
+ jarvis/jarvis_smart_shell/main.py,sha256=pUoRsAbY2_BNqtVGEOin8UJVb8gmL_-Aj_NITJ9k0eo,5290
61
61
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  jarvis/jarvis_tools/ask_user.py,sha256=qwxwJIL698rEWdi1txxlPgIr4UFuihfe--NqBEYhIQQ,2168
63
63
  jarvis/jarvis_tools/base.py,sha256=OdlvzUjYQBmZIMcAeBxAqIQo2urh126OerArK-wOPzU,1191
@@ -67,13 +67,13 @@ jarvis/jarvis_tools/create_code_agent.py,sha256=-nHfo5O5pDIG5IX3w1ClQafGvGcdI2_w
67
67
  jarvis/jarvis_tools/create_sub_agent.py,sha256=lyFrrg4V0yXULmU3vldwGp_euZjwZzJcRU6mJ20zejY,3023
68
68
  jarvis/jarvis_tools/edit_file.py,sha256=s8HqG8qHDrYjCwIioeBpGvw7Aw-iEEZoUyRJFqdjcQA,18453
69
69
  jarvis/jarvis_tools/execute_script.py,sha256=IA1SkcnwBB9PKG2voBNx5N9GXL303OC7OOtdqRfqWOk,6428
70
- jarvis/jarvis_tools/file_analyzer.py,sha256=UuQmti-eBocJB6ivMINmOvSuXxBxOqmbQ3RsQlyueWs,4918
70
+ jarvis/jarvis_tools/file_analyzer.py,sha256=jl9phaN6BqMcgrikMeaxY-9VYXbXQOO1Zu61fZocGv0,4917
71
71
  jarvis/jarvis_tools/file_operation.py,sha256=WloC1-oPJLwgICu4WBc9f7XA8N_Ggl73QQ5CxM2XTlE,9464
72
- jarvis/jarvis_tools/generate_new_tool.py,sha256=dLfOliIUm0ovLrHcZAhKm7lqhxwACv8mnGxxGtLJ--o,5960
72
+ jarvis/jarvis_tools/generate_new_tool.py,sha256=KZX4wpSpBZ4S5817zAN5j7AAirtgBCrNUmjrpfL9dNI,7706
73
73
  jarvis/jarvis_tools/methodology.py,sha256=m7cQmVhhQpUUl_uYTVvcW0JBovQLx5pWTXh_8K77HsU,5237
74
74
  jarvis/jarvis_tools/read_code.py,sha256=pL2SwZDsJbJMXo4stW96quFsLgbtPVIAW-h4sDKsLtM,6274
75
75
  jarvis/jarvis_tools/read_webpage.py,sha256=PFAYuKjay9j6phWzyuZ99ZfNaHJljmRWAgS0bsvbcvE,2219
76
- jarvis/jarvis_tools/registry.py,sha256=kSl41tvwdiHaE3nwR9BI94GibjsKWczogZ76y0nFycw,25058
76
+ jarvis/jarvis_tools/registry.py,sha256=6iroEOm75KDhgSM0HHb1p8Sn2lLemZ29nSw7O6IzRPY,25186
77
77
  jarvis/jarvis_tools/rewrite_file.py,sha256=3V2l7kG5DG9iRimBce-1qCRuJPL0QM32SBTzOl2zCqM,7004
78
78
  jarvis/jarvis_tools/search_web.py,sha256=rzxrCOTEo-MmLQrKI4k-AbfidUfJUeCPK4f5ZJy48G8,952
79
79
  jarvis/jarvis_tools/virtual_tty.py,sha256=8E_n-eC-RRPTqYx6BI5Q2RnorY8dbhKFBfAjIiRQROA,16397
@@ -85,15 +85,15 @@ jarvis/jarvis_utils/config.py,sha256=Z7pZsSYXJkc2RzUhJ-_VvQA3xOLo6LEo4nEE1ftyQY8
85
85
  jarvis/jarvis_utils/embedding.py,sha256=J8YAqIEj16TJIPEG24uvUlPHeN-5zq0JW_hbNLizQug,3832
86
86
  jarvis/jarvis_utils/file_processors.py,sha256=G5kQI7vCGIDnjgAB5J1dYIR102u6WUv3IhcWFfDh_gs,2977
87
87
  jarvis/jarvis_utils/git_utils.py,sha256=k0rrMAbKwnD7hztmtegxtFFiCzyID4p2oHKTycE2Q-4,15070
88
- jarvis/jarvis_utils/globals.py,sha256=6JWtB1XoD-wEFiMzZNA790ixlZ_OsJEYUM_B8EwkOE8,2277
88
+ jarvis/jarvis_utils/globals.py,sha256=13mShJwkBQxyilUZVIThN11j17QQDGHRjS3UMRMewac,3231
89
89
  jarvis/jarvis_utils/input.py,sha256=FkLW7MXL8awQUghFLQnW1r5F1wV8K3EZeVPwHFRHJTo,7458
90
90
  jarvis/jarvis_utils/methodology.py,sha256=6vf__ahwJZ2I62mWGAvh2C-G6pq930Dh_EkrY1VpduQ,8485
91
91
  jarvis/jarvis_utils/output.py,sha256=QboL42GtG_dnvd1O64sl8o72mEBhXNRADPXQMXgDE7Q,9661
92
92
  jarvis/jarvis_utils/tag.py,sha256=YJHmuedLb7_AiqvKQetHr4R1FxyzIh7HN0RRkWMmYbU,429
93
- jarvis/jarvis_utils/utils.py,sha256=dTFIN6EV48BuC4VOyvcVcj4P0tsWysc9ennbMRhLJjk,10960
94
- jarvis_ai_assistant-0.1.189.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
95
- jarvis_ai_assistant-0.1.189.dist-info/METADATA,sha256=5e88_48MijaBca9j4CP0kRRaAwtt6H6WSJOf0BsrYtQ,15922
96
- jarvis_ai_assistant-0.1.189.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
- jarvis_ai_assistant-0.1.189.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
98
- jarvis_ai_assistant-0.1.189.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
99
- jarvis_ai_assistant-0.1.189.dist-info/RECORD,,
93
+ jarvis/jarvis_utils/utils.py,sha256=j9L5kPT3jOYP0PxiAywJtbfbMM4Fu7MyKgjfPKKACkE,11649
94
+ jarvis_ai_assistant-0.1.191.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
95
+ jarvis_ai_assistant-0.1.191.dist-info/METADATA,sha256=GL95Op-eQIglzKxOYSL4AyfFsTifEbtxoRoPBkbtHNc,17829
96
+ jarvis_ai_assistant-0.1.191.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
+ jarvis_ai_assistant-0.1.191.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
98
+ jarvis_ai_assistant-0.1.191.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
99
+ jarvis_ai_assistant-0.1.191.dist-info/RECORD,,