jarvis-ai-assistant 0.2.6__py3-none-any.whl → 0.2.8__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.
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import json
3
+ import time
3
4
  from datetime import datetime
4
5
  from pathlib import Path
5
6
  from typing import Any, Dict, List
@@ -15,6 +16,8 @@ class SaveMemoryTool:
15
16
  name = "save_memory"
16
17
  description = """保存信息到长短期记忆系统。
17
18
 
19
+ 支持批量保存多条记忆,可以同时保存不同类型的记忆。
20
+
18
21
  支持的记忆类型:
19
22
  - project_long_term: 项目长期记忆(与当前项目相关的信息)
20
23
  - global_long_term: 全局长期记忆(通用的信息、用户喜好、知识、方法等)
@@ -27,19 +30,36 @@ class SaveMemoryTool:
27
30
  parameters = {
28
31
  "type": "object",
29
32
  "properties": {
30
- "memory_type": {
31
- "type": "string",
32
- "enum": ["project_long_term", "global_long_term", "short_term"],
33
- "description": "记忆类型",
34
- },
35
- "tags": {
33
+ "memories": {
36
34
  "type": "array",
37
- "items": {"type": "string"},
38
- "description": "用于索引记忆的标签列表",
39
- },
40
- "content": {"type": "string", "description": "要保存的记忆内容"},
35
+ "items": {
36
+ "type": "object",
37
+ "properties": {
38
+ "memory_type": {
39
+ "type": "string",
40
+ "enum": [
41
+ "project_long_term",
42
+ "global_long_term",
43
+ "short_term",
44
+ ],
45
+ "description": "记忆类型",
46
+ },
47
+ "tags": {
48
+ "type": "array",
49
+ "items": {"type": "string"},
50
+ "description": "用于索引记忆的标签列表",
51
+ },
52
+ "content": {
53
+ "type": "string",
54
+ "description": "要保存的记忆内容",
55
+ },
56
+ },
57
+ "required": ["memory_type", "tags", "content"],
58
+ },
59
+ "description": "要保存的记忆列表",
60
+ }
41
61
  },
42
- "required": ["memory_type", "tags", "content"],
62
+ "required": ["memories"],
43
63
  }
44
64
 
45
65
  def __init__(self):
@@ -58,81 +78,122 @@ class SaveMemoryTool:
58
78
 
59
79
  def _generate_memory_id(self) -> str:
60
80
  """生成唯一的记忆ID"""
81
+ # 添加微秒级时间戳确保唯一性
82
+ time.sleep(0.001) # 确保不同记忆有不同的时间戳
61
83
  return datetime.now().strftime("%Y%m%d_%H%M%S_%f")
62
84
 
85
+ def _save_single_memory(self, memory_data: Dict[str, Any]) -> Dict[str, Any]:
86
+ """保存单条记忆"""
87
+ memory_type = memory_data["memory_type"]
88
+ tags = memory_data.get("tags", [])
89
+ content = memory_data.get("content", "")
90
+
91
+ # 生成记忆ID
92
+ memory_id = self._generate_memory_id()
93
+
94
+ # 创建记忆对象
95
+ memory_obj = {
96
+ "id": memory_id,
97
+ "type": memory_type,
98
+ "tags": tags,
99
+ "content": content,
100
+ "created_at": datetime.now().isoformat(),
101
+ "updated_at": datetime.now().isoformat(),
102
+ }
103
+
104
+ if memory_type == "short_term":
105
+ # 短期记忆保存到全局变量
106
+ add_short_term_memory(memory_obj)
107
+
108
+ result = {
109
+ "memory_id": memory_id,
110
+ "memory_type": memory_type,
111
+ "tags": tags,
112
+ "storage": "memory",
113
+ "message": f"短期记忆已成功保存到内存,ID: {memory_id}",
114
+ }
115
+ else:
116
+ # 长期记忆保存到文件
117
+ # 获取存储目录并确保存在
118
+ memory_dir = self._get_memory_dir(memory_type)
119
+ memory_dir.mkdir(parents=True, exist_ok=True)
120
+
121
+ # 保存记忆文件
122
+ memory_file = memory_dir / f"{memory_id}.json"
123
+ with open(memory_file, "w", encoding="utf-8") as f:
124
+ json.dump(memory_obj, f, ensure_ascii=False, indent=2)
125
+
126
+ result = {
127
+ "memory_id": memory_id,
128
+ "memory_type": memory_type,
129
+ "tags": tags,
130
+ "file_path": str(memory_file),
131
+ "message": f"记忆已成功保存,ID: {memory_id}",
132
+ }
133
+
134
+ return result
135
+
63
136
  def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
64
137
  """执行保存记忆操作"""
65
138
  try:
66
- memory_type = args["memory_type"]
67
- tags = args.get("tags", [])
68
- content = args.get("content", "")
139
+ memories = args.get("memories", [])
69
140
 
70
- # 生成记忆ID
71
- memory_id = self._generate_memory_id()
141
+ if not memories:
142
+ return {
143
+ "success": False,
144
+ "stdout": "",
145
+ "stderr": "没有提供要保存的记忆",
146
+ }
72
147
 
73
- # 创建记忆对象
74
- memory_data = {
75
- "id": memory_id,
76
- "type": memory_type,
77
- "tags": tags,
78
- "content": content,
79
- "created_at": datetime.now().isoformat(),
80
- "updated_at": datetime.now().isoformat(),
148
+ results = []
149
+ success_count = 0
150
+ failed_count = 0
151
+
152
+ # 保存每条记忆
153
+ for i, memory_data in enumerate(memories):
154
+ try:
155
+ result = self._save_single_memory(memory_data)
156
+ results.append(result)
157
+ success_count += 1
158
+
159
+ # 打印单条记忆保存信息
160
+ memory_type = memory_data["memory_type"]
161
+ tags = memory_data.get("tags", [])
162
+ PrettyOutput.print(
163
+ f"[{i+1}/{len(memories)}] {memory_type} 记忆已保存\n"
164
+ f"ID: {result['memory_id']}\n"
165
+ f"标签: {', '.join(tags)}",
166
+ OutputType.SUCCESS,
167
+ )
168
+ except Exception as e:
169
+ failed_count += 1
170
+ error_msg = f"保存第 {i+1} 条记忆失败: {str(e)}"
171
+ PrettyOutput.print(error_msg, OutputType.ERROR)
172
+ results.append(
173
+ {
174
+ "error": error_msg,
175
+ "memory_type": memory_data.get("memory_type", "unknown"),
176
+ "tags": memory_data.get("tags", []),
177
+ }
178
+ )
179
+
180
+ # 生成总结报告
181
+ PrettyOutput.print(
182
+ f"\n批量保存完成:成功 {success_count} 条,失败 {failed_count} 条",
183
+ OutputType.INFO,
184
+ )
185
+
186
+ # 构建返回结果
187
+ output = {
188
+ "total": len(memories),
189
+ "success": success_count,
190
+ "failed": failed_count,
191
+ "results": results,
81
192
  }
82
193
 
83
- if memory_type == "short_term":
84
- # 短期记忆保存到全局变量
85
- add_short_term_memory(memory_data)
86
-
87
- # 打印成功信息
88
- PrettyOutput.print(
89
- f"短期记忆已保存\n"
90
- f"ID: {memory_id}\n"
91
- f"类型: {memory_type}\n"
92
- f"标签: {', '.join(tags)}\n"
93
- f"存储位置: 内存(非持久化)",
94
- OutputType.SUCCESS,
95
- )
96
-
97
- result = {
98
- "memory_id": memory_id,
99
- "memory_type": memory_type,
100
- "tags": tags,
101
- "storage": "memory",
102
- "message": f"短期记忆已成功保存到内存,ID: {memory_id}",
103
- }
104
- else:
105
- # 长期记忆保存到文件
106
- # 获取存储目录并确保存在
107
- memory_dir = self._get_memory_dir(memory_type)
108
- memory_dir.mkdir(parents=True, exist_ok=True)
109
-
110
- # 保存记忆文件
111
- memory_file = memory_dir / f"{memory_id}.json"
112
- with open(memory_file, "w", encoding="utf-8") as f:
113
- json.dump(memory_data, f, ensure_ascii=False, indent=2)
114
-
115
- # 打印成功信息
116
- PrettyOutput.print(
117
- f"记忆已保存\n"
118
- f"ID: {memory_id}\n"
119
- f"类型: {memory_type}\n"
120
- f"标签: {', '.join(tags)}\n"
121
- f"位置: {memory_file}",
122
- OutputType.SUCCESS,
123
- )
124
-
125
- result = {
126
- "memory_id": memory_id,
127
- "memory_type": memory_type,
128
- "tags": tags,
129
- "file_path": str(memory_file),
130
- "message": f"记忆已成功保存,ID: {memory_id}",
131
- }
132
-
133
194
  return {
134
195
  "success": True,
135
- "stdout": json.dumps(result, ensure_ascii=False, indent=2),
196
+ "stdout": json.dumps(output, ensure_ascii=False, indent=2),
136
197
  "stderr": "",
137
198
  }
138
199
 
@@ -309,6 +309,26 @@ def get_methodology_dirs() -> List[str]:
309
309
  return GLOBAL_CONFIG_DATA.get("JARVIS_METHODOLOGY_DIRS", [])
310
310
 
311
311
 
312
+ def get_central_methodology_repo() -> str:
313
+ """
314
+ 获取中心方法论Git仓库地址。
315
+
316
+ 返回:
317
+ str: 中心方法论Git仓库地址,如果未配置则返回空字符串
318
+ """
319
+ return GLOBAL_CONFIG_DATA.get("JARVIS_CENTRAL_METHODOLOGY_REPO", "")
320
+
321
+
322
+ def get_central_tool_repo() -> str:
323
+ """
324
+ 获取中心工具Git仓库地址。
325
+
326
+ 返回:
327
+ str: 中心工具Git仓库地址,如果未配置则返回空字符串
328
+ """
329
+ return GLOBAL_CONFIG_DATA.get("JARVIS_CENTRAL_TOOL_REPO", "")
330
+
331
+
312
332
  def is_print_prompt() -> bool:
313
333
  """
314
334
  获取是否打印提示。
@@ -216,9 +216,11 @@ def _get_multiline_input_internal(tip: str) -> str:
216
216
  @bindings.add("enter")
217
217
  def _(event):
218
218
  if event.current_buffer.complete_state:
219
- event.current_buffer.apply_completion(
220
- event.current_buffer.complete_state.current_completion
221
- )
219
+ completion = event.current_buffer.complete_state.current_completion
220
+ if completion:
221
+ event.current_buffer.apply_completion(completion)
222
+ else:
223
+ event.current_buffer.insert_text("\n")
222
224
  else:
223
225
  event.current_buffer.insert_text("\n")
224
226
 
@@ -15,11 +15,16 @@ from typing import Any, Dict, List, Optional
15
15
 
16
16
  from jarvis.jarvis_platform.base import BasePlatform
17
17
  from jarvis.jarvis_platform.registry import PlatformRegistry
18
- from jarvis.jarvis_utils.config import get_data_dir, get_methodology_dirs
18
+ from jarvis.jarvis_utils.config import (
19
+ get_data_dir,
20
+ get_methodology_dirs,
21
+ get_central_methodology_repo,
22
+ )
19
23
  from jarvis.jarvis_utils.globals import get_agent, current_agent_name
20
24
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
21
25
  from jarvis.jarvis_utils.utils import is_context_overflow, daily_check_git_updates
22
26
 
27
+
23
28
  def _get_methodology_directory() -> str:
24
29
  """
25
30
  获取方法论目录路径,如果不存在则创建
@@ -46,6 +51,29 @@ def _load_all_methodologies() -> Dict[str, str]:
46
51
  all_methodologies = {}
47
52
  methodology_dirs = [_get_methodology_directory()] + get_methodology_dirs()
48
53
 
54
+ # 如果配置了中心方法论仓库,将其添加到加载路径
55
+ central_repo = get_central_methodology_repo()
56
+ if central_repo:
57
+ # 中心方法论仓库存储在数据目录下的特定位置
58
+ central_repo_path = os.path.join(get_data_dir(), "central_methodology_repo")
59
+ methodology_dirs.append(central_repo_path)
60
+
61
+ # 确保中心方法论仓库被克隆/更新
62
+ if not os.path.exists(central_repo_path):
63
+ try:
64
+ import subprocess
65
+
66
+ PrettyOutput.print(
67
+ f"正在克隆中心方法论仓库: {central_repo}", OutputType.INFO
68
+ )
69
+ subprocess.run(
70
+ ["git", "clone", central_repo, central_repo_path], check=True
71
+ )
72
+ except Exception as e:
73
+ PrettyOutput.print(
74
+ f"克隆中心方法论仓库失败: {str(e)}", OutputType.ERROR
75
+ )
76
+
49
77
  # --- 全局每日更新检查 ---
50
78
  daily_check_git_updates(methodology_dirs, "methodologies")
51
79
 
@@ -53,7 +81,9 @@ def _load_all_methodologies() -> Dict[str, str]:
53
81
 
54
82
  for directory in set(methodology_dirs): # Use set to avoid duplicates
55
83
  if not os.path.isdir(directory):
56
- PrettyOutput.print(f"警告: 方法论目录不存在或不是一个目录: {directory}", OutputType.WARNING)
84
+ PrettyOutput.print(
85
+ f"警告: 方法论目录不存在或不是一个目录: {directory}", OutputType.WARNING
86
+ )
57
87
  continue
58
88
 
59
89
  for filepath in glob.glob(os.path.join(directory, "*.json")):
@@ -64,7 +94,7 @@ def _load_all_methodologies() -> Dict[str, str]:
64
94
  content = methodology.get("content", "")
65
95
  if problem_type and content:
66
96
  if problem_type in all_methodologies:
67
- PrettyOutput.print(f"警告: 方法论 '{problem_type}' 被 '{filepath}' 覆盖。", OutputType.WARNING)
97
+ pass
68
98
  all_methodologies[problem_type] = content
69
99
  except Exception as e:
70
100
  filename = os.path.basename(filepath)
@@ -211,8 +241,9 @@ def load_methodology(user_input: str, tool_registery: Optional[Any] = None) -> s
211
241
 
212
242
  # 从响应中提取<NUM>标签内的内容
213
243
  import re
214
- num_match = re.search(r'<NUM>(.*?)</NUM>', response, re.DOTALL)
215
-
244
+
245
+ num_match = re.search(r"<NUM>(.*?)</NUM>", response, re.DOTALL)
246
+
216
247
  if not num_match:
217
248
  # 如果没有找到<NUM>标签,尝试直接解析响应
218
249
  selected_indices_str = response
@@ -226,7 +257,11 @@ def load_methodology(user_input: str, tool_registery: Optional[Any] = None) -> s
226
257
  selected_methodologies = {}
227
258
  try:
228
259
  if selected_indices_str:
229
- indices = [int(idx.strip()) for idx in selected_indices_str.split(",") if idx.strip().isdigit()]
260
+ indices = [
261
+ int(idx.strip())
262
+ for idx in selected_indices_str.split(",")
263
+ if idx.strip().isdigit()
264
+ ]
230
265
  for idx in indices:
231
266
  if 1 <= idx <= len(methodology_titles):
232
267
  title = methodology_titles[idx - 1]
@@ -204,7 +204,7 @@ class PrettyOutput:
204
204
  color="red", frame=True, bgcolor="#2b1c1c", meta={"icon": "❌"}
205
205
  ),
206
206
  OutputType.INFO: RichStyle(
207
- color="gold1", frame=True, bgcolor="#2b2b1c", meta={"icon": "ℹ️"}
207
+ color="bright_cyan", frame=True, bgcolor="#2b2b1c", meta={"icon": "ℹ️"}
208
208
  ),
209
209
  OutputType.PLANNING: RichStyle(
210
210
  color="purple",
@@ -330,11 +330,18 @@ def _show_usage_stats() -> None:
330
330
  if total_changes > 0:
331
331
  parts.append(f"代码修改 {total_changes:,} 次")
332
332
  if total_lines_modified > 0:
333
- parts.append(f"代码行数 {total_lines_modified:,} 行")
333
+ parts.append(f"修改代码行数 {total_lines_modified:,} 行")
334
334
 
335
335
  if parts:
336
336
  summary_content.append(f"📈 总计: {', '.join(parts)}")
337
337
 
338
+ # 添加代码采纳率显示
339
+ adoption_metrics = categorized_stats["adoption"]["metrics"]
340
+ if "adoption_rate" in adoption_metrics:
341
+ summary_content.append(
342
+ f"✅ 代码采纳率: {adoption_metrics['adoption_rate']}"
343
+ )
344
+
338
345
  # 计算节省的时间
339
346
  time_saved_seconds = 0
340
347
  tool_stats = categorized_stats["tool"]["metrics"]
@@ -946,6 +953,25 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
946
953
  )
947
954
  before_hash = before_hash_result.stdout.strip()
948
955
 
956
+ # 检查是否是空仓库
957
+ ls_remote_result = subprocess.run(
958
+ ["git", "ls-remote", "--heads", "origin"],
959
+ cwd=repo_path,
960
+ capture_output=True,
961
+ text=True,
962
+ encoding="utf-8",
963
+ errors="replace",
964
+ check=True,
965
+ timeout=10,
966
+ )
967
+
968
+ if not ls_remote_result.stdout.strip():
969
+ PrettyOutput.print(
970
+ f"{repo_type}库 '{repo_path.name}' 的远程仓库是空的,跳过更新。",
971
+ OutputType.INFO,
972
+ )
973
+ return
974
+
949
975
  # 执行 git pull
950
976
  pull_result = subprocess.run(
951
977
  ["git", "pull"],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.2.6
3
+ Version: 0.2.8
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,8 +1,8 @@
1
- jarvis/__init__.py,sha256=LeVLn20oHpcp1TpDsXJ8P6m_z_MKXTzTQvPUv3CRNK4,73
2
- jarvis/jarvis_agent/__init__.py,sha256=nhJ9QOdFQJHpdLsFO0_JNH0XJHvXxMDHDTP4b7-OSnA,26370
1
+ jarvis/__init__.py,sha256=rn_98P3W66_HZr-g2PfCqi31zz80PtoPiaPvZCINUKo,73
2
+ jarvis/jarvis_agent/__init__.py,sha256=feyq1jxhgzAy8y0X7nNidmFTm8gkpJdhikzmphZNU7M,26945
3
3
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
4
4
  jarvis/jarvis_agent/edit_file_handler.py,sha256=w-byNJ4TN_SlV3djjfFC7OksySOFGrM8ku49w662dzc,11854
5
- jarvis/jarvis_agent/jarvis.py,sha256=L2sI-Y7gxqH6M4E4F2GlNoZcxxvz_f72rxvjh7bxuZE,8443
5
+ jarvis/jarvis_agent/jarvis.py,sha256=4CD18QQHL-7XrqrWJDhN1mAxyO4Gk64dd-NUJs3Gt6g,27175
6
6
  jarvis/jarvis_agent/main.py,sha256=56pLVy6v-3ZdyPCcWXdRkgbjmYsoIfC7zrA6B7sYivU,3334
7
7
  jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
8
8
  jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
@@ -12,7 +12,7 @@ jarvis/jarvis_agent/session_manager.py,sha256=DnvI9rWkVmkyO1XfKZyo9lTn4ajg4ccwzE
12
12
  jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
13
13
  jarvis/jarvis_agent/tool_executor.py,sha256=nIq-sPNgrtimtM-IHpN09cWmId8jDzWRdCFoRzXnnoo,1721
14
14
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- jarvis/jarvis_code_agent/code_agent.py,sha256=C761NUsz3W_SLJLEj6Y_HB9ox-joOlnJQ9CsfE88IFk,29100
15
+ jarvis/jarvis_code_agent/code_agent.py,sha256=t1i9XPihW7xrsYn6I86_QvCocVgHgIg0ORQ-ADcheeM,29132
16
16
  jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
17
17
  jarvis/jarvis_code_analysis/code_review.py,sha256=TMov1pqDe1bg0vM1ndnYeW9ejHrRN_jMroo3T4L9yag,32368
18
18
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
@@ -35,7 +35,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
35
35
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
36
36
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
37
37
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
38
- jarvis/jarvis_data/config_schema.json,sha256=87zzs16tQOzbkkg1y1j1zQHYSw1Awsl8grYa02DwNs8,10116
38
+ jarvis/jarvis_data/config_schema.json,sha256=CPGIKXei1xgFkkGKXzFNy_LxmZCFtbd_8cHv22A9zQ0,10523
39
39
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
40
40
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  jarvis/jarvis_git_squash/main.py,sha256=6PECdAbTbrsJBRLK1pXBh4hdJ_LADh-XXSic1xJi97E,2255
@@ -73,11 +73,12 @@ jarvis/jarvis_smart_shell/main.py,sha256=ReCC9bWPlgl84ylI0uvdzlE3J6fS0XzFSLOpQQy
73
73
  jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
74
74
  jarvis/jarvis_stats/cli.py,sha256=KqLH-9Kd_YlBJSke3QXY90XnFmiH2kYkRacL8ygtSsM,12649
75
75
  jarvis/jarvis_stats/stats.py,sha256=qLyOJvWAv0fgV7oohAUSQ2W2E1Hr4wWgEQXDOiI-4Cg,17674
76
- jarvis/jarvis_stats/storage.py,sha256=SI6PwmXFy-Ryot-XQwZGHbTOuyKnxCwrN6hpuD_P5wg,12687
76
+ jarvis/jarvis_stats/storage.py,sha256=0hs-TkmvWavsf6J2LLOLXyyZzVK8g77jecRnt89MzYE,12724
77
77
  jarvis/jarvis_stats/visualizer.py,sha256=ZIBmGELzs6c7qM01tQql1HF6eFKn6HDGVQfKXRUUIY0,8529
78
78
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
80
80
  jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
81
+ jarvis/jarvis_tools/clear_memory.py,sha256=HQMK70UJhhDgPPHozGaTpYizzQblUzYRwPbvD1z3z6o,8730
81
82
  jarvis/jarvis_tools/edit_file.py,sha256=hM345E9rxS-EkqCZpwwizL6fmPdTadtB798tEO5Ce3g,10417
82
83
  jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
83
84
  jarvis/jarvis_tools/file_analyzer.py,sha256=aVe1jBSp0YmlypihxrGADJpYrU_7CxDETxGUNySuSlI,4044
@@ -85,30 +86,30 @@ jarvis/jarvis_tools/generate_new_tool.py,sha256=uaWKlDMGjetvvwKTj0_AVTdmd14IktRb
85
86
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
86
87
  jarvis/jarvis_tools/read_code.py,sha256=EnI-R-5HyIQYhMD391nZWXHIuHHBF-OJIRE0QpLcPX4,6417
87
88
  jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
88
- jarvis/jarvis_tools/registry.py,sha256=8qhZgmmGIXJsYwtpsp_Ls8woT0qmBrthF8lIuQqOu7c,28614
89
- jarvis/jarvis_tools/retrieve_memory.py,sha256=CKmNym5FxHjgdc0my4IlsJ3TB3E2m0aCNFSRWjH6fKs,8221
89
+ jarvis/jarvis_tools/registry.py,sha256=RBQ6Z3UVv4R8dlM8EcGWtWV53C34fOSwXMBJasWv0tk,29781
90
+ jarvis/jarvis_tools/retrieve_memory.py,sha256=zItXPSMGzaPyH-4p_CP3z24fBYFnCK3OQJctgVunZMI,8288
90
91
  jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
91
- jarvis/jarvis_tools/save_memory.py,sha256=4KRJWiyeyaIfdjeCAflPrxJ5ZXA4gUL3tv9h6d6sFKc,5309
92
+ jarvis/jarvis_tools/save_memory.py,sha256=DjeFb38OtK9Y_RpWYHz8vL72JdauXZTlc_Y0FUQBtiM,7486
92
93
  jarvis/jarvis_tools/search_web.py,sha256=zh6EYLQPIQneoz27Hheh-fifMeMNhrTVldXKMSsMz2Y,5801
93
94
  jarvis/jarvis_tools/virtual_tty.py,sha256=LTsg1PlsPvgaLShUaxpAKwTpyjXRr0l0qSREI7Q-fBc,26349
94
95
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
96
  jarvis/jarvis_tools/cli/main.py,sha256=GsfZJ4OS4Hvxh0H2XiLkgbzm-ajBsb4c0LyjuIAAatE,7718
96
97
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
97
98
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
98
- jarvis/jarvis_utils/config.py,sha256=-ZgqIkzsp8VP5qsXke9XAGuwtAB9XlOAo_k4L6jhcrE,12904
99
+ jarvis/jarvis_utils/config.py,sha256=7LsdGsI2v6XAwPXBfeG_fk3bRJ1fEUTqhybVyw4SVhw,13432
99
100
  jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
100
101
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
101
102
  jarvis/jarvis_utils/git_utils.py,sha256=dkC0HcUdm_rF5vXNoLByne3mGykZEviD3Lo_SYbwROU,21667
102
103
  jarvis/jarvis_utils/globals.py,sha256=lpS1lmWRnLgqOeoyhZlktdZK9SK8YMekc6XWamho0Jw,8561
103
104
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
104
- jarvis/jarvis_utils/input.py,sha256=g0Xa1TNZHxLaYduREV_Wc55iqHD6djN73YFJbR83gUg,9488
105
- jarvis/jarvis_utils/methodology.py,sha256=EqS9feS3HHgNcKYoGs-Dkhp4pGwylwXt96r2J61cxUo,9223
106
- jarvis/jarvis_utils/output.py,sha256=E_J_RYXtkOgRiDSHCRE9QPHY8WQmmhIotQtIQru8GZA,10888
105
+ jarvis/jarvis_utils/input.py,sha256=KMAbSubWHo2z-gACf5PyQSGozJKXQby-fwcfzobJld0,9598
106
+ jarvis/jarvis_utils/methodology.py,sha256=I8BTBijpApzUtRG20_Wu1Vuv0I0OoYOzshec6CMOPX8,10231
107
+ jarvis/jarvis_utils/output.py,sha256=QRLlKObQKT0KuRSeZRqYb7NlTQvsd1oZXZ41WxeWEuU,10894
107
108
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
108
- jarvis/jarvis_utils/utils.py,sha256=b7t2BsoPEU_3ZhippcQW9qwQD0PO-sGkjjtZ4DvwI2s,37056
109
- jarvis_ai_assistant-0.2.6.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
110
- jarvis_ai_assistant-0.2.6.dist-info/METADATA,sha256=4XIqrWX0_tWmBC88XLFVlZGa2nzIbijiUxVW4g0y20I,16807
111
- jarvis_ai_assistant-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
112
- jarvis_ai_assistant-0.2.6.dist-info/entry_points.txt,sha256=8cwi1VxZGU5UeSZMFiH-jG6NK95Asjukj5SBLBrGiGo,1257
113
- jarvis_ai_assistant-0.2.6.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
114
- jarvis_ai_assistant-0.2.6.dist-info/RECORD,,
109
+ jarvis/jarvis_utils/utils.py,sha256=oGCGQ6BaeHAywLwHagPQTm-Q6y_gabATof-3NlDZfik,37970
110
+ jarvis_ai_assistant-0.2.8.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
111
+ jarvis_ai_assistant-0.2.8.dist-info/METADATA,sha256=jTrkkv5Aq35ijhskPLJOaB7pcbOMWEXeXvTyfGxYPbE,16807
112
+ jarvis_ai_assistant-0.2.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
113
+ jarvis_ai_assistant-0.2.8.dist-info/entry_points.txt,sha256=8cwi1VxZGU5UeSZMFiH-jG6NK95Asjukj5SBLBrGiGo,1257
114
+ jarvis_ai_assistant-0.2.8.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
115
+ jarvis_ai_assistant-0.2.8.dist-info/RECORD,,