jarvis-ai-assistant 0.1.198__py3-none-any.whl → 0.1.200__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 +1 -1
- jarvis/jarvis_agent/__init__.py +5 -0
- jarvis/jarvis_agent/builtin_input_handler.py +1 -0
- jarvis/jarvis_platform/yuanbao.py +4 -4
- jarvis/jarvis_tools/edit_file.py +3 -3
- jarvis/jarvis_tools/rewrite_file.py +22 -9
- jarvis/jarvis_utils/builtin_replace_map.py +0 -88
- jarvis/jarvis_utils/utils.py +12 -4
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/RECORD +14 -14
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/top_level.txt +0 -0
jarvis/__init__.py
CHANGED
jarvis/jarvis_agent/__init__.py
CHANGED
@@ -821,6 +821,11 @@ arguments:
|
|
821
821
|
f"模型交互期间被中断,请输入用户干预信息:"
|
822
822
|
)
|
823
823
|
if user_input:
|
824
|
+
# 如果有工具调用且用户确认继续,则将干预信息和工具执行结果拼接为prompt
|
825
|
+
if any(handler.can_handle(current_response) for handler in self.output_handler):
|
826
|
+
if user_confirm("检测到有工具调用,是否继续处理工具调用?", True):
|
827
|
+
self.prompt = f"{user_input}\n\n{current_response}"
|
828
|
+
continue
|
824
829
|
self.prompt += f"{user_input}"
|
825
830
|
continue
|
826
831
|
|
@@ -45,6 +45,7 @@ def builtin_input_handler(user_input: str, agent_: Any) -> Tuple[str, bool]:
|
|
45
45
|
tool_registry_ if tool_registry_ else ToolRegistry()
|
46
46
|
)
|
47
47
|
agent.set_addon_prompt(tool_registry.prompt())
|
48
|
+
return "", False
|
48
49
|
elif tag == "ReloadConfig":
|
49
50
|
from jarvis.jarvis_utils.utils import load_config
|
50
51
|
|
@@ -98,7 +98,7 @@ class YuanbaoPlatform(BasePlatform):
|
|
98
98
|
|
99
99
|
try:
|
100
100
|
response = while_success(
|
101
|
-
lambda: requests.post(url, headers=headers, data=payload), sleep_time=5
|
101
|
+
lambda: requests.post(url, headers=headers, data=payload, timeout=600), sleep_time=5
|
102
102
|
)
|
103
103
|
response_json = response.json()
|
104
104
|
|
@@ -264,7 +264,7 @@ class YuanbaoPlatform(BasePlatform):
|
|
264
264
|
|
265
265
|
try:
|
266
266
|
response = while_success(
|
267
|
-
lambda: requests.post(url, headers=headers, json=payload), sleep_time=5
|
267
|
+
lambda: requests.post(url, headers=headers, json=payload, timeout=600), sleep_time=5
|
268
268
|
)
|
269
269
|
|
270
270
|
if response.status_code != 200:
|
@@ -482,7 +482,7 @@ class YuanbaoPlatform(BasePlatform):
|
|
482
482
|
try:
|
483
483
|
# 发送消息请求,获取流式响应
|
484
484
|
response = while_success(
|
485
|
-
lambda: requests.post(url, headers=headers, json=payload, stream=True),
|
485
|
+
lambda: requests.post(url, headers=headers, json=payload, stream=True, timeout=600),
|
486
486
|
sleep_time=5,
|
487
487
|
)
|
488
488
|
|
@@ -556,7 +556,7 @@ class YuanbaoPlatform(BasePlatform):
|
|
556
556
|
|
557
557
|
try:
|
558
558
|
response = while_success(
|
559
|
-
lambda: requests.post(url, headers=headers, json=payload), sleep_time=5
|
559
|
+
lambda: requests.post(url, headers=headers, json=payload, timeout=600), sleep_time=5
|
560
560
|
)
|
561
561
|
|
562
562
|
if response.status_code == 200:
|
jarvis/jarvis_tools/edit_file.py
CHANGED
@@ -444,7 +444,7 @@ def fast_edit(
|
|
444
444
|
# 如果有多处,报错
|
445
445
|
if modified_content.count(search_text) > 1:
|
446
446
|
success = False
|
447
|
-
err_msg = f"搜索文本 {search_text} 在文件中存在多处,请检查补丁内容"
|
447
|
+
err_msg = f"搜索文本 ```\n{search_text}\n``` 在文件中存在多处,请检查补丁内容"
|
448
448
|
break
|
449
449
|
# 应用替换
|
450
450
|
modified_content = modified_content.replace(search_text, replace_text)
|
@@ -465,7 +465,7 @@ def fast_edit(
|
|
465
465
|
if indented_search in modified_content:
|
466
466
|
if modified_content.count(indented_search) > 1:
|
467
467
|
success = False
|
468
|
-
err_msg = f"搜索文本 {indented_search} 在文件中存在多处,请检查补丁内容"
|
468
|
+
err_msg = f"搜索文本 ```\n{indented_search}\n``` 在文件中存在多处,请检查补丁内容"
|
469
469
|
break
|
470
470
|
modified_content = modified_content.replace(
|
471
471
|
indented_search, indented_replace
|
@@ -478,7 +478,7 @@ def fast_edit(
|
|
478
478
|
|
479
479
|
if not found:
|
480
480
|
success = False
|
481
|
-
err_msg = f"搜索文本 {search_text} 在文件中不存在,尝试增加1-16个空格缩进后仍未找到匹配"
|
481
|
+
err_msg = f"搜索文本 ```\n{search_text}\n``` 在文件中不存在,尝试增加1-16个空格缩进后仍未找到匹配"
|
482
482
|
break
|
483
483
|
if not success:
|
484
484
|
revert_file(filepath)
|
@@ -86,6 +86,8 @@ class FileRewriteTool:
|
|
86
86
|
|
87
87
|
file_path = args["file"]
|
88
88
|
new_content = args["content"]
|
89
|
+
agent = args.get("agent", None)
|
90
|
+
abs_path = os.path.abspath(file_path)
|
89
91
|
|
90
92
|
# 创建已处理文件变量,用于失败时回滚
|
91
93
|
original_content = None
|
@@ -97,20 +99,20 @@ class FileRewriteTool:
|
|
97
99
|
try:
|
98
100
|
# 如果文件存在,则读取原内容用于回滚
|
99
101
|
if file_exists:
|
100
|
-
with open(
|
102
|
+
with open(abs_path, "r", encoding="utf-8") as f:
|
101
103
|
original_content = f.read()
|
102
104
|
|
103
105
|
# 确保目录存在
|
104
|
-
os.makedirs(os.path.dirname(
|
106
|
+
os.makedirs(os.path.dirname(abs_path), exist_ok=True)
|
105
107
|
|
106
108
|
# 写入新内容
|
107
|
-
with open(
|
109
|
+
with open(abs_path, "w", encoding="utf-8") as f:
|
108
110
|
f.write(new_content)
|
109
111
|
|
110
112
|
processed = True
|
111
113
|
|
112
114
|
action = "创建并写入" if not file_exists else "成功重写"
|
113
|
-
stdout_message = f"文件 {
|
115
|
+
stdout_message = f"文件 {abs_path} {action}"
|
114
116
|
stdout_messages.append(stdout_message)
|
115
117
|
PrettyOutput.print(stdout_message, OutputType.SUCCESS)
|
116
118
|
|
@@ -129,14 +131,14 @@ class FileRewriteTool:
|
|
129
131
|
try:
|
130
132
|
if original_content is None:
|
131
133
|
# 如果是新创建的文件,则删除
|
132
|
-
if os.path.exists(
|
133
|
-
os.remove(
|
134
|
-
rollback_file_message = f"已删除新创建的文件: {
|
134
|
+
if os.path.exists(abs_path):
|
135
|
+
os.remove(abs_path)
|
136
|
+
rollback_file_message = f"已删除新创建的文件: {abs_path}"
|
135
137
|
else:
|
136
138
|
# 如果是修改的文件,则恢复原内容
|
137
|
-
with open(
|
139
|
+
with open(abs_path, "w", encoding="utf-8") as f:
|
138
140
|
f.write(original_content)
|
139
|
-
rollback_file_message = f"已回滚文件: {
|
141
|
+
rollback_file_message = f"已回滚文件: {abs_path}"
|
140
142
|
|
141
143
|
stderr_messages.append(rollback_file_message)
|
142
144
|
PrettyOutput.print(rollback_file_message, OutputType.INFO)
|
@@ -145,6 +147,17 @@ class FileRewriteTool:
|
|
145
147
|
stderr_messages.append(rollback_error)
|
146
148
|
PrettyOutput.print(rollback_error, OutputType.WARNING)
|
147
149
|
|
150
|
+
# 记录成功处理的文件(使用绝对路径)
|
151
|
+
if success and agent:
|
152
|
+
abs_path = os.path.abspath(file_path)
|
153
|
+
files = agent.get_user_data("files")
|
154
|
+
if files:
|
155
|
+
if abs_path not in files:
|
156
|
+
files.append(abs_path)
|
157
|
+
else:
|
158
|
+
files = [abs_path]
|
159
|
+
agent.set_user_data("files", files)
|
160
|
+
|
148
161
|
return {
|
149
162
|
"success": success,
|
150
163
|
"stdout": "\n".join(stdout_messages),
|
@@ -96,92 +96,4 @@ code_plan工具将:
|
|
96
96
|
""",
|
97
97
|
"description": "执行静态代码检查",
|
98
98
|
},
|
99
|
-
"ToolHelp": {
|
100
|
-
"append": False,
|
101
|
-
"template": """
|
102
|
-
<tool_system_guide>
|
103
|
-
<introduction>
|
104
|
-
# 🛠️ 工具使用系统
|
105
|
-
您正在使用一个需要精确格式和严格规则的工具执行系统。
|
106
|
-
</introduction>
|
107
|
-
|
108
|
-
<format>
|
109
|
-
# 📋 工具调用格式
|
110
|
-
{ot("TOOL_CALL")}
|
111
|
-
want: 想要从执行结果中获取到的信息,如果工具输出内容过长,会根据此字段尝试提取有效信息
|
112
|
-
name: 工具名称
|
113
|
-
arguments:
|
114
|
-
param1: 值1
|
115
|
-
param2: 值2
|
116
|
-
{ct("TOOL_CALL")}
|
117
|
-
</format>
|
118
|
-
|
119
|
-
<rules>
|
120
|
-
# ❗ 关键规则
|
121
|
-
<rule>
|
122
|
-
### 1. 每次只使用一个工具
|
123
|
-
- 一次只执行一个工具
|
124
|
-
- 等待结果后再进行下一步
|
125
|
-
</rule>
|
126
|
-
|
127
|
-
<rule>
|
128
|
-
### 2. 严格遵守格式
|
129
|
-
- 完全按照上述格式
|
130
|
-
- 使用正确的YAML格式,2个空格作为缩进
|
131
|
-
- 包含所有必需参数
|
132
|
-
</rule>
|
133
|
-
|
134
|
-
<rule>
|
135
|
-
### 3. 结果处理
|
136
|
-
- 等待执行结果
|
137
|
-
- 不要假设结果
|
138
|
-
- 不要创建虚假响应
|
139
|
-
- 不要想象对话
|
140
|
-
</rule>
|
141
|
-
|
142
|
-
<rule>
|
143
|
-
### 4. 信息管理
|
144
|
-
- 如果信息不足,询问用户
|
145
|
-
- 跳过不必要的步骤
|
146
|
-
- 如果卡住,请求指导
|
147
|
-
- 不要在没有完整信息的情况下继续
|
148
|
-
</rule>
|
149
|
-
</rules>
|
150
|
-
|
151
|
-
<string_format>
|
152
|
-
# 📝 字符串参数格式
|
153
|
-
始终使用 |2 语法表示字符串参数,防止多行字符串行首空格引起歧义:
|
154
|
-
|
155
|
-
{ot("TOOL_CALL")}
|
156
|
-
want: 当前的git状态,期望获取xxx的提交记录
|
157
|
-
name: execute_script
|
158
|
-
arguments:
|
159
|
-
interpreter: bash
|
160
|
-
script_cotent: |2
|
161
|
-
git status --porcelain
|
162
|
-
{ct("TOOL_CALL")}
|
163
|
-
</string_format>
|
164
|
-
|
165
|
-
<best_practices>
|
166
|
-
# 💡 最佳实践
|
167
|
-
- 准备好后立即开始执行
|
168
|
-
- 无需请求许可即可开始
|
169
|
-
- 使用正确的字符串格式
|
170
|
-
- 监控进度并调整
|
171
|
-
- 遇到困难时请求帮助
|
172
|
-
</best_practices>
|
173
|
-
|
174
|
-
<common_errors>
|
175
|
-
# ⚠️ 常见错误
|
176
|
-
- 同时调用多个工具
|
177
|
-
- 字符串参数缺少 |2
|
178
|
-
- 假设工具结果
|
179
|
-
- 创建虚构对话
|
180
|
-
- 在没有所需信息的情况下继续
|
181
|
-
- yaml 格式错误
|
182
|
-
</common_errors>
|
183
|
-
</tool_system_guide>
|
184
|
-
""",
|
185
|
-
"description": "工具使用系统",
|
186
|
-
},
|
187
99
|
}
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -3,6 +3,7 @@ import hashlib
|
|
3
3
|
import os
|
4
4
|
import signal
|
5
5
|
import subprocess
|
6
|
+
import sys
|
6
7
|
import tarfile
|
7
8
|
import time
|
8
9
|
from pathlib import Path
|
@@ -90,7 +91,11 @@ def init_env(welcome_str: str, config_file: Optional[str] = None) -> None:
|
|
90
91
|
# 检查是否是git仓库并更新
|
91
92
|
from jarvis.jarvis_utils.git_utils import check_and_update_git_repo
|
92
93
|
|
93
|
-
check_and_update_git_repo(str(script_dir))
|
94
|
+
if check_and_update_git_repo(str(script_dir)):
|
95
|
+
# 更新成功,用当前命令行参数启动新进程
|
96
|
+
os.execv(sys.executable, [sys.executable] + sys.argv)
|
97
|
+
# 如果execv失败,退出当前进程
|
98
|
+
sys.exit(0)
|
94
99
|
|
95
100
|
|
96
101
|
def load_config():
|
@@ -273,9 +278,12 @@ def user_confirm(tip: str, default: bool = True) -> bool:
|
|
273
278
|
返回:
|
274
279
|
bool: 用户确认返回True,否则返回False
|
275
280
|
"""
|
276
|
-
|
277
|
-
|
278
|
-
|
281
|
+
try:
|
282
|
+
suffix = "[Y/n]" if default else "[y/N]"
|
283
|
+
ret = get_single_line_input(f"{tip} {suffix}: ")
|
284
|
+
return default if ret == "" else ret.lower() == "y"
|
285
|
+
except KeyboardInterrupt:
|
286
|
+
return False
|
279
287
|
|
280
288
|
|
281
289
|
def get_file_line_count(filename: str) -> int:
|
@@ -1,6 +1,6 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
3
|
-
jarvis/jarvis_agent/builtin_input_handler.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=ePqWF92FI0LF1Btg_GrnhZEoxtiseFY4-wiB5EEsh-U,75
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=X5BWIOzxXUWtCbpDkTFfUYskf6sbNzb1qQu8nQ4NN1k,34371
|
3
|
+
jarvis/jarvis_agent/builtin_input_handler.py,sha256=1V7kV5Zhw2HE3Xgjs1R-43RZ2huq3Kg-32NCdNnyZmA,2216
|
4
4
|
jarvis/jarvis_agent/jarvis.py,sha256=GH2zi8eXNpW8twiY3LKDEZgGmFC5geB0jlkwFrm7hOQ,6279
|
5
5
|
jarvis/jarvis_agent/main.py,sha256=c6bQe-8LXvW2-NBn9Rn_yPYdrwnkJ8KQaSFY2cPvkxw,2775
|
6
6
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
@@ -51,7 +51,7 @@ jarvis/jarvis_platform/kimi.py,sha256=uIpSWQ3MqDBYYMROeXin_YqM2LFrovMICKpwLWO1OD
|
|
51
51
|
jarvis/jarvis_platform/openai.py,sha256=uEjBikfFj7kp5wondLvOx4WdkmTX0aqF6kixxAufcHg,4806
|
52
52
|
jarvis/jarvis_platform/registry.py,sha256=Sz4ADAaxuufpAQG0KSQZuL1yALzH-aF3FDapkNn5foE,8107
|
53
53
|
jarvis/jarvis_platform/tongyi.py,sha256=zu1bE-LdF_Sohwb5FxoIkDOTI0Lv5G_XhuSOPI20Gf8,21190
|
54
|
-
jarvis/jarvis_platform/yuanbao.py,sha256=
|
54
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=nzdizTNM1d9OWfxkAZjBkhA_hllNPekpcv2vhJiPUB0,21446
|
55
55
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
56
|
jarvis/jarvis_platform_manager/main.py,sha256=BdBH2tPzq7p9Mvii7abu6M7uj4lfG05gwjYfMqU5HUA,29567
|
57
57
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -63,7 +63,7 @@ jarvis/jarvis_tools/chdir.py,sha256=BlRvggcOeBM7UwHGL8U8hjuNm_WGkH5BdhxmPVJXejw,
|
|
63
63
|
jarvis/jarvis_tools/code_plan.py,sha256=XRXHdkN4O1A4qbShLa4VBHFdRl6YdyMgZxbPPotrqNs,7358
|
64
64
|
jarvis/jarvis_tools/create_code_agent.py,sha256=wls2B2iLrIEeG9kSWnJHv1wQ4TNqdD9T5OPoAyN53N0,3384
|
65
65
|
jarvis/jarvis_tools/create_sub_agent.py,sha256=ilnApbz7ptNz5o3IrhBTTiNMJGtdeUmkpYL2BFqyI6c,2874
|
66
|
-
jarvis/jarvis_tools/edit_file.py,sha256=
|
66
|
+
jarvis/jarvis_tools/edit_file.py,sha256=Awe_2zZxRl_2u81pu4VKb9Rom4xzbYpZV07_s7BEhLM,18747
|
67
67
|
jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
|
68
68
|
jarvis/jarvis_tools/file_analyzer.py,sha256=SvNLve5AL2d3oQsWSoHouIsAsYanksBnl5RCCsrw2PQ,4604
|
69
69
|
jarvis/jarvis_tools/file_operation.py,sha256=b488jf0_l7aP0RkntaNE9WqZXtbdrQTJdmWawJbfC-A,9529
|
@@ -72,13 +72,13 @@ jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAP
|
|
72
72
|
jarvis/jarvis_tools/read_code.py,sha256=6mQ3KNGc43FTiLFxMbAN28FTSVhVfkFJ6mob4heXBNM,6663
|
73
73
|
jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
|
74
74
|
jarvis/jarvis_tools/registry.py,sha256=ZuD6x4znAGwB-Z7-43f-SAlrFPIVaLiHqzpZp6zc5r4,25729
|
75
|
-
jarvis/jarvis_tools/rewrite_file.py,sha256=
|
75
|
+
jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
|
76
76
|
jarvis/jarvis_tools/search_web.py,sha256=C-TuBFy25WOSiwRCe7YiL0hnMx0DuHj6upHO5OtkHTA,925
|
77
77
|
jarvis/jarvis_tools/virtual_tty.py,sha256=KKr3jpvQWWMPr2o40hlmN6fuXJCN8H4_ma5QU40Citc,16089
|
78
78
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
79
79
|
jarvis/jarvis_tools/cli/main.py,sha256=Mg6TQDxMdzB1Ua1UrZ2EE-uQWsbaeojWaEGHJp2HimA,6375
|
80
80
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
81
|
-
jarvis/jarvis_utils/builtin_replace_map.py,sha256=
|
81
|
+
jarvis/jarvis_utils/builtin_replace_map.py,sha256=9QKElsyIoZaq4ssZRlCfJPf2i92WuKIHlqOfyBZQmLs,2939
|
82
82
|
jarvis/jarvis_utils/config.py,sha256=OomZRIeRHiBntKXdqYP1ArI8aqRFqtMlLkd9-VSd5dA,7364
|
83
83
|
jarvis/jarvis_utils/embedding.py,sha256=suqKOgH4cq2HYj4xvNpqDPN9pyc3hTCl934xYonF6qk,3922
|
84
84
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
@@ -89,10 +89,10 @@ jarvis/jarvis_utils/jarvis_history.py,sha256=Td6cmze9Oc5-Ewz0l9RKYeSg_-fbEu9ZhyE
|
|
89
89
|
jarvis/jarvis_utils/methodology.py,sha256=MhPrMxMqElyAn54BDfpQdUqrRr7IbSlrLvAI39LCgTM,8487
|
90
90
|
jarvis/jarvis_utils/output.py,sha256=PRCgudPOB8gMEP3u-g0FGD2c6tBgJhLXUMqNPglfjV8,10813
|
91
91
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
92
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
93
|
-
jarvis_ai_assistant-0.1.
|
94
|
-
jarvis_ai_assistant-0.1.
|
95
|
-
jarvis_ai_assistant-0.1.
|
96
|
-
jarvis_ai_assistant-0.1.
|
97
|
-
jarvis_ai_assistant-0.1.
|
98
|
-
jarvis_ai_assistant-0.1.
|
92
|
+
jarvis/jarvis_utils/utils.py,sha256=RYFQx7OkOu3fe_QhS-5jx7O06k_58X14S-9PFJgwOa4,12178
|
93
|
+
jarvis_ai_assistant-0.1.200.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
94
|
+
jarvis_ai_assistant-0.1.200.dist-info/METADATA,sha256=ZCSRI6f3QMXnALhhPRM0ZjlnWQUYn0AhoqbtsA0xzRk,20215
|
95
|
+
jarvis_ai_assistant-0.1.200.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
96
|
+
jarvis_ai_assistant-0.1.200.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
|
97
|
+
jarvis_ai_assistant-0.1.200.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
98
|
+
jarvis_ai_assistant-0.1.200.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.200.dist-info}/top_level.txt
RENAMED
File without changes
|