jarvis-ai-assistant 0.1.171__py3-none-any.whl → 0.1.172__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.

Potentially problematic release.


This version of jarvis-ai-assistant might be problematic. Click here for more details.

jarvis/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.1.171"
4
+ __version__ = "0.1.172"
@@ -1,9 +1,8 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import datetime
3
3
  import platform
4
- from typing import Any, Callable, List, Optional, Tuple, Union
4
+ from typing import Any, Callable, List, Optional, Tuple, Union, Protocol
5
5
 
6
- from jarvis.jarvis_tools.registry import ToolRegistry
7
6
  from yaspin import yaspin # type: ignore
8
7
 
9
8
  from jarvis.jarvis_agent.output_handler import OutputHandler
@@ -105,6 +104,13 @@ origin_agent_system_prompt = f"""
105
104
  """
106
105
 
107
106
 
107
+ class OutputHandlerProtocol(Protocol):
108
+ def name(self) -> str: ...
109
+ def can_handle(self, response: str) -> bool: ...
110
+ def prompt(self) -> str: ...
111
+ def handle(self, response: str, agent: Any) -> Tuple[bool, Any]: ...
112
+
113
+
108
114
  class Agent:
109
115
 
110
116
  def set_summary_prompt(self, summary_prompt: str):
@@ -139,7 +145,7 @@ class Agent:
139
145
  model_name: Optional[str] = None,
140
146
  summary_prompt: Optional[str] = None,
141
147
  auto_complete: Optional[bool] = None,
142
- output_handler: List[OutputHandler] = [],
148
+ output_handler: List[OutputHandlerProtocol] = [],
143
149
  use_tools: List[str] = [],
144
150
  input_handler: Optional[List[Callable[[str, Any], Tuple[str, bool]]]] = None,
145
151
  execute_tool_confirm: Optional[bool] = None,
@@ -287,6 +293,8 @@ class Agent:
287
293
  self.first = True
288
294
 
289
295
  def set_use_tools(self, use_tools):
296
+ """设置要使用的工具列表"""
297
+ from jarvis.jarvis_tools.registry import ToolRegistry
290
298
  for handler in self.output_handler:
291
299
  if isinstance(handler, ToolRegistry):
292
300
  if use_tools:
@@ -310,12 +318,9 @@ class Agent:
310
318
  """
311
319
  self.after_tool_call_cb = cb
312
320
 
313
- def get_tool_registry(self) -> Optional[ToolRegistry]:
314
- """获取工具注册器。
315
-
316
- 返回:
317
- ToolRegistry: 工具注册器实例
318
- """
321
+ def get_tool_registry(self) -> Optional[Any]:
322
+ """获取工具注册表实例"""
323
+ from jarvis.jarvis_tools.registry import ToolRegistry
319
324
  for handler in self.output_handler:
320
325
  if isinstance(handler, ToolRegistry):
321
326
  return handler
@@ -505,6 +510,8 @@ class Agent:
505
510
  self.reset_tool_call_count()
506
511
  else:
507
512
  return False, ""
513
+ if self.execute_tool_confirm:
514
+ self.reset_tool_call_count()
508
515
  if not self.execute_tool_confirm or user_confirm(f"需要执行{tool_list[0].name()}确认执行?", True):
509
516
  with yaspin(text=f"正在执行{tool_list[0].name()}...", color="cyan") as spinner:
510
517
  with spinner.hidden():
@@ -834,6 +841,7 @@ arguments:
834
841
  self.prompt = f"{user_input}\n\n以下是历史类似问题的执行经验,可参考:\n{load_methodology(msg, self.get_tool_registry())}"
835
842
  self.first = False
836
843
 
844
+ self.conversation_length = get_context_token_count(self.prompt)
837
845
  while True:
838
846
  try:
839
847
  # 如果对话历史长度超过限制,在提示中添加提醒
@@ -13,6 +13,20 @@ from jarvis.jarvis_utils.utils import is_context_overflow
13
13
 
14
14
 
15
15
  def file_input_handler(user_input: str, agent: Any) -> Tuple[str, bool]:
16
+ """Process user input containing file references and read file contents.
17
+
18
+ Args:
19
+ user_input: Input string that may contain file references in format:
20
+ - 'file_path' (whole file)
21
+ - 'file_path:start_line,end_line' (line range)
22
+ - 'file_path:start_line:end_line' (alternative range format)
23
+ agent: Agent object for further processing (currently unused)
24
+
25
+ Returns:
26
+ Tuple[str, bool]:
27
+ - Processed prompt string with file contents prepended
28
+ - Boolean indicating if context overflow occurred
29
+ """
16
30
  prompt = user_input
17
31
  files = []
18
32
 
@@ -37,7 +51,7 @@ def file_input_handler(user_input: str, agent: Any) -> Tuple[str, bool]:
37
51
  except FileNotFoundError:
38
52
  PrettyOutput.print(f"文件不存在: {file_path}", OutputType.WARNING)
39
53
  continue
40
- # Process start line
54
+ # Process start line (0 means whole file, negative means from end)
41
55
  if raw_start == 0: # 0表示整个文件
42
56
  start_line = 1
43
57
  end_line = total_lines
@@ -85,6 +99,7 @@ def file_input_handler(user_input: str, agent: Any) -> Tuple[str, bool]:
85
99
  if result["success"]:
86
100
  spinner.text = "文件读取完成"
87
101
  spinner.ok("✅")
102
+ # Prepend file contents to prompt and check for overflow
88
103
  prompt = result["stdout"] + "\n" + prompt
89
104
  if is_context_overflow(prompt):
90
105
  return old_prompt, False
@@ -133,4 +133,4 @@ class BasePlatform(ABC):
133
133
  @abstractmethod
134
134
  def support_web(self) -> bool:
135
135
  """Check if platform supports web functionality"""
136
- raise NotImplementedError("support_web is not implemented")
136
+ return False
@@ -65,3 +65,6 @@ class HumanPlatform(BasePlatform):
65
65
  def name(self) -> str:
66
66
  """平台名称"""
67
67
  return self.model_name
68
+
69
+ def support_web(self) -> bool:
70
+ return False
@@ -115,3 +115,6 @@ class OpenAIModel(BasePlatform):
115
115
  else:
116
116
  self.messages = []
117
117
  return True
118
+
119
+ def support_web(self) -> bool:
120
+ return False
File without changes
@@ -0,0 +1,127 @@
1
+
2
+ import sys
3
+ from jarvis.jarvis_tools.registry import ToolRegistry
4
+ from jarvis.jarvis_utils.output import OutputType, PrettyOutput
5
+ from jarvis.jarvis_utils.utils import init_env
6
+
7
+
8
+ def main() -> int:
9
+ """命令行工具入口,提供工具列表查看和工具调用功能"""
10
+ import argparse
11
+ import json
12
+
13
+ init_env()
14
+
15
+ parser = argparse.ArgumentParser(description="Jarvis 工具系统命令行界面")
16
+ subparsers = parser.add_subparsers(dest="command", help="命令")
17
+
18
+ # 列出工具子命令
19
+ list_parser = subparsers.add_parser("list", help="列出所有可用工具")
20
+ list_parser.add_argument("--json", action="store_true", help="以JSON格式输出")
21
+ list_parser.add_argument("--detailed", action="store_true", help="显示详细信息")
22
+
23
+ # 调用工具子命令
24
+ call_parser = subparsers.add_parser("call", help="调用指定工具")
25
+ call_parser.add_argument("tool_name", help="要调用的工具名称")
26
+ call_parser.add_argument("--args", type=str, help="工具参数 (JSON格式)")
27
+ call_parser.add_argument(
28
+ "--args-file", type=str, help="从文件加载工具参数 (JSON格式)"
29
+ )
30
+
31
+ args = parser.parse_args()
32
+
33
+ # 初始化工具注册表
34
+ registry = ToolRegistry()
35
+
36
+ if args.command == "list":
37
+ tools = registry.get_all_tools()
38
+
39
+ if args.json:
40
+ if args.detailed:
41
+ print(json.dumps(tools, indent=2, ensure_ascii=False))
42
+ else:
43
+ simple_tools = [
44
+ {"name": t["name"], "description": t["description"]} for t in tools
45
+ ]
46
+ print(json.dumps(simple_tools, indent=2, ensure_ascii=False))
47
+ else:
48
+ PrettyOutput.section("可用工具列表", OutputType.SYSTEM)
49
+ for tool in tools:
50
+ print(f"\n✅ {tool['name']}")
51
+ print(f" 描述: {tool['description']}")
52
+ if args.detailed:
53
+ print(f" 参数:")
54
+ print(tool["parameters"])
55
+
56
+ elif args.command == "call":
57
+ tool_name = args.tool_name
58
+ tool_obj = registry.get_tool(tool_name)
59
+
60
+ if not tool_obj:
61
+ PrettyOutput.print(f"错误: 工具 '{tool_name}' 不存在", OutputType.ERROR)
62
+ available_tools = ", ".join([t["name"] for t in registry.get_all_tools()])
63
+ print(f"可用工具: {available_tools}")
64
+ return 1
65
+
66
+ # 获取参数
67
+ tool_args = {}
68
+ if args.args:
69
+ try:
70
+ tool_args = json.loads(args.args)
71
+ except json.JSONDecodeError:
72
+ PrettyOutput.print("错误: 参数必须是有效的JSON格式", OutputType.ERROR)
73
+ return 1
74
+
75
+ elif args.args_file:
76
+ try:
77
+ with open(args.args_file, "r", encoding="utf-8") as f:
78
+ tool_args = json.load(f)
79
+ except (json.JSONDecodeError, FileNotFoundError) as e:
80
+ PrettyOutput.print(
81
+ f"错误: 无法从文件加载参数: {str(e)}", OutputType.ERROR
82
+ )
83
+ return 1
84
+
85
+ # 检查必需参数
86
+ required_params = tool_obj.parameters.get("required", [])
87
+ missing_params = [p for p in required_params if p not in tool_args]
88
+
89
+ if missing_params:
90
+ PrettyOutput.print(
91
+ f"错误: 缺少必需参数: {', '.join(missing_params)}", OutputType.ERROR
92
+ )
93
+ print("\n参数说明:")
94
+ params = tool_obj.parameters.get("properties", {})
95
+ for param_name in required_params:
96
+ param_info = params.get(param_name, {})
97
+ desc = param_info.get("description", "无描述")
98
+ print(f" - {param_name}: {desc}")
99
+ return 1
100
+
101
+ # 执行工具
102
+ result = registry.execute_tool(tool_name, tool_args)
103
+
104
+ # 显示结果
105
+ if result["success"]:
106
+ PrettyOutput.section(f"工具 {tool_name} 执行成功", OutputType.SUCCESS)
107
+ else:
108
+ PrettyOutput.section(f"工具 {tool_name} 执行失败", OutputType.ERROR)
109
+
110
+ if result.get("stdout"):
111
+ print("\n输出:")
112
+ print(result["stdout"])
113
+
114
+ if result.get("stderr"):
115
+ PrettyOutput.print("\n错误:", OutputType.ERROR)
116
+ print(result["stderr"])
117
+
118
+ return 0 if result["success"] else 1
119
+
120
+ else:
121
+ parser.print_help()
122
+
123
+ return 0
124
+
125
+
126
+ if __name__ == "__main__":
127
+ sys.exit(main())
@@ -5,11 +5,10 @@ import re
5
5
  import sys
6
6
  import tempfile
7
7
  import os
8
- from typing import Any, Callable, Dict, List, Optional, Tuple
8
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Protocol
9
9
 
10
10
  import yaml
11
11
 
12
- from jarvis.jarvis_agent.output_handler import OutputHandler
13
12
  from jarvis.jarvis_platform.registry import PlatformRegistry
14
13
  from jarvis.jarvis_tools.base import Tool
15
14
  from jarvis.jarvis_utils.config import get_data_dir
@@ -106,7 +105,13 @@ arguments:
106
105
  """
107
106
 
108
107
 
109
- class ToolRegistry(OutputHandler):
108
+ class OutputHandlerProtocol(Protocol):
109
+ def name(self) -> str: ...
110
+ def can_handle(self, response: str) -> bool: ...
111
+ def prompt(self) -> str: ...
112
+ def handle(self, response: str, agent: Any) -> Tuple[bool, Any]: ...
113
+
114
+ class ToolRegistry(OutputHandlerProtocol):
110
115
 
111
116
  def name(self) -> str:
112
117
  return "TOOL_CALL"
@@ -654,124 +659,3 @@ class ToolRegistry(OutputHandler):
654
659
  PrettyOutput.print(f"工具执行失败:{str(e)}", OutputType.ERROR)
655
660
  return f"工具调用失败: {str(e)}"
656
661
 
657
-
658
- def main() -> int:
659
- """命令行工具入口,提供工具列表查看和工具调用功能"""
660
- import argparse
661
- import json
662
-
663
- init_env()
664
-
665
- parser = argparse.ArgumentParser(description="Jarvis 工具系统命令行界面")
666
- subparsers = parser.add_subparsers(dest="command", help="命令")
667
-
668
- # 列出工具子命令
669
- list_parser = subparsers.add_parser("list", help="列出所有可用工具")
670
- list_parser.add_argument("--json", action="store_true", help="以JSON格式输出")
671
- list_parser.add_argument("--detailed", action="store_true", help="显示详细信息")
672
-
673
- # 调用工具子命令
674
- call_parser = subparsers.add_parser("call", help="调用指定工具")
675
- call_parser.add_argument("tool_name", help="要调用的工具名称")
676
- call_parser.add_argument("--args", type=str, help="工具参数 (JSON格式)")
677
- call_parser.add_argument(
678
- "--args-file", type=str, help="从文件加载工具参数 (JSON格式)"
679
- )
680
-
681
- args = parser.parse_args()
682
-
683
- # 初始化工具注册表
684
- registry = ToolRegistry()
685
-
686
- if args.command == "list":
687
- tools = registry.get_all_tools()
688
-
689
- if args.json:
690
- if args.detailed:
691
- print(json.dumps(tools, indent=2, ensure_ascii=False))
692
- else:
693
- simple_tools = [
694
- {"name": t["name"], "description": t["description"]} for t in tools
695
- ]
696
- print(json.dumps(simple_tools, indent=2, ensure_ascii=False))
697
- else:
698
- PrettyOutput.section("可用工具列表", OutputType.SYSTEM)
699
- for tool in tools:
700
- print(f"\n✅ {tool['name']}")
701
- print(f" 描述: {tool['description']}")
702
- if args.detailed:
703
- print(f" 参数:")
704
- print(tool["parameters"])
705
-
706
- elif args.command == "call":
707
- tool_name = args.tool_name
708
- tool_obj = registry.get_tool(tool_name)
709
-
710
- if not tool_obj:
711
- PrettyOutput.print(f"错误: 工具 '{tool_name}' 不存在", OutputType.ERROR)
712
- available_tools = ", ".join([t["name"] for t in registry.get_all_tools()])
713
- print(f"可用工具: {available_tools}")
714
- return 1
715
-
716
- # 获取参数
717
- tool_args = {}
718
- if args.args:
719
- try:
720
- tool_args = json.loads(args.args)
721
- except json.JSONDecodeError:
722
- PrettyOutput.print("错误: 参数必须是有效的JSON格式", OutputType.ERROR)
723
- return 1
724
-
725
- elif args.args_file:
726
- try:
727
- with open(args.args_file, "r", encoding="utf-8") as f:
728
- tool_args = json.load(f)
729
- except (json.JSONDecodeError, FileNotFoundError) as e:
730
- PrettyOutput.print(
731
- f"错误: 无法从文件加载参数: {str(e)}", OutputType.ERROR
732
- )
733
- return 1
734
-
735
- # 检查必需参数
736
- required_params = tool_obj.parameters.get("required", [])
737
- missing_params = [p for p in required_params if p not in tool_args]
738
-
739
- if missing_params:
740
- PrettyOutput.print(
741
- f"错误: 缺少必需参数: {', '.join(missing_params)}", OutputType.ERROR
742
- )
743
- print("\n参数说明:")
744
- params = tool_obj.parameters.get("properties", {})
745
- for param_name in required_params:
746
- param_info = params.get(param_name, {})
747
- desc = param_info.get("description", "无描述")
748
- print(f" - {param_name}: {desc}")
749
- return 1
750
-
751
- # 执行工具
752
- result = registry.execute_tool(tool_name, tool_args)
753
-
754
- # 显示结果
755
- if result["success"]:
756
- PrettyOutput.section(f"工具 {tool_name} 执行成功", OutputType.SUCCESS)
757
- else:
758
- PrettyOutput.section(f"工具 {tool_name} 执行失败", OutputType.ERROR)
759
-
760
- if result.get("stdout"):
761
- print("\n输出:")
762
- print(result["stdout"])
763
-
764
- if result.get("stderr"):
765
- PrettyOutput.print("\n错误:", OutputType.ERROR)
766
- print(result["stderr"])
767
-
768
- return 0 if result["success"] else 1
769
-
770
- else:
771
- parser.print_help()
772
-
773
- return 0
774
-
775
-
776
- if __name__ == "__main__":
777
- sys.exit(main())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.171
3
+ Version: 0.1.172
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
@@ -333,7 +333,7 @@ MCP(模型上下文协议)。在`~/.jarvis/tools/mcp/`中创建YAML配置文件
333
333
 
334
334
  #### 本地MCP配置(`stdio`模式)
335
335
  ```yaml
336
- type: local
336
+ type: stdio
337
337
  name: MCP名称
338
338
  command: 可执行命令
339
339
  args: [参数列表] # 可选
@@ -343,7 +343,7 @@ env: # 可选环境变量
343
343
 
344
344
  #### 远程MCP配置(`sse`模式)
345
345
  ```yaml
346
- type: remote
346
+ type: sse
347
347
  name: MCP名称
348
348
  base_url: http://example.com/api
349
349
  auth_token: 认证令牌 # 可选
@@ -1,7 +1,7 @@
1
- jarvis/__init__.py,sha256=VnCd0RxDGsMy-0sOoD8gB7obLOpzOBEThebur7vlvxI,74
2
- jarvis/jarvis_agent/__init__.py,sha256=J3teZnIgaGqztT3qgtyZA-zYJHKzK6NsyMNDlCKKChU,31045
1
+ jarvis/__init__.py,sha256=xlS30pokR6R8M_N7iaUzxdOOHtlV3Kj-wnzfUoKUkZs,74
2
+ jarvis/jarvis_agent/__init__.py,sha256=5N3W4AfkJ4nDxFjSDd70kQ0gI4b61-3VdGRds2SgE6Y,31484
3
3
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=KhvlV_QdB3P-M0TCkWvdxidNie1jU7KoMOqTIXCpwwA,1529
4
- jarvis/jarvis_agent/file_input_handler.py,sha256=EwaitWczbwLCKNpWU9C7m829_G5uLZ_hNcVXlX2ANes,3437
4
+ jarvis/jarvis_agent/file_input_handler.py,sha256=cIiE0pwMJVe1VfeNw8Dpm8mM_gwTcre-nxLstFjoq4k,4152
5
5
  jarvis/jarvis_agent/jarvis.py,sha256=IuM-A9KZd1jqOFszB2l-Ua1FE5uVGvvNia1SSgp7Jgg,5963
6
6
  jarvis/jarvis_agent/main.py,sha256=IAD59fEMWWSSAtHJhOQMPs_NMoKtcYjrxlTvhCHEVII,2626
7
7
  jarvis/jarvis_agent/output_handler.py,sha256=7qori-RGrQmdiFepoEe3oPPKJIvRt90l_JDmvCoa4zA,1219
@@ -49,10 +49,10 @@ jarvis/jarvis_methodology/main.py,sha256=_KDGEQw6j_VZ9O8eDe-c8F84zl6JrKmsNRva9PG
49
49
  jarvis/jarvis_multi_agent/__init__.py,sha256=LEJofDjh80U34RyZv2ECAzpt2zkhA0Jn3KZh-ABoAKA,4343
50
50
  jarvis/jarvis_multi_agent/main.py,sha256=Z6N5VMjzaernnRjPkqgYRv09cIhWIFQ6a__AqHA8xrQ,1567
51
51
  jarvis/jarvis_platform/__init__.py,sha256=0YnsUoM4JkIBOtImFdjfuDbrqQZT3dEaAwSJ62DrpCc,104
52
- jarvis/jarvis_platform/base.py,sha256=cppBTsnQRppKRHdrwxoeiEXJYXdtsNnt4GjbF_kw-PM,5335
53
- jarvis/jarvis_platform/human.py,sha256=0sbEhST4rKKGGV45dAdJqvVBnRPPeCe6HqxR245S4Z8,2462
52
+ jarvis/jarvis_platform/base.py,sha256=fHwjDvkw7A6KhEvqNsqBjmn80ezkJkyjxvCKvAXpAQg,5288
53
+ jarvis/jarvis_platform/human.py,sha256=5hfYSp0K7VmB_J2IyLwaVGOrxsaNIEZwsWvs1nF224U,2518
54
54
  jarvis/jarvis_platform/kimi.py,sha256=yz7OVT54YDSUVuFlijDB7VdsJmtqRgj-qYKPHy8f0WQ,16787
55
- jarvis/jarvis_platform/openai.py,sha256=8enxCISjHtCs0qoqEag68v68m_clKr7jgEpUA0CyUBo,4139
55
+ jarvis/jarvis_platform/openai.py,sha256=VDlWyOq4JrSPklz-D1Bu5DgDGRChebay5WYqSBXs-ww,4195
56
56
  jarvis/jarvis_platform/registry.py,sha256=UjCdPT9WIRxU-F0uuPpKmKRRCcNNxjr-bRTEPgRSNx4,7740
57
57
  jarvis/jarvis_platform/yuanbao.py,sha256=gPFy03DA0PemBNQTtxbDCBJ6mqUtSZclfiZbdNq1Ivk,22036
58
58
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -77,10 +77,12 @@ jarvis/jarvis_tools/lsp_get_diagnostics.py,sha256=paz1CVZ2Y8nk0U74n1QiG01oDINiZq
77
77
  jarvis/jarvis_tools/methodology.py,sha256=Md8W2et0xUiuTjUSRCdnlwEPYqah2dCAAkxW_95BXBY,5238
78
78
  jarvis/jarvis_tools/read_code.py,sha256=pgztSBRh8RORFalqwzzsLHQogooFvDm1ePBL0E5O1C4,5961
79
79
  jarvis/jarvis_tools/read_webpage.py,sha256=LLvAOvaQJodaeNJKQ6dU9MYEE227NMdHyLs7esluUQ4,2217
80
- jarvis/jarvis_tools/registry.py,sha256=9Rr8F0lfsvSlFZ_X8yQ8XPohB_Jg7mYutTB1tq9TJHw,26750
80
+ jarvis/jarvis_tools/registry.py,sha256=tqw_umqj40bP2AxBYztTZGXZCe8F4qV0PzZqCDpOMhg,22602
81
81
  jarvis/jarvis_tools/rewrite_file.py,sha256=rEPPSNU7uF1iKfEW9npEpZJ2LSoQXjt2OC-_troBToE,7003
82
82
  jarvis/jarvis_tools/search_web.py,sha256=-h1WYOqTcYC_8fdkm-4RfwKpbtLTVxOfRROul51NgO0,951
83
83
  jarvis/jarvis_tools/virtual_tty.py,sha256=AKAaKY5KcPxifNQoXjzHaL4U6EUVA7irHLwVvz2wLVs,16396
84
+ jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ jarvis/jarvis_tools/cli/main.py,sha256=52_aJh856B2a1upkPtLGxRU5s0M-7IG36jwPWaPyiq0,4513
84
86
  jarvis/jarvis_utils/__init__.py,sha256=l-fsyQ-KzyqAhrJYur8eZAqsgaifGzSm24R2qtRGJ0g,849
85
87
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=A-cJ8deht2vDl2iKRhoZ7qECyJ6sboVH5Zx-L9vIBUs,4314
86
88
  jarvis/jarvis_utils/config.py,sha256=-x66P2PY8Ne02W1Yg0vofcMlErJq1Y99C5Sc6_n6Cv8,4538
@@ -93,9 +95,9 @@ jarvis/jarvis_utils/methodology.py,sha256=P1S_J9zxTed0Unpj0r-w14zpj8lEe_3bXgq1uv
93
95
  jarvis/jarvis_utils/output.py,sha256=PVG4fQ3P-eGOZUNZTowPtnjqq3GN91OE8fHa68lFOOg,8440
94
96
  jarvis/jarvis_utils/tag.py,sha256=YJHmuedLb7_AiqvKQetHr4R1FxyzIh7HN0RRkWMmYbU,429
95
97
  jarvis/jarvis_utils/utils.py,sha256=iIcefLa1kvALkmQ19BLWDplmxrcOjtxWAgBIxrs8ytg,4439
96
- jarvis_ai_assistant-0.1.171.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
97
- jarvis_ai_assistant-0.1.171.dist-info/METADATA,sha256=E1RImbgBwVokaITcf4AY5HxorOnwMihvWs063pBrorE,14546
98
- jarvis_ai_assistant-0.1.171.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
99
- jarvis_ai_assistant-0.1.171.dist-info/entry_points.txt,sha256=cKz_9SEpOvElTubKPMZMAdskD4GHz-NyKWRNssIVAWE,973
100
- jarvis_ai_assistant-0.1.171.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
101
- jarvis_ai_assistant-0.1.171.dist-info/RECORD,,
98
+ jarvis_ai_assistant-0.1.172.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
99
+ jarvis_ai_assistant-0.1.172.dist-info/METADATA,sha256=nFYUFWp4qcSvq2L-vuDB_T_X4joJRbUyFmFSNOAbuWk,14543
100
+ jarvis_ai_assistant-0.1.172.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
101
+ jarvis_ai_assistant-0.1.172.dist-info/entry_points.txt,sha256=rjj61tZ7ahLi1R-JkJmX-IzIPPHD8mnwDZap1CnMe2s,973
102
+ jarvis_ai_assistant-0.1.172.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
103
+ jarvis_ai_assistant-0.1.172.dist-info/RECORD,,
@@ -13,7 +13,7 @@ jarvis-methodology = jarvis.jarvis_methodology.main:main
13
13
  jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
14
14
  jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
15
15
  jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
16
- jarvis-tool = jarvis.jarvis_tools.registry:main
16
+ jarvis-tool = jarvis.jarvis_tools.cli.main:main
17
17
  jca = jarvis.jarvis_code_agent.code_agent:main
18
18
  jgc = jarvis.jarvis_git_utils.git_commiter:main
19
19
  jss = jarvis.jarvis_smart_shell.main:main