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.
Files changed (55) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +23 -10
  3. jarvis/jarvis_agent/edit_file_handler.py +8 -13
  4. jarvis/jarvis_agent/jarvis.py +13 -3
  5. jarvis/jarvis_agent/memory_manager.py +4 -4
  6. jarvis/jarvis_agent/methodology_share_manager.py +2 -2
  7. jarvis/jarvis_agent/task_analyzer.py +4 -3
  8. jarvis/jarvis_agent/task_manager.py +6 -6
  9. jarvis/jarvis_agent/tool_executor.py +2 -2
  10. jarvis/jarvis_agent/tool_share_manager.py +2 -2
  11. jarvis/jarvis_code_agent/code_agent.py +21 -29
  12. jarvis/jarvis_code_analysis/code_review.py +2 -4
  13. jarvis/jarvis_data/config_schema.json +5 -0
  14. jarvis/jarvis_git_utils/git_commiter.py +17 -18
  15. jarvis/jarvis_methodology/main.py +12 -12
  16. jarvis/jarvis_platform/base.py +21 -13
  17. jarvis/jarvis_platform/kimi.py +13 -13
  18. jarvis/jarvis_platform/tongyi.py +17 -15
  19. jarvis/jarvis_platform/yuanbao.py +11 -11
  20. jarvis/jarvis_platform_manager/main.py +12 -22
  21. jarvis/jarvis_rag/cli.py +36 -32
  22. jarvis/jarvis_rag/embedding_manager.py +11 -6
  23. jarvis/jarvis_rag/llm_interface.py +6 -5
  24. jarvis/jarvis_rag/rag_pipeline.py +9 -8
  25. jarvis/jarvis_rag/reranker.py +3 -2
  26. jarvis/jarvis_rag/retriever.py +18 -8
  27. jarvis/jarvis_smart_shell/main.py +306 -46
  28. jarvis/jarvis_stats/stats.py +40 -0
  29. jarvis/jarvis_stats/storage.py +220 -9
  30. jarvis/jarvis_tools/clear_memory.py +0 -11
  31. jarvis/jarvis_tools/cli/main.py +18 -17
  32. jarvis/jarvis_tools/edit_file.py +4 -4
  33. jarvis/jarvis_tools/execute_script.py +5 -1
  34. jarvis/jarvis_tools/file_analyzer.py +6 -6
  35. jarvis/jarvis_tools/generate_new_tool.py +6 -17
  36. jarvis/jarvis_tools/read_code.py +3 -6
  37. jarvis/jarvis_tools/read_webpage.py +74 -13
  38. jarvis/jarvis_tools/registry.py +8 -28
  39. jarvis/jarvis_tools/retrieve_memory.py +5 -16
  40. jarvis/jarvis_tools/rewrite_file.py +0 -4
  41. jarvis/jarvis_tools/save_memory.py +2 -10
  42. jarvis/jarvis_tools/search_web.py +5 -8
  43. jarvis/jarvis_tools/virtual_tty.py +22 -40
  44. jarvis/jarvis_utils/clipboard.py +3 -3
  45. jarvis/jarvis_utils/config.py +8 -0
  46. jarvis/jarvis_utils/input.py +67 -27
  47. jarvis/jarvis_utils/methodology.py +3 -3
  48. jarvis/jarvis_utils/output.py +1 -7
  49. jarvis/jarvis_utils/utils.py +44 -58
  50. {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/METADATA +1 -1
  51. {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/RECORD +55 -55
  52. {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/WHEEL +0 -0
  53. {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/entry_points.txt +0 -0
  54. {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/licenses/LICENSE +0 -0
  55. {jarvis_ai_assistant-0.3.17.dist-info → jarvis_ai_assistant-0.3.19.dist-info}/top_level.txt +0 -0
@@ -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
- return session.prompt(f"{tip}", default=default, style=style)
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 = False
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
- f"{Fore.YELLOW}提示:当前支持多行输入。输入完成请使用 Ctrl+J 确认;Enter 仅用于换行。{ColoramaStyle.RESET_ALL}"
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({"prompt": "ansicyan"})
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(f"{Fore.GREEN}{tip}{ColoramaStyle.RESET_ALL}")
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(prompt, style=style, pre_run=lambda: None).strip()
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(f"📁 加载方法论文件...")
206
+ PrettyOutput.print("📁 加载方法论文件...", OutputType.INFO)
207
207
  methodologies = _load_all_methodologies()
208
208
  if not methodologies:
209
- print(f"没有找到方法论文件")
209
+ PrettyOutput.print("没有找到方法论文件", OutputType.WARNING)
210
210
  return ""
211
- print(f"加载方法论文件完成 (共 {len(methodologies)} 个)")
211
+ PrettyOutput.print(f"加载方法论文件完成 (共 {len(methodologies)} 个)", OutputType.SUCCESS)
212
212
 
213
213
  if platform_name:
214
214
  platform = PlatformRegistry().create_platform(platform_name)
@@ -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
- if len(text.strip().splitlines()) > 1:
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()
@@ -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
- stats_data = StatsManager.get_stats(
221
- metric_name=metric,
222
- start_time=datetime(2000, 1, 1),
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 stats_data and isinstance(stats_data, dict) and "records" in stats_data:
227
- # 按照标签分组统计
228
- tag_totals: Dict[str, float] = {}
229
- for record in stats_data["records"]:
230
- tags = record.get("tags", {})
231
- group = tags.get("group", "other")
232
- tag_totals[group] = tag_totals.get(group, 0) + record["value"]
233
-
234
- # 根据标签将指标分配到相应类别
235
- for group, total in tag_totals.items():
236
- if total > 0:
237
- if group == "tool":
238
- categorized_stats["tool"]["metrics"][metric] = int(total)
239
- elif group == "code_agent":
240
- # 根据指标名称细分
241
- if metric.startswith("code_lines_"):
242
- categorized_stats["lines"]["metrics"][metric] = int(
243
- total
244
- )
245
- elif "commit" in metric:
246
- categorized_stats["commit"]["metrics"][metric] = int(
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"执行失败: {str(e)}, 等待 {sleep_time}s...", OutputType.WARNING
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"执行失败, 等待 {sleep_time}s...", OutputType.WARNING)
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
- PrettyOutput.print(f"正在更新{repo_type}库 '{repo_path.name}'...", OutputType.INFO)
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
- PrettyOutput.print(f"执行每日{repo_type}库更新检查...", OutputType.INFO)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.17
3
+ Version: 0.3.19
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,14 +1,14 @@
1
- jarvis/__init__.py,sha256=B3aeVws2GyKWNL5gcAastwUvTv8_xzc1QrhuTZ8zGJs,74
2
- jarvis/jarvis_agent/__init__.py,sha256=CkFa66l5lM0-_zlzApwBxTYbrnbC4_NqdD4QuK3H1VQ,32614
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=w-byNJ4TN_SlV3djjfFC7OksySOFGrM8ku49w662dzc,11854
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=SrlAZdt6kad78dRbCbIdrus16PL1rE2QE9i54qItSmk,18789
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=F7HTNzdN1_-cSygnz7zKSJRJvPLUOosqcXQeiW8zG4U,5266
11
- jarvis/jarvis_agent/methodology_share_manager.py,sha256=vwWNexluTXSI3qeNP3zJAemOjWW37o_1AlqDR1C8wCI,6910
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=-fQ9YBYFcc-Z1FSoDIPzRfAgkREFoIOXtU2TdBkB-e0,4656
20
- jarvis/jarvis_agent/task_manager.py,sha256=IRfkjkeSjSo5rDKmzICdsJtJiVfTOf3Xc13qMVwl5ZM,4689
21
- jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
22
- jarvis/jarvis_agent/tool_share_manager.py,sha256=R5ONIQlDXX9pFq3clwHFhEW8BAJ3ECaR2DqWCEC9tzM,5205
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=GhY79JRzyLeeNKxNJtgieO9UvqQl36S7W521ZyOwjMY,30967
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=OLoMtXz7Kov6cVTdBoxq_OsX_j0rb7Rk3or5tKgiLpo,36023
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=MdVuj0zSFlo0X5mA-Oxtj0S5tx9GslFN9VInQQwrmbQ,12660
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=GpSnVa72b9yWoJBbK1Qp_Kb4iimwVW6K7JjXF5pCfnk,15894
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=6QF8hH3vB6rfxim0fPR34uVPf41zVpb4ZLqrFN2qONg,10983
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=VyZhXgtGbUTrhXaDwA3kYUo03mfM-nNCYaTGgpY_TZQ,9365
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=imbH575fazyDai5pxB6zbHmzwzS4Ig0RP7WVpni-ooI,15175
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=KXEMfylTU91kHisXSaiz8dxzNXK_d7XD9vjuw4yXuVs,22891
69
- jarvis/jarvis_platform/yuanbao.py,sha256=32hjk1Ju1tqrMpF47JsSuaxej5K-gUPxjsDu9g0briY,23575
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=5k7D-tBsNjXPH07eO4f-0gwyUY7STGSNBSl1PbLq15A,20966
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=bIQKibp8swJDyfFBXaiX5C20LHN_2W2knO2I-MQp58c,15620
76
- jarvis/jarvis_rag/embedding_manager.py,sha256=BoV6Vr_3F4zbjBAOQ1FdEBnJXGPwBkv1IEkdRP9CgFw,3338
77
- jarvis/jarvis_rag/llm_interface.py,sha256=eZHibNHD5dFK9yolr3hYNNhAEZUsPA-cIf1uHapI2h8,4338
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=MSVfTVqDRK1_m0SMeOBcqirAyrd8GsVC27vanMbUCUY,10598
80
- jarvis/jarvis_rag/reranker.py,sha256=wYUDIMHQL8_tFcQ7GFn_zYHTE1AbKk4a9TRoN2lKtA8,1767
81
- jarvis/jarvis_rag/retriever.py,sha256=vI-T_L6zdGOm2YCq98CEx0cevz8lKp0iVfjV4nQ3oJs,7681
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=ReCC9bWPlgl84ylI0uvdzlE3J6fS0XzFSLOpQQyDcMY,6008
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=qLyOJvWAv0fgV7oohAUSQ2W2E1Hr4wWgEQXDOiI-4Cg,17674
87
- jarvis/jarvis_stats/storage.py,sha256=MBQRxExIWdePXzY1EE8JAs1IEpMqamImpgjruqt_u9A,12853
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=HQMK70UJhhDgPPHozGaTpYizzQblUzYRwPbvD1z3z6o,8730
93
- jarvis/jarvis_tools/edit_file.py,sha256=hM345E9rxS-EkqCZpwwizL6fmPdTadtB798tEO5Ce3g,10417
94
- jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
95
- jarvis/jarvis_tools/file_analyzer.py,sha256=aVe1jBSp0YmlypihxrGADJpYrU_7CxDETxGUNySuSlI,4044
96
- jarvis/jarvis_tools/generate_new_tool.py,sha256=uaWKlDMGjetvvwKTj0_AVTdmd14IktRbU3cpzKCBiIQ,8728
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=EnI-R-5HyIQYhMD391nZWXHIuHHBF-OJIRE0QpLcPX4,6417
99
- jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
100
- jarvis/jarvis_tools/registry.py,sha256=IJ2ExlNqje2hA9MgiGnd0SCyy0zqAhxuZ76s_98FGwU,32668
101
- jarvis/jarvis_tools/retrieve_memory.py,sha256=0UBZm4wQTXLTj5WHXR9fjsiIDQh-Z2UINVu8cJ12YYg,9488
102
- jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
103
- jarvis/jarvis_tools/save_memory.py,sha256=DjeFb38OtK9Y_RpWYHz8vL72JdauXZTlc_Y0FUQBtiM,7486
104
- jarvis/jarvis_tools/search_web.py,sha256=Ch11Pacxk83WDfhXUDfavL3S9JYl72HkZyFQjFZbSew,6764
105
- jarvis/jarvis_tools/virtual_tty.py,sha256=LTsg1PlsPvgaLShUaxpAKwTpyjXRr0l0qSREI7Q-fBc,26349
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=GsfZJ4OS4Hvxh0H2XiLkgbzm-ajBsb4c0LyjuIAAatE,7718
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=WgbQIQR2sh7_5ZzeX04eT3zXx_mxQbKyJOZXgGX_TcI,2907
111
- jarvis/jarvis_utils/config.py,sha256=dB6zivA66fPjoTmSXxvu5Y5R0MF-ERP9aUPA4fxkD64,17320
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=YO1jdK9HObkGO44XfXHNNN3HNneD_WrbANYkfJmrdJU,14489
118
- jarvis/jarvis_utils/methodology.py,sha256=IIMU17WVSunsWXsnXROd4G77LxgYs4xEC_xm_0CDkjw,12554
119
- jarvis/jarvis_utils/output.py,sha256=QRLlKObQKT0KuRSeZRqYb7NlTQvsd1oZXZ41WxeWEuU,10894
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=UMDOAQsIdlgobTN14ToKarLq3HeKUQrhUsSbfrFUPYo,52132
122
- jarvis_ai_assistant-0.3.17.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
123
- jarvis_ai_assistant-0.3.17.dist-info/METADATA,sha256=Vb3yaWH1VcDsh5G_4EAt4UzSZS1N_HZ22wdzyJN05x8,18216
124
- jarvis_ai_assistant-0.3.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
- jarvis_ai_assistant-0.3.17.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
126
- jarvis_ai_assistant-0.3.17.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
127
- jarvis_ai_assistant-0.3.17.dist-info/RECORD,,
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,,