jarvis-ai-assistant 0.2.5__py3-none-any.whl → 0.2.7__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 +78 -9
- jarvis/jarvis_agent/edit_file_handler.py +4 -4
- jarvis/jarvis_agent/jarvis.py +239 -7
- jarvis/jarvis_code_agent/code_agent.py +11 -11
- jarvis/jarvis_data/config_schema.json +5 -0
- jarvis/jarvis_multi_agent/main.py +1 -0
- jarvis/jarvis_stats/storage.py +2 -2
- jarvis/jarvis_tools/clear_memory.py +252 -0
- jarvis/jarvis_tools/retrieve_memory.py +212 -0
- jarvis/jarvis_tools/save_memory.py +203 -0
- jarvis/jarvis_utils/config.py +10 -0
- jarvis/jarvis_utils/globals.py +120 -1
- jarvis/jarvis_utils/input.py +5 -3
- jarvis/jarvis_utils/methodology.py +41 -6
- jarvis/jarvis_utils/output.py +1 -1
- jarvis/jarvis_utils/utils.py +59 -41
- {jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/RECORD +23 -20
- {jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/top_level.txt +0 -0
jarvis/jarvis_utils/globals.py
CHANGED
@@ -10,11 +10,16 @@
|
|
10
10
|
import os
|
11
11
|
|
12
12
|
# 全局变量:保存消息历史
|
13
|
-
from typing import Any, Dict, Set, List
|
13
|
+
from typing import Any, Dict, Set, List, Optional
|
14
|
+
from datetime import datetime
|
14
15
|
|
15
16
|
message_history: List[str] = []
|
16
17
|
MAX_HISTORY_SIZE = 50
|
17
18
|
|
19
|
+
# 短期记忆存储
|
20
|
+
short_term_memories: List[Dict[str, Any]] = []
|
21
|
+
MAX_SHORT_TERM_MEMORIES = 100
|
22
|
+
|
18
23
|
import colorama
|
19
24
|
from rich.console import Console
|
20
25
|
from rich.theme import Theme
|
@@ -207,3 +212,117 @@ def get_message_history() -> List[str]:
|
|
207
212
|
"""
|
208
213
|
global message_history
|
209
214
|
return message_history
|
215
|
+
|
216
|
+
|
217
|
+
def add_short_term_memory(memory_data: Dict[str, Any]) -> None:
|
218
|
+
"""
|
219
|
+
添加短期记忆到全局存储。
|
220
|
+
|
221
|
+
参数:
|
222
|
+
memory_data: 包含记忆信息的字典
|
223
|
+
"""
|
224
|
+
global short_term_memories
|
225
|
+
short_term_memories.append(memory_data)
|
226
|
+
# 如果超过最大数量,删除最旧的记忆
|
227
|
+
if len(short_term_memories) > MAX_SHORT_TERM_MEMORIES:
|
228
|
+
short_term_memories.pop(0)
|
229
|
+
|
230
|
+
|
231
|
+
def get_short_term_memories(tags: Optional[List[str]] = None) -> List[Dict[str, Any]]:
|
232
|
+
"""
|
233
|
+
获取短期记忆,可选择按标签过滤。
|
234
|
+
|
235
|
+
参数:
|
236
|
+
tags: 用于过滤的标签列表(可选)
|
237
|
+
|
238
|
+
返回:
|
239
|
+
List[Dict[str, Any]]: 符合条件的短期记忆列表
|
240
|
+
"""
|
241
|
+
global short_term_memories
|
242
|
+
if not tags:
|
243
|
+
return short_term_memories.copy()
|
244
|
+
|
245
|
+
# 按标签过滤
|
246
|
+
filtered_memories = []
|
247
|
+
for memory in short_term_memories:
|
248
|
+
memory_tags = memory.get("tags", [])
|
249
|
+
if any(tag in memory_tags for tag in tags):
|
250
|
+
filtered_memories.append(memory)
|
251
|
+
|
252
|
+
return filtered_memories
|
253
|
+
|
254
|
+
|
255
|
+
def clear_short_term_memories() -> None:
|
256
|
+
"""
|
257
|
+
清空所有短期记忆。
|
258
|
+
"""
|
259
|
+
global short_term_memories
|
260
|
+
short_term_memories.clear()
|
261
|
+
|
262
|
+
|
263
|
+
def get_all_memory_tags() -> Dict[str, List[str]]:
|
264
|
+
"""
|
265
|
+
获取所有记忆类型中的标签集合。
|
266
|
+
每个类型最多返回200个标签,超过时随机提取。
|
267
|
+
|
268
|
+
返回:
|
269
|
+
Dict[str, List[str]]: 按记忆类型分组的标签列表
|
270
|
+
"""
|
271
|
+
from pathlib import Path
|
272
|
+
import json
|
273
|
+
import random
|
274
|
+
from jarvis.jarvis_utils.config import get_data_dir
|
275
|
+
|
276
|
+
tags_by_type = {
|
277
|
+
"short_term": [],
|
278
|
+
"project_long_term": [],
|
279
|
+
"global_long_term": []
|
280
|
+
}
|
281
|
+
|
282
|
+
MAX_TAGS_PER_TYPE = 200
|
283
|
+
|
284
|
+
# 获取短期记忆标签
|
285
|
+
short_term_tags = set()
|
286
|
+
for memory in short_term_memories:
|
287
|
+
short_term_tags.update(memory.get("tags", []))
|
288
|
+
short_term_tags_list = sorted(list(short_term_tags))
|
289
|
+
if len(short_term_tags_list) > MAX_TAGS_PER_TYPE:
|
290
|
+
tags_by_type["short_term"] = sorted(random.sample(short_term_tags_list, MAX_TAGS_PER_TYPE))
|
291
|
+
else:
|
292
|
+
tags_by_type["short_term"] = short_term_tags_list
|
293
|
+
|
294
|
+
# 获取项目长期记忆标签
|
295
|
+
project_memory_dir = Path(".jarvis/memory")
|
296
|
+
if project_memory_dir.exists():
|
297
|
+
project_tags = set()
|
298
|
+
for memory_file in project_memory_dir.glob("*.json"):
|
299
|
+
try:
|
300
|
+
with open(memory_file, "r", encoding="utf-8") as f:
|
301
|
+
memory_data = json.load(f)
|
302
|
+
project_tags.update(memory_data.get("tags", []))
|
303
|
+
except Exception:
|
304
|
+
pass
|
305
|
+
project_tags_list = sorted(list(project_tags))
|
306
|
+
if len(project_tags_list) > MAX_TAGS_PER_TYPE:
|
307
|
+
tags_by_type["project_long_term"] = sorted(random.sample(project_tags_list, MAX_TAGS_PER_TYPE))
|
308
|
+
else:
|
309
|
+
tags_by_type["project_long_term"] = project_tags_list
|
310
|
+
|
311
|
+
# 获取全局长期记忆标签
|
312
|
+
global_memory_dir = Path(get_data_dir()) / "memory" / "global_long_term"
|
313
|
+
if global_memory_dir.exists():
|
314
|
+
global_tags = set()
|
315
|
+
for memory_file in global_memory_dir.glob("*.json"):
|
316
|
+
try:
|
317
|
+
with open(memory_file, "r", encoding="utf-8") as f:
|
318
|
+
memory_data = json.load(f)
|
319
|
+
global_tags.update(memory_data.get("tags", []))
|
320
|
+
except Exception:
|
321
|
+
pass
|
322
|
+
global_tags_list = sorted(list(global_tags))
|
323
|
+
if len(global_tags_list) > MAX_TAGS_PER_TYPE:
|
324
|
+
tags_by_type["global_long_term"] = sorted(random.sample(global_tags_list, MAX_TAGS_PER_TYPE))
|
325
|
+
else:
|
326
|
+
tags_by_type["global_long_term"] = global_tags_list
|
327
|
+
|
328
|
+
return tags_by_type
|
jarvis/jarvis_utils/input.py
CHANGED
@@ -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.
|
220
|
-
|
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
|
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(
|
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
|
-
|
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
|
-
|
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 = [
|
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]
|
jarvis/jarvis_utils/output.py
CHANGED
@@ -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="
|
207
|
+
color="bright_cyan", frame=True, bgcolor="#2b2b1c", meta={"icon": "ℹ️"}
|
208
208
|
),
|
209
209
|
OutputType.PLANNING: RichStyle(
|
210
210
|
color="purple",
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -30,6 +30,35 @@ from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
|
30
30
|
|
31
31
|
g_config_file = None
|
32
32
|
|
33
|
+
COMMAND_MAPPING = {
|
34
|
+
# jarvis主命令
|
35
|
+
"jvs": "jarvis",
|
36
|
+
# 代码代理
|
37
|
+
"jca": "jarvis-code-agent",
|
38
|
+
# 智能shell
|
39
|
+
"jss": "jarvis-smart-shell",
|
40
|
+
# 平台管理
|
41
|
+
"jpm": "jarvis-platform-manager",
|
42
|
+
# Git提交
|
43
|
+
"jgc": "jarvis-git-commit",
|
44
|
+
# 代码审查
|
45
|
+
"jcr": "jarvis-code-review",
|
46
|
+
# Git压缩
|
47
|
+
"jgs": "jarvis-git-squash",
|
48
|
+
# 多代理
|
49
|
+
"jma": "jarvis-multi-agent",
|
50
|
+
# 代理
|
51
|
+
"ja": "jarvis-agent",
|
52
|
+
# 工具
|
53
|
+
"jt": "jarvis-tool",
|
54
|
+
# 方法论
|
55
|
+
"jm": "jarvis-methodology",
|
56
|
+
# RAG
|
57
|
+
"jrg": "jarvis-rag",
|
58
|
+
# 统计
|
59
|
+
"jst": "jarvis-stats",
|
60
|
+
}
|
61
|
+
|
33
62
|
|
34
63
|
def _setup_signal_handler() -> None:
|
35
64
|
"""设置SIGINT信号处理函数"""
|
@@ -149,6 +178,15 @@ def _show_usage_stats() -> None:
|
|
149
178
|
elif group == "command":
|
150
179
|
categorized_stats["command"]["metrics"][metric] = int(total)
|
151
180
|
|
181
|
+
# 合并长短命令的历史统计数据
|
182
|
+
command_stats = categorized_stats["command"]["metrics"]
|
183
|
+
if command_stats:
|
184
|
+
merged_stats: Dict[str, int] = {}
|
185
|
+
for metric, count in command_stats.items():
|
186
|
+
long_command = COMMAND_MAPPING.get(metric, metric)
|
187
|
+
merged_stats[long_command] = merged_stats.get(long_command, 0) + count
|
188
|
+
categorized_stats["command"]["metrics"] = merged_stats
|
189
|
+
|
152
190
|
# 计算采纳率并添加到统计中
|
153
191
|
commit_stats = categorized_stats["commit"]["metrics"]
|
154
192
|
# 尝试多种可能的指标名称
|
@@ -348,7 +386,7 @@ def _show_usage_stats() -> None:
|
|
348
386
|
remaining_days_after_months = remaining_days_after_years % 20
|
349
387
|
work_days = remaining_days_after_months
|
350
388
|
remaining_hours = int(hours % 8) # 剩余不足一个工作日的小时数
|
351
|
-
|
389
|
+
|
352
390
|
# 构建时间描述
|
353
391
|
time_parts = []
|
354
392
|
if work_years > 0:
|
@@ -359,17 +397,25 @@ def _show_usage_stats() -> None:
|
|
359
397
|
time_parts.append(f"{work_days} 个工作日")
|
360
398
|
if remaining_hours > 0:
|
361
399
|
time_parts.append(f"{remaining_hours} 小时")
|
362
|
-
|
400
|
+
|
363
401
|
if time_parts:
|
364
402
|
time_description = "、".join(time_parts)
|
365
403
|
if work_years >= 1:
|
366
|
-
encouragement =
|
404
|
+
encouragement = (
|
405
|
+
f"🎉 相当于节省了 {time_description} 的工作时间!"
|
406
|
+
)
|
367
407
|
elif work_months >= 1:
|
368
|
-
encouragement =
|
408
|
+
encouragement = (
|
409
|
+
f"🚀 相当于节省了 {time_description} 的工作时间!"
|
410
|
+
)
|
369
411
|
elif work_days >= 1:
|
370
|
-
encouragement =
|
412
|
+
encouragement = (
|
413
|
+
f"💪 相当于节省了 {time_description} 的工作时间!"
|
414
|
+
)
|
371
415
|
else:
|
372
|
-
encouragement =
|
416
|
+
encouragement = (
|
417
|
+
f"✨ 相当于节省了 {time_description} 的工作时间!"
|
418
|
+
)
|
373
419
|
elif hours >= 1:
|
374
420
|
encouragement = f"⭐ 相当于节省了 {int(hours)} 小时的工作时间,积少成多,继续保持!"
|
375
421
|
if encouragement:
|
@@ -459,7 +505,9 @@ def load_config():
|
|
459
505
|
if schema_path.exists():
|
460
506
|
try:
|
461
507
|
config_file_path.parent.mkdir(parents=True, exist_ok=True)
|
462
|
-
generate_default_config(
|
508
|
+
generate_default_config(
|
509
|
+
str(schema_path.absolute()), str(config_file_path)
|
510
|
+
)
|
463
511
|
PrettyOutput.print(
|
464
512
|
f"已生成默认配置文件: {config_file_path}", OutputType.INFO
|
465
513
|
)
|
@@ -576,7 +624,7 @@ def generate_default_config(schema_path: str, output_path: str) -> None:
|
|
576
624
|
|
577
625
|
default_config = _generate_from_schema(schema)
|
578
626
|
|
579
|
-
content = f"# yaml-language-server: $schema={
|
627
|
+
content = f"# yaml-language-server: $schema={schema_path}\n"
|
580
628
|
content += yaml.dump(default_config, allow_unicode=True, sort_keys=False)
|
581
629
|
|
582
630
|
with open(output_path, "w", encoding="utf-8") as f:
|
@@ -718,43 +766,13 @@ def count_cmd_usage() -> None:
|
|
718
766
|
import os
|
719
767
|
from jarvis.jarvis_stats.stats import StatsManager
|
720
768
|
|
721
|
-
# 命令映射关系:将短命令映射到长命令
|
722
|
-
command_mapping = {
|
723
|
-
# jarvis主命令
|
724
|
-
"jvs": "jarvis",
|
725
|
-
# 代码代理
|
726
|
-
"jca": "jarvis-code-agent",
|
727
|
-
# 智能shell
|
728
|
-
"jss": "jarvis-smart-shell",
|
729
|
-
# 平台管理
|
730
|
-
"jpm": "jarvis-platform-manager",
|
731
|
-
# Git提交
|
732
|
-
"jgc": "jarvis-git-commit",
|
733
|
-
# 代码审查
|
734
|
-
"jcr": "jarvis-code-review",
|
735
|
-
# Git压缩
|
736
|
-
"jgs": "jarvis-git-squash",
|
737
|
-
# 多代理
|
738
|
-
"jma": "jarvis-multi-agent",
|
739
|
-
# 代理
|
740
|
-
"ja": "jarvis-agent",
|
741
|
-
# 工具
|
742
|
-
"jt": "jarvis-tool",
|
743
|
-
# 方法论
|
744
|
-
"jm": "jarvis-methodology",
|
745
|
-
# RAG
|
746
|
-
"jrg": "jarvis-rag",
|
747
|
-
# 统计
|
748
|
-
"jst": "jarvis-stats",
|
749
|
-
}
|
750
|
-
|
751
769
|
# 从完整路径中提取命令名称
|
752
770
|
cmd_path = sys.argv[0]
|
753
771
|
cmd_name = os.path.basename(cmd_path)
|
754
|
-
|
772
|
+
|
755
773
|
# 如果是短命令,映射到长命令
|
756
|
-
if cmd_name in
|
757
|
-
metric_name =
|
774
|
+
if cmd_name in COMMAND_MAPPING:
|
775
|
+
metric_name = COMMAND_MAPPING[cmd_name]
|
758
776
|
else:
|
759
777
|
metric_name = cmd_name
|
760
778
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=2oEyA1qaR5QI1ZfAHJn9_9z3DRmOtWPUEtfnySBHunk,73
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=feyq1jxhgzAy8y0X7nNidmFTm8gkpJdhikzmphZNU7M,26945
|
3
3
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
|
4
|
-
jarvis/jarvis_agent/edit_file_handler.py,sha256=
|
5
|
-
jarvis/jarvis_agent/jarvis.py,sha256=
|
4
|
+
jarvis/jarvis_agent/edit_file_handler.py,sha256=w-byNJ4TN_SlV3djjfFC7OksySOFGrM8ku49w662dzc,11854
|
5
|
+
jarvis/jarvis_agent/jarvis.py,sha256=Z4Alt7J5cOKUkdkPuSqPD-Zy338Zg8IizJZ3SzCRWbg,17696
|
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=
|
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=
|
38
|
+
jarvis/jarvis_data/config_schema.json,sha256=ml7Z3dhjh227K1RsBPVTGJYSXFDG3p3OR-nTb_cxK88,10317
|
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
|
@@ -46,7 +46,7 @@ jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIY
|
|
46
46
|
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=sP0KEsxVcXGht0eA7a_m-ECtZAk39s4PL9OUdm35x2Y,14467
|
47
47
|
jarvis/jarvis_methodology/main.py,sha256=6QF8hH3vB6rfxim0fPR34uVPf41zVpb4ZLqrFN2qONg,10983
|
48
48
|
jarvis/jarvis_multi_agent/__init__.py,sha256=kCgtAX7VvliyEOQxIj2DvNjRAuh6bpNaOtDn60nzph4,6089
|
49
|
-
jarvis/jarvis_multi_agent/main.py,sha256=
|
49
|
+
jarvis/jarvis_multi_agent/main.py,sha256=Wbarez48QxXexlKEOcRsoMbcQEOP5rv_DzGkNk0SfpY,1779
|
50
50
|
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
51
51
|
jarvis/jarvis_platform/ai8.py,sha256=uiL1BkONteUB2aXg6kMGSXLLOhzGDl5_SNQYyQzmFNk,11412
|
52
52
|
jarvis/jarvis_platform/base.py,sha256=cfeYB6ldfQH1tz1rroQpmJTLAw8KByKS74qun0pqE1c,9498
|
@@ -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=
|
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
|
@@ -86,27 +87,29 @@ jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAP
|
|
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
89
|
jarvis/jarvis_tools/registry.py,sha256=8qhZgmmGIXJsYwtpsp_Ls8woT0qmBrthF8lIuQqOu7c,28614
|
90
|
+
jarvis/jarvis_tools/retrieve_memory.py,sha256=zItXPSMGzaPyH-4p_CP3z24fBYFnCK3OQJctgVunZMI,8288
|
89
91
|
jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
|
92
|
+
jarvis/jarvis_tools/save_memory.py,sha256=DjeFb38OtK9Y_RpWYHz8vL72JdauXZTlc_Y0FUQBtiM,7486
|
90
93
|
jarvis/jarvis_tools/search_web.py,sha256=zh6EYLQPIQneoz27Hheh-fifMeMNhrTVldXKMSsMz2Y,5801
|
91
94
|
jarvis/jarvis_tools/virtual_tty.py,sha256=LTsg1PlsPvgaLShUaxpAKwTpyjXRr0l0qSREI7Q-fBc,26349
|
92
95
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
96
|
jarvis/jarvis_tools/cli/main.py,sha256=GsfZJ4OS4Hvxh0H2XiLkgbzm-ajBsb4c0LyjuIAAatE,7718
|
94
97
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
95
98
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
|
96
|
-
jarvis/jarvis_utils/config.py,sha256
|
99
|
+
jarvis/jarvis_utils/config.py,sha256=ESvxmUxbxX8B80ft1H2qQsdyu73xAYvr3Dql7CYnzwI,13178
|
97
100
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
98
101
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
99
102
|
jarvis/jarvis_utils/git_utils.py,sha256=dkC0HcUdm_rF5vXNoLByne3mGykZEviD3Lo_SYbwROU,21667
|
100
|
-
jarvis/jarvis_utils/globals.py,sha256=
|
103
|
+
jarvis/jarvis_utils/globals.py,sha256=lpS1lmWRnLgqOeoyhZlktdZK9SK8YMekc6XWamho0Jw,8561
|
101
104
|
jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
|
102
|
-
jarvis/jarvis_utils/input.py,sha256=
|
103
|
-
jarvis/jarvis_utils/methodology.py,sha256=
|
104
|
-
jarvis/jarvis_utils/output.py,sha256=
|
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
|
105
108
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
106
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
107
|
-
jarvis_ai_assistant-0.2.
|
108
|
-
jarvis_ai_assistant-0.2.
|
109
|
-
jarvis_ai_assistant-0.2.
|
110
|
-
jarvis_ai_assistant-0.2.
|
111
|
-
jarvis_ai_assistant-0.2.
|
112
|
-
jarvis_ai_assistant-0.2.
|
109
|
+
jarvis/jarvis_utils/utils.py,sha256=b7t2BsoPEU_3ZhippcQW9qwQD0PO-sGkjjtZ4DvwI2s,37056
|
110
|
+
jarvis_ai_assistant-0.2.7.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
111
|
+
jarvis_ai_assistant-0.2.7.dist-info/METADATA,sha256=NQFGWTpKdTU1HU9yjEjoFwSYz7DiAulBpVnB70WZDkg,16807
|
112
|
+
jarvis_ai_assistant-0.2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
113
|
+
jarvis_ai_assistant-0.2.7.dist-info/entry_points.txt,sha256=8cwi1VxZGU5UeSZMFiH-jG6NK95Asjukj5SBLBrGiGo,1257
|
114
|
+
jarvis_ai_assistant-0.2.7.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
115
|
+
jarvis_ai_assistant-0.2.7.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.2.5.dist-info → jarvis_ai_assistant-0.2.7.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|