jarvis-ai-assistant 0.1.46__py3-none-any.whl → 0.1.48__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
jarvis/utils.py CHANGED
@@ -13,25 +13,23 @@ from prompt_toolkit.formatted_text import FormattedText
13
13
  # 初始化colorama
14
14
  colorama.init()
15
15
 
16
-
17
16
  class OutputType(Enum):
18
17
  SYSTEM = "system" # AI助手消息
19
18
  CODE = "code" # 代码相关
20
19
  RESULT = "result" # 工具执行结果
21
20
  ERROR = "error" # 错误信息
22
21
  INFO = "info" # 系统提示
23
- PLANNING = "planning" # 任务规划
24
- PROGRESS = "progress" # 执行进度
22
+ PLANNING = "planning" # 任务规划
23
+ PROGRESS = "progress" # 执行进度
25
24
  SUCCESS = "success" # 成功信息
26
25
  WARNING = "warning" # 警告信息
27
26
  DEBUG = "debug" # 调试信息
28
27
  USER = "user" # 用户输入
29
28
  TOOL = "tool" # 工具调用
30
29
 
31
-
32
30
  class PrettyOutput:
33
31
  """美化输出类"""
34
-
32
+
35
33
  # 颜色方案 - 只使用前景色
36
34
  COLORS = {
37
35
  OutputType.SYSTEM: Fore.CYAN, # 青色 - AI助手
@@ -39,7 +37,7 @@ class PrettyOutput:
39
37
  OutputType.RESULT: Fore.BLUE, # 蓝色 - 结果
40
38
  OutputType.ERROR: Fore.RED, # 红色 - 错误
41
39
  OutputType.INFO: Fore.YELLOW, # 黄色 - 提示
42
- OutputType.PLANNING: Fore.MAGENTA, # 紫色 - 规划
40
+ OutputType.PLANNING: Fore.MAGENTA, # 紫色 - 规划
43
41
  OutputType.PROGRESS: Fore.WHITE, # 白色 - 进度
44
42
  OutputType.SUCCESS: Fore.GREEN, # 绿色 - 成功
45
43
  OutputType.WARNING: Fore.YELLOW, # 黄色 - 警告
@@ -47,7 +45,7 @@ class PrettyOutput:
47
45
  OutputType.USER: Fore.GREEN, # 绿色 - 用户
48
46
  OutputType.TOOL: Fore.YELLOW, # 黄色 - 工具
49
47
  }
50
-
48
+
51
49
  # 图标方案
52
50
  ICONS = {
53
51
  OutputType.SYSTEM: "🤖", # 机器人 - AI助手
@@ -63,7 +61,7 @@ class PrettyOutput:
63
61
  OutputType.USER: "👤", # 用户 - 用户
64
62
  OutputType.TOOL: "🔧", # 扳手 - 工具
65
63
  }
66
-
64
+
67
65
  # 前缀方案
68
66
  PREFIXES = {
69
67
  OutputType.SYSTEM: "Assistant",
@@ -81,20 +79,18 @@ class PrettyOutput:
81
79
  }
82
80
 
83
81
  @staticmethod
84
- def format(text: str, output_type: OutputType,
85
- timestamp: bool = True) -> str:
82
+ def format(text: str, output_type: OutputType, timestamp: bool = True) -> str:
86
83
  """格式化输出文本"""
87
84
  color = PrettyOutput.COLORS.get(output_type, "")
88
85
  icon = PrettyOutput.ICONS.get(output_type, "")
89
86
  prefix = PrettyOutput.PREFIXES.get(output_type, "")
90
-
87
+
91
88
  # 添加时间戳 - 使用白色
92
89
  time_str = f"{Fore.WHITE}[{datetime.now().strftime('%H:%M:%S')}]{ColoramaStyle.RESET_ALL} " if timestamp else ""
93
-
90
+
94
91
  # 格式化输出
95
- formatted_text = f"{time_str}{color}{icon} {prefix}: {text}{
96
- ColoramaStyle.RESET_ALL}"
97
-
92
+ formatted_text = f"{time_str}{color}{icon} {prefix}: {text}{ColoramaStyle.RESET_ALL}"
93
+
98
94
  return formatted_text
99
95
 
100
96
  @staticmethod
@@ -103,10 +99,7 @@ class PrettyOutput:
103
99
  print(PrettyOutput.format(text, output_type, timestamp))
104
100
  if output_type == OutputType.ERROR:
105
101
  import traceback
106
- PrettyOutput.print(
107
- f"错误追踪: {
108
- traceback.format_exc()}",
109
- OutputType.INFO)
102
+ PrettyOutput.print(f"错误追踪: {traceback.format_exc()}", OutputType.INFO)
110
103
 
111
104
  @staticmethod
112
105
  def section(title: str, output_type: OutputType = OutputType.INFO):
@@ -114,11 +107,7 @@ class PrettyOutput:
114
107
  width = 60
115
108
  color = PrettyOutput.COLORS.get(output_type, "")
116
109
  print(f"\n{color}" + "=" * width + f"{ColoramaStyle.RESET_ALL}")
117
- PrettyOutput.print(
118
- title.center(
119
- width - 10),
120
- output_type,
121
- timestamp=False)
110
+ PrettyOutput.print(title.center(width - 10), output_type, timestamp=False)
122
111
  print(f"{color}" + "=" * width + f"{ColoramaStyle.RESET_ALL}\n")
123
112
 
124
113
  @staticmethod
@@ -134,19 +123,18 @@ class PrettyOutput:
134
123
  sys.stdout.write("\n")
135
124
  sys.stdout.flush()
136
125
 
137
-
138
126
  def get_multiline_input(tip: str) -> str:
139
127
  """获取多行输入,支持方向键、历史记录等功能"""
140
128
  PrettyOutput.print(tip + "\n", OutputType.INFO)
141
-
129
+
142
130
  # 创建输入会话,启用历史记录
143
131
  session = PromptSession(history=None) # 使用默认历史记录
144
-
132
+
145
133
  # 定义提示符样式
146
134
  style = PromptStyle.from_dict({
147
135
  'prompt': 'ansicyan',
148
136
  })
149
-
137
+
150
138
  lines = []
151
139
  try:
152
140
  while True:
@@ -154,32 +142,31 @@ def get_multiline_input(tip: str) -> str:
154
142
  prompt = FormattedText([
155
143
  ('class:prompt', '... ' if lines else '>>> ')
156
144
  ])
157
-
145
+
158
146
  # 获取输入
159
147
  line = session.prompt(
160
148
  prompt,
161
149
  style=style,
162
150
  ).strip()
163
-
151
+
164
152
  # 空行处理
165
153
  if not line:
166
154
  if not lines: # 第一行就输入空行
167
155
  return ""
168
156
  break # 结束多行输入
169
-
157
+
170
158
  lines.append(line)
171
-
159
+
172
160
  except KeyboardInterrupt:
173
161
  PrettyOutput.print("\n输入已取消", OutputType.ERROR)
174
162
  return "__interrupt__"
175
-
163
+
176
164
  return "\n".join(lines)
177
165
 
178
-
179
166
  def load_env_from_file():
180
167
  """从~/.jarvis_env加载环境变量"""
181
168
  env_file = Path.home() / ".jarvis_env"
182
-
169
+
183
170
  if env_file.exists():
184
171
  try:
185
172
  with open(env_file, "r", encoding="utf-8") as f:
@@ -188,29 +175,22 @@ def load_env_from_file():
188
175
  if line and not line.startswith("#"):
189
176
  try:
190
177
  key, value = line.split("=", 1)
191
- os.environ[key.strip()] = value.strip().strip(
192
- "'").strip('"')
178
+ os.environ[key.strip()] = value.strip().strip("'").strip('"')
193
179
  except ValueError:
194
180
  continue
195
181
  except Exception as e:
196
- PrettyOutput.print(
197
- f"Warning: Failed to read ~/.jarvis_env: {e}",
198
- OutputType.WARNING)
199
-
200
-
182
+ PrettyOutput.print(f"Warning: Failed to read ~/.jarvis_env: {e}", OutputType.WARNING)
183
+
184
+
201
185
  def while_success(func, sleep_time: float = 0.1):
202
186
  while True:
203
187
  try:
204
188
  return func()
205
189
  except Exception as e:
206
- PrettyOutput.print(
207
- f"执行失败: {
208
- str(e)}, {sleep_time}s后重试...",
209
- OutputType.ERROR)
190
+ PrettyOutput.print(f"执行失败: {str(e)}, {sleep_time}s后重试...", OutputType.ERROR)
210
191
  time.sleep(sleep_time)
211
192
  continue
212
193
 
213
-
214
194
  def while_true(func, sleep_time: float = 0.1):
215
195
  """循环执行函数,直到函数返回True"""
216
196
  while True:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.46
3
+ Version: 0.1.48
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
@@ -0,0 +1,25 @@
1
+ jarvis/__init__.py,sha256=5Kd0blvGwS59SYMJr_z-vMkb9qnFktJZho8oQ1uSNOw,50
2
+ jarvis/agent.py,sha256=5GmC9iAOerTR4JoxzrfgLSspoz6qRm1E6xEIWLTR2OI,12222
3
+ jarvis/main.py,sha256=VIqMYnqNrmVcnO5YC-Tc-ATVBt8IlqIcXHjZvHmyCFs,6272
4
+ jarvis/utils.py,sha256=JlkuC9RtspXH2VWDmj9nR0vnb8ie1gIsKc4vC7WRco8,7321
5
+ jarvis/models/__init__.py,sha256=mrOt67nselz_H1gX9wdAO4y2DY5WPXzABqJbr5Des8k,63
6
+ jarvis/models/ai8.py,sha256=9i7n_-TPbvq0AaRILs9ERQ7Vy5tDyoibXkiPsJvwQio,12520
7
+ jarvis/models/base.py,sha256=eeNJJbv9ikPVTtV_E7mgW8LZzVgjQ-OzxlHF6slYrHw,1237
8
+ jarvis/models/kimi.py,sha256=N0bPQ1ugx0RwjR96jLchmOPvCmws-fXyA0mnOAdo2k4,17161
9
+ jarvis/models/openai.py,sha256=pB7AaZuorHlmudTPaUnEbFOyl51Fy6uhU9KQBm98Ov8,4156
10
+ jarvis/models/oyi.py,sha256=4_sppGOLS3rucBHinhzjLhSh_6rJKIgLu9h6trHIOGM,14900
11
+ jarvis/models/registry.py,sha256=iVBjN9ImEvGHcz8WR-z8pPMJQZI907o_nccVOFANhak,7951
12
+ jarvis/tools/__init__.py,sha256=Kj1bKj34lwRDKMKHLOrLyQElf2lHbqA2tDgP359eaDo,71
13
+ jarvis/tools/base.py,sha256=EGRGbdfbLXDLwtyoWdvp9rlxNX7bzc20t0Vc2VkwIEY,652
14
+ jarvis/tools/file_ops.py,sha256=h8g0eT9UvlJf4kt0DLXvdSsjcPj7x19lxWdDApeDfpg,3842
15
+ jarvis/tools/generator.py,sha256=vVP3eN5cCDpRXf_fn0skETkPXAW1XZFWx9pt2_ahK48,5999
16
+ jarvis/tools/methodology.py,sha256=G3cOaHTMujGZBhDLhQEqyCV2NISizO3MXRuho1KfI6Y,5223
17
+ jarvis/tools/registry.py,sha256=NbH7A4A2lyN2IoyZGFwa5Ghed2dpzbJWCAd1Dg95WBI,7183
18
+ jarvis/tools/shell.py,sha256=UPKshPyOaUwTngresUw-ot1jHjQIb4wCY5nkJqa38lU,2520
19
+ jarvis/tools/sub_agent.py,sha256=rEtAmSVY2ZjFOZEKr5m5wpACOQIiM9Zr_3dT92FhXYU,2621
20
+ jarvis_ai_assistant-0.1.48.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
21
+ jarvis_ai_assistant-0.1.48.dist-info/METADATA,sha256=aa15iAnYAREOwcLJP3tTpjdC5JAmXzouiqXIwKrO83g,10015
22
+ jarvis_ai_assistant-0.1.48.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
23
+ jarvis_ai_assistant-0.1.48.dist-info/entry_points.txt,sha256=iKu7OMfew9dtfGhW71gIMTg4wvafuPqKb4wyQOnMAGU,44
24
+ jarvis_ai_assistant-0.1.48.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
25
+ jarvis_ai_assistant-0.1.48.dist-info/RECORD,,
@@ -1,25 +0,0 @@
1
- jarvis/__init__.py,sha256=HiOdrOkDAfqQOFrFVCKd96C_U-XMAI6wE1pX3GjE8Yk,50
2
- jarvis/agent.py,sha256=omq58Bo4u-oEwpOuHnZTTE_3JeXG5Ow-1bhhJt6RlBs,12339
3
- jarvis/main.py,sha256=Zd1aoq7EXNZMZrZl6n-2OB8UIC202sIPcQEJGuJJkpE,6087
4
- jarvis/utils.py,sha256=CQo_V7qA_oGVvR4RrbfL9cd98lXzbE9tp1EB9S0ppIc,7469
5
- jarvis/models/__init__.py,sha256=8uX1dj3YLL-i2Q5AIz1V0GtrROb6BJmRRRzxrexj-aE,59
6
- jarvis/models/ai8.py,sha256=LEgtAZ7SZj94RoUuNlclXes_u-eh_vx5pxZ8kwSQG78,12658
7
- jarvis/models/base.py,sha256=Drotowk47m3s30BPYspEL1MZlo2MyCaLev0v-oaqszY,1211
8
- jarvis/models/kimi.py,sha256=ghL1g2iq9jnUNBB1flyV2wd0JKs7i7q0CpKr2-6kF3U,18570
9
- jarvis/models/openai.py,sha256=vh_4J7imSlqWi0J8xBrVhv6mpPXj6UqvD_xVlKayiXg,4330
10
- jarvis/models/oyi.py,sha256=pi4wD-TMz2Q6olkwQ5Vw5GCPKwL-KyTR8SNbrXiXvuo,14513
11
- jarvis/models/registry.py,sha256=RgzbCLJM6-FlQYuhaXnEmQASshur3FR5u0z3UBJtBgQ,8137
12
- jarvis/tools/__init__.py,sha256=ZXnUzaenBd2yX6xRI7T7tOjG7Hv2PjzcMva455VStgA,70
13
- jarvis/tools/base.py,sha256=UnYlIpkKLAZDVxLyIZy2imHLSqF5xQXAVg5sKrQgTFw,668
14
- jarvis/tools/file_ops.py,sha256=tuyeEg9gGcUBXiCL6WwO5IVtl2TRaNRJn1VYBkquFTs,3756
15
- jarvis/tools/generator.py,sha256=fKTx6KbCPZAo2LZixWV51uZZWwVSj_UmDo1b8Lq5Y-c,5945
16
- jarvis/tools/methodology.py,sha256=hpejF0ElrrMaCg90WBOrVRvCekfYkyiiQbAH13kC1ys,4995
17
- jarvis/tools/registry.py,sha256=eMRW0geKeNsaYhGBQB73bbRBkQMGUDORWy69rmjs3Hk,7201
18
- jarvis/tools/shell.py,sha256=NixHMaM2yF4XcDXxsgD3tAtdO1rZ3PxS_0_LlzjCpd8,2457
19
- jarvis/tools/sub_agent.py,sha256=m0H6dWIeI0VeK2cNETfI0uqWxlot8f70mW4o9aBMXYo,2620
20
- jarvis_ai_assistant-0.1.46.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
21
- jarvis_ai_assistant-0.1.46.dist-info/METADATA,sha256=DLFgc6On2RrSRKOtXgFuefCkMuxgsya7ZvWP0TmcJO0,10015
22
- jarvis_ai_assistant-0.1.46.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
23
- jarvis_ai_assistant-0.1.46.dist-info/entry_points.txt,sha256=iKu7OMfew9dtfGhW71gIMTg4wvafuPqKb4wyQOnMAGU,44
24
- jarvis_ai_assistant-0.1.46.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
25
- jarvis_ai_assistant-0.1.46.dist-info/RECORD,,