jarvis-ai-assistant 0.7.8__py3-none-any.whl → 1.0.2__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 (279) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +567 -222
  3. jarvis/jarvis_agent/agent_manager.py +19 -12
  4. jarvis/jarvis_agent/builtin_input_handler.py +79 -11
  5. jarvis/jarvis_agent/config_editor.py +7 -2
  6. jarvis/jarvis_agent/event_bus.py +24 -13
  7. jarvis/jarvis_agent/events.py +19 -1
  8. jarvis/jarvis_agent/file_context_handler.py +67 -64
  9. jarvis/jarvis_agent/file_methodology_manager.py +38 -24
  10. jarvis/jarvis_agent/jarvis.py +186 -114
  11. jarvis/jarvis_agent/language_extractors/__init__.py +8 -1
  12. jarvis/jarvis_agent/language_extractors/c_extractor.py +7 -4
  13. jarvis/jarvis_agent/language_extractors/cpp_extractor.py +9 -4
  14. jarvis/jarvis_agent/language_extractors/go_extractor.py +7 -4
  15. jarvis/jarvis_agent/language_extractors/java_extractor.py +27 -20
  16. jarvis/jarvis_agent/language_extractors/javascript_extractor.py +22 -17
  17. jarvis/jarvis_agent/language_extractors/python_extractor.py +7 -4
  18. jarvis/jarvis_agent/language_extractors/rust_extractor.py +7 -4
  19. jarvis/jarvis_agent/language_extractors/typescript_extractor.py +22 -17
  20. jarvis/jarvis_agent/language_support_info.py +250 -219
  21. jarvis/jarvis_agent/main.py +19 -23
  22. jarvis/jarvis_agent/memory_manager.py +9 -6
  23. jarvis/jarvis_agent/methodology_share_manager.py +21 -15
  24. jarvis/jarvis_agent/output_handler.py +4 -2
  25. jarvis/jarvis_agent/prompt_builder.py +7 -6
  26. jarvis/jarvis_agent/prompt_manager.py +113 -8
  27. jarvis/jarvis_agent/prompts.py +317 -85
  28. jarvis/jarvis_agent/protocols.py +5 -2
  29. jarvis/jarvis_agent/run_loop.py +192 -32
  30. jarvis/jarvis_agent/session_manager.py +7 -3
  31. jarvis/jarvis_agent/share_manager.py +23 -13
  32. jarvis/jarvis_agent/shell_input_handler.py +12 -8
  33. jarvis/jarvis_agent/stdio_redirect.py +25 -26
  34. jarvis/jarvis_agent/task_analyzer.py +29 -23
  35. jarvis/jarvis_agent/task_list.py +869 -0
  36. jarvis/jarvis_agent/task_manager.py +26 -23
  37. jarvis/jarvis_agent/tool_executor.py +6 -5
  38. jarvis/jarvis_agent/tool_share_manager.py +24 -14
  39. jarvis/jarvis_agent/user_interaction.py +3 -3
  40. jarvis/jarvis_agent/utils.py +9 -1
  41. jarvis/jarvis_agent/web_bridge.py +37 -17
  42. jarvis/jarvis_agent/web_output_sink.py +5 -2
  43. jarvis/jarvis_agent/web_server.py +165 -36
  44. jarvis/jarvis_c2rust/__init__.py +1 -1
  45. jarvis/jarvis_c2rust/cli.py +260 -141
  46. jarvis/jarvis_c2rust/collector.py +37 -18
  47. jarvis/jarvis_c2rust/constants.py +60 -0
  48. jarvis/jarvis_c2rust/library_replacer.py +242 -1010
  49. jarvis/jarvis_c2rust/library_replacer_checkpoint.py +133 -0
  50. jarvis/jarvis_c2rust/library_replacer_llm.py +287 -0
  51. jarvis/jarvis_c2rust/library_replacer_loader.py +191 -0
  52. jarvis/jarvis_c2rust/library_replacer_output.py +134 -0
  53. jarvis/jarvis_c2rust/library_replacer_prompts.py +124 -0
  54. jarvis/jarvis_c2rust/library_replacer_utils.py +188 -0
  55. jarvis/jarvis_c2rust/llm_module_agent.py +98 -1044
  56. jarvis/jarvis_c2rust/llm_module_agent_apply.py +170 -0
  57. jarvis/jarvis_c2rust/llm_module_agent_executor.py +288 -0
  58. jarvis/jarvis_c2rust/llm_module_agent_loader.py +170 -0
  59. jarvis/jarvis_c2rust/llm_module_agent_prompts.py +268 -0
  60. jarvis/jarvis_c2rust/llm_module_agent_types.py +57 -0
  61. jarvis/jarvis_c2rust/llm_module_agent_utils.py +150 -0
  62. jarvis/jarvis_c2rust/llm_module_agent_validator.py +119 -0
  63. jarvis/jarvis_c2rust/loaders.py +28 -10
  64. jarvis/jarvis_c2rust/models.py +5 -2
  65. jarvis/jarvis_c2rust/optimizer.py +192 -1974
  66. jarvis/jarvis_c2rust/optimizer_build_fix.py +286 -0
  67. jarvis/jarvis_c2rust/optimizer_clippy.py +766 -0
  68. jarvis/jarvis_c2rust/optimizer_config.py +49 -0
  69. jarvis/jarvis_c2rust/optimizer_docs.py +183 -0
  70. jarvis/jarvis_c2rust/optimizer_options.py +48 -0
  71. jarvis/jarvis_c2rust/optimizer_progress.py +469 -0
  72. jarvis/jarvis_c2rust/optimizer_report.py +52 -0
  73. jarvis/jarvis_c2rust/optimizer_unsafe.py +309 -0
  74. jarvis/jarvis_c2rust/optimizer_utils.py +469 -0
  75. jarvis/jarvis_c2rust/optimizer_visibility.py +185 -0
  76. jarvis/jarvis_c2rust/scanner.py +229 -166
  77. jarvis/jarvis_c2rust/transpiler.py +531 -2732
  78. jarvis/jarvis_c2rust/transpiler_agents.py +503 -0
  79. jarvis/jarvis_c2rust/transpiler_build.py +1294 -0
  80. jarvis/jarvis_c2rust/transpiler_codegen.py +204 -0
  81. jarvis/jarvis_c2rust/transpiler_compile.py +146 -0
  82. jarvis/jarvis_c2rust/transpiler_config.py +178 -0
  83. jarvis/jarvis_c2rust/transpiler_context.py +122 -0
  84. jarvis/jarvis_c2rust/transpiler_executor.py +516 -0
  85. jarvis/jarvis_c2rust/transpiler_generation.py +278 -0
  86. jarvis/jarvis_c2rust/transpiler_git.py +163 -0
  87. jarvis/jarvis_c2rust/transpiler_mod_utils.py +225 -0
  88. jarvis/jarvis_c2rust/transpiler_modules.py +336 -0
  89. jarvis/jarvis_c2rust/transpiler_planning.py +394 -0
  90. jarvis/jarvis_c2rust/transpiler_review.py +1196 -0
  91. jarvis/jarvis_c2rust/transpiler_symbols.py +176 -0
  92. jarvis/jarvis_c2rust/utils.py +269 -79
  93. jarvis/jarvis_code_agent/after_change.py +233 -0
  94. jarvis/jarvis_code_agent/build_validation_config.py +37 -30
  95. jarvis/jarvis_code_agent/builtin_rules.py +68 -0
  96. jarvis/jarvis_code_agent/code_agent.py +976 -1517
  97. jarvis/jarvis_code_agent/code_agent_build.py +227 -0
  98. jarvis/jarvis_code_agent/code_agent_diff.py +246 -0
  99. jarvis/jarvis_code_agent/code_agent_git.py +525 -0
  100. jarvis/jarvis_code_agent/code_agent_impact.py +177 -0
  101. jarvis/jarvis_code_agent/code_agent_lint.py +283 -0
  102. jarvis/jarvis_code_agent/code_agent_llm.py +159 -0
  103. jarvis/jarvis_code_agent/code_agent_postprocess.py +105 -0
  104. jarvis/jarvis_code_agent/code_agent_prompts.py +46 -0
  105. jarvis/jarvis_code_agent/code_agent_rules.py +305 -0
  106. jarvis/jarvis_code_agent/code_analyzer/__init__.py +52 -48
  107. jarvis/jarvis_code_agent/code_analyzer/base_language.py +12 -10
  108. jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py +12 -11
  109. jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py +16 -12
  110. jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py +26 -17
  111. jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py +558 -104
  112. jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py +27 -16
  113. jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py +22 -18
  114. jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py +21 -16
  115. jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py +20 -16
  116. jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py +27 -16
  117. jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py +47 -23
  118. jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py +71 -37
  119. jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py +162 -35
  120. jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py +111 -57
  121. jarvis/jarvis_code_agent/code_analyzer/build_validator.py +18 -12
  122. jarvis/jarvis_code_agent/code_analyzer/context_manager.py +185 -183
  123. jarvis/jarvis_code_agent/code_analyzer/context_recommender.py +2 -1
  124. jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py +24 -15
  125. jarvis/jarvis_code_agent/code_analyzer/file_ignore.py +227 -141
  126. jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py +321 -247
  127. jarvis/jarvis_code_agent/code_analyzer/language_registry.py +37 -29
  128. jarvis/jarvis_code_agent/code_analyzer/language_support.py +21 -13
  129. jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py +15 -9
  130. jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py +75 -45
  131. jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py +87 -52
  132. jarvis/jarvis_code_agent/code_analyzer/languages/java_language.py +84 -51
  133. jarvis/jarvis_code_agent/code_analyzer/languages/javascript_language.py +94 -64
  134. jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py +109 -71
  135. jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py +97 -63
  136. jarvis/jarvis_code_agent/code_analyzer/languages/typescript_language.py +103 -69
  137. jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py +271 -268
  138. jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py +76 -64
  139. jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py +92 -19
  140. jarvis/jarvis_code_agent/diff_visualizer.py +998 -0
  141. jarvis/jarvis_code_agent/lint.py +223 -524
  142. jarvis/jarvis_code_agent/rule_share_manager.py +158 -0
  143. jarvis/jarvis_code_agent/rules/clean_code.md +144 -0
  144. jarvis/jarvis_code_agent/rules/code_review.md +115 -0
  145. jarvis/jarvis_code_agent/rules/documentation.md +165 -0
  146. jarvis/jarvis_code_agent/rules/generate_rules.md +52 -0
  147. jarvis/jarvis_code_agent/rules/performance.md +158 -0
  148. jarvis/jarvis_code_agent/rules/refactoring.md +139 -0
  149. jarvis/jarvis_code_agent/rules/security.md +160 -0
  150. jarvis/jarvis_code_agent/rules/tdd.md +78 -0
  151. jarvis/jarvis_code_agent/test_rules/cpp_test.md +118 -0
  152. jarvis/jarvis_code_agent/test_rules/go_test.md +98 -0
  153. jarvis/jarvis_code_agent/test_rules/java_test.md +99 -0
  154. jarvis/jarvis_code_agent/test_rules/javascript_test.md +113 -0
  155. jarvis/jarvis_code_agent/test_rules/php_test.md +117 -0
  156. jarvis/jarvis_code_agent/test_rules/python_test.md +91 -0
  157. jarvis/jarvis_code_agent/test_rules/ruby_test.md +102 -0
  158. jarvis/jarvis_code_agent/test_rules/rust_test.md +86 -0
  159. jarvis/jarvis_code_agent/utils.py +36 -26
  160. jarvis/jarvis_code_analysis/checklists/loader.py +21 -21
  161. jarvis/jarvis_code_analysis/code_review.py +64 -33
  162. jarvis/jarvis_data/config_schema.json +285 -192
  163. jarvis/jarvis_git_squash/main.py +8 -6
  164. jarvis/jarvis_git_utils/git_commiter.py +53 -76
  165. jarvis/jarvis_mcp/__init__.py +5 -2
  166. jarvis/jarvis_mcp/sse_mcp_client.py +40 -30
  167. jarvis/jarvis_mcp/stdio_mcp_client.py +27 -19
  168. jarvis/jarvis_mcp/streamable_mcp_client.py +35 -26
  169. jarvis/jarvis_memory_organizer/memory_organizer.py +78 -55
  170. jarvis/jarvis_methodology/main.py +48 -39
  171. jarvis/jarvis_multi_agent/__init__.py +56 -23
  172. jarvis/jarvis_multi_agent/main.py +15 -18
  173. jarvis/jarvis_platform/base.py +179 -111
  174. jarvis/jarvis_platform/human.py +27 -16
  175. jarvis/jarvis_platform/kimi.py +52 -45
  176. jarvis/jarvis_platform/openai.py +101 -40
  177. jarvis/jarvis_platform/registry.py +51 -33
  178. jarvis/jarvis_platform/tongyi.py +68 -38
  179. jarvis/jarvis_platform/yuanbao.py +59 -43
  180. jarvis/jarvis_platform_manager/main.py +68 -76
  181. jarvis/jarvis_platform_manager/service.py +24 -14
  182. jarvis/jarvis_rag/README_CONFIG.md +314 -0
  183. jarvis/jarvis_rag/README_DYNAMIC_LOADING.md +311 -0
  184. jarvis/jarvis_rag/README_ONLINE_MODELS.md +230 -0
  185. jarvis/jarvis_rag/__init__.py +57 -4
  186. jarvis/jarvis_rag/cache.py +3 -1
  187. jarvis/jarvis_rag/cli.py +48 -68
  188. jarvis/jarvis_rag/embedding_interface.py +39 -0
  189. jarvis/jarvis_rag/embedding_manager.py +7 -230
  190. jarvis/jarvis_rag/embeddings/__init__.py +41 -0
  191. jarvis/jarvis_rag/embeddings/base.py +114 -0
  192. jarvis/jarvis_rag/embeddings/cohere.py +66 -0
  193. jarvis/jarvis_rag/embeddings/edgefn.py +117 -0
  194. jarvis/jarvis_rag/embeddings/local.py +260 -0
  195. jarvis/jarvis_rag/embeddings/openai.py +62 -0
  196. jarvis/jarvis_rag/embeddings/registry.py +293 -0
  197. jarvis/jarvis_rag/llm_interface.py +8 -6
  198. jarvis/jarvis_rag/query_rewriter.py +8 -9
  199. jarvis/jarvis_rag/rag_pipeline.py +61 -52
  200. jarvis/jarvis_rag/reranker.py +7 -75
  201. jarvis/jarvis_rag/reranker_interface.py +32 -0
  202. jarvis/jarvis_rag/rerankers/__init__.py +41 -0
  203. jarvis/jarvis_rag/rerankers/base.py +109 -0
  204. jarvis/jarvis_rag/rerankers/cohere.py +67 -0
  205. jarvis/jarvis_rag/rerankers/edgefn.py +140 -0
  206. jarvis/jarvis_rag/rerankers/jina.py +79 -0
  207. jarvis/jarvis_rag/rerankers/local.py +89 -0
  208. jarvis/jarvis_rag/rerankers/registry.py +293 -0
  209. jarvis/jarvis_rag/retriever.py +58 -43
  210. jarvis/jarvis_sec/__init__.py +66 -141
  211. jarvis/jarvis_sec/agents.py +21 -17
  212. jarvis/jarvis_sec/analysis.py +80 -33
  213. jarvis/jarvis_sec/checkers/__init__.py +7 -13
  214. jarvis/jarvis_sec/checkers/c_checker.py +356 -164
  215. jarvis/jarvis_sec/checkers/rust_checker.py +47 -29
  216. jarvis/jarvis_sec/cli.py +43 -21
  217. jarvis/jarvis_sec/clustering.py +430 -272
  218. jarvis/jarvis_sec/file_manager.py +99 -55
  219. jarvis/jarvis_sec/parsers.py +9 -6
  220. jarvis/jarvis_sec/prompts.py +4 -3
  221. jarvis/jarvis_sec/report.py +44 -22
  222. jarvis/jarvis_sec/review.py +180 -107
  223. jarvis/jarvis_sec/status.py +50 -41
  224. jarvis/jarvis_sec/types.py +3 -0
  225. jarvis/jarvis_sec/utils.py +160 -83
  226. jarvis/jarvis_sec/verification.py +411 -181
  227. jarvis/jarvis_sec/workflow.py +132 -21
  228. jarvis/jarvis_smart_shell/main.py +28 -41
  229. jarvis/jarvis_stats/cli.py +14 -12
  230. jarvis/jarvis_stats/stats.py +28 -19
  231. jarvis/jarvis_stats/storage.py +14 -8
  232. jarvis/jarvis_stats/visualizer.py +12 -7
  233. jarvis/jarvis_tools/base.py +5 -2
  234. jarvis/jarvis_tools/clear_memory.py +13 -9
  235. jarvis/jarvis_tools/cli/main.py +23 -18
  236. jarvis/jarvis_tools/edit_file.py +572 -873
  237. jarvis/jarvis_tools/execute_script.py +10 -7
  238. jarvis/jarvis_tools/file_analyzer.py +7 -8
  239. jarvis/jarvis_tools/meta_agent.py +287 -0
  240. jarvis/jarvis_tools/methodology.py +5 -3
  241. jarvis/jarvis_tools/read_code.py +305 -1438
  242. jarvis/jarvis_tools/read_symbols.py +50 -17
  243. jarvis/jarvis_tools/read_webpage.py +19 -18
  244. jarvis/jarvis_tools/registry.py +435 -156
  245. jarvis/jarvis_tools/retrieve_memory.py +16 -11
  246. jarvis/jarvis_tools/save_memory.py +8 -6
  247. jarvis/jarvis_tools/search_web.py +31 -31
  248. jarvis/jarvis_tools/sub_agent.py +32 -28
  249. jarvis/jarvis_tools/sub_code_agent.py +44 -60
  250. jarvis/jarvis_tools/task_list_manager.py +1811 -0
  251. jarvis/jarvis_tools/virtual_tty.py +29 -19
  252. jarvis/jarvis_utils/__init__.py +4 -0
  253. jarvis/jarvis_utils/builtin_replace_map.py +2 -1
  254. jarvis/jarvis_utils/clipboard.py +9 -8
  255. jarvis/jarvis_utils/collections.py +331 -0
  256. jarvis/jarvis_utils/config.py +699 -194
  257. jarvis/jarvis_utils/dialogue_recorder.py +294 -0
  258. jarvis/jarvis_utils/embedding.py +6 -3
  259. jarvis/jarvis_utils/file_processors.py +7 -1
  260. jarvis/jarvis_utils/fzf.py +9 -3
  261. jarvis/jarvis_utils/git_utils.py +71 -42
  262. jarvis/jarvis_utils/globals.py +116 -32
  263. jarvis/jarvis_utils/http.py +6 -2
  264. jarvis/jarvis_utils/input.py +318 -83
  265. jarvis/jarvis_utils/jsonnet_compat.py +119 -104
  266. jarvis/jarvis_utils/methodology.py +37 -28
  267. jarvis/jarvis_utils/output.py +201 -44
  268. jarvis/jarvis_utils/utils.py +986 -628
  269. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/METADATA +49 -33
  270. jarvis_ai_assistant-1.0.2.dist-info/RECORD +304 -0
  271. jarvis/jarvis_code_agent/code_analyzer/structured_code.py +0 -556
  272. jarvis/jarvis_tools/generate_new_tool.py +0 -205
  273. jarvis/jarvis_tools/lsp_client.py +0 -1552
  274. jarvis/jarvis_tools/rewrite_file.py +0 -105
  275. jarvis_ai_assistant-0.7.8.dist-info/RECORD +0 -218
  276. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/WHEEL +0 -0
  277. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/entry_points.txt +0 -0
  278. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/licenses/LICENSE +0 -0
  279. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/top_level.txt +0 -0
@@ -6,13 +6,19 @@
6
6
 
7
7
  import json
8
8
  import os
9
- from datetime import datetime, timedelta
10
- from pathlib import Path
11
- from typing import Dict, List, Optional, Any, Set
12
- from collections import defaultdict
13
9
  import sys
14
10
  import time
15
11
  import uuid
12
+ from collections import defaultdict
13
+ from datetime import datetime
14
+ from datetime import timedelta
15
+ from pathlib import Path
16
+ from typing import Any
17
+ from typing import Dict
18
+ from typing import List
19
+ from typing import Optional
20
+ from typing import Set
21
+ from typing import cast
16
22
 
17
23
 
18
24
  class StatsStorage:
@@ -70,7 +76,7 @@ class StatsStorage:
70
76
  try:
71
77
  with open(filepath, "r", encoding="utf-8") as f:
72
78
  data = json.load(f)
73
- return data
79
+ return cast(Dict[Any, Any], data)
74
80
  except Exception:
75
81
  if attempt < max_retries - 1:
76
82
  time.sleep(0.1 * (attempt + 1)) # 递增延迟
@@ -400,7 +406,7 @@ class StatsStorage:
400
406
  if info and isinstance(info, dict):
401
407
  grp = info.get("group")
402
408
  if grp:
403
- return grp
409
+ return cast(str, grp)
404
410
 
405
411
  # 扫描历史记录以推断
406
412
  group_counts: Dict[str, int] = {}
@@ -448,10 +454,10 @@ class StatsStorage:
448
454
  except Exception:
449
455
  return None
450
456
 
451
- def get_metric_info(self, metric_name: str) -> Optional[Dict]:
457
+ def get_metric_info(self, metric_name: str) -> Optional[Dict[Any, Any]]:
452
458
  """获取指标元信息"""
453
459
  meta = self._load_json(self.meta_file)
454
- return meta.get("metrics", {}).get(metric_name)
460
+ return cast(Optional[Dict[Any, Any]], meta.get("metrics", {}).get(metric_name))
455
461
 
456
462
  def list_metrics(self) -> List[str]:
457
463
  """列出所有指标"""
@@ -4,15 +4,20 @@
4
4
  提供终端图形化展示功能
5
5
  """
6
6
 
7
- import os
8
7
  import io
9
- from typing import Dict, List, Optional, Any
8
+ import os
10
9
  from collections import OrderedDict
10
+ from typing import Any
11
+ from typing import Dict
12
+ from typing import List
13
+ from typing import Optional
14
+ from typing import cast
15
+
11
16
  import plotext as plt
17
+ from rich import box
12
18
  from rich.console import Console
13
- from rich.table import Table
14
19
  from rich.panel import Panel
15
- from rich import box
20
+ from rich.table import Table
16
21
 
17
22
 
18
23
  class StatsVisualizer:
@@ -70,7 +75,7 @@ class StatsVisualizer:
70
75
  if unit:
71
76
  plt.ylabel(unit)
72
77
 
73
- chart = plt.build()
78
+ chart = cast(str, plt.build())
74
79
 
75
80
  if show_values and values:
76
81
  min_val = min(values)
@@ -125,7 +130,7 @@ class StatsVisualizer:
125
130
  if unit:
126
131
  plt.ylabel(unit)
127
132
 
128
- return plt.build()
133
+ return cast(str, plt.build())
129
134
 
130
135
  def show_summary(
131
136
  self,
@@ -267,7 +272,7 @@ class StatsVisualizer:
267
272
  f"显示: {len(display_records)} | "
268
273
  f"最小值: {min(values):.2f} | "
269
274
  f"最大值: {max(values):.2f} | "
270
- f"平均值: {sum(values)/len(values):.2f}"
275
+ f"平均值: {sum(values) / len(values):.2f}"
271
276
  )
272
277
  self.console.print(
273
278
  Panel(
@@ -1,6 +1,9 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import json
3
- from typing import Any, Callable, Dict
3
+ from typing import Any
4
+ from typing import Callable
5
+ from typing import Dict
6
+ from typing import cast
4
7
 
5
8
 
6
9
  class Tool:
@@ -49,7 +52,7 @@ class Tool:
49
52
  Dict[str, Any]: 工具执行结果
50
53
  """
51
54
  try:
52
- return self.func(arguments)
55
+ return cast(Dict[str, Any], self.func(arguments))
53
56
  except Exception as e:
54
57
  return {
55
58
  "success": False,
@@ -1,13 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import json
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Optional
4
+ from typing import Any
5
+ from typing import Dict
6
+ from typing import List
7
+ from typing import Optional
5
8
 
6
9
  from jarvis.jarvis_utils.config import get_data_dir
7
- from jarvis.jarvis_utils.globals import (
8
- clear_short_term_memories,
9
- short_term_memories,
10
- )
10
+ from jarvis.jarvis_utils.globals import clear_short_term_memories
11
+ from jarvis.jarvis_utils.globals import short_term_memories
12
+ from jarvis.jarvis_utils.output import PrettyOutput
11
13
 
12
14
 
13
15
  class ClearMemoryTool:
@@ -59,9 +61,9 @@ class ClearMemoryTool:
59
61
  def _get_memory_dir(self, memory_type: str) -> Path:
60
62
  """根据记忆类型获取存储目录"""
61
63
  if memory_type == "project_long_term":
62
- return self.project_memory_dir
64
+ return Path(self.project_memory_dir)
63
65
  elif memory_type in ["global_long_term", "short_term"]:
64
- return self.global_memory_dir / memory_type
66
+ return Path(self.global_memory_dir) / memory_type
65
67
  else:
66
68
  raise ValueError(f"未知的记忆类型: {memory_type}")
67
69
 
@@ -145,7 +147,9 @@ class ClearMemoryTool:
145
147
  removed_count += 1
146
148
 
147
149
  except Exception as e:
148
- print(f"⚠️ 处理记忆文件 {memory_file} 时出错: {str(e)}")
150
+ PrettyOutput.auto_print(
151
+ f"⚠️ 处理记忆文件 {memory_file} 时出错: {str(e)}"
152
+ )
149
153
 
150
154
  # 如果目录为空,可以删除目录
151
155
  if not any(memory_dir.iterdir()) and memory_dir != self.project_memory_dir:
@@ -218,5 +222,5 @@ class ClearMemoryTool:
218
222
 
219
223
  except Exception as e:
220
224
  error_msg = f"清除记忆失败: {str(e)}"
221
- print(f"❌ {error_msg}")
225
+ PrettyOutput.auto_print(f"❌ {error_msg}")
222
226
  return {"success": False, "stdout": "", "stderr": error_msg}
@@ -5,13 +5,13 @@ import typer
5
5
  from tabulate import tabulate
6
6
 
7
7
  from jarvis.jarvis_tools.registry import ToolRegistry
8
- from jarvis.jarvis_utils.output import OutputType, PrettyOutput
8
+ from jarvis.jarvis_utils.output import OutputType
9
+ from jarvis.jarvis_utils.output import PrettyOutput
9
10
  from jarvis.jarvis_utils.utils import init_env
10
11
 
11
12
  app = typer.Typer(help="Jarvis 工具系统命令行界面")
12
13
 
13
14
 
14
-
15
15
  @app.command("list")
16
16
  def list_tools(
17
17
  as_json: bool = typer.Option(False, "--json", help="以JSON格式输出"),
@@ -38,10 +38,11 @@ def list_tools(
38
38
  lang="json",
39
39
  )
40
40
  else:
41
- print("📋 可用工具列表")
41
+ PrettyOutput.auto_print("📋 可用工具列表")
42
42
  # 为避免 PrettyOutput 对每行加框造成信息稀疏,先拼接字符串再统一打印
43
43
  lines = []
44
44
  import json as _json # local import to ensure available
45
+
45
46
  for tool in tools:
46
47
  lines.append(f"\n{tool['name']}")
47
48
  lines.append(f" 描述: {tool['description']}")
@@ -50,7 +51,9 @@ def list_tools(
50
51
  # 使用 Markdown 代码块统一展示参数
51
52
  lines.append("```json")
52
53
  try:
53
- lines.append(_json.dumps(tool["parameters"], ensure_ascii=False, indent=2))
54
+ lines.append(
55
+ _json.dumps(tool["parameters"], ensure_ascii=False, indent=2)
56
+ )
54
57
  except Exception:
55
58
  lines.append(str(tool.get("parameters")))
56
59
  lines.append("```")
@@ -90,7 +93,7 @@ def stat_tools(
90
93
  )
91
94
  else:
92
95
  time_desc = f"最近{last_days}天" if last_days else "所有历史"
93
- print(f"📊 工具调用统计 ({time_desc})")
96
+ PrettyOutput.auto_print(f"📊 工具调用统计 ({time_desc})")
94
97
  if table_data:
95
98
  PrettyOutput.print(
96
99
  tabulate(
@@ -99,12 +102,14 @@ def stat_tools(
99
102
  OutputType.CODE,
100
103
  lang="text",
101
104
  )
102
- print(f"ℹ️ 总计: {len(table_data)} 个工具被使用,共 {sum(x[1] for x in table_data)} 次调用")
105
+ PrettyOutput.auto_print(
106
+ f"ℹ️ 总计: {len(table_data)} 个工具被使用,共 {sum(x[1] for x in table_data)} 次调用"
107
+ )
103
108
  else:
104
- print("ℹ️ 暂无工具调用记录")
109
+ PrettyOutput.auto_print("ℹ️ 暂无工具调用记录")
105
110
  else:
106
111
  # 使用 stats 系统的高级功能
107
- print("📊 工具组统计")
112
+ PrettyOutput.auto_print("📊 工具组统计")
108
113
  # 显示所有标记为 tool 组的指标
109
114
  metrics = StatsManager.list_metrics()
110
115
  tool_metrics = []
@@ -163,7 +168,7 @@ def stat_tools(
163
168
  tags={"group": "tool"},
164
169
  )
165
170
  else:
166
- print("ℹ️ 暂无工具调用记录")
171
+ PrettyOutput.auto_print("ℹ️ 暂无工具调用记录")
167
172
 
168
173
 
169
174
  @app.command("call")
@@ -179,9 +184,9 @@ def call_tool(
179
184
  tool_obj = registry.get_tool(tool_name)
180
185
 
181
186
  if not tool_obj:
182
- print(f"❌ 错误: 工具 '{tool_name}' 不存在")
187
+ PrettyOutput.auto_print(f"❌ 错误: 工具 '{tool_name}' 不存在")
183
188
  available_tools = ", ".join([t["name"] for t in registry.get_all_tools()])
184
- print(f"ℹ️ 可用工具: {available_tools}")
189
+ PrettyOutput.auto_print(f"ℹ️ 可用工具: {available_tools}")
185
190
  raise typer.Exit(code=1)
186
191
 
187
192
  tool_args = {}
@@ -189,14 +194,14 @@ def call_tool(
189
194
  try:
190
195
  tool_args = json.loads(args)
191
196
  except Exception:
192
- print("❌ 错误: 参数必须是有效的JSON格式")
197
+ PrettyOutput.auto_print("❌ 错误: 参数必须是有效的JSON格式")
193
198
  raise typer.Exit(code=1)
194
199
  elif args_file:
195
200
  try:
196
201
  with open(args_file, "r", encoding="utf-8") as f:
197
202
  tool_args = json.load(f)
198
203
  except (Exception, FileNotFoundError) as e:
199
- print(f"❌ 错误: 无法从文件加载参数: {str(e)}")
204
+ PrettyOutput.auto_print(f"❌ 错误: 无法从文件加载参数: {str(e)}")
200
205
  raise typer.Exit(code=1)
201
206
 
202
207
  required_params = tool_obj.parameters.get("required", [])
@@ -214,22 +219,22 @@ def call_tool(
214
219
  param_info = params.get(param_name, {})
215
220
  desc = param_info.get("description", "无描述")
216
221
  lines.append(f" - {param_name}: {desc}")
217
- print("❌ " + "\n❌ ".join(lines))
222
+ PrettyOutput.auto_print("❌ " + "\n❌ ".join(lines))
218
223
  raise typer.Exit(code=1)
219
224
 
220
225
  result = registry.execute_tool(tool_name, tool_args)
221
226
 
222
227
  if result["success"]:
223
- print(f"✅ 工具 {tool_name} 执行成功")
228
+ PrettyOutput.auto_print(f"✅ 工具 {tool_name} 执行成功")
224
229
  else:
225
- print(f"❌ 工具 {tool_name} 执行失败")
230
+ PrettyOutput.auto_print(f"❌ 工具 {tool_name} 执行失败")
226
231
 
227
232
  if result.get("stdout"):
228
- print("\n📤 输出:")
233
+ PrettyOutput.auto_print("\n📤 输出:")
229
234
  PrettyOutput.print(result["stdout"], OutputType.CODE, lang="text")
230
235
 
231
236
  if result.get("stderr"):
232
- print("\n❌ 错误:")
237
+ PrettyOutput.auto_print("\n❌ 错误:")
233
238
  PrettyOutput.print(result["stderr"], OutputType.CODE, lang="text")
234
239
 
235
240
  if not result["success"]: