jarvis-ai-assistant 0.2.3__py3-none-any.whl → 0.2.4__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/edit_file_handler.py +5 -0
- jarvis/jarvis_agent/jarvis.py +22 -25
- jarvis/jarvis_agent/main.py +6 -6
- jarvis/jarvis_code_agent/code_agent.py +279 -11
- jarvis/jarvis_code_analysis/code_review.py +21 -19
- jarvis/jarvis_data/config_schema.json +23 -10
- jarvis/jarvis_git_squash/main.py +3 -3
- jarvis/jarvis_git_utils/git_commiter.py +32 -11
- jarvis/jarvis_mcp/sse_mcp_client.py +4 -6
- jarvis/jarvis_mcp/streamable_mcp_client.py +5 -9
- jarvis/jarvis_rag/retriever.py +1 -1
- jarvis/jarvis_smart_shell/main.py +2 -2
- jarvis/jarvis_stats/__init__.py +13 -0
- jarvis/jarvis_stats/cli.py +337 -0
- jarvis/jarvis_stats/stats.py +433 -0
- jarvis/jarvis_stats/storage.py +329 -0
- jarvis/jarvis_stats/visualizer.py +443 -0
- jarvis/jarvis_tools/cli/main.py +84 -15
- jarvis/jarvis_tools/registry.py +35 -16
- jarvis/jarvis_tools/search_web.py +3 -3
- jarvis/jarvis_tools/virtual_tty.py +315 -26
- jarvis/jarvis_utils/config.py +6 -0
- jarvis/jarvis_utils/git_utils.py +8 -16
- jarvis/jarvis_utils/utils.py +210 -37
- {jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/METADATA +19 -2
- {jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/RECORD +31 -26
- {jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/entry_points.txt +2 -0
- {jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/top_level.txt +0 -0
jarvis/jarvis_utils/utils.py
CHANGED
@@ -77,6 +77,186 @@ def _check_git_updates() -> bool:
|
|
77
77
|
return check_and_update_git_repo(str(script_dir))
|
78
78
|
|
79
79
|
|
80
|
+
def _show_usage_stats() -> None:
|
81
|
+
"""显示Jarvis使用统计信息"""
|
82
|
+
try:
|
83
|
+
from jarvis.jarvis_stats.stats import StatsManager
|
84
|
+
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
85
|
+
from datetime import datetime
|
86
|
+
|
87
|
+
stats_manager = StatsManager()
|
88
|
+
|
89
|
+
# 获取所有可用的指标
|
90
|
+
all_metrics = stats_manager.list_metrics()
|
91
|
+
|
92
|
+
# 根据指标名称和标签自动分类
|
93
|
+
categorized_stats: Dict[str, Dict[str, Any]] = {
|
94
|
+
"tool": {"title": "🔧 工具调用", "metrics": {}, "suffix": "次"},
|
95
|
+
"code": {"title": "📝 代码修改", "metrics": {}, "suffix": "次"},
|
96
|
+
"lines": {"title": "📊 代码行数", "metrics": {}, "suffix": "行"},
|
97
|
+
"commit": {"title": "💾 提交统计", "metrics": {}, "suffix": "个"},
|
98
|
+
"command": {"title": "📱 命令使用", "metrics": {}, "suffix": "次"},
|
99
|
+
}
|
100
|
+
|
101
|
+
# 遍历所有指标,获取统计数据
|
102
|
+
for metric in all_metrics:
|
103
|
+
# 获取该指标的所有数据
|
104
|
+
stats_data = stats_manager.get_stats(
|
105
|
+
metric_name=metric,
|
106
|
+
start_time=datetime(2000, 1, 1),
|
107
|
+
end_time=datetime.now(),
|
108
|
+
)
|
109
|
+
|
110
|
+
if stats_data and isinstance(stats_data, dict) and "records" in stats_data:
|
111
|
+
# 按照标签分组统计
|
112
|
+
tag_totals: Dict[str, float] = {}
|
113
|
+
for record in stats_data["records"]:
|
114
|
+
tags = record.get("tags", {})
|
115
|
+
group = tags.get("group", "other")
|
116
|
+
tag_totals[group] = tag_totals.get(group, 0) + record["value"]
|
117
|
+
|
118
|
+
# 根据标签将指标分配到相应类别
|
119
|
+
for group, total in tag_totals.items():
|
120
|
+
if total > 0:
|
121
|
+
if group == "tool":
|
122
|
+
categorized_stats["tool"]["metrics"][metric] = int(total)
|
123
|
+
elif group == "code_agent":
|
124
|
+
# 根据指标名称细分
|
125
|
+
if metric.startswith("code_lines_"):
|
126
|
+
categorized_stats["lines"]["metrics"][metric] = int(
|
127
|
+
total
|
128
|
+
)
|
129
|
+
elif "commit" in metric:
|
130
|
+
categorized_stats["commit"]["metrics"][metric] = int(
|
131
|
+
total
|
132
|
+
)
|
133
|
+
else:
|
134
|
+
categorized_stats["code"]["metrics"][metric] = int(
|
135
|
+
total
|
136
|
+
)
|
137
|
+
elif group == "command":
|
138
|
+
categorized_stats["command"]["metrics"][metric] = int(total)
|
139
|
+
|
140
|
+
# 构建输出
|
141
|
+
has_data = False
|
142
|
+
stats_output = []
|
143
|
+
|
144
|
+
for category, data in categorized_stats.items():
|
145
|
+
if data["metrics"]:
|
146
|
+
has_data = True
|
147
|
+
stats_output.append((data["title"], data["metrics"], data["suffix"]))
|
148
|
+
|
149
|
+
# 显示统计信息
|
150
|
+
if has_data:
|
151
|
+
# 构建统计信息字符串
|
152
|
+
stats_lines = ["📊 Jarvis 使用统计"]
|
153
|
+
|
154
|
+
for title, stats, suffix in stats_output:
|
155
|
+
if stats:
|
156
|
+
stats_lines.append(f"\n{title}:")
|
157
|
+
for metric, count in sorted(
|
158
|
+
stats.items(), key=lambda x: x[1], reverse=True
|
159
|
+
):
|
160
|
+
# 美化指标名称
|
161
|
+
display_name = metric.replace("_", " ").title()
|
162
|
+
stats_lines.append(f" • {display_name}: {count:,} {suffix}")
|
163
|
+
|
164
|
+
# 总结统计
|
165
|
+
total_tools = sum(
|
166
|
+
count
|
167
|
+
for title, stats, _ in stats_output
|
168
|
+
if "工具" in title
|
169
|
+
for metric, count in stats.items()
|
170
|
+
)
|
171
|
+
total_changes = sum(
|
172
|
+
count
|
173
|
+
for title, stats, _ in stats_output
|
174
|
+
if "代码修改" in title
|
175
|
+
for metric, count in stats.items()
|
176
|
+
)
|
177
|
+
|
178
|
+
if total_tools > 0 or total_changes > 0:
|
179
|
+
stats_lines.append(
|
180
|
+
f"\n📈 总计: 工具调用 {total_tools:,} 次, 代码修改 {total_changes:,} 次"
|
181
|
+
)
|
182
|
+
|
183
|
+
# 计算节省的时间
|
184
|
+
# 基于经验估算:
|
185
|
+
# - 每次工具调用平均节省5分钟(相比手动操作)
|
186
|
+
# - 每行代码修改平均节省60秒(考虑思考、编写、测试时间)
|
187
|
+
# - 每次提交平均节省15分钟(考虑整理、描述、检查时间)
|
188
|
+
# - 每个命令调用平均节省5分钟(相比手动执行)
|
189
|
+
|
190
|
+
time_saved_minutes = 0
|
191
|
+
|
192
|
+
# 工具调用节省的时间
|
193
|
+
time_saved_minutes += total_tools * 5
|
194
|
+
|
195
|
+
# 代码行数节省的时间(每行修改节省60秒)
|
196
|
+
total_lines = sum(
|
197
|
+
count
|
198
|
+
for title, stats, _ in stats_output
|
199
|
+
if "代码行数" in title
|
200
|
+
for metric, count in stats.items()
|
201
|
+
)
|
202
|
+
time_saved_minutes += total_lines * 1 # 60秒 = 1分钟
|
203
|
+
|
204
|
+
# 提交节省的时间
|
205
|
+
total_commits = sum(
|
206
|
+
count
|
207
|
+
for title, stats, _ in stats_output
|
208
|
+
if "提交统计" in title
|
209
|
+
for metric, count in stats.items()
|
210
|
+
)
|
211
|
+
time_saved_minutes += total_commits * 15
|
212
|
+
|
213
|
+
# 命令调用节省的时间
|
214
|
+
total_commands = sum(
|
215
|
+
count
|
216
|
+
for title, stats, _ in stats_output
|
217
|
+
if "命令使用" in title
|
218
|
+
for metric, count in stats.items()
|
219
|
+
)
|
220
|
+
time_saved_minutes += total_commands * 5
|
221
|
+
|
222
|
+
# 转换为更友好的格式
|
223
|
+
if time_saved_minutes > 0:
|
224
|
+
hours = int(time_saved_minutes // 60)
|
225
|
+
minutes = int(time_saved_minutes % 60)
|
226
|
+
|
227
|
+
if hours > 24:
|
228
|
+
days = hours // 24
|
229
|
+
remaining_hours = hours % 24
|
230
|
+
time_str = f"{days} 天 {remaining_hours} 小时 {minutes} 分钟"
|
231
|
+
elif hours > 0:
|
232
|
+
time_str = f"{hours} 小时 {minutes} 分钟"
|
233
|
+
else:
|
234
|
+
time_str = f"{minutes} 分钟"
|
235
|
+
|
236
|
+
stats_lines.append(f"\n⏱️ 节省时间: 约 {time_str}")
|
237
|
+
|
238
|
+
# 根据节省的时间给出鼓励信息
|
239
|
+
if hours >= 100:
|
240
|
+
stats_lines.append(
|
241
|
+
"🎉 您已经通过 Jarvis 节省了超过100小时的开发时间!"
|
242
|
+
)
|
243
|
+
elif hours >= 40:
|
244
|
+
stats_lines.append("🚀 相当于节省了一整周的工作时间!")
|
245
|
+
elif hours >= 8:
|
246
|
+
stats_lines.append("💪 相当于节省了一个工作日的时间!")
|
247
|
+
elif hours >= 1:
|
248
|
+
stats_lines.append("✨ 积少成多,继续保持!")
|
249
|
+
|
250
|
+
# 一次性输出所有统计信息
|
251
|
+
PrettyOutput.print("\n".join(stats_lines), OutputType.INFO)
|
252
|
+
except Exception as e:
|
253
|
+
# 输出错误信息以便调试
|
254
|
+
import traceback
|
255
|
+
|
256
|
+
PrettyOutput.print(f"统计显示出错: {str(e)}", OutputType.ERROR)
|
257
|
+
PrettyOutput.print(traceback.format_exc(), OutputType.ERROR)
|
258
|
+
|
259
|
+
|
80
260
|
def init_env(welcome_str: str, config_file: Optional[str] = None) -> None:
|
81
261
|
"""初始化Jarvis环境
|
82
262
|
|
@@ -99,7 +279,11 @@ def init_env(welcome_str: str, config_file: Optional[str] = None) -> None:
|
|
99
279
|
g_config_file = config_file
|
100
280
|
load_config()
|
101
281
|
|
102
|
-
# 5.
|
282
|
+
# 5. 显示历史统计数据(仅在显示欢迎信息时显示)
|
283
|
+
if welcome_str:
|
284
|
+
_show_usage_stats()
|
285
|
+
|
286
|
+
# 6. 检查git更新
|
103
287
|
if _check_git_updates():
|
104
288
|
os.execv(sys.executable, [sys.executable] + sys.argv)
|
105
289
|
sys.exit(0)
|
@@ -243,14 +427,7 @@ def generate_default_config(schema_path: str, output_path: str) -> None:
|
|
243
427
|
|
244
428
|
default_config = _generate_from_schema(schema)
|
245
429
|
|
246
|
-
#
|
247
|
-
rel_schema_path = Path(
|
248
|
-
os.path.relpath(
|
249
|
-
Path(schema_path),
|
250
|
-
start=Path(output_path).parent,
|
251
|
-
)
|
252
|
-
)
|
253
|
-
content = f"# yaml-language-server: $schema={rel_schema_path}\n"
|
430
|
+
content = f"# yaml-language-server: $schema={schema}\n"
|
254
431
|
content += yaml.dump(default_config, allow_unicode=True, sort_keys=False)
|
255
432
|
|
256
433
|
with open(output_path, "w", encoding="utf-8") as f:
|
@@ -386,35 +563,19 @@ def get_file_line_count(filename: str) -> int:
|
|
386
563
|
return 0
|
387
564
|
|
388
565
|
|
389
|
-
def _get_cmd_stats() -> Dict[str, int]:
|
390
|
-
"""从数据目录获取命令调用统计"""
|
391
|
-
stats_file = Path(get_data_dir()) / "cmd_stat.yaml"
|
392
|
-
if stats_file.exists():
|
393
|
-
try:
|
394
|
-
with open(stats_file, "r", encoding="utf-8") as f:
|
395
|
-
return yaml.safe_load(f) or {}
|
396
|
-
except Exception as e:
|
397
|
-
PrettyOutput.print(f"加载命令调用统计失败: {str(e)}", OutputType.WARNING)
|
398
|
-
return {}
|
399
|
-
|
400
|
-
|
401
|
-
def _update_cmd_stats(cmd_name: str) -> None:
|
402
|
-
"""更新命令调用统计"""
|
403
|
-
stats = _get_cmd_stats()
|
404
|
-
stats[cmd_name] = stats.get(cmd_name, 0) + 1
|
405
|
-
stats_file = Path(get_data_dir()) / "cmd_stat.yaml"
|
406
|
-
try:
|
407
|
-
with open(stats_file, "w", encoding="utf-8") as f:
|
408
|
-
yaml.safe_dump(stats, f, allow_unicode=True)
|
409
|
-
except Exception as e:
|
410
|
-
PrettyOutput.print(f"保存命令调用统计失败: {str(e)}", OutputType.WARNING)
|
411
|
-
|
412
|
-
|
413
566
|
def count_cmd_usage() -> None:
|
414
567
|
"""统计当前命令的使用次数"""
|
415
568
|
import sys
|
569
|
+
import os
|
570
|
+
from jarvis.jarvis_stats.stats import StatsManager
|
416
571
|
|
417
|
-
|
572
|
+
# 从完整路径中提取命令名称
|
573
|
+
cmd_path = sys.argv[0]
|
574
|
+
cmd_name = os.path.basename(cmd_path)
|
575
|
+
|
576
|
+
# 使用 StatsManager 记录命令使用统计
|
577
|
+
stats_manager = StatsManager()
|
578
|
+
stats_manager.increment(cmd_name, group="command")
|
418
579
|
|
419
580
|
|
420
581
|
def is_context_overflow(
|
@@ -433,7 +594,9 @@ def get_loc_stats() -> str:
|
|
433
594
|
str: loc命令输出的原始字符串,失败时返回空字符串
|
434
595
|
"""
|
435
596
|
try:
|
436
|
-
result = subprocess.run(
|
597
|
+
result = subprocess.run(
|
598
|
+
["loc"], capture_output=True, text=True, encoding="utf-8", errors="replace"
|
599
|
+
)
|
437
600
|
return result.stdout if result.returncode == 0 else ""
|
438
601
|
except FileNotFoundError:
|
439
602
|
return ""
|
@@ -499,6 +662,8 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
499
662
|
cwd=repo_path,
|
500
663
|
capture_output=True,
|
501
664
|
text=True,
|
665
|
+
encoding="utf-8",
|
666
|
+
errors="replace",
|
502
667
|
check=True,
|
503
668
|
timeout=10,
|
504
669
|
)
|
@@ -515,6 +680,8 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
515
680
|
cwd=repo_path,
|
516
681
|
capture_output=True,
|
517
682
|
text=True,
|
683
|
+
encoding="utf-8",
|
684
|
+
errors="replace",
|
518
685
|
check=True,
|
519
686
|
timeout=10,
|
520
687
|
)
|
@@ -531,6 +698,8 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
531
698
|
cwd=repo_path,
|
532
699
|
capture_output=True,
|
533
700
|
text=True,
|
701
|
+
encoding="utf-8",
|
702
|
+
errors="replace",
|
534
703
|
check=True,
|
535
704
|
timeout=10,
|
536
705
|
)
|
@@ -558,11 +727,15 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
558
727
|
after_hash = after_hash_result.stdout.strip()
|
559
728
|
|
560
729
|
if before_hash != after_hash:
|
561
|
-
PrettyOutput.print(
|
730
|
+
PrettyOutput.print(
|
731
|
+
f"{repo_type}库 '{repo_path.name}' 已更新。", OutputType.SUCCESS
|
732
|
+
)
|
562
733
|
if pull_result.stdout.strip():
|
563
734
|
PrettyOutput.print(pull_result.stdout.strip(), OutputType.INFO)
|
564
735
|
else:
|
565
|
-
PrettyOutput.print(
|
736
|
+
PrettyOutput.print(
|
737
|
+
f"{repo_type}库 '{repo_path.name}' 已是最新版本。", OutputType.INFO
|
738
|
+
)
|
566
739
|
|
567
740
|
except FileNotFoundError:
|
568
741
|
PrettyOutput.print(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jarvis-ai-assistant
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.4
|
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
|
@@ -143,6 +143,22 @@ Jarvis 的定位是**个人开发者的高效助理**,旨在将研发流程中
|
|
143
143
|
3. **迭代完善**: 根据 “补充用户群体”、“增加工作流对比”、“再增加一个例子” 等一系列追加指令,Jarvis 通过多次 `PATCH` 操作,逐步、精确地将新内容添加到本文档的指定位置。
|
144
144
|
4. **人机协作**: 在整个过程中,人类提供高层次的目标和方向,Jarvis 负责具体的探索、总结和代码(文档)修改任务,将一个模糊的想法快速落地为结构清晰的文档。
|
145
145
|
|
146
|
+
### Vibe Working: 一种更直觉的工作流
|
147
|
+
|
148
|
+
Jarvis 的核心理念与一种新兴的人机协作模式 **"Vibe Working"** (氛围式工作)不谋而合。这个概念源于AI研究者Andrej Karpathy,指的是利用大语言模型(LLM),将人类头脑中模糊、直觉性的想法(即“Vibe”)高效转化为具体的、结构化的成果。
|
149
|
+
|
150
|
+
这不再是传统的“指令-执行”模式,而是一种**对话式、迭代式**的共同创造过程。
|
151
|
+
|
152
|
+
* **从一个“感觉”开始**: 传统的自动化需要精确的输入和规则。而使用 Jarvis,你可以从一个模糊的目标开始,比如 `jca "给我写个脚本,监控这个网站的变化"` 或者 `jca "重构 'user' 模块,让它看起来更清爽"`。你提供的是方向和“感觉”,而不是详细的规格书。
|
153
|
+
|
154
|
+
* **迭代中逼近完美**: Jarvis (或其背后的LLM) 会提供一个初步的实现。这个版本可能不完美,但它是一个坚实的起点。接下来,你通过反馈来指导它,比如 `“这个地方的逻辑不对,应该先检查A再处理B”` 或者 `“变量名能再语义化一点吗?”`。通过这种快速的反馈循环,AI的产出将逐步逼近你的真实意图。
|
155
|
+
|
156
|
+
* **人与AI的角色转变**:
|
157
|
+
* **你 (人类)**: 扮演**创意总监、品味判断者和方向引领者**。你负责提供愿景、经验和高层次的判断力,确保最终结果的质量和方向。
|
158
|
+
* **Jarvis (AI)**: 扮演**强大的执行伙伴和灵感催化剂**。它负责处理所有繁重、重复和技术性的细节,并能提供意想不到的解决方案,激发你的新想法。
|
159
|
+
|
160
|
+
Jarvis 正是为这种工作流而设计的工具。它通过无缝的命令行集成和强大的本地交互能力,将 "Vibe Working" 从一个抽象概念,变为了开发者触手可及的日常生产力工具,让你能更专注于**高价值的创造性思考**,而非琐碎的实现细节。
|
161
|
+
|
146
162
|
### 👥 目标用户
|
147
163
|
|
148
164
|
**谁适合使用 Jarvis?**
|
@@ -197,6 +213,7 @@ Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及
|
|
197
213
|
| `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
|
198
214
|
| `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
|
199
215
|
| `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
|
216
|
+
| `jarvis-stats` | `jst` | 通用统计模块,支持记录和可视化任意指标数据 |
|
200
217
|
|
201
218
|
更多详细用法和参数,请查阅我们的 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
|
202
219
|
|
@@ -240,7 +257,7 @@ ENV:
|
|
240
257
|
|
241
258
|
Jarvis 支持多种平台,包括 **Kimi**, **通义千问**, **OpenAI** 等。详细的配置选项、模型组设置以及所有可用参数,请参阅 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
|
242
259
|
|
243
|
-
> **模型推荐**:
|
260
|
+
> **模型推荐**: 目前效果较好的模型是 `claude-opus-4-20250514`,可以通过国内代理商购买,例如 [FoxiAI](https://foxi-ai.top)。
|
244
261
|
|
245
262
|
---
|
246
263
|
|
@@ -1,9 +1,9 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=S61oLarYay1rhLcBt-WbaPF2ViSt-gtq-aUNYUXQS9s,73
|
2
2
|
jarvis/jarvis_agent/__init__.py,sha256=BmBbMUsCwe_0znrwxSipaKj-MuOgJTZvLbyKzBFfpic,22559
|
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=
|
6
|
-
jarvis/jarvis_agent/main.py,sha256=
|
4
|
+
jarvis/jarvis_agent/edit_file_handler.py,sha256=a-SFLZs4FNjyVIkEi1PwPj7KT9np_ItMeaRNUoGHEWU,11858
|
5
|
+
jarvis/jarvis_agent/jarvis.py,sha256=L2sI-Y7gxqH6M4E4F2GlNoZcxxvz_f72rxvjh7bxuZE,8443
|
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
|
9
9
|
jarvis/jarvis_agent/prompts.py,sha256=VLQtz75X5qExQkSwYlJYQzNLpDMdByr4FaY71POVLMI,8713
|
@@ -12,9 +12,9 @@ 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=BQvXXN4zjJd7xlZEqqEZmB9KBGNDrzDglRM8QblkpbU,29414
|
16
16
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
17
|
-
jarvis/jarvis_code_analysis/code_review.py,sha256=
|
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
|
19
19
|
jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
|
20
20
|
jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
|
@@ -35,15 +35,15 @@ 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=4HnTn0BUBEyohAOzj70BhtHMIQiwzwTXIQ3dn652JTg,10539
|
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
|
-
jarvis/jarvis_git_squash/main.py,sha256=
|
42
|
-
jarvis/jarvis_git_utils/git_commiter.py,sha256=
|
41
|
+
jarvis/jarvis_git_squash/main.py,sha256=6PECdAbTbrsJBRLK1pXBh4hdJ_LADh-XXSic1xJi97E,2255
|
42
|
+
jarvis/jarvis_git_utils/git_commiter.py,sha256=M6SnhF_GJktO0mIT8_Y4J4Zin7-w3V_MJADndfQ9_QU,13550
|
43
43
|
jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
|
44
|
-
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=
|
44
|
+
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=neKrgFxwLDPWjVrl9uDt1ricNwbLZbv1ZEFh0IkmqZk,22656
|
45
45
|
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
|
46
|
-
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=
|
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
49
|
jarvis/jarvis_multi_agent/main.py,sha256=EUJCLjiN6ZZkOTmRS13oeTquo3tXD-cdO_QvaEPCK_c,1715
|
@@ -67,9 +67,14 @@ jarvis/jarvis_rag/llm_interface.py,sha256=eZHibNHD5dFK9yolr3hYNNhAEZUsPA-cIf1uHa
|
|
67
67
|
jarvis/jarvis_rag/query_rewriter.py,sha256=rmXj-j3jjsOR-Dj9Hk5exfCJqZ4uCxMFfvybzurpj5w,4047
|
68
68
|
jarvis/jarvis_rag/rag_pipeline.py,sha256=MSVfTVqDRK1_m0SMeOBcqirAyrd8GsVC27vanMbUCUY,10598
|
69
69
|
jarvis/jarvis_rag/reranker.py,sha256=wYUDIMHQL8_tFcQ7GFn_zYHTE1AbKk4a9TRoN2lKtA8,1767
|
70
|
-
jarvis/jarvis_rag/retriever.py,sha256=
|
70
|
+
jarvis/jarvis_rag/retriever.py,sha256=vI-T_L6zdGOm2YCq98CEx0cevz8lKp0iVfjV4nQ3oJs,7681
|
71
71
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
|
-
jarvis/jarvis_smart_shell/main.py,sha256=
|
72
|
+
jarvis/jarvis_smart_shell/main.py,sha256=ReCC9bWPlgl84ylI0uvdzlE3J6fS0XzFSLOpQQyDcMY,6008
|
73
|
+
jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
|
74
|
+
jarvis/jarvis_stats/cli.py,sha256=o62mfyfQRRWEEDsiORhqF4RUZjDsB2OPXEvbN8I_qxA,10127
|
75
|
+
jarvis/jarvis_stats/stats.py,sha256=vN4qhugldKJwpw0yBUwCt7rnGonXElwq_DjuwmGiioc,13978
|
76
|
+
jarvis/jarvis_stats/storage.py,sha256=jGHgudtx-N-EgEWFUbbg13-K5t2iORsRwd-1_WMRdKk,10708
|
77
|
+
jarvis/jarvis_stats/visualizer.py,sha256=Zj-HPB0ZLx66L9Fk6taOmII-C0xQssWC4Gb6Rfp0XoA,13561
|
73
78
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
79
|
jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
|
75
80
|
jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
|
@@ -80,28 +85,28 @@ jarvis/jarvis_tools/generate_new_tool.py,sha256=uaWKlDMGjetvvwKTj0_AVTdmd14IktRb
|
|
80
85
|
jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
|
81
86
|
jarvis/jarvis_tools/read_code.py,sha256=EnI-R-5HyIQYhMD391nZWXHIuHHBF-OJIRE0QpLcPX4,6417
|
82
87
|
jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
|
83
|
-
jarvis/jarvis_tools/registry.py,sha256=
|
88
|
+
jarvis/jarvis_tools/registry.py,sha256=WSR8DxC5VSSQVLU42Pgc97_eAo5EQhmO0que1CzAVpc,28703
|
84
89
|
jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
|
85
|
-
jarvis/jarvis_tools/search_web.py,sha256=
|
86
|
-
jarvis/jarvis_tools/virtual_tty.py,sha256=
|
90
|
+
jarvis/jarvis_tools/search_web.py,sha256=zh6EYLQPIQneoz27Hheh-fifMeMNhrTVldXKMSsMz2Y,5801
|
91
|
+
jarvis/jarvis_tools/virtual_tty.py,sha256=LTsg1PlsPvgaLShUaxpAKwTpyjXRr0l0qSREI7Q-fBc,26349
|
87
92
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
-
jarvis/jarvis_tools/cli/main.py,sha256=
|
93
|
+
jarvis/jarvis_tools/cli/main.py,sha256=3kizOkAmld3ZiTnSoUx4Xo2XO7BnrPnyITKCMBFod1w,7765
|
89
94
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
90
95
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
|
91
|
-
jarvis/jarvis_utils/config.py,sha256=
|
96
|
+
jarvis/jarvis_utils/config.py,sha256=nXeQPEhZZw8UMPOsVNFGEh7SscTSe_1f9oDQwrLhfMo,12950
|
92
97
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
93
98
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
94
|
-
jarvis/jarvis_utils/git_utils.py,sha256=
|
99
|
+
jarvis/jarvis_utils/git_utils.py,sha256=dkC0HcUdm_rF5vXNoLByne3mGykZEviD3Lo_SYbwROU,21667
|
95
100
|
jarvis/jarvis_utils/globals.py,sha256=INBGXbDkXOQa0AE7L6JhR5gr-TAZMsE5y4yK1sbB98U,4643
|
96
101
|
jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
|
97
102
|
jarvis/jarvis_utils/input.py,sha256=g0Xa1TNZHxLaYduREV_Wc55iqHD6djN73YFJbR83gUg,9488
|
98
103
|
jarvis/jarvis_utils/methodology.py,sha256=V2Y0mbamrWBhhCK-3foAM1hKewOEcIDcXO-Sv_AU-kQ,9106
|
99
104
|
jarvis/jarvis_utils/output.py,sha256=E_J_RYXtkOgRiDSHCRE9QPHY8WQmmhIotQtIQru8GZA,10888
|
100
105
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
101
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
102
|
-
jarvis_ai_assistant-0.2.
|
103
|
-
jarvis_ai_assistant-0.2.
|
104
|
-
jarvis_ai_assistant-0.2.
|
105
|
-
jarvis_ai_assistant-0.2.
|
106
|
-
jarvis_ai_assistant-0.2.
|
107
|
-
jarvis_ai_assistant-0.2.
|
106
|
+
jarvis/jarvis_utils/utils.py,sha256=3DbUczVY9kzyAwbpA4mk9AuTUOG0L4Oviw-Cjdn0bF0,27289
|
107
|
+
jarvis_ai_assistant-0.2.4.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
108
|
+
jarvis_ai_assistant-0.2.4.dist-info/METADATA,sha256=GdY7W685Ylx4SOOUTNw9WeFXNeRkiTA1WWISdXxfJeo,16641
|
109
|
+
jarvis_ai_assistant-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
110
|
+
jarvis_ai_assistant-0.2.4.dist-info/entry_points.txt,sha256=8cwi1VxZGU5UeSZMFiH-jG6NK95Asjukj5SBLBrGiGo,1257
|
111
|
+
jarvis_ai_assistant-0.2.4.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
112
|
+
jarvis_ai_assistant-0.2.4.dist-info/RECORD,,
|
{jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/entry_points.txt
RENAMED
@@ -11,6 +11,7 @@ jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
|
|
11
11
|
jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
|
12
12
|
jarvis-rag = jarvis.jarvis_rag.cli:main
|
13
13
|
jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
|
14
|
+
jarvis-stats = jarvis.jarvis_stats.cli:main
|
14
15
|
jarvis-tool = jarvis.jarvis_tools.cli.main:main
|
15
16
|
jca = jarvis.jarvis_code_agent.code_agent:main
|
16
17
|
jcr = jarvis.jarvis_code_analysis.code_review:main
|
@@ -21,5 +22,6 @@ jma = jarvis.jarvis_multi_agent.main:main
|
|
21
22
|
jpm = jarvis.jarvis_platform_manager.main:main
|
22
23
|
jrg = jarvis.jarvis_rag.cli:main
|
23
24
|
jss = jarvis.jarvis_smart_shell.main:main
|
25
|
+
jst = jarvis.jarvis_stats.cli:main
|
24
26
|
jt = jarvis.jarvis_tools.cli.main:main
|
25
27
|
jvs = jarvis.jarvis_agent.jarvis:main
|
File without changes
|
{jarvis_ai_assistant-0.2.3.dist-info → jarvis_ai_assistant-0.2.4.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|