jarvis-ai-assistant 0.1.129__py3-none-any.whl → 0.1.130__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.

Potentially problematic release.


This version of jarvis-ai-assistant might be problematic. Click here for more details.

@@ -5,8 +5,10 @@ import yaml
5
5
 
6
6
  from jarvis.jarvis_agent import Agent
7
7
  from jarvis.jarvis_agent.output_handler import OutputHandler
8
+ from jarvis.jarvis_tools.registry import ToolRegistry
8
9
  from jarvis.jarvis_utils.input import get_multiline_input
9
10
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
11
+ from jarvis.jarvis_utils.utils import init_env
10
12
 
11
13
 
12
14
  class MultiAgent(OutputHandler):
@@ -18,65 +20,63 @@ class MultiAgent(OutputHandler):
18
20
 
19
21
  def prompt(self) -> str:
20
22
  return f"""
21
- # 🤖 多智能体消息处理系统
22
- 您是多智能体系统的一部分,通过结构化消息进行通信。
23
-
24
- # 🎯 核心规则
25
- ## 关键操作规则
26
- - 每轮只能执行一个操作:
27
- - 要么使用一个工具(文件操作、询问用户等)
28
- - 要么发送一条消息给其他智能体
29
- - 切勿在同一轮中同时进行这两种操作
30
-
31
- ## 消息流控制
32
- - 发送消息后等待响应
33
- - 处理响应后再进行下一步操作
34
- - 切勿同时发送多条消息
35
- - 切勿将消息与工具调用混合使用
36
-
37
- # 📝 消息格式
23
+ # 多智能体协作系统
24
+
25
+ ## 身份与角色定位
26
+ - **核心职责**:作为多智能体系统的协调者,通过结构化消息实现高效协作
27
+ - **关键能力**:消息路由、任务分发、结果整合、流程协调
28
+ - **工作范围**:在多个专业智能体之间建立有效沟通渠道
29
+
30
+ ## 交互原则与策略
31
+ ### 消息处理规范
32
+ - **单一操作原则**:每轮只执行一个操作(工具调用或消息发送)
33
+ - **完整性原则**:确保消息包含所有必要信息,避免歧义
34
+ - **明确性原则**:清晰表达意图、需求和期望结果
35
+ - **上下文保留**:在消息中包含足够的背景信息
36
+
37
+ ### 消息格式标准
38
38
  ```
39
39
  <SEND_MESSAGE>
40
40
  to: 智能体名称 # 目标智能体名称
41
41
  content: |
42
- 消息内容 # 消息内容
43
- 可使用多行 # 如果需要
44
- 保持正确的缩进
42
+ # 消息主题
43
+
44
+ ## 背景信息
45
+ [提供必要的上下文和背景]
46
+
47
+ ## 具体需求
48
+ [明确表达期望完成的任务]
49
+
50
+ ## 相关资源
51
+ [列出相关文档、数据或工具]
52
+
53
+ ## 期望结果
54
+ [描述期望的输出格式和内容]
45
55
  </SEND_MESSAGE>
46
56
  ```
47
57
 
48
- # 🔄 操作顺序
49
- 1. 选择最重要的操作
50
- - 评估优先级
51
- - 选择一个操作
52
- - 执行该操作
53
-
54
- 2. 等待响应
55
- - 处理结果/响应
56
- - 计划下一步操作
57
- - 等待下一轮
58
-
59
- 3. 处理响应
60
- - 处理收到的消息
61
- - 需要时回复发送者
62
- - 根据响应继续任务
63
-
64
- # 👥 可用智能体
65
- {chr(10).join([f"- {c['name']}: {c.get('description', '')}" for c in self.agents_config])}
66
-
67
- # ❗ 重要规则
68
- 1. 每轮只能执行一个操作
69
- 2. 等待响应
70
- 3. 处理后再进行下一步
71
- 4. 回复消息
72
- 5. 需要时转发任务
73
-
74
- # 💡 提示
75
- - 第一个操作将被执行
76
- - 额外的操作将被忽略
77
- - 总是先处理响应
78
- - 需要时发送消息以继续任务
79
- - 处理并回复收到的消息
58
+ ## 协作流程规范
59
+ ### 任务分发流程
60
+ 1. **需求分析**:理解用户需求并确定最适合的智能体
61
+ 2. **任务分解**:将复杂任务分解为可管理的子任务
62
+ 3. **精准分发**:根据专长将任务分配给合适的智能体
63
+ 4. **结果整合**:收集各智能体的输出并整合为连贯结果
64
+
65
+ ### 消息流控制
66
+ 1. **单向流动**:发送消息后等待响应,避免消息风暴
67
+ 2. **优先级管理**:处理紧急消息优先,保持任务顺序
68
+ 3. **状态跟踪**:记录每个任务的当前状态和处理进度
69
+ 4. **异常处理**:优雅处理超时、错误和意外响应
70
+
71
+ ## 可用智能体资源
72
+ {chr(10).join([f"- **{c['name']}**: {c.get('description', '')}" for c in self.agents_config])}
73
+
74
+ ## 最佳实践指南
75
+ 1. **任务明确化**:每个消息专注于单一、明确的任务
76
+ 2. **信息充分性**:提供足够信息让接收者能独立完成任务
77
+ 3. **反馈循环**:建立清晰的反馈机制,及时调整方向
78
+ 4. **知识共享**:确保关键信息在相关智能体间共享
79
+ 5. **协作效率**:避免不必要的消息传递,减少协调开销
80
80
  """
81
81
 
82
82
  def can_handle(self, response: str) -> bool:
@@ -115,6 +115,15 @@ content: |
115
115
 
116
116
  def init_agents(self):
117
117
  for config in self.agents_config:
118
+ output_handler = config.get('output_handler', [])
119
+ if len(output_handler) == 0:
120
+ output_handler = [
121
+ ToolRegistry(),
122
+ self,
123
+ ]
124
+ else:
125
+ output_handler.append(self)
126
+ config['output_handler'] = output_handler
118
127
  agent = Agent(**config)
119
128
  self.agents[config['name']] = agent
120
129
 
@@ -146,6 +155,7 @@ def main():
146
155
  Returns:
147
156
  最终处理结果
148
157
  """
158
+ init_env()
149
159
  import argparse
150
160
  parser = argparse.ArgumentParser(description="多智能体系统启动器")
151
161
  parser.add_argument("--config", "-c", required=True, help="YAML配置文件路径")
@@ -16,7 +16,6 @@ REQUIRED_METHODS = [
16
16
  ('set_model_name', ['model_name']),
17
17
  ('get_model_list', []),
18
18
  ('set_suppress_output', ['suppress']),
19
- ('upload_files', ['file_list'])
20
19
  ]
21
20
 
22
21
  class PlatformRegistry:
@@ -30,12 +30,6 @@ class SubAgentTool:
30
30
  "description": "任务的完成目标",
31
31
  "default": ""
32
32
  },
33
- "files": {
34
- "type": "array",
35
- "items": {"type": "string"},
36
- "description": "相关文件路径列表,用于文件问答和处理",
37
- "default": []
38
- }
39
33
  },
40
34
  "required": ["agent_name", "task", "context", "goal"]
41
35
  }
@@ -48,7 +42,6 @@ class SubAgentTool:
48
42
  task = args["task"]
49
43
  context = args.get("context", "")
50
44
  goal = args.get("goal", "")
51
- files = args.get("files", [])
52
45
 
53
46
  PrettyOutput.print(f"创建子代理: {agent_name}", OutputType.INFO)
54
47
 
@@ -69,7 +62,7 @@ class SubAgentTool:
69
62
 
70
63
  # Run sub-agent, pass file list
71
64
  PrettyOutput.print("子代理开始执行任务...", OutputType.INFO)
72
- result = sub_agent.run(task_description, file_list=files)
65
+ result = sub_agent.run(task_description)
73
66
 
74
67
  return {
75
68
  "success": True,
@@ -9,7 +9,7 @@ from jarvis.jarvis_platform.registry import PlatformRegistry
9
9
  import sys
10
10
  import argparse
11
11
 
12
- from jarvis.jarvis_utils.git_utils import has_uncommitted_changes
12
+ from jarvis.jarvis_utils.git_utils import find_git_root, has_uncommitted_changes
13
13
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
14
14
  from jarvis.jarvis_utils.utils import init_env
15
15
 
@@ -51,6 +51,7 @@ class GitCommitTool:
51
51
  def execute(self, args: Dict) -> Dict[str, Any]:
52
52
  """Execute automatic commit process with support for multi-line messages and special characters"""
53
53
  try:
54
+ find_git_root()
54
55
  if not has_uncommitted_changes():
55
56
  PrettyOutput.print("没有未提交的更改", OutputType.SUCCESS)
56
57
  return {"success": True, "stdout": "No changes to commit", "stderr": ""}
@@ -84,7 +84,7 @@ class ReadCodeTool:
84
84
  f"{numbered_content}\n"
85
85
  f"{'='*80}\n"
86
86
  )
87
-
87
+ spinner.text = f"文件读取完成: {abs_path}"
88
88
  spinner.ok("✅")
89
89
  return {
90
90
  "success": True,
@@ -182,7 +182,7 @@ class PrettyOutput:
182
182
  title_align="left",
183
183
  padding=(0, 0),
184
184
  highlight=True,
185
- box=HEAVY,
185
+ # box=HEAVY,
186
186
  )
187
187
  console.print()
188
188
  console.print(panel)
@@ -212,7 +212,7 @@ class PrettyOutput:
212
212
  参数:
213
213
  text: 要打印的文本
214
214
  """
215
- style = PrettyOutput._get_style(OutputType.SYSTEM)
215
+ style = RichStyle(color="bright_cyan", italic=True, frame=True, meta={"icon": "🤖"})
216
216
  console.print(text, style=style, end="")
217
217
  @staticmethod
218
218
  def print_stream_end():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.129
3
+ Version: 0.1.130
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,17 +1,18 @@
1
- jarvis/__init__.py,sha256=za4oKG0K-1ZuhjUPmJNltAW9-yWKxirJqtMEK3RpcwQ,51
2
- jarvis/jarvis_agent/__init__.py,sha256=4W0HYKKaDlAXrOIsvwNVsGOTHfbyQTgEpkXIJwRQM_4,22684
1
+ jarvis/__init__.py,sha256=0ZoJQUdCltpUQrJdDLZo0EAN3_8xYv0anwrQ4bLeIQM,51
2
+ jarvis/jarvis_agent/__init__.py,sha256=TOC86xH33QELYKxr-e960R75L0t-l6XmAe4DUh4CIuY,22609
3
3
  jarvis/jarvis_agent/main.py,sha256=PfuoMkLH-QsqOXUMpJYi9GB7ewx-Ub84b1GTxqV7UBo,2515
4
4
  jarvis/jarvis_agent/output_handler.py,sha256=kJeFTjjSu0K_2p0wyhq2veSZuhRXoaFC_8wVaoBKX0w,401
5
+ jarvis/jarvis_c2rust/c2rust.yaml,sha256=vsHYdz7RtjBfKvGkpjDV2rcDf9qBfU-VEBP2k0tk1AY,22858
5
6
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
7
  jarvis/jarvis_code_agent/builtin_input_handler.py,sha256=HBza949NZyzZrbVlG31ITk5h0DD6MY_yjCieatvigd0,1366
7
- jarvis/jarvis_code_agent/code_agent.py,sha256=A1mmswsCj3JT0l6iwZmIGzPUADODrVuUQJPOKiSeEYQ,8077
8
+ jarvis/jarvis_code_agent/code_agent.py,sha256=UCDDROy-7cV1LUhaVU40YW_GIYaYSBSHqXSC-yiRa4k,8504
8
9
  jarvis/jarvis_code_agent/file_input_handler.py,sha256=yooXbtWGziNzQKxM6xDyAmnJe4fKcD6kYakxKEJBAdw,3338
9
10
  jarvis/jarvis_code_agent/file_select.py,sha256=2nSy1FW-kK-wvtz0YbbgSbd4ZwXMlA7sBP0nC80FzLI,8160
10
- jarvis/jarvis_code_agent/patch.py,sha256=qwfpUgWcTzSrun7EWDkfbG1oiU5o_HdNUluSf20Nu1E,10898
11
+ jarvis/jarvis_code_agent/patch.py,sha256=V8lUvDURinnhT3HLP2AQI-DHPTOhk-75piZYFc4Zc-8,17150
11
12
  jarvis/jarvis_code_agent/shell_input_handler.py,sha256=LTXKHNbqTKf5S2kXU255iBx_e-EsDTRaZ0aokFWkUU4,1075
12
13
  jarvis/jarvis_codebase/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
14
  jarvis/jarvis_codebase/main.py,sha256=KSNf2RoPDn_jnfjUA5Sry7sh7iJ9Q267Z8k4dsQANRM,41325
14
- jarvis/jarvis_dev/main.py,sha256=tDdv28nbcYlsy9wz1RbMNEModOdicNg4JfnBOYl4JnU,21414
15
+ jarvis/jarvis_dev/main.py,sha256=eOEvLmzG5S_X5VhvanaYLHPHHL2hpojHH6OOgnEpwAM,30413
15
16
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  jarvis/jarvis_git_squash/main.py,sha256=g4csaRDYH3n3MCHc8aZb2N4wWVCVZ-pIgd0oanXDnD8,2798
17
18
  jarvis/jarvis_lsp/base.py,sha256=ceJBQoOU7JHsvQEAA3agUTedh7_ki_HgK0re7-V9rqg,4119
@@ -20,7 +21,7 @@ jarvis/jarvis_lsp/go.py,sha256=fgYBhZaiU2OQPAFQh4fBFOO--HKxkXcr8PEYyF_YlcE,4930
20
21
  jarvis/jarvis_lsp/python.py,sha256=NYatk1rlah-bPnTKOn_BXwkYp0IsCUFYRGdLTVVYsCM,3708
21
22
  jarvis/jarvis_lsp/registry.py,sha256=slD6p3FAMjL8pQx2id-RxX1pwMjP4FgyMsM3ZbckQJI,9884
22
23
  jarvis/jarvis_lsp/rust.py,sha256=nV1EKtq5y57E47DbQlD2DsfvwFVE2JoUTs-9paxeyDo,5161
23
- jarvis/jarvis_multi_agent/__init__.py,sha256=LpXq9baBg4Rp0m4dfL172UcNyijSx3yjyupz2CNhjKE,5687
24
+ jarvis/jarvis_multi_agent/__init__.py,sha256=zgTXCUJwmhrlJhz_ZK5GIfav0Q7TZ2D-poc53ydy-qw,6847
24
25
  jarvis/jarvis_platform/__init__.py,sha256=mrOt67nselz_H1gX9wdAO4y2DY5WPXzABqJbr5Des8k,63
25
26
  jarvis/jarvis_platform/ai8.py,sha256=xjgoiF7QHx_5FHj-npTFVvZFYg8RBzkqTGAOQ-MJiL0,11972
26
27
  jarvis/jarvis_platform/base.py,sha256=2chHt0pMx4rr0OFTeDpZcVqFUxF_q4YslUt30E5Augk,3277
@@ -28,7 +29,7 @@ jarvis/jarvis_platform/kimi.py,sha256=Qwb81flbKPvj-qZyJAMS_u0lQatRFQztYxUGDbj1ke
28
29
  jarvis/jarvis_platform/ollama.py,sha256=NHQMJSpC91WtSFuHKJuwD8qO-z4yDTF9mZX6BzWTKRU,5658
29
30
  jarvis/jarvis_platform/openai.py,sha256=GSxTB69WitXJS3pL0sxCoB2F0EVHmvhrwLBC_JT8s34,4470
30
31
  jarvis/jarvis_platform/oyi.py,sha256=pa72TtBYlhs3KPpqO4Y78a1Jvx4mN0pojBklu8X3F-k,15024
31
- jarvis/jarvis_platform/registry.py,sha256=DrL6ZoIX9ZKAvFgDadiWPpVnO9GdWJMcXM8dsoNR3ds,8559
32
+ jarvis/jarvis_platform/registry.py,sha256=g-fz4VSlMyovLpZoim023CdnZ8e9W0kZyO0GxatlAp0,8523
32
33
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
34
  jarvis/jarvis_platform_manager/main.py,sha256=84j3voQDOVhvCqWxf-SGpdrYQPcf0pA5qUKe7b5oPUE,20898
34
35
  jarvis/jarvis_platform_manager/openai_test.py,sha256=bkcVG6o2nNazj4zjkENgA4yOEzdTI9Qbm5dco-2MGYM,5190
@@ -43,11 +44,11 @@ jarvis/jarvis_tools/base.py,sha256=8gIgIx9LJAKOxdpPu7zMDItWqwXmXVTWAGfUkpQonzw,1
43
44
  jarvis/jarvis_tools/chdir.py,sha256=GLbH2fOKESUn3XYhNg0uOI5axTO2csC0B9HUL0bMZ5U,2790
44
45
  jarvis/jarvis_tools/code_review.py,sha256=4TMsTehbIq3W-K-LvHjMwbaGtt66sbSM6nij30YsxlU,10039
45
46
  jarvis/jarvis_tools/create_code_agent.py,sha256=lVnTP1Kq4q8aWOJ97YTf8POds-Hb3qeYS6MNOiM0wF4,3768
46
- jarvis/jarvis_tools/create_sub_agent.py,sha256=lPiTXU0F8RZ-mEBB0ec9fdZ1UUtrpUQ2WoV8g-M5lHg,2774
47
+ jarvis/jarvis_tools/create_sub_agent.py,sha256=7WhbFpFpS7o-yDbFC2xeKypH05H7ovBWIGNVZzK48po,2481
47
48
  jarvis/jarvis_tools/execute_shell.py,sha256=5LWWae8LKX4Qe3DIkSiLpcEvkCcF1ruvY0gbAIrT1Nw,3914
48
49
  jarvis/jarvis_tools/execute_shell_script.py,sha256=JLs_4p3rXS_d0PdfS6lP_4ojFlD0SayAe0PNEGVfyzE,2030
49
50
  jarvis/jarvis_tools/file_operation.py,sha256=3dcbugrzSaXHV7m98k1E_CpEIK2v4DYqZNZQim-fuxM,6973
50
- jarvis/jarvis_tools/git_commiter.py,sha256=mjGturix6uP6HmqzqX8APJuofaLWGQ4-D6DOk8jj7WI,5533
51
+ jarvis/jarvis_tools/git_commiter.py,sha256=hG2-DIYbOFsRegDgkTGGGhdIH2_uk4-EPk2w53TtS2g,5576
51
52
  jarvis/jarvis_tools/lsp_find_definition.py,sha256=LqAOf6W4_WZR2GmtQXb7pMSduJzK_g3ysaOrgxu8CDE,4755
52
53
  jarvis/jarvis_tools/lsp_find_references.py,sha256=IR1QcRi-p4zHS0YENb7vDNMUSuGQUTA4W9bPa9-VO-Y,4028
53
54
  jarvis/jarvis_tools/lsp_get_diagnostics.py,sha256=_u2lsSFY7GkOlyKD2CFnvEpkZzAjNfEUMsM9dKGQz40,4754
@@ -55,7 +56,7 @@ jarvis/jarvis_tools/lsp_get_document_symbols.py,sha256=c7_9jP1toe_kepaTmZf1R1jn-
55
56
  jarvis/jarvis_tools/lsp_prepare_rename.py,sha256=HIeJjup8luIH25XuLqTVdejWDT5vOn-IWSo-TKDFjZ4,4821
56
57
  jarvis/jarvis_tools/methodology.py,sha256=jLYFji3hP7Gff7WFRuR-_VmPHI8Rqq0EGDIgackhqtc,5787
57
58
  jarvis/jarvis_tools/rag.py,sha256=WuTlyGV5rgZTRxts9eJPC3QABrsoNYKratdO8UzUFDw,5132
58
- jarvis/jarvis_tools/read_code.py,sha256=rHizUi2nh-bXp3BNtzuXLWSWDfevxNTjrML2Xu1Y8EA,5382
59
+ jarvis/jarvis_tools/read_code.py,sha256=pZFY1O6psFJsngVnFkk8eXcohm8Ioff7ffnyw2HdGBo,5430
59
60
  jarvis/jarvis_tools/read_webpage.py,sha256=TkVNgirvcjns8-MHaDXOmliOKWCYcq3WzcbVXBi0IxY,4173
60
61
  jarvis/jarvis_tools/registry.py,sha256=pYyjdyjYgvHfdglhp0I7YXfVIV8_jTSncoSgIG6HFUw,13719
61
62
  jarvis/jarvis_tools/search_web.py,sha256=yzu2EP63It2but0LFUR0x1hlCkyTyr1AwY4APvxmniE,12903
@@ -68,11 +69,11 @@ jarvis/jarvis_utils/git_utils.py,sha256=wU2CPmRP4cUnm5Omz1-a7l4HYML-dYZAZ5bwNrLo
68
69
  jarvis/jarvis_utils/globals.py,sha256=nvykWxBnqfAFqAIyJfxP5Y1yYIXIQXjippVE5i2Bubg,2269
69
70
  jarvis/jarvis_utils/input.py,sha256=_PjnmRFWoe2dSxY6nBaKZoMkFLkkMJsDjXybiASYLek,6466
70
71
  jarvis/jarvis_utils/methodology.py,sha256=915rbvNbrOAJHBRUFq_h06BC_lA2eezCtBmZMbIk0B0,6351
71
- jarvis/jarvis_utils/output.py,sha256=eboIP02NAFVFntP51hqMKGUOCUEAjs0e0VLkmJgGfOo,8335
72
+ jarvis/jarvis_utils/output.py,sha256=1X4cd_M2gwL9-W2M44BwGNtmeFwFXmtC1_RvbwC_AR4,8373
72
73
  jarvis/jarvis_utils/utils.py,sha256=DfnCwgPfQpX5DZz9WGbXkWoDYrB7qnVmA6JVPoFnBuk,5564
73
- jarvis_ai_assistant-0.1.129.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
74
- jarvis_ai_assistant-0.1.129.dist-info/METADATA,sha256=fJjo3cbS48iGf5QBtlUR1WVelXtpwbpMeoag7y-vD3U,10519
75
- jarvis_ai_assistant-0.1.129.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
76
- jarvis_ai_assistant-0.1.129.dist-info/entry_points.txt,sha256=npKEpBACgZAF97wZgHSJNnturrh9DP33usD0kzjMXPo,771
77
- jarvis_ai_assistant-0.1.129.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
78
- jarvis_ai_assistant-0.1.129.dist-info/RECORD,,
74
+ jarvis_ai_assistant-0.1.130.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
75
+ jarvis_ai_assistant-0.1.130.dist-info/METADATA,sha256=r9icP4e77X7c4CTSyFPserE_Exu4Na6_zihnyXSK850,10519
76
+ jarvis_ai_assistant-0.1.130.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
77
+ jarvis_ai_assistant-0.1.130.dist-info/entry_points.txt,sha256=npKEpBACgZAF97wZgHSJNnturrh9DP33usD0kzjMXPo,771
78
+ jarvis_ai_assistant-0.1.130.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
79
+ jarvis_ai_assistant-0.1.130.dist-info/RECORD,,