jarvis-ai-assistant 0.1.190__py3-none-any.whl → 0.1.192__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:
@@ -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
  """截断过长的输出内容
@@ -21,22 +21,30 @@ 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: int = 0
24
28
  # 使用自定义主题配置rich控制台
25
- custom_theme = Theme({
26
- "INFO": "yellow",
27
- "WARNING": "yellow",
28
- "ERROR": "red",
29
- "SUCCESS": "green",
30
- "SYSTEM": "cyan",
31
- "CODE": "green",
32
- "RESULT": "blue",
33
- "PLANNING": "magenta",
34
- "PROGRESS": "white",
35
- "DEBUG": "blue",
36
- "USER": "green",
37
- "TOOL": "yellow",
38
- })
29
+ custom_theme = Theme(
30
+ {
31
+ "INFO": "yellow",
32
+ "WARNING": "yellow",
33
+ "ERROR": "red",
34
+ "SUCCESS": "green",
35
+ "SYSTEM": "cyan",
36
+ "CODE": "green",
37
+ "RESULT": "blue",
38
+ "PLANNING": "magenta",
39
+ "PROGRESS": "white",
40
+ "DEBUG": "blue",
41
+ "USER": "green",
42
+ "TOOL": "yellow",
43
+ }
44
+ )
39
45
  console = Console(theme=custom_theme)
46
+
47
+
40
48
  def make_agent_name(agent_name: str) -> str:
41
49
  """
42
50
  通过附加后缀生成唯一的代理名称(如果必要)。
@@ -53,6 +61,8 @@ def make_agent_name(agent_name: str) -> str:
53
61
  i += 1
54
62
  return f"{agent_name}_{i}"
55
63
  return agent_name
64
+
65
+
56
66
  def set_agent(agent_name: str, agent: Any) -> None:
57
67
  """
58
68
  设置当前代理并将其添加到全局代理集合中。
@@ -64,6 +74,8 @@ def set_agent(agent_name: str, agent: Any) -> None:
64
74
  global_agents.add(agent_name)
65
75
  global current_agent_name
66
76
  current_agent_name = agent_name
77
+
78
+
67
79
  def get_agent_list() -> str:
68
80
  """
69
81
  获取表示当前代理状态的格式化字符串。
@@ -71,7 +83,13 @@ def get_agent_list() -> str:
71
83
  返回:
72
84
  str: 包含代理数量和当前代理名称的格式化字符串
73
85
  """
74
- return "[" + str(len(global_agents)) + "]" + current_agent_name if global_agents else ""
86
+ return (
87
+ "[" + str(len(global_agents)) + "]" + current_agent_name
88
+ if global_agents
89
+ else ""
90
+ )
91
+
92
+
75
93
  def delete_agent(agent_name: str) -> None:
76
94
  """
77
95
  从全局代理集合中删除一个代理。
@@ -83,3 +101,51 @@ def delete_agent(agent_name: str) -> None:
83
101
  global_agents.remove(agent_name)
84
102
  global current_agent_name
85
103
  current_agent_name = ""
104
+
105
+
106
+ def set_in_chat(status: bool) -> None:
107
+ """
108
+ 设置与大模型交互的状态。
109
+
110
+ 参数:
111
+ status: True表示增加交互深度,False表示减少
112
+ """
113
+ global g_in_chat
114
+ if status:
115
+ g_in_chat += 1
116
+ else:
117
+ g_in_chat = max(0, g_in_chat - 1)
118
+
119
+
120
+ def get_in_chat() -> bool:
121
+ """
122
+ 获取当前是否正在与大模型交互的状态。
123
+
124
+ 返回:
125
+ bool: 当前交互状态(>0表示正在交互)
126
+ """
127
+ return g_in_chat > 0
128
+
129
+
130
+ def set_interrupt(status: bool) -> None:
131
+ """
132
+ 设置中断信号状态。
133
+
134
+ 参数:
135
+ status: 中断状态
136
+ """
137
+ global g_interrupt
138
+ if status:
139
+ g_interrupt += 1
140
+ else:
141
+ g_interrupt = 0
142
+
143
+
144
+ def get_interrupt() -> int:
145
+ """
146
+ 获取当前中断信号状态。
147
+
148
+ 返回:
149
+ int: 当前中断计数
150
+ """
151
+ 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, get_interrupt, 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
+ set_interrupt(True)
42
+ if get_interrupt() > 5 and original_sigint and callable(original_sigint):
43
+ original_sigint(signum, frame)
44
+ else:
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.190
3
+ Version: 0.1.192
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
@@ -230,6 +230,54 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
230
230
  | `jarvis-git-details` | - | 使用git details功能 |
231
231
  | `jarvis-methodology` | - | 使用方法论功能 |
232
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
+
233
281
  ---
234
282
 
235
283
  ## ⚙️ 配置说明 <a id="configuration"></a>
@@ -428,7 +476,7 @@ class CustomPlatform(BasePlatform):
428
476
  # 设置模型名称
429
477
  pass
430
478
 
431
- def set_system_message(self, message: str):
479
+ def set_system_prompt(self, message: str):
432
480
  # 设置系统消息
433
481
  pass
434
482
 
@@ -1,13 +1,13 @@
1
- jarvis/__init__.py,sha256=4h6TNgKLF0A6znYlkXoPrVCeP9Pj6DTrNF6NbH9Oroo,74
2
- jarvis/jarvis_agent/__init__.py,sha256=utqI92rkiqiVR2zk5N-IQe2CeMSl-sNiLU429dLoGVw,30487
1
+ jarvis/__init__.py,sha256=5_sLz94_CMqE2he4vQ7HAZhBu30-NLMM4jT2UvSUt2c,74
2
+ jarvis/jarvis_agent/__init__.py,sha256=ZB3Tt09qwCO68vY62ogzfvvdF4HMQcEV6EjPUsJpuR8,29806
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
9
9
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- jarvis/jarvis_code_agent/code_agent.py,sha256=2TG_Hi_2mbiZHUcWnxYs4C30eYpgSedtIYZLs7BbyUk,15827
10
+ jarvis/jarvis_code_agent/code_agent.py,sha256=4nYYPFGSr7U8TGbqhayMOOHK6NZRzd-H4JcM4FDNcMk,15522
11
11
  jarvis/jarvis_code_agent/lint.py,sha256=TZlhNbeaoLzO9DzExjN5GAjrt66owd8lyQV56LTfkrs,4370
12
12
  jarvis/jarvis_code_analysis/code_review.py,sha256=45MPcXullg55w6E0Xhm2dDj6TGmkUxNNI2LJWexnTKQ,30123
13
13
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=cKQ_FOGy5TQgM-YkRCqORo-mUOZaPAJ9VDmZoFX58us,78
@@ -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=iXsJ52e7zGaKNho1Lzg4_rjXUwLn0wpVmWCLZ0k4xU8,4985
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
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=339NBh4qZHsiBKMHgKV2kgDVhEkeZqiSJnZTedGMK8o,25162
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=908DizIMrInuOlirTp5lsOfqbD6K2v18P_J7A8nrdus,3375
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.190.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
95
- jarvis_ai_assistant-0.1.190.dist-info/METADATA,sha256=3Dz7yIwWszneilEi9OfdiqzumWW0ruMLLjbzqZKC7RA,16257
96
- jarvis_ai_assistant-0.1.190.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
- jarvis_ai_assistant-0.1.190.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
98
- jarvis_ai_assistant-0.1.190.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
99
- jarvis_ai_assistant-0.1.190.dist-info/RECORD,,
93
+ jarvis/jarvis_utils/utils.py,sha256=r9Xnf84jR2E1CfHBtYVF_sPZ74-S4W63aPleBQZtdYo,11597
94
+ jarvis_ai_assistant-0.1.192.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
95
+ jarvis_ai_assistant-0.1.192.dist-info/METADATA,sha256=L-16MCi-TdoxaluwVvuq1KVUKJazX05Ell2ZqMToJq0,17829
96
+ jarvis_ai_assistant-0.1.192.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
+ jarvis_ai_assistant-0.1.192.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
98
+ jarvis_ai_assistant-0.1.192.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
99
+ jarvis_ai_assistant-0.1.192.dist-info/RECORD,,