jarvis-ai-assistant 0.3.27__py3-none-any.whl → 0.3.29__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 +73 -29
- jarvis/jarvis_agent/agent_manager.py +6 -0
- jarvis/jarvis_agent/config_editor.py +1 -1
- jarvis/jarvis_agent/event_bus.py +2 -2
- jarvis/jarvis_agent/events.py +157 -0
- jarvis/jarvis_agent/file_methodology_manager.py +18 -7
- jarvis/jarvis_agent/jarvis.py +11 -4
- jarvis/jarvis_agent/memory_manager.py +4 -4
- jarvis/jarvis_agent/prompts.py +2 -2
- jarvis/jarvis_agent/protocols.py +4 -1
- jarvis/jarvis_agent/run_loop.py +9 -24
- jarvis/jarvis_agent/shell_input_handler.py +7 -2
- jarvis/jarvis_agent/task_analyzer.py +19 -15
- jarvis/jarvis_agent/task_manager.py +6 -4
- jarvis/jarvis_agent/user_interaction.py +1 -1
- jarvis/jarvis_agent/utils.py +50 -0
- jarvis/jarvis_code_agent/code_agent.py +2 -2
- jarvis/jarvis_code_analysis/code_review.py +0 -1
- jarvis/jarvis_git_utils/git_commiter.py +13 -4
- jarvis/jarvis_mcp/sse_mcp_client.py +1 -1
- jarvis/jarvis_mcp/stdio_mcp_client.py +1 -1
- jarvis/jarvis_memory_organizer/memory_organizer.py +6 -9
- jarvis/jarvis_methodology/main.py +0 -2
- jarvis/jarvis_multi_agent/__init__.py +3 -3
- jarvis/jarvis_platform/base.py +1 -1
- jarvis/jarvis_platform/kimi.py +1 -1
- jarvis/jarvis_platform/registry.py +1 -1
- jarvis/jarvis_platform/tongyi.py +1 -1
- jarvis/jarvis_platform/yuanbao.py +1 -2
- jarvis/jarvis_platform_manager/service.py +1 -1
- jarvis/jarvis_rag/cli.py +1 -1
- jarvis/jarvis_rag/embedding_manager.py +0 -1
- jarvis/jarvis_rag/llm_interface.py +0 -3
- jarvis/jarvis_rag/retriever.py +3 -3
- jarvis/jarvis_smart_shell/main.py +0 -1
- jarvis/jarvis_stats/cli.py +2 -3
- jarvis/jarvis_stats/stats.py +3 -4
- jarvis/jarvis_stats/storage.py +3 -3
- jarvis/jarvis_tools/clear_memory.py +1 -3
- jarvis/jarvis_tools/cli/main.py +0 -1
- jarvis/jarvis_tools/edit_file.py +3 -4
- jarvis/jarvis_tools/execute_script.py +2 -2
- jarvis/jarvis_tools/generate_new_tool.py +3 -5
- jarvis/jarvis_tools/registry.py +2 -3
- jarvis/jarvis_tools/retrieve_memory.py +2 -3
- jarvis/jarvis_tools/save_memory.py +3 -3
- jarvis/jarvis_tools/search_web.py +2 -2
- jarvis/jarvis_tools/sub_agent.py +21 -2
- jarvis/jarvis_tools/sub_code_agent.py +18 -2
- jarvis/jarvis_tools/virtual_tty.py +3 -14
- jarvis/jarvis_utils/builtin_replace_map.py +4 -4
- jarvis/jarvis_utils/config.py +32 -17
- jarvis/jarvis_utils/fzf.py +4 -3
- jarvis/jarvis_utils/git_utils.py +1 -1
- jarvis/jarvis_utils/globals.py +1 -2
- jarvis/jarvis_utils/input.py +5 -5
- jarvis/jarvis_utils/methodology.py +3 -5
- jarvis/jarvis_utils/output.py +1 -1
- jarvis/jarvis_utils/utils.py +160 -31
- {jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/RECORD +66 -64
- {jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/top_level.txt +0 -0
jarvis/jarvis_utils/output.py
CHANGED
jarvis/jarvis_utils/utils.py
CHANGED
@@ -2,21 +2,17 @@
|
|
2
2
|
import hashlib
|
3
3
|
import json
|
4
4
|
import os
|
5
|
-
import platform
|
6
5
|
import signal
|
7
6
|
import subprocess
|
8
7
|
import sys
|
9
8
|
import time
|
10
9
|
from pathlib import Path
|
11
|
-
from typing import Any, Callable, Dict, List, Optional
|
10
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple
|
12
11
|
from datetime import datetime, date
|
13
12
|
|
14
13
|
import yaml # type: ignore
|
15
14
|
from rich.align import Align
|
16
|
-
from rich.console import
|
17
|
-
from rich.panel import Panel
|
18
|
-
from rich.table import Table
|
19
|
-
from rich.text import Text
|
15
|
+
from rich.console import RenderableType
|
20
16
|
|
21
17
|
from jarvis import __version__
|
22
18
|
from jarvis.jarvis_utils.config import (
|
@@ -101,6 +97,98 @@ def is_rag_installed() -> bool:
|
|
101
97
|
return len(get_missing_rag_modules()) == 0
|
102
98
|
|
103
99
|
|
100
|
+
def is_editable_install() -> bool:
|
101
|
+
"""
|
102
|
+
检测当前 Jarvis 是否以可编辑模式安装(pip/uv install -e .)。
|
103
|
+
|
104
|
+
判断顺序:
|
105
|
+
1. 读取 PEP 610 的 direct_url.json(dir_info.editable)
|
106
|
+
2. 兼容旧式 .egg-link 安装
|
107
|
+
3. 启发式回退:源码路径上游存在 .git 且不在 site-packages/dist-packages
|
108
|
+
"""
|
109
|
+
# 优先使用 importlib.metadata 读取 distribution 的 direct_url.json
|
110
|
+
try:
|
111
|
+
import importlib.metadata as metadata # Python 3.8+
|
112
|
+
except Exception:
|
113
|
+
metadata = None # type: ignore
|
114
|
+
|
115
|
+
def _check_direct_url() -> Optional[bool]:
|
116
|
+
if metadata is None:
|
117
|
+
return None
|
118
|
+
candidates = ["jarvis-ai-assistant", "jarvis_ai_assistant"]
|
119
|
+
for name in candidates:
|
120
|
+
try:
|
121
|
+
dist = metadata.distribution(name)
|
122
|
+
except Exception:
|
123
|
+
continue
|
124
|
+
try:
|
125
|
+
files = dist.files or []
|
126
|
+
for f in files:
|
127
|
+
try:
|
128
|
+
if f.name == "direct_url.json":
|
129
|
+
p = Path(str(dist.locate_file(f)))
|
130
|
+
if p.exists():
|
131
|
+
with open(p, "r", encoding="utf-8", errors="ignore") as fp:
|
132
|
+
info = json.load(fp)
|
133
|
+
dir_info = info.get("dir_info") or {}
|
134
|
+
if isinstance(dir_info, dict) and bool(dir_info.get("editable")):
|
135
|
+
return True
|
136
|
+
# 兼容部分工具可能写入顶层 editable 字段
|
137
|
+
if bool(info.get("editable")):
|
138
|
+
return True
|
139
|
+
return False # 找到了 direct_url.json 但未标记 editable
|
140
|
+
except Exception:
|
141
|
+
continue
|
142
|
+
except Exception:
|
143
|
+
continue
|
144
|
+
return None
|
145
|
+
|
146
|
+
res = _check_direct_url()
|
147
|
+
if res is True:
|
148
|
+
return True
|
149
|
+
if res is False:
|
150
|
+
# 明确不是可编辑安装
|
151
|
+
return False
|
152
|
+
|
153
|
+
# 兼容旧式 .egg-link 可编辑安装
|
154
|
+
try:
|
155
|
+
module_path = Path(__file__).resolve()
|
156
|
+
pkg_root = module_path.parent.parent # jarvis 包根目录
|
157
|
+
for entry in sys.path:
|
158
|
+
try:
|
159
|
+
p = Path(entry)
|
160
|
+
if not p.exists() or not p.is_dir():
|
161
|
+
continue
|
162
|
+
for egg in p.glob("*.egg-link"):
|
163
|
+
try:
|
164
|
+
text = egg.read_text(encoding="utf-8", errors="ignore")
|
165
|
+
first_line = (text.strip().splitlines() or [""])[0]
|
166
|
+
if not first_line:
|
167
|
+
continue
|
168
|
+
src_path = Path(first_line).resolve()
|
169
|
+
# 当前包根目录在 egg-link 指向的源码路径下,视为可编辑安装
|
170
|
+
if str(pkg_root).startswith(str(src_path)):
|
171
|
+
return True
|
172
|
+
except Exception:
|
173
|
+
continue
|
174
|
+
except Exception:
|
175
|
+
continue
|
176
|
+
except Exception:
|
177
|
+
pass
|
178
|
+
|
179
|
+
# 启发式回退:源码仓库路径
|
180
|
+
try:
|
181
|
+
parents = list(Path(__file__).resolve().parents)
|
182
|
+
has_git = any((d / ".git").exists() for d in parents)
|
183
|
+
in_site = any(("site-packages" in str(d)) or ("dist-packages" in str(d)) for d in parents)
|
184
|
+
if has_git and not in_site:
|
185
|
+
return True
|
186
|
+
except Exception:
|
187
|
+
pass
|
188
|
+
|
189
|
+
return False
|
190
|
+
|
191
|
+
|
104
192
|
def _setup_signal_handler() -> None:
|
105
193
|
"""设置SIGINT信号处理函数"""
|
106
194
|
original_sigint = signal.getsignal(signal.SIGINT)
|
@@ -121,14 +209,14 @@ def _check_pip_updates() -> bool:
|
|
121
209
|
"""检查pip安装的Jarvis是否有更新
|
122
210
|
|
123
211
|
返回:
|
124
|
-
bool:
|
212
|
+
bool: 是否执行了更新(成功更新返回True以触发重启)
|
125
213
|
"""
|
126
214
|
import urllib.request
|
127
215
|
import urllib.error
|
128
216
|
from packaging import version
|
129
217
|
|
130
218
|
# 检查上次检查日期
|
131
|
-
last_check_file = Path(get_data_dir()) / "last_pip_check"
|
219
|
+
last_check_file = Path(str(get_data_dir())) / "last_pip_check"
|
132
220
|
today_str = date.today().strftime("%Y-%m-%d")
|
133
221
|
|
134
222
|
if last_check_file.exists():
|
@@ -146,7 +234,7 @@ def _check_pip_updates() -> bool:
|
|
146
234
|
with urllib.request.urlopen(url, timeout=5) as response:
|
147
235
|
data = json.loads(response.read().decode())
|
148
236
|
latest_version = data["info"]["version"]
|
149
|
-
except (urllib.error.URLError, KeyError, json.JSONDecodeError)
|
237
|
+
except (urllib.error.URLError, KeyError, json.JSONDecodeError):
|
150
238
|
return False
|
151
239
|
|
152
240
|
# 比较版本
|
@@ -166,6 +254,7 @@ def _check_pip_updates() -> bool:
|
|
166
254
|
|
167
255
|
# 检测是否使用uv
|
168
256
|
is_uv_env = False
|
257
|
+
uv_executable: Optional[str] = None
|
169
258
|
if in_venv:
|
170
259
|
if sys.platform == "win32":
|
171
260
|
uv_path = Path(sys.prefix) / "Scripts" / "uv.exe"
|
@@ -173,6 +262,7 @@ def _check_pip_updates() -> bool:
|
|
173
262
|
uv_path = Path(sys.prefix) / "bin" / "uv"
|
174
263
|
if uv_path.exists():
|
175
264
|
is_uv_env = True
|
265
|
+
uv_executable = str(uv_path)
|
176
266
|
|
177
267
|
# 检测是否安装了 RAG 特性(更精确)
|
178
268
|
from jarvis.jarvis_utils.utils import (
|
@@ -180,21 +270,60 @@ def _check_pip_updates() -> bool:
|
|
180
270
|
) # 延迟导入避免潜在循环依赖
|
181
271
|
rag_installed = _is_rag_installed()
|
182
272
|
|
183
|
-
#
|
273
|
+
# 更新命令
|
184
274
|
package_spec = (
|
185
275
|
"jarvis-ai-assistant[rag]" if rag_installed else "jarvis-ai-assistant"
|
186
276
|
)
|
187
|
-
if is_uv_env:
|
277
|
+
if is_uv_env and uv_executable:
|
278
|
+
cmd_list = [uv_executable, "pip", "install", "--upgrade", package_spec]
|
188
279
|
update_cmd = f"uv pip install --upgrade {package_spec}"
|
189
280
|
else:
|
281
|
+
cmd_list = [
|
282
|
+
sys.executable,
|
283
|
+
"-m",
|
284
|
+
"pip",
|
285
|
+
"install",
|
286
|
+
"--upgrade",
|
287
|
+
package_spec,
|
288
|
+
]
|
190
289
|
update_cmd = f"{sys.executable} -m pip install --upgrade {package_spec}"
|
191
290
|
|
192
|
-
|
291
|
+
# 自动尝试升级(失败时提供手动命令)
|
292
|
+
try:
|
293
|
+
PrettyOutput.print("正在自动更新 Jarvis,请稍候...", OutputType.INFO)
|
294
|
+
result = subprocess.run(
|
295
|
+
cmd_list,
|
296
|
+
capture_output=True,
|
297
|
+
text=True,
|
298
|
+
encoding="utf-8",
|
299
|
+
errors="replace",
|
300
|
+
timeout=600,
|
301
|
+
)
|
302
|
+
if result.returncode == 0:
|
303
|
+
PrettyOutput.print("更新成功,正在重启以应用新版本...", OutputType.SUCCESS)
|
304
|
+
# 更新检查日期,避免重复触发
|
305
|
+
last_check_file.write_text(today_str)
|
306
|
+
return True
|
307
|
+
else:
|
308
|
+
err = (result.stderr or result.stdout or "").strip()
|
309
|
+
if err:
|
310
|
+
PrettyOutput.print(
|
311
|
+
f"自动更新失败,错误信息(已截断): {err[:500]}",
|
312
|
+
OutputType.WARNING,
|
313
|
+
)
|
314
|
+
PrettyOutput.print(
|
315
|
+
f"请手动执行以下命令更新: {update_cmd}", OutputType.INFO
|
316
|
+
)
|
317
|
+
except Exception:
|
318
|
+
PrettyOutput.print("自动更新出现异常,已切换为手动更新方式。", OutputType.WARNING)
|
319
|
+
PrettyOutput.print(
|
320
|
+
f"请手动执行以下命令更新: {update_cmd}", OutputType.INFO
|
321
|
+
)
|
193
322
|
|
194
323
|
# 更新检查日期
|
195
324
|
last_check_file.write_text(today_str)
|
196
325
|
|
197
|
-
except Exception
|
326
|
+
except Exception:
|
198
327
|
# 静默处理错误,不影响正常使用
|
199
328
|
pass
|
200
329
|
|
@@ -225,7 +354,6 @@ def _show_usage_stats(welcome_str: str) -> None:
|
|
225
354
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
226
355
|
|
227
356
|
try:
|
228
|
-
from datetime import datetime
|
229
357
|
|
230
358
|
from rich.console import Console, Group
|
231
359
|
from rich.panel import Panel
|
@@ -709,7 +837,7 @@ def _interactive_config_setup(config_file_path: Path):
|
|
709
837
|
guide_lines = ["", "配置获取方法:"]
|
710
838
|
for key in required_keys:
|
711
839
|
if key in config_guide and config_guide[key]:
|
712
|
-
guide_lines.append(
|
840
|
+
guide_lines.append("")
|
713
841
|
guide_lines.append(f"{key} 获取方法:")
|
714
842
|
guide_lines.append(str(config_guide[key]))
|
715
843
|
PrettyOutput.print("\n".join(guide_lines), OutputType.INFO)
|
@@ -831,9 +959,6 @@ def load_config():
|
|
831
959
|
_load_and_process_config(str(config_file_path.parent), str(config_file_path))
|
832
960
|
|
833
961
|
|
834
|
-
from typing import Tuple
|
835
|
-
|
836
|
-
from typing import Tuple
|
837
962
|
|
838
963
|
|
839
964
|
def _load_config_file(config_file: str) -> Tuple[str, dict]:
|
@@ -1201,13 +1326,12 @@ def _collect_optional_config_interactively(
|
|
1201
1326
|
" 适用于您希望绕过检查并自行管理仓库状态的场景。"
|
1202
1327
|
)
|
1203
1328
|
|
1204
|
-
try:
|
1205
|
-
# 查找当前模式在选项中的索引
|
1206
|
-
default_index = choices.index(current_mode)
|
1207
|
-
except ValueError:
|
1208
|
-
default_index = 0 # 默认为第一个选项
|
1209
1329
|
|
1210
|
-
|
1330
|
+
|
1331
|
+
new_mode = get_choice(
|
1332
|
+
tip,
|
1333
|
+
choices,
|
1334
|
+
)
|
1211
1335
|
|
1212
1336
|
if new_mode == current_mode:
|
1213
1337
|
return False
|
@@ -1329,7 +1453,6 @@ def _load_and_process_config(jarvis_dir: str, config_file: str) -> None:
|
|
1329
1453
|
config_file: 配置文件路径
|
1330
1454
|
"""
|
1331
1455
|
from jarvis.jarvis_utils.input import user_confirm as get_yes_no
|
1332
|
-
from jarvis.jarvis_utils.input import get_single_line_input
|
1333
1456
|
|
1334
1457
|
try:
|
1335
1458
|
content, config_data = _load_config_file(config_file)
|
@@ -1533,7 +1656,7 @@ def _read_old_config_file(config_file):
|
|
1533
1656
|
)
|
1534
1657
|
set_global_env_data(config_data)
|
1535
1658
|
PrettyOutput.print(
|
1536
|
-
|
1659
|
+
"检测到旧格式配置文件,旧格式以后将不再支持,请尽快迁移到新格式",
|
1537
1660
|
OutputType.WARNING,
|
1538
1661
|
)
|
1539
1662
|
|
@@ -1558,7 +1681,10 @@ def while_success(func: Callable[[], Any], sleep_time: float = 0.1, max_retries:
|
|
1558
1681
|
except Exception:
|
1559
1682
|
retry_count += 1
|
1560
1683
|
if retry_count < max_retries:
|
1561
|
-
PrettyOutput.print(
|
1684
|
+
PrettyOutput.print(
|
1685
|
+
f"发生异常,重试中 ({retry_count}/{max_retries}),等待 {sleep_time}s...",
|
1686
|
+
OutputType.WARNING,
|
1687
|
+
)
|
1562
1688
|
time.sleep(sleep_time)
|
1563
1689
|
continue
|
1564
1690
|
return result
|
@@ -1587,7 +1713,10 @@ def while_true(func: Callable[[], bool], sleep_time: float = 0.1, max_retries: i
|
|
1587
1713
|
break
|
1588
1714
|
retry_count += 1
|
1589
1715
|
if retry_count < max_retries:
|
1590
|
-
PrettyOutput.print(
|
1716
|
+
PrettyOutput.print(
|
1717
|
+
f"返回空值,重试中 ({retry_count}/{max_retries}),等待 {sleep_time}s...",
|
1718
|
+
OutputType.WARNING,
|
1719
|
+
)
|
1591
1720
|
time.sleep(sleep_time)
|
1592
1721
|
return ret
|
1593
1722
|
|
@@ -1615,7 +1744,7 @@ def get_file_line_count(filename: str) -> int:
|
|
1615
1744
|
"""
|
1616
1745
|
try:
|
1617
1746
|
return len(open(filename, "r", encoding="utf-8", errors="ignore").readlines())
|
1618
|
-
except Exception
|
1747
|
+
except Exception:
|
1619
1748
|
return 0
|
1620
1749
|
|
1621
1750
|
|
@@ -1756,7 +1885,7 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
1756
1885
|
return
|
1757
1886
|
|
1758
1887
|
# 执行 git pull
|
1759
|
-
|
1888
|
+
subprocess.run(
|
1760
1889
|
["git", "pull"],
|
1761
1890
|
cwd=repo_path,
|
1762
1891
|
capture_output=True,
|
@@ -1806,7 +1935,7 @@ def daily_check_git_updates(repo_dirs: List[str], repo_type: str):
|
|
1806
1935
|
repo_dirs (List[str]): 需要检查的git仓库目录列表。
|
1807
1936
|
repo_type (str): 仓库的类型名称,例如 "工具" 或 "方法论",用于日志输出。
|
1808
1937
|
"""
|
1809
|
-
data_dir = Path(get_data_dir())
|
1938
|
+
data_dir = Path(str(get_data_dir()))
|
1810
1939
|
last_check_file = data_dir / f"{repo_type}_updates_last_check.txt"
|
1811
1940
|
should_check_for_updates = True
|
1812
1941
|
|
@@ -1,34 +1,36 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
3
|
-
jarvis/jarvis_agent/agent_manager.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=X2rzcykWOEzMfehTtOQUab3k08FJV8mLOoW-SHGrKMM,74
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=egfCOErLtZZ1uGSgFpEOFqR72XGEvAp_e06bgBya2Ww,43625
|
3
|
+
jarvis/jarvis_agent/agent_manager.py,sha256=qNcMy5Xc5ZT26JfczBg4b4D5udKVHSFsCFjlpbIdmPo,3076
|
4
4
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
|
5
5
|
jarvis/jarvis_agent/config.py,sha256=Ni1aTVzmdERJ89A1jsC21Tsys_9MM-TTx1w5XwxyEwA,3130
|
6
|
-
jarvis/jarvis_agent/config_editor.py,sha256=
|
6
|
+
jarvis/jarvis_agent/config_editor.py,sha256=hlb9EYxKWcR_qdW2O89CgNDdciR9Isi743JU_1gD8j4,1927
|
7
7
|
jarvis/jarvis_agent/edit_file_handler.py,sha256=5sFz84jqy2gpc0aLOre2bvz8_DitlBoWZs_cQwftWLw,11570
|
8
|
-
jarvis/jarvis_agent/event_bus.py,sha256
|
9
|
-
jarvis/jarvis_agent/
|
10
|
-
jarvis/jarvis_agent/
|
8
|
+
jarvis/jarvis_agent/event_bus.py,sha256=pRdfk7d0OG18K6yNfWlCvAh_dW5p9sBtT2Yc3jGmzgo,1519
|
9
|
+
jarvis/jarvis_agent/events.py,sha256=rmFQ37PasImCh7OCdCzNBvubk-kHwcUiYLgzmL0t0_4,3689
|
10
|
+
jarvis/jarvis_agent/file_methodology_manager.py,sha256=LnhgTx5xQXCBK8esjCkFbgFm9iEyFX7TryUlC40Kzpw,4428
|
11
|
+
jarvis/jarvis_agent/jarvis.py,sha256=IW3BlErR_B6UxreTdmD9tIMy0C3xb593LOtCUdFChQs,24368
|
11
12
|
jarvis/jarvis_agent/main.py,sha256=bFcwXWC6O05jQiXy6ED_bHjdjDo5VwV_i1BoBEAzgP0,3336
|
12
|
-
jarvis/jarvis_agent/memory_manager.py,sha256=
|
13
|
+
jarvis/jarvis_agent/memory_manager.py,sha256=WSyUffx9xTmkcj4QrSLEfsjI3sTMUwZmkkC9_N_gTjo,8042
|
13
14
|
jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
|
14
15
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
15
16
|
jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
|
16
17
|
jarvis/jarvis_agent/prompt_manager.py,sha256=_1qLBSA3yn4nT_N3X2npTpW40Cp-pMeyvnzu-pnG0iU,2720
|
17
|
-
jarvis/jarvis_agent/prompts.py,sha256=
|
18
|
-
jarvis/jarvis_agent/protocols.py,sha256=
|
19
|
-
jarvis/jarvis_agent/run_loop.py,sha256=
|
18
|
+
jarvis/jarvis_agent/prompts.py,sha256=CvbPYx_klEz6OQrxVReZAnC2uQNo53rWkkucmh30uKg,9531
|
19
|
+
jarvis/jarvis_agent/protocols.py,sha256=YFJaC9MHi7JfLzmvlyotJDjiCO4Z07XJXy1gKhVdUy4,956
|
20
|
+
jarvis/jarvis_agent/run_loop.py,sha256=_TLkup6nhLimJbxgKWnZxRoCTL_x1DxDX5s76q0ns8g,4418
|
20
21
|
jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
|
21
22
|
jarvis/jarvis_agent/share_manager.py,sha256=MF2RlomcgPxF8nVUk28DP6IRddZ_tot5l_YRvy0qXSQ,8726
|
22
|
-
jarvis/jarvis_agent/shell_input_handler.py,sha256=
|
23
|
-
jarvis/jarvis_agent/task_analyzer.py,sha256=
|
24
|
-
jarvis/jarvis_agent/task_manager.py,sha256=
|
23
|
+
jarvis/jarvis_agent/shell_input_handler.py,sha256=wiAPjB-9uTkcLszbO5dlOUwIfaeR39RgRcZhahIGqoA,2018
|
24
|
+
jarvis/jarvis_agent/task_analyzer.py,sha256=JXc-63hnTD7oSX-nIfRcgxqCMhh4fM4QYVc7C1gp--M,7813
|
25
|
+
jarvis/jarvis_agent/task_manager.py,sha256=lme_aN8vaF_a4Tvv2kaSEnWATy8RPSjogTxeLnEYZdg,6504
|
25
26
|
jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
|
26
27
|
jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
|
27
|
-
jarvis/jarvis_agent/user_interaction.py,sha256=
|
28
|
+
jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
|
29
|
+
jarvis/jarvis_agent/utils.py,sha256=ldgfuNTNu4JU7Y1LtystBl85OC6H3A4OMycg0XBt_Cs,1615
|
28
30
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
31
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=mt78h3VLAbTAjTHOwjxNDOllHqfiHwFcAfmvUjiJFQI,32227
|
30
32
|
jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
|
31
|
-
jarvis/jarvis_code_analysis/code_review.py,sha256=
|
33
|
+
jarvis/jarvis_code_analysis/code_review.py,sha256=Z0JsvyVPPHPm6rfo4fqaQr7CdZKIllo9jqStzV0i_-o,34470
|
32
34
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
33
35
|
jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
|
34
36
|
jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
|
@@ -53,83 +55,83 @@ jarvis/jarvis_data/config_schema.json,sha256=fXISAybgeJOmXHPK0j3XjBgA25mn6ZHz7Qq
|
|
53
55
|
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
54
56
|
jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
55
57
|
jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
|
56
|
-
jarvis/jarvis_git_utils/git_commiter.py,sha256=
|
58
|
+
jarvis/jarvis_git_utils/git_commiter.py,sha256=9JoQz6dhzYPyvLrbRBJmcLf28S8_lKFW-TmO-u-hFns,16357
|
57
59
|
jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
|
58
|
-
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=
|
59
|
-
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=
|
60
|
+
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=okbuSxmY2HrDoqcuvZv2UWDmDCrB5fb-FAeduYNBpdg,22831
|
61
|
+
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=sdVwHgBoXa95WeUTmFIq9ys3eRgEB5Psalfqq5FzMMI,11277
|
60
62
|
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=BenOeZGNHdUOJT5Z3cc5MhS6aOeKQgqXm1ED-BqsLCY,15511
|
61
63
|
jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
62
|
-
jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=
|
63
|
-
jarvis/jarvis_methodology/main.py,sha256=
|
64
|
-
jarvis/jarvis_multi_agent/__init__.py,sha256=
|
64
|
+
jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=CMFL46vvtpcTI6oS3CAlYteR6xAlwCkvVJmMT22uDRw,26295
|
65
|
+
jarvis/jarvis_methodology/main.py,sha256=uiNzk5b5O6xdvRhsOuD7ubxdd2tPcDsFFnvmes8uH8I,11370
|
66
|
+
jarvis/jarvis_multi_agent/__init__.py,sha256=OD3ZyuxPNPHaqjQqiKiW0HuB0DI_sdv41wFlCISHWIQ,6084
|
65
67
|
jarvis/jarvis_multi_agent/main.py,sha256=b9IThFMeUZCYSlgT-VT8r7xeBdrEE_zNT11awEc8IdY,1853
|
66
68
|
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
67
69
|
jarvis/jarvis_platform/ai8.py,sha256=g8JkqPGs9SEbqstNMCc5rCHO0QcPHX9LNvb7HMWwB-Q,11471
|
68
|
-
jarvis/jarvis_platform/base.py,sha256=
|
70
|
+
jarvis/jarvis_platform/base.py,sha256=u1XvfE83-S-3W_euMrMaaa8NdXeIHlo7VSxLBbN3K-Y,13504
|
69
71
|
jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
|
70
|
-
jarvis/jarvis_platform/kimi.py,sha256=
|
72
|
+
jarvis/jarvis_platform/kimi.py,sha256=KLsf9udAsPRMbQ2JkBeiAlXkupCBwdtMaJ-hpH4Jdkc,15711
|
71
73
|
jarvis/jarvis_platform/openai.py,sha256=0YSeDGHRSPQP2haEzFARx_aZH_d_UZ-HSCsJLh2hW5k,8037
|
72
|
-
jarvis/jarvis_platform/registry.py,sha256=
|
73
|
-
jarvis/jarvis_platform/tongyi.py,sha256=
|
74
|
-
jarvis/jarvis_platform/yuanbao.py,sha256=
|
74
|
+
jarvis/jarvis_platform/registry.py,sha256=YqaFM2LXcHvqMQrTEQ_cVo8V-wQ8HhOeSdC8DdjvC00,8045
|
75
|
+
jarvis/jarvis_platform/tongyi.py,sha256=QQHDn-kNcb_UH-B49lVIQTlHzYd_O8CFWN7SZqy38S4,23456
|
76
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=jlttNWq-Bq9JLxaI6MOsxKZaNEXF1EfVVB7mjtVcYMA,23954
|
75
77
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
76
78
|
jarvis/jarvis_platform_manager/main.py,sha256=yv7m8cNRBe4nk0Kui1w2PKTUr9Sb3wrQirvmyAUbr5U,20400
|
77
|
-
jarvis/jarvis_platform_manager/service.py,sha256=
|
79
|
+
jarvis/jarvis_platform_manager/service.py,sha256=kFIsFTwaMZ1ooQNFAwvUXjB7G2enbAqHExCdO3jskzQ,14892
|
78
80
|
jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
|
79
81
|
jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
|
80
|
-
jarvis/jarvis_rag/cli.py,sha256=
|
81
|
-
jarvis/jarvis_rag/embedding_manager.py,sha256=
|
82
|
-
jarvis/jarvis_rag/llm_interface.py,sha256=
|
82
|
+
jarvis/jarvis_rag/cli.py,sha256=dUtdxwUzOsIwhAdr_nLnRSw-8q4W7kw5lU_K6VDHzlE,17517
|
83
|
+
jarvis/jarvis_rag/embedding_manager.py,sha256=r-S12eW5nz3GJQgbk-7eQ9JVxxZ57-wLAQx_1zSl0po,10330
|
84
|
+
jarvis/jarvis_rag/llm_interface.py,sha256=ntZzJtq-74d8ljqm-_flHaFys_RHjMMZRCKcMdwZt-Y,4505
|
83
85
|
jarvis/jarvis_rag/query_rewriter.py,sha256=LGAWZ8kwH_dpquuYqc4QWC7IXmHX3SsnPSYMWOn-nDE,4072
|
84
86
|
jarvis/jarvis_rag/rag_pipeline.py,sha256=aaTuxiArtVaPemWeySApw64q204JeLNXpOEtq7Adn1I,13797
|
85
87
|
jarvis/jarvis_rag/reranker.py,sha256=7Azc3y5fngwfPKtzZ8tx6iGKNeqC8uDy8yo8VCyLyL4,2670
|
86
|
-
jarvis/jarvis_rag/retriever.py,sha256=
|
88
|
+
jarvis/jarvis_rag/retriever.py,sha256=J4jO0492yHEwxJz_Cp2WP3vGHRHKj56rDyWZQ2W0XdA,18374
|
87
89
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
-
jarvis/jarvis_smart_shell/main.py,sha256=
|
90
|
+
jarvis/jarvis_smart_shell/main.py,sha256=lUJPwLR9RlaaVv0lx3ojjjv5dELHOaindlsLDDkpssQ,14960
|
89
91
|
jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
|
90
|
-
jarvis/jarvis_stats/cli.py,sha256=
|
91
|
-
jarvis/jarvis_stats/stats.py,sha256=
|
92
|
-
jarvis/jarvis_stats/storage.py,sha256=
|
92
|
+
jarvis/jarvis_stats/cli.py,sha256=TsX4JQmEKjkFLkO_e81w7_6mXMin-7Mv_It_dols0q8,11477
|
93
|
+
jarvis/jarvis_stats/stats.py,sha256=_z7ZEZHGy8aLbcDJ0qTGrrl9M6bOix_-hveN2Af5GiI,25375
|
94
|
+
jarvis/jarvis_stats/storage.py,sha256=ztahlCf5ZaHizcJ3Kijmx6irTbzU_I9UEOgEwHZF84s,22084
|
93
95
|
jarvis/jarvis_stats/visualizer.py,sha256=ZIBmGELzs6c7qM01tQql1HF6eFKn6HDGVQfKXRUUIY0,8529
|
94
96
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
95
97
|
jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
|
96
98
|
jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
|
97
|
-
jarvis/jarvis_tools/clear_memory.py,sha256=
|
98
|
-
jarvis/jarvis_tools/edit_file.py,sha256=
|
99
|
-
jarvis/jarvis_tools/execute_script.py,sha256=
|
99
|
+
jarvis/jarvis_tools/clear_memory.py,sha256=8DOq6dHLemfKTJqu227PWBIp8Iu5K7EXwINzL8DYk8M,8205
|
100
|
+
jarvis/jarvis_tools/edit_file.py,sha256=a6iyeH2MroejGCoaNDkXwGbSfqFikKbh6tG6Woljvi8,7105
|
101
|
+
jarvis/jarvis_tools/execute_script.py,sha256=oDOMn8GcV6qKP4d0RFT6xbHGTazRmaOlp-h_e_Wj80c,6227
|
100
102
|
jarvis/jarvis_tools/file_analyzer.py,sha256=jzVb8fAJn3dWwpCiYH-Wuxva4kpHqBB2_V3x3mzY0Gs,4158
|
101
|
-
jarvis/jarvis_tools/generate_new_tool.py,sha256=
|
103
|
+
jarvis/jarvis_tools/generate_new_tool.py,sha256=KBx0uxpdmqqGuK-DjaNrepp-JCTFJbgBh02sfQsVeqw,7792
|
102
104
|
jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
|
103
105
|
jarvis/jarvis_tools/read_code.py,sha256=qeQZ_emyPI5RTFx4HSgLBtWSwh8V5chqMjxu2uKzmfY,6100
|
104
106
|
jarvis/jarvis_tools/read_webpage.py,sha256=YTmoalY8y-jdQuoj9IL6ZjXPOevUj2P_9arJngPhbUY,5317
|
105
|
-
jarvis/jarvis_tools/registry.py,sha256=
|
106
|
-
jarvis/jarvis_tools/retrieve_memory.py,sha256=
|
107
|
+
jarvis/jarvis_tools/registry.py,sha256=iUzHEia3ufWqfLqlBRJl5KwKCU_0EvqEEiO136NHvRs,32846
|
108
|
+
jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh58qZNZApKc,8624
|
107
109
|
jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
|
108
|
-
jarvis/jarvis_tools/save_memory.py,sha256=
|
109
|
-
jarvis/jarvis_tools/search_web.py,sha256=
|
110
|
-
jarvis/jarvis_tools/sub_agent.py,sha256=
|
111
|
-
jarvis/jarvis_tools/sub_code_agent.py,sha256=
|
112
|
-
jarvis/jarvis_tools/virtual_tty.py,sha256=
|
110
|
+
jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
|
111
|
+
jarvis/jarvis_tools/search_web.py,sha256=nkbmyIquGLl2JkgWP6pQ9dPcLlfQCuegwt_RKE0YWU0,6158
|
112
|
+
jarvis/jarvis_tools/sub_agent.py,sha256=kjMZBXQE3OUgm5eO9lNkOuBnugWQGZbCpVP0HNW5W2s,8905
|
113
|
+
jarvis/jarvis_tools/sub_code_agent.py,sha256=vVPcGKfgyhbZzl8vp2HHbgR1oQzC0TlS0G3THoZgU5Q,9453
|
114
|
+
jarvis/jarvis_tools/virtual_tty.py,sha256=L7-J00ARQvIa25T45Hhqg2eCBl6W2LFgqDlWMWf-7dk,25275
|
113
115
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
114
|
-
jarvis/jarvis_tools/cli/main.py,sha256=
|
116
|
+
jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVPxs,9323
|
115
117
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
116
|
-
jarvis/jarvis_utils/builtin_replace_map.py,sha256=
|
118
|
+
jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
|
117
119
|
jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
|
118
|
-
jarvis/jarvis_utils/config.py,sha256=
|
120
|
+
jarvis/jarvis_utils/config.py,sha256=Gvb58S0Ax2Y_FvHs02w6kd9ENJvAQyQa6hLPRcneQU4,20045
|
119
121
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
120
122
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
121
|
-
jarvis/jarvis_utils/fzf.py,sha256=
|
122
|
-
jarvis/jarvis_utils/git_utils.py,sha256=
|
123
|
-
jarvis/jarvis_utils/globals.py,sha256=
|
123
|
+
jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
|
124
|
+
jarvis/jarvis_utils/git_utils.py,sha256=Ed-11luixxuWKw4pT7Nq3vxU1G7DMBBya_CA7Xanzjk,23495
|
125
|
+
jarvis/jarvis_utils/globals.py,sha256=7Xvf9HY6jYJL4vSD1F1WCoxHkHCAyltJUYt4V9gGVU4,8865
|
124
126
|
jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
|
125
|
-
jarvis/jarvis_utils/input.py,sha256=
|
126
|
-
jarvis/jarvis_utils/methodology.py,sha256=
|
127
|
-
jarvis/jarvis_utils/output.py,sha256=
|
127
|
+
jarvis/jarvis_utils/input.py,sha256=EBdjPopkxVpG4JsnP9gtTSJ10u_scagujyKyOMhatLQ,36524
|
128
|
+
jarvis/jarvis_utils/methodology.py,sha256=z_renvRGgHiC-XTQPuN6rvrJ_ffHlwxK_b1BU_jmNAQ,12800
|
129
|
+
jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
|
128
130
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
129
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
130
|
-
jarvis_ai_assistant-0.3.
|
131
|
-
jarvis_ai_assistant-0.3.
|
132
|
-
jarvis_ai_assistant-0.3.
|
133
|
-
jarvis_ai_assistant-0.3.
|
134
|
-
jarvis_ai_assistant-0.3.
|
135
|
-
jarvis_ai_assistant-0.3.
|
131
|
+
jarvis/jarvis_utils/utils.py,sha256=mHX9KGCyAmxaghzxphGnmw_S7vKek7DfgxjfirsBxNY,70483
|
132
|
+
jarvis_ai_assistant-0.3.29.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
133
|
+
jarvis_ai_assistant-0.3.29.dist-info/METADATA,sha256=tiPkNoo2aWDFS7c1S4zExPPMy5GpW_509Xs6AMM9v0M,18752
|
134
|
+
jarvis_ai_assistant-0.3.29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
135
|
+
jarvis_ai_assistant-0.3.29.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
|
136
|
+
jarvis_ai_assistant-0.3.29.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
137
|
+
jarvis_ai_assistant-0.3.29.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.27.dist-info → jarvis_ai_assistant-0.3.29.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|