jarvis-ai-assistant 0.3.17__py3-none-any.whl → 0.3.19__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 +23 -10
- jarvis/jarvis_agent/edit_file_handler.py +8 -13
- jarvis/jarvis_agent/jarvis.py +13 -3
- jarvis/jarvis_agent/memory_manager.py +4 -4
- jarvis/jarvis_agent/methodology_share_manager.py +2 -2
- jarvis/jarvis_agent/task_analyzer.py +4 -3
- jarvis/jarvis_agent/task_manager.py +6 -6
- jarvis/jarvis_agent/tool_executor.py +2 -2
- jarvis/jarvis_agent/tool_share_manager.py +2 -2
- jarvis/jarvis_code_agent/code_agent.py +21 -29
- jarvis/jarvis_code_analysis/code_review.py +2 -4
- jarvis/jarvis_data/config_schema.json +5 -0
- jarvis/jarvis_git_utils/git_commiter.py +17 -18
- jarvis/jarvis_methodology/main.py +12 -12
- jarvis/jarvis_platform/base.py +21 -13
- jarvis/jarvis_platform/kimi.py +13 -13
- jarvis/jarvis_platform/tongyi.py +17 -15
- jarvis/jarvis_platform/yuanbao.py +11 -11
- jarvis/jarvis_platform_manager/main.py +12 -22
- jarvis/jarvis_rag/cli.py +36 -32
- jarvis/jarvis_rag/embedding_manager.py +11 -6
- jarvis/jarvis_rag/llm_interface.py +6 -5
- jarvis/jarvis_rag/rag_pipeline.py +9 -8
- jarvis/jarvis_rag/reranker.py +3 -2
- jarvis/jarvis_rag/retriever.py +18 -8
- jarvis/jarvis_smart_shell/main.py +306 -46
- jarvis/jarvis_stats/stats.py +40 -0
- jarvis/jarvis_stats/storage.py +220 -9
- jarvis/jarvis_tools/clear_memory.py +0 -11
- jarvis/jarvis_tools/cli/main.py +18 -17
- jarvis/jarvis_tools/edit_file.py +4 -4
- jarvis/jarvis_tools/execute_script.py +5 -1
- jarvis/jarvis_tools/file_analyzer.py +6 -6
- jarvis/jarvis_tools/generate_new_tool.py +6 -17
- jarvis/jarvis_tools/read_code.py +3 -6
- jarvis/jarvis_tools/read_webpage.py +74 -13
- jarvis/jarvis_tools/registry.py +8 -28
- jarvis/jarvis_tools/retrieve_memory.py +5 -16
- jarvis/jarvis_tools/rewrite_file.py +0 -4
- jarvis/jarvis_tools/save_memory.py +2 -10
- jarvis/jarvis_tools/search_web.py +5 -8
- jarvis/jarvis_tools/virtual_tty.py +22 -40
- jarvis/jarvis_utils/clipboard.py +3 -3
- jarvis/jarvis_utils/config.py +8 -0
- jarvis/jarvis_utils/input.py +67 -27
- jarvis/jarvis_utils/methodology.py +3 -3
- jarvis/jarvis_utils/output.py +1 -7
- jarvis/jarvis_utils/utils.py +44 -58
- {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/RECORD +55 -55
- {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/top_level.txt +0 -0
jarvis/jarvis_utils/input.py
CHANGED
@@ -26,6 +26,8 @@ from prompt_toolkit.document import Document
|
|
26
26
|
from prompt_toolkit.formatted_text import FormattedText
|
27
27
|
from prompt_toolkit.history import FileHistory
|
28
28
|
from prompt_toolkit.key_binding import KeyBindings
|
29
|
+
from prompt_toolkit.enums import DEFAULT_BUFFER
|
30
|
+
from prompt_toolkit.filters import has_focus
|
29
31
|
from prompt_toolkit.layout.containers import Window
|
30
32
|
from prompt_toolkit.layout.controls import FormattedTextControl
|
31
33
|
from prompt_toolkit.layout.layout import Layout
|
@@ -68,8 +70,9 @@ def get_single_line_input(tip: str, default: str = "") -> str:
|
|
68
70
|
获取支持历史记录的单行输入。
|
69
71
|
"""
|
70
72
|
session: PromptSession = PromptSession(history=None)
|
71
|
-
style = PromptStyle.from_dict({"prompt": "ansicyan"})
|
72
|
-
|
73
|
+
style = PromptStyle.from_dict({"prompt": "ansicyan", "bottom-toolbar": "fg:#888888"})
|
74
|
+
prompt = FormattedText([("class:prompt", f"👤 ❯ {tip}")])
|
75
|
+
return session.prompt(prompt, default=default, style=style)
|
73
76
|
|
74
77
|
|
75
78
|
def get_choice(tip: str, choices: List[str]) -> str:
|
@@ -289,14 +292,14 @@ def _show_history_and_copy():
|
|
289
292
|
PrettyOutput.print("没有可复制的消息", OutputType.INFO)
|
290
293
|
return
|
291
294
|
|
292
|
-
print("\n" + "=" * 20 + " 消息历史记录 " + "=" * 20)
|
295
|
+
PrettyOutput.print("\n" + "=" * 20 + " 消息历史记录 " + "=" * 20, OutputType.INFO)
|
293
296
|
for i, msg in enumerate(history):
|
294
297
|
cleaned_msg = msg.replace("\n", r"\n")
|
295
298
|
display_msg = (
|
296
299
|
(cleaned_msg[:70] + "...") if len(cleaned_msg) > 70 else cleaned_msg
|
297
300
|
)
|
298
|
-
print(f" {i + 1}: {display_msg.strip()}")
|
299
|
-
print("=" * 58 + "\n")
|
301
|
+
PrettyOutput.print(f" {i + 1}: {display_msg.strip()}", OutputType.INFO)
|
302
|
+
PrettyOutput.print("=" * 58 + "\n", OutputType.INFO)
|
300
303
|
|
301
304
|
while True:
|
302
305
|
try:
|
@@ -305,11 +308,11 @@ def _show_history_and_copy():
|
|
305
308
|
|
306
309
|
if not choice_str: # User pressed Enter
|
307
310
|
if not history:
|
308
|
-
print("没有历史记录可供选择。")
|
311
|
+
PrettyOutput.print("没有历史记录可供选择。", OutputType.INFO)
|
309
312
|
break
|
310
313
|
choice = len(history) - 1
|
311
314
|
elif choice_str.lower() == "c":
|
312
|
-
print("已取消")
|
315
|
+
PrettyOutput.print("已取消", OutputType.INFO)
|
313
316
|
break
|
314
317
|
else:
|
315
318
|
choice = int(choice_str) - 1
|
@@ -322,11 +325,11 @@ def _show_history_and_copy():
|
|
322
325
|
)
|
323
326
|
break
|
324
327
|
else:
|
325
|
-
print("无效的序号,请重试。")
|
328
|
+
PrettyOutput.print("无效的序号,请重试。", OutputType.WARNING)
|
326
329
|
except ValueError:
|
327
|
-
print("无效的输入,请输入数字。")
|
330
|
+
PrettyOutput.print("无效的输入,请输入数字。", OutputType.WARNING)
|
328
331
|
except (KeyboardInterrupt, EOFError):
|
329
|
-
print("\n操作取消")
|
332
|
+
PrettyOutput.print("\n操作取消", OutputType.INFO)
|
330
333
|
break
|
331
334
|
|
332
335
|
|
@@ -337,8 +340,8 @@ def _get_multiline_input_internal(tip: str) -> str:
|
|
337
340
|
"""
|
338
341
|
bindings = KeyBindings()
|
339
342
|
|
340
|
-
# Show a one-time hint on the first Enter press in this invocation
|
341
|
-
first_enter_hint_shown =
|
343
|
+
# Show a one-time hint on the first Enter press in this invocation (disabled; using inlay toolbar instead)
|
344
|
+
first_enter_hint_shown = True
|
342
345
|
|
343
346
|
@bindings.add("enter")
|
344
347
|
def _(event):
|
@@ -347,8 +350,9 @@ def _get_multiline_input_internal(tip: str) -> str:
|
|
347
350
|
first_enter_hint_shown = True
|
348
351
|
|
349
352
|
def _show_notice():
|
350
|
-
print(
|
351
|
-
|
353
|
+
PrettyOutput.print(
|
354
|
+
"提示:当前支持多行输入。输入完成请使用 Ctrl+J 确认;Enter 仅用于换行。",
|
355
|
+
OutputType.INFO,
|
352
356
|
)
|
353
357
|
try:
|
354
358
|
input("按回车继续...")
|
@@ -372,17 +376,49 @@ def _get_multiline_input_internal(tip: str) -> str:
|
|
372
376
|
else:
|
373
377
|
event.current_buffer.insert_text("\n")
|
374
378
|
|
375
|
-
@bindings.add("c-j")
|
379
|
+
@bindings.add("c-j", filter=has_focus(DEFAULT_BUFFER))
|
376
380
|
def _(event):
|
377
381
|
event.current_buffer.validate_and_handle()
|
378
382
|
|
379
|
-
@bindings.add("c-o")
|
383
|
+
@bindings.add("c-o", filter=has_focus(DEFAULT_BUFFER))
|
380
384
|
def _(event):
|
381
385
|
"""Handle Ctrl+O by exiting the prompt and returning the sentinel value."""
|
382
386
|
event.app.exit(result=CTRL_O_SENTINEL)
|
383
387
|
|
384
|
-
style = PromptStyle.from_dict(
|
388
|
+
style = PromptStyle.from_dict(
|
389
|
+
{
|
390
|
+
"prompt": "ansibrightmagenta bold",
|
391
|
+
"bottom-toolbar": "bg:#4b145b #ffd6ff bold",
|
392
|
+
"bt.tip": "bold fg:#ff5f87",
|
393
|
+
"bt.sep": "fg:#ffb3de",
|
394
|
+
"bt.key": "bg:#d7005f #ffffff bold",
|
395
|
+
"bt.label": "fg:#ffd6ff",
|
396
|
+
}
|
397
|
+
)
|
385
398
|
|
399
|
+
def _bottom_toolbar():
|
400
|
+
return FormattedText(
|
401
|
+
[
|
402
|
+
("class:bt.tip", f" {tip} "),
|
403
|
+
("class:bt.sep", " • "),
|
404
|
+
("class:bt.label", "快捷键: "),
|
405
|
+
("class:bt.key", "@"),
|
406
|
+
("class:bt.label", " 文件补全 "),
|
407
|
+
("class:bt.sep", " • "),
|
408
|
+
("class:bt.key", "Tab"),
|
409
|
+
("class:bt.label", " 选择 "),
|
410
|
+
("class:bt.sep", " • "),
|
411
|
+
("class:bt.key", "Ctrl+J"),
|
412
|
+
("class:bt.label", " 确认 "),
|
413
|
+
("class:bt.sep", " • "),
|
414
|
+
("class:bt.key", "Ctrl+O"),
|
415
|
+
("class:bt.label", " 历史复制 "),
|
416
|
+
("class:bt.sep", " • "),
|
417
|
+
("class:bt.key", "Ctrl+C/D"),
|
418
|
+
("class:bt.label", " 取消 "),
|
419
|
+
]
|
420
|
+
)
|
421
|
+
|
386
422
|
history_dir = get_data_dir()
|
387
423
|
session: PromptSession = PromptSession(
|
388
424
|
history=FileHistory(os.path.join(history_dir, "multiline_input_history")),
|
@@ -394,25 +430,29 @@ def _get_multiline_input_internal(tip: str) -> str:
|
|
394
430
|
mouse_support=False,
|
395
431
|
)
|
396
432
|
|
397
|
-
print
|
398
|
-
prompt = FormattedText([("class:prompt", "
|
433
|
+
# Tip is shown in bottom toolbar; avoid extra print
|
434
|
+
prompt = FormattedText([("class:prompt", "👤 ❯ ")])
|
399
435
|
|
400
436
|
try:
|
401
|
-
return session.prompt(
|
437
|
+
return session.prompt(
|
438
|
+
prompt,
|
439
|
+
style=style,
|
440
|
+
pre_run=lambda: None,
|
441
|
+
bottom_toolbar=_bottom_toolbar,
|
442
|
+
).strip()
|
402
443
|
except (KeyboardInterrupt, EOFError):
|
403
444
|
return ""
|
404
445
|
|
405
446
|
|
406
|
-
def get_multiline_input(tip: str) -> str:
|
447
|
+
def get_multiline_input(tip: str, print_on_empty: bool = True) -> str:
|
407
448
|
"""
|
408
449
|
获取带有增强补全和确认功能的多行输入。
|
409
450
|
此函数处理控制流,允许在不破坏终端状态的情况下处理历史记录复制。
|
410
|
-
"""
|
411
|
-
PrettyOutput.section(
|
412
|
-
"用户输入 - 使用 @ 触发文件补全,Tab 选择补全项,Ctrl+J 确认,Ctrl+O 从历史记录中选择消息复制,按 Ctrl+C/D 取消输入",
|
413
|
-
OutputType.USER,
|
414
|
-
)
|
415
451
|
|
452
|
+
参数:
|
453
|
+
tip: 提示文本,将显示在底部工具栏中
|
454
|
+
print_on_empty: 当输入为空字符串时,是否打印“输入已取消”提示。默认打印。
|
455
|
+
"""
|
416
456
|
while True:
|
417
457
|
user_input = _get_multiline_input_internal(tip)
|
418
458
|
|
@@ -421,6 +461,6 @@ def get_multiline_input(tip: str) -> str:
|
|
421
461
|
tip = "请继续输入(或按Ctrl+J确认):"
|
422
462
|
continue
|
423
463
|
else:
|
424
|
-
if not user_input:
|
464
|
+
if not user_input and print_on_empty:
|
425
465
|
PrettyOutput.print("\n输入已取消", OutputType.INFO)
|
426
466
|
return user_input
|
@@ -203,12 +203,12 @@ def load_methodology(
|
|
203
203
|
|
204
204
|
try:
|
205
205
|
# 加载所有方法论
|
206
|
-
print(
|
206
|
+
PrettyOutput.print("📁 加载方法论文件...", OutputType.INFO)
|
207
207
|
methodologies = _load_all_methodologies()
|
208
208
|
if not methodologies:
|
209
|
-
print(
|
209
|
+
PrettyOutput.print("没有找到方法论文件", OutputType.WARNING)
|
210
210
|
return ""
|
211
|
-
print(f"
|
211
|
+
PrettyOutput.print(f"加载方法论文件完成 (共 {len(methodologies)} 个)", OutputType.SUCCESS)
|
212
212
|
|
213
213
|
if platform_name:
|
214
214
|
platform = PlatformRegistry().create_platform(platform_name)
|
jarvis/jarvis_utils/output.py
CHANGED
@@ -274,19 +274,13 @@ class PrettyOutput:
|
|
274
274
|
panel = Panel(
|
275
275
|
content,
|
276
276
|
border_style=header_styles[output_type],
|
277
|
-
title=header,
|
278
|
-
title_align="left",
|
279
277
|
padding=(0, 0),
|
280
278
|
highlight=True,
|
281
279
|
)
|
282
280
|
if get_pretty_output():
|
283
281
|
console.print(panel)
|
284
282
|
else:
|
285
|
-
|
286
|
-
console.print(header)
|
287
|
-
console.print(content)
|
288
|
-
else:
|
289
|
-
console.print(header, content)
|
283
|
+
console.print(content)
|
290
284
|
if traceback or output_type == OutputType.ERROR:
|
291
285
|
try:
|
292
286
|
console.print_exception()
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -139,7 +139,7 @@ def _check_pip_updates() -> bool:
|
|
139
139
|
# 检测是否安装了 RAG 特性
|
140
140
|
rag_installed = False
|
141
141
|
try:
|
142
|
-
import langchain # noqa
|
142
|
+
import langchain # type: ignore # noqa
|
143
143
|
|
144
144
|
rag_installed = True
|
145
145
|
except ImportError:
|
@@ -212,46 +212,37 @@ def _show_usage_stats(welcome_str: str) -> None:
|
|
212
212
|
"commit": {"title": "💾 提交统计", "metrics": {}, "suffix": "个"},
|
213
213
|
"command": {"title": "📱 命令使用", "metrics": {}, "suffix": "次"},
|
214
214
|
"adoption": {"title": "🎯 采纳情况", "metrics": {}, "suffix": ""},
|
215
|
+
"other": {"title": "📦 其他指标", "metrics": {}, "suffix": ""},
|
215
216
|
}
|
216
217
|
|
217
|
-
#
|
218
|
+
# 遍历所有指标,使用快速总量读取以避免全量扫描
|
218
219
|
for metric in all_metrics:
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
end_time=datetime.now(),
|
224
|
-
)
|
220
|
+
try:
|
221
|
+
total = StatsManager.get_metric_total(metric)
|
222
|
+
except Exception:
|
223
|
+
total = 0.0
|
225
224
|
|
226
|
-
if
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
total
|
248
|
-
)
|
249
|
-
else:
|
250
|
-
categorized_stats["code"]["metrics"][metric] = int(
|
251
|
-
total
|
252
|
-
)
|
253
|
-
elif group == "command":
|
254
|
-
categorized_stats["command"]["metrics"][metric] = int(total)
|
225
|
+
if not total or total <= 0:
|
226
|
+
continue
|
227
|
+
|
228
|
+
# 优先使用元信息中的分组(在写入指标时已记录)
|
229
|
+
info = StatsManager.get_metric_info(metric) or {}
|
230
|
+
group = info.get("group", "other")
|
231
|
+
|
232
|
+
if group == "tool":
|
233
|
+
categorized_stats["tool"]["metrics"][metric] = int(total)
|
234
|
+
elif group == "code_agent":
|
235
|
+
# 根据指标名称细分
|
236
|
+
if metric.startswith("code_lines_"):
|
237
|
+
categorized_stats["lines"]["metrics"][metric] = int(total)
|
238
|
+
elif "commit" in metric:
|
239
|
+
categorized_stats["commit"]["metrics"][metric] = int(total)
|
240
|
+
else:
|
241
|
+
categorized_stats["code"]["metrics"][metric] = int(total)
|
242
|
+
elif group == "command":
|
243
|
+
categorized_stats["command"]["metrics"][metric] = int(total)
|
244
|
+
else:
|
245
|
+
categorized_stats["other"]["metrics"][metric] = int(total)
|
255
246
|
|
256
247
|
# 合并长短命令的历史统计数据
|
257
248
|
command_stats = categorized_stats["command"]["metrics"]
|
@@ -560,7 +551,7 @@ def _show_usage_stats(welcome_str: str) -> None:
|
|
560
551
|
layout_items: List[RenderableType] = []
|
561
552
|
layout_items.append(right_column_group)
|
562
553
|
if has_content:
|
563
|
-
layout_items.append(table)
|
554
|
+
layout_items.append(Align.center(table))
|
564
555
|
layout_renderable = Group(*layout_items)
|
565
556
|
else:
|
566
557
|
# 左右布局(当前)
|
@@ -576,8 +567,8 @@ def _show_usage_stats(welcome_str: str) -> None:
|
|
576
567
|
layout_table.add_column(ratio=5) # 右侧
|
577
568
|
|
578
569
|
if has_content:
|
579
|
-
#
|
580
|
-
layout_table.add_row(right_column_group, table)
|
570
|
+
# 将总结信息放在左侧,统计表格放在右侧(表格居中显示)
|
571
|
+
layout_table.add_row(right_column_group, Align.center(table))
|
581
572
|
else:
|
582
573
|
# 如果没有统计数据,则总结信息占满
|
583
574
|
layout_table.add_row(right_column_group)
|
@@ -947,6 +938,15 @@ def _load_and_process_config(jarvis_dir: str, config_file: str) -> None:
|
|
947
938
|
)
|
948
939
|
or changed
|
949
940
|
)
|
941
|
+
changed = (
|
942
|
+
_ask_and_set(
|
943
|
+
"JARVIS_IMMEDIATE_ABORT",
|
944
|
+
"是否启用立即中断?\n- 选择 是/true:在对话输出流的每次迭代中检测到用户中断(例如 Ctrl+C)时,立即返回当前已生成的内容并停止继续输出。\n- 选择 否/false:不会在输出过程中立刻返回,而是按既有流程处理(不中途打断输出)。",
|
945
|
+
False,
|
946
|
+
"bool",
|
947
|
+
)
|
948
|
+
or changed
|
949
|
+
)
|
950
950
|
changed = (
|
951
951
|
_ask_and_set(
|
952
952
|
"JARVIS_ENABLE_STATIC_ANALYSIS",
|
@@ -1152,7 +1152,7 @@ def while_success(func: Callable[[], Any], sleep_time: float = 0.1) -> Any:
|
|
1152
1152
|
return func()
|
1153
1153
|
except Exception as e:
|
1154
1154
|
PrettyOutput.print(
|
1155
|
-
f"
|
1155
|
+
f"重试中,等待 {sleep_time}s...", OutputType.WARNING
|
1156
1156
|
)
|
1157
1157
|
time.sleep(sleep_time)
|
1158
1158
|
continue
|
@@ -1176,7 +1176,7 @@ def while_true(func: Callable[[], bool], sleep_time: float = 0.1) -> Any:
|
|
1176
1176
|
ret = func()
|
1177
1177
|
if ret:
|
1178
1178
|
break
|
1179
|
-
PrettyOutput.print(f"
|
1179
|
+
PrettyOutput.print(f"重试中,等待 {sleep_time}s...", OutputType.WARNING)
|
1180
1180
|
time.sleep(sleep_time)
|
1181
1181
|
return ret
|
1182
1182
|
|
@@ -1258,7 +1258,7 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
1258
1258
|
if not git_dir.is_dir():
|
1259
1259
|
return
|
1260
1260
|
|
1261
|
-
|
1261
|
+
|
1262
1262
|
try:
|
1263
1263
|
# 检查是否有远程仓库
|
1264
1264
|
remote_result = subprocess.run(
|
@@ -1272,10 +1272,6 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
1272
1272
|
timeout=10,
|
1273
1273
|
)
|
1274
1274
|
if not remote_result.stdout.strip():
|
1275
|
-
PrettyOutput.print(
|
1276
|
-
f"'{repo_path.name}' 未配置远程仓库,跳过更新。",
|
1277
|
-
OutputType.INFO,
|
1278
|
-
)
|
1279
1275
|
return
|
1280
1276
|
|
1281
1277
|
# 检查git仓库状态
|
@@ -1347,10 +1343,6 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
1347
1343
|
)
|
1348
1344
|
|
1349
1345
|
if not ls_remote_result.stdout.strip():
|
1350
|
-
PrettyOutput.print(
|
1351
|
-
f"{repo_type}库 '{repo_path.name}' 的远程仓库是空的,跳过更新。",
|
1352
|
-
OutputType.INFO,
|
1353
|
-
)
|
1354
1346
|
return
|
1355
1347
|
|
1356
1348
|
# 执行 git pull
|
@@ -1378,12 +1370,6 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
|
|
1378
1370
|
PrettyOutput.print(
|
1379
1371
|
f"{repo_type}库 '{repo_path.name}' 已更新。", OutputType.SUCCESS
|
1380
1372
|
)
|
1381
|
-
if pull_result.stdout.strip():
|
1382
|
-
PrettyOutput.print(pull_result.stdout.strip(), OutputType.INFO)
|
1383
|
-
else:
|
1384
|
-
PrettyOutput.print(
|
1385
|
-
f"{repo_type}库 '{repo_path.name}' 已是最新版本。", OutputType.INFO
|
1386
|
-
)
|
1387
1373
|
|
1388
1374
|
except FileNotFoundError:
|
1389
1375
|
PrettyOutput.print(
|
@@ -1424,7 +1410,7 @@ def daily_check_git_updates(repo_dirs: List[str], repo_type: str):
|
|
1424
1410
|
pass
|
1425
1411
|
|
1426
1412
|
if should_check_for_updates:
|
1427
|
-
|
1413
|
+
|
1428
1414
|
for repo_dir in repo_dirs:
|
1429
1415
|
p_repo_dir = Path(repo_dir)
|
1430
1416
|
if p_repo_dir.exists() and p_repo_dir.is_dir():
|
@@ -1,14 +1,14 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=WDyBQWvbgGmONVjrNHI5MHAMmGizwEtYWsHjLSpflxk,74
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=6N0D8ah8QVxDs155-d1FhxQcZt3enHUQMKyOabiLaPw,33201
|
3
3
|
jarvis/jarvis_agent/agent_manager.py,sha256=YzpMiF0H2-eyk2kn2o24Bkj3bXsQx7Pv2vfD4gWepo0,2893
|
4
4
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
|
5
5
|
jarvis/jarvis_agent/config_editor.py,sha256=Ctk82sO6w2cNW0-_5L7Bomj-hgM4U7WwMc52fwhAJyg,1809
|
6
|
-
jarvis/jarvis_agent/edit_file_handler.py,sha256=
|
6
|
+
jarvis/jarvis_agent/edit_file_handler.py,sha256=bkvCghB_X-CQKuIG7dJfos8F1KNnHSLNhldraVgqVk8,11209
|
7
7
|
jarvis/jarvis_agent/file_methodology_manager.py,sha256=PwDUQwq7HVIyPInsN8fgWyMXLwi8heIXPrqfBZJhVHs,4260
|
8
|
-
jarvis/jarvis_agent/jarvis.py,sha256=
|
8
|
+
jarvis/jarvis_agent/jarvis.py,sha256=J_R27hZUTGattEAKppkeCoklMJoEFHjAycsCMRjYA7o,19340
|
9
9
|
jarvis/jarvis_agent/main.py,sha256=Hu5u0mq0owuzt965IqaGP6TtVGFXHE4E4Tg1TzCtGYE,3552
|
10
|
-
jarvis/jarvis_agent/memory_manager.py,sha256=
|
11
|
-
jarvis/jarvis_agent/methodology_share_manager.py,sha256=
|
10
|
+
jarvis/jarvis_agent/memory_manager.py,sha256=T3DXY-j9NGkAZFtpmARi4nWsm6XFlPEhEnLbri0EaJA,5280
|
11
|
+
jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
|
12
12
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
13
13
|
jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
|
14
14
|
jarvis/jarvis_agent/prompts.py,sha256=X6cXa-n0xqBQ8LDTgLsD0kqziAh1s0cNp89i4mxcvHg,9444
|
@@ -16,14 +16,14 @@ jarvis/jarvis_agent/protocols.py,sha256=JWnJDikFEuwvFUv7uzXu0ggJ4O9K2FkMnfVCwIJ5
|
|
16
16
|
jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
|
17
17
|
jarvis/jarvis_agent/share_manager.py,sha256=wFcdULSog1mMxDyB94ofbqitFL8DCX8i1u6qVzSEuAk,8704
|
18
18
|
jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
|
19
|
-
jarvis/jarvis_agent/task_analyzer.py,sha256
|
20
|
-
jarvis/jarvis_agent/task_manager.py,sha256=
|
21
|
-
jarvis/jarvis_agent/tool_executor.py,sha256=
|
22
|
-
jarvis/jarvis_agent/tool_share_manager.py,sha256=
|
19
|
+
jarvis/jarvis_agent/task_analyzer.py,sha256=W9Pm2AB0kNhbFos3Qh6tpe5gA-x8e566IhIKvJkQJmg,4667
|
20
|
+
jarvis/jarvis_agent/task_manager.py,sha256=hP2PF_mgmmATD3h5HHDdkU_m3_LBOK1eZGZ3gh-9Kh8,4851
|
21
|
+
jarvis/jarvis_agent/tool_executor.py,sha256=gyVahM_d4hzYxiYJD209tVSbXO8SpKi1pohEDmyAmnc,1768
|
22
|
+
jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
|
23
23
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
24
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=CEAtFLyXpStUsJOF-EazudcO1Hh4bRDpUpK4SPJaPHA,30669
|
25
25
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
26
|
-
jarvis/jarvis_code_analysis/code_review.py,sha256=
|
26
|
+
jarvis/jarvis_code_analysis/code_review.py,sha256=8Ai5UdptEYem7Hj-VXIk4zXS6ySuFXRzl0GIc6ZKeLc,35798
|
27
27
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
28
28
|
jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
|
29
29
|
jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
|
@@ -44,84 +44,84 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
|
|
44
44
|
jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
|
45
45
|
jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
|
46
46
|
jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
|
47
|
-
jarvis/jarvis_data/config_schema.json,sha256=
|
47
|
+
jarvis/jarvis_data/config_schema.json,sha256=uNSkluPJyZCZla7lRO4TkwOxsp4L_fNxNSmEbpKA7xI,12853
|
48
48
|
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
49
49
|
jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
50
|
jarvis/jarvis_git_squash/main.py,sha256=6PECdAbTbrsJBRLK1pXBh4hdJ_LADh-XXSic1xJi97E,2255
|
51
|
-
jarvis/jarvis_git_utils/git_commiter.py,sha256=
|
51
|
+
jarvis/jarvis_git_utils/git_commiter.py,sha256=6SiWyuxIRrOnoK6tGI1Vl2qiB242B_J8smmNYQgdl5Q,15261
|
52
52
|
jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
|
53
53
|
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=neKrgFxwLDPWjVrl9uDt1ricNwbLZbv1ZEFh0IkmqZk,22656
|
54
54
|
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
|
55
55
|
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=P5keAhI7SsVjAq3nU9J7pp2Tk4pJDxjdPAb6ZcVPLEc,15279
|
56
56
|
jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
57
|
jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=4tf6Bs8u6Drj4repvuY3-XeH2Sb6ajVMFcW-rQEiGEY,26502
|
58
|
-
jarvis/jarvis_methodology/main.py,sha256=
|
58
|
+
jarvis/jarvis_methodology/main.py,sha256=DtfgvuFdJl7IoccoyTSdZdnwOd2ghBmN55Gu7eZPFX8,11311
|
59
59
|
jarvis/jarvis_multi_agent/__init__.py,sha256=kCgtAX7VvliyEOQxIj2DvNjRAuh6bpNaOtDn60nzph4,6089
|
60
60
|
jarvis/jarvis_multi_agent/main.py,sha256=b9IThFMeUZCYSlgT-VT8r7xeBdrEE_zNT11awEc8IdY,1853
|
61
61
|
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
62
62
|
jarvis/jarvis_platform/ai8.py,sha256=W3947AGMpk3RRBfsfZmf222sEP0VIGoSU0vPkgiVnl0,11683
|
63
|
-
jarvis/jarvis_platform/base.py,sha256=
|
63
|
+
jarvis/jarvis_platform/base.py,sha256=IzahTsZvzSPhQoqczDON1iPD9q5y-FM8N6TfW991gJg,9959
|
64
64
|
jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
|
65
|
-
jarvis/jarvis_platform/kimi.py,sha256=
|
65
|
+
jarvis/jarvis_platform/kimi.py,sha256=k7CVJlTPDTPTBqWwbxZa3HJXGhQtDNf3zv-Lu9sONiw,15520
|
66
66
|
jarvis/jarvis_platform/openai.py,sha256=0YSeDGHRSPQP2haEzFARx_aZH_d_UZ-HSCsJLh2hW5k,8037
|
67
67
|
jarvis/jarvis_platform/registry.py,sha256=1bMy0YZUa8NLzuZlKfC4CBtpa0iniypTxUZk0Hv6g9Y,8415
|
68
|
-
jarvis/jarvis_platform/tongyi.py,sha256=
|
69
|
-
jarvis/jarvis_platform/yuanbao.py,sha256=
|
68
|
+
jarvis/jarvis_platform/tongyi.py,sha256=fw7PvB3FKGbztF29RrY4-YKSXp1-5TMy8RYw-g56ypA,23300
|
69
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=mn7jxrab2CeVRtcwgQxGUhz90RRb9qK1iKz4rmFskOI,23858
|
70
70
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
|
-
jarvis/jarvis_platform_manager/main.py,sha256=
|
71
|
+
jarvis/jarvis_platform_manager/main.py,sha256=_G64sTDNyCcag82UhPZzrlS9t1__Qe_GBR8d16dhQV0,20909
|
72
72
|
jarvis/jarvis_platform_manager/service.py,sha256=DnuRJjD7RvunGt3LpMfUDr-Bps-Nb--frkeaC0nwxj0,14874
|
73
73
|
jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
|
74
74
|
jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
|
75
|
-
jarvis/jarvis_rag/cli.py,sha256=
|
76
|
-
jarvis/jarvis_rag/embedding_manager.py,sha256=
|
77
|
-
jarvis/jarvis_rag/llm_interface.py,sha256=
|
75
|
+
jarvis/jarvis_rag/cli.py,sha256=w79ZVVtNKbmNoYuDDzhprbxLZsDGv5hGe7uwk0ktB6k,16553
|
76
|
+
jarvis/jarvis_rag/embedding_manager.py,sha256=HAPTDn9GeJInpjM_Pz3cndUoH3Arvnjf6AgisoCMrNU,3605
|
77
|
+
jarvis/jarvis_rag/llm_interface.py,sha256=YHdcM7N7R9BgfNSaZWYIWwIVp_wKe00Lv0-nGKpm_5M,4533
|
78
78
|
jarvis/jarvis_rag/query_rewriter.py,sha256=rmXj-j3jjsOR-Dj9Hk5exfCJqZ4uCxMFfvybzurpj5w,4047
|
79
|
-
jarvis/jarvis_rag/rag_pipeline.py,sha256=
|
80
|
-
jarvis/jarvis_rag/reranker.py,sha256=
|
81
|
-
jarvis/jarvis_rag/retriever.py,sha256=
|
79
|
+
jarvis/jarvis_rag/rag_pipeline.py,sha256=f0ktQIfNyBY4kanfttyGz_sZWB9DMhXPzeognEe6lxE,10870
|
80
|
+
jarvis/jarvis_rag/reranker.py,sha256=Uzn4n1bNj4kWyQu9-z-jK_5dAU6drn5jEugML-kFHg8,1885
|
81
|
+
jarvis/jarvis_rag/retriever.py,sha256=1nbw5m15drvYGbocLfGHO2FgXPSDKmT1k2unNk1IrXw,8067
|
82
82
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
|
-
jarvis/jarvis_smart_shell/main.py,sha256=
|
83
|
+
jarvis/jarvis_smart_shell/main.py,sha256=zizfinG0yYETAE2SaRtF4OAxU3r92NdzhUqbPquiEB8,14601
|
84
84
|
jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
|
85
85
|
jarvis/jarvis_stats/cli.py,sha256=KqLH-9Kd_YlBJSke3QXY90XnFmiH2kYkRacL8ygtSsM,12649
|
86
|
-
jarvis/jarvis_stats/stats.py,sha256=
|
87
|
-
jarvis/jarvis_stats/storage.py,sha256=
|
86
|
+
jarvis/jarvis_stats/stats.py,sha256=y3yo1aZvigbC9SAJFAVkoLLKxNYVcqoErTts_3ZYn9o,19193
|
87
|
+
jarvis/jarvis_stats/storage.py,sha256=WvABIbYZLOSHDQZkM4X-cZyFMi7rlbMskFMXqbhFxQk,21697
|
88
88
|
jarvis/jarvis_stats/visualizer.py,sha256=ZIBmGELzs6c7qM01tQql1HF6eFKn6HDGVQfKXRUUIY0,8529
|
89
89
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
90
|
jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
|
91
91
|
jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
|
92
|
-
jarvis/jarvis_tools/clear_memory.py,sha256=
|
93
|
-
jarvis/jarvis_tools/edit_file.py,sha256=
|
94
|
-
jarvis/jarvis_tools/execute_script.py,sha256=
|
95
|
-
jarvis/jarvis_tools/file_analyzer.py,sha256=
|
96
|
-
jarvis/jarvis_tools/generate_new_tool.py,sha256=
|
92
|
+
jarvis/jarvis_tools/clear_memory.py,sha256=_GlwqlCAsoHeB24Y1CnjLdMawRTc6cq55AA8Yi5AZg4,8249
|
93
|
+
jarvis/jarvis_tools/edit_file.py,sha256=8L7JPNGo-St3hhu8DXCFE2NWqbaXrgP8iYUQ7yyfdFs,10225
|
94
|
+
jarvis/jarvis_tools/execute_script.py,sha256=kASNTShHVGlHm7pZZxUeyEZHzHAYiZ-87AzrYVyORMw,6231
|
95
|
+
jarvis/jarvis_tools/file_analyzer.py,sha256=EEeOYNaaIU-tw8i4HlC6-19qNWWxgFQFx1VBC_52ZxY,3915
|
96
|
+
jarvis/jarvis_tools/generate_new_tool.py,sha256=R55VEymgZgmgFcy-dkJP0RHAJkHMRQMBfH0zEYlAhQ8,7866
|
97
97
|
jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
|
98
|
-
jarvis/jarvis_tools/read_code.py,sha256=
|
99
|
-
jarvis/jarvis_tools/read_webpage.py,sha256=
|
100
|
-
jarvis/jarvis_tools/registry.py,sha256=
|
101
|
-
jarvis/jarvis_tools/retrieve_memory.py,sha256=
|
102
|
-
jarvis/jarvis_tools/rewrite_file.py,sha256=
|
103
|
-
jarvis/jarvis_tools/save_memory.py,sha256=
|
104
|
-
jarvis/jarvis_tools/search_web.py,sha256=
|
105
|
-
jarvis/jarvis_tools/virtual_tty.py,sha256=
|
98
|
+
jarvis/jarvis_tools/read_code.py,sha256=Z5HxrSQ6xsjbTJkVKGH8W3oa6WR1TKTFUewChUBolQ0,6101
|
99
|
+
jarvis/jarvis_tools/read_webpage.py,sha256=MHmQk3jiHEXtFd7uf-0VwZwktfxrkUo9WQGZ_FT3ygY,5101
|
100
|
+
jarvis/jarvis_tools/registry.py,sha256=GEdmQ_NiSINP-lxmAmbT-QG6d8YInlY-zgEbbgXGoOM,31255
|
101
|
+
jarvis/jarvis_tools/retrieve_memory.py,sha256=6r826xApFjboyzHMKN8Z3YbriDlfbylPaRj_e2OtuEU,8641
|
102
|
+
jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
|
103
|
+
jarvis/jarvis_tools/save_memory.py,sha256=dYK2H-oB4--RK-YrjmeL0Q7_d9aO6WN5giZzYqLp3pY,7013
|
104
|
+
jarvis/jarvis_tools/search_web.py,sha256=T1mMnYkekrer6FLMrdVHNVWoO7PoguKe67Fkkr0DadI,6183
|
105
|
+
jarvis/jarvis_tools/virtual_tty.py,sha256=E4MzU-yH8N0hrBVzsB71KJJKoT5KN5JlS14MKHDgJi4,25224
|
106
106
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
107
|
-
jarvis/jarvis_tools/cli/main.py,sha256=
|
107
|
+
jarvis/jarvis_tools/cli/main.py,sha256=H_Rdp7WMiPDxuUha_lsWds6PAAwy-2j0IhLlgmjP2Ro,8435
|
108
108
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
109
109
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
|
110
|
-
jarvis/jarvis_utils/clipboard.py,sha256=
|
111
|
-
jarvis/jarvis_utils/config.py,sha256=
|
110
|
+
jarvis/jarvis_utils/clipboard.py,sha256=FOV4-tOMTyFrUZ6fOw68ArQE4gTiSXhLdsVtGVTZoFo,3010
|
111
|
+
jarvis/jarvis_utils/config.py,sha256=my9u8QL-PhByAumthP4oJq2NtH_Wc6wd0DnUguAQUWk,17580
|
112
112
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
113
113
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
114
114
|
jarvis/jarvis_utils/git_utils.py,sha256=AkczUiRcGcOnPfz2v3mdLwV1S41IopiAYD2tjeMTDrE,23586
|
115
115
|
jarvis/jarvis_utils/globals.py,sha256=aTrOHcCgPAeZFLFIWMAMiJCYlmr4XhdFZf5gZ745hnE,8900
|
116
116
|
jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
|
117
|
-
jarvis/jarvis_utils/input.py,sha256=
|
118
|
-
jarvis/jarvis_utils/methodology.py,sha256=
|
119
|
-
jarvis/jarvis_utils/output.py,sha256=
|
117
|
+
jarvis/jarvis_utils/input.py,sha256=F7w0HjTIh-I661bHG-WyW0OTnhKFvge10ULMOZdVIbE,16296
|
118
|
+
jarvis/jarvis_utils/methodology.py,sha256=ypd2hraZWhzOfQ-bjfQprtcB27HBbpdcPW-NAfSAzd0,12640
|
119
|
+
jarvis/jarvis_utils/output.py,sha256=ktj7D6qMbd3nct1N24HQXCafJAaImMlQImGFYT6Cjhc,10678
|
120
120
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
121
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
122
|
-
jarvis_ai_assistant-0.3.
|
123
|
-
jarvis_ai_assistant-0.3.
|
124
|
-
jarvis_ai_assistant-0.3.
|
125
|
-
jarvis_ai_assistant-0.3.
|
126
|
-
jarvis_ai_assistant-0.3.
|
127
|
-
jarvis_ai_assistant-0.3.
|
121
|
+
jarvis/jarvis_utils/utils.py,sha256=iU1DdQvSCjedOgnExLMxSAjcZkSqmV5MAdu2t2RRSjw,51341
|
122
|
+
jarvis_ai_assistant-0.3.19.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
123
|
+
jarvis_ai_assistant-0.3.19.dist-info/METADATA,sha256=BaefbwI75RMWwu5A1k0T-4bKT6o5wsHGW6jBbZTLFso,18216
|
124
|
+
jarvis_ai_assistant-0.3.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
125
|
+
jarvis_ai_assistant-0.3.19.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
|
126
|
+
jarvis_ai_assistant-0.3.19.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
127
|
+
jarvis_ai_assistant-0.3.19.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|