jarvis-ai-assistant 0.7.16__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.16.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.16.dist-info/RECORD +0 -218
  276. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/WHEEL +0 -0
  277. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/entry_points.txt +0 -0
  278. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/licenses/LICENSE +0 -0
  279. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  按需读取 symbols.jsonl 的工具。
4
3
 
@@ -15,11 +14,17 @@
15
14
  - stdout (str): JSON文本,包含查询结果
16
15
  - stderr (str)
17
16
  """
17
+
18
18
  import json
19
19
  import os
20
- from pathlib import Path
21
- from typing import Any, Dict, List
22
20
 
21
+ from jarvis.jarvis_utils.output import PrettyOutput
22
+
23
+ # -*- coding: utf-8 -*-
24
+ from pathlib import Path
25
+ from typing import Any
26
+ from typing import Dict
27
+ from typing import List
23
28
 
24
29
 
25
30
  class ReadSymbolsTool:
@@ -46,9 +51,9 @@ class ReadSymbolsTool:
46
51
  def check() -> bool:
47
52
  """
48
53
  检查工具是否可用。
49
- 仅在 c2rust 环境中启用(通过环境变量 JARVIS_C2RUST_ENABLED 判断)。
54
+ 仅在 c2rust 环境中启用(通过环境变量 c2rust_enabled 判断)。
50
55
  """
51
- return os.environ.get("JARVIS_C2RUST_ENABLED") == "1"
56
+ return os.environ.get("c2rust_enabled") == "1"
52
57
 
53
58
  @staticmethod
54
59
  def _resolve_symbols_jsonl_path(path_hint: str) -> Path:
@@ -69,22 +74,44 @@ class ReadSymbolsTool:
69
74
  symbols_arg = args.get("symbols")
70
75
 
71
76
  if not isinstance(symbols_file_arg, str) or not symbols_file_arg.strip():
72
- return {"success": False, "stdout": "", "stderr": "缺少或无效的 symbols_file 参数"}
73
-
74
- if not isinstance(symbols_arg, list) or not all(isinstance(s, str) for s in symbols_arg):
75
- return {"success": False, "stdout": "", "stderr": "symbols 参数必须是字符串列表"}
77
+ return {
78
+ "success": False,
79
+ "stdout": "",
80
+ "stderr": "缺少或无效的 symbols_file 参数",
81
+ }
82
+
83
+ if not isinstance(symbols_arg, list) or not all(
84
+ isinstance(s, str) for s in symbols_arg
85
+ ):
86
+ return {
87
+ "success": False,
88
+ "stdout": "",
89
+ "stderr": "symbols 参数必须是字符串列表",
90
+ }
76
91
 
77
92
  symbols_path = self._resolve_symbols_jsonl_path(symbols_file_arg)
78
- print(f"[read_symbols] Resolved symbols file path: {symbols_path}")
93
+ PrettyOutput.auto_print(
94
+ f"[read_symbols] Resolved symbols file path: {symbols_path}"
95
+ )
79
96
  if not symbols_path.exists():
80
- return {"success": False, "stdout": "", "stderr": f"符号表文件不存在: {symbols_path}"}
97
+ return {
98
+ "success": False,
99
+ "stdout": "",
100
+ "stderr": f"符号表文件不存在: {symbols_path}",
101
+ }
81
102
  if not symbols_path.is_file():
82
- return {"success": False, "stdout": "", "stderr": f"符号表路径不是文件: {symbols_path}"}
103
+ return {
104
+ "success": False,
105
+ "stdout": "",
106
+ "stderr": f"符号表路径不是文件: {symbols_path}",
107
+ }
83
108
 
84
109
  # 使用集合提升匹配效率;保持原请求顺序以便输出
85
110
  requested: List[str] = [s.strip() for s in symbols_arg if s and s.strip()]
86
111
  wanted_set = set(requested)
87
- print(f"[read_symbols] Requested {len(wanted_set)} unique symbols.")
112
+ PrettyOutput.auto_print(
113
+ f"[read_symbols] Requested {len(wanted_set)} unique symbols."
114
+ )
88
115
 
89
116
  results: Dict[str, List[Dict[str, Any]]] = {s: [] for s in requested}
90
117
 
@@ -110,7 +137,9 @@ class ReadSymbolsTool:
110
137
 
111
138
  not_found = [s for s in requested if not results.get(s)]
112
139
  if not_found:
113
- print(f"[read_symbols] Symbols not found: {not_found}")
140
+ PrettyOutput.auto_print(
141
+ f"[read_symbols] Symbols not found: {not_found}"
142
+ )
114
143
  found_counts = {s: len(results.get(s, [])) for s in requested}
115
144
 
116
145
  out_obj: Dict[str, Any] = {
@@ -129,12 +158,16 @@ class ReadSymbolsTool:
129
158
  cnt = found_counts.get(s, 0)
130
159
  status_lines.append(f"[read_symbols] {s}: {cnt} 条匹配")
131
160
  if status_lines:
132
- print("\n".join(status_lines), end="\n")
161
+ PrettyOutput.auto_print("\n".join(status_lines), end="\n")
133
162
  except Exception:
134
163
  pass
135
164
 
136
165
  return {"success": True, "stdout": stdout, "stderr": ""}
137
166
 
138
167
  except Exception as e:
139
- print(f"❌ {str(e)}")
140
- return {"success": False, "stdout": "", "stderr": f"读取符号表失败: {str(e)}"}
168
+ PrettyOutput.auto_print(f"❌ {str(e)}")
169
+ return {
170
+ "success": False,
171
+ "stdout": "",
172
+ "stderr": f"读取符号表失败: {str(e)}",
173
+ }
@@ -1,14 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
- from typing import Any, Dict
2
+ from typing import Any
3
+ from typing import Dict
4
+
5
+ import requests
6
+ from markdownify import markdownify as md
3
7
 
4
8
  from jarvis.jarvis_platform.registry import PlatformRegistry
5
- from jarvis.jarvis_utils.config import (
6
- get_web_search_platform_name,
7
- get_web_search_model_name,
8
- )
9
+ from jarvis.jarvis_utils.config import get_web_search_model_name
10
+ from jarvis.jarvis_utils.config import get_web_search_platform_name
9
11
  from jarvis.jarvis_utils.http import get as http_get
10
- from markdownify import markdownify as md # type: ignore
11
- import requests # type: ignore[import-untyped]
12
+ from jarvis.jarvis_utils.output import PrettyOutput
12
13
 
13
14
 
14
15
  class WebpageTool:
@@ -47,32 +48,30 @@ class WebpageTool:
47
48
  if model:
48
49
  model.set_model_name(web_search_model)
49
50
  if model.support_web():
50
-
51
51
  model.set_web(True)
52
- model.set_suppress_output(False) # type: ignore
52
+ model.set_suppress_output(False)
53
53
  prompt = f"""请帮我处理这个网页:{url}
54
54
  用户的具体需求是:{want}
55
55
  请按照以下要求输出结果:
56
56
  1. 使用Markdown格式
57
57
  2. 包含网页标题
58
58
  3. 根据用户需求提供准确、完整的信息"""
59
- response = model.chat_until_success(prompt) # type: ignore
59
+ response = model.chat_until_success(prompt)
60
60
  if response and response.strip():
61
61
  return {"success": True, "stdout": response, "stderr": ""}
62
62
 
63
63
  # 2) 然后尝试使用cheap平台的 web 能力(适用于网页读取等简单任务)
64
64
  model = PlatformRegistry().get_cheap_platform()
65
65
  if model.support_web():
66
-
67
66
  model.set_web(True)
68
- model.set_suppress_output(False) # type: ignore
67
+ model.set_suppress_output(False)
69
68
  prompt = f"""请帮我处理这个网页:{url}
70
69
  用户的具体需求是:{want}
71
70
  请按照以下要求输出结果:
72
71
  1. 使用Markdown格式
73
72
  2. 包含网页标题
74
73
  3. 根据用户需求提供准确、完整的信息"""
75
- response = model.chat_until_success(prompt) # type: ignore
74
+ response = model.chat_until_success(prompt)
76
75
  if response and response.strip():
77
76
  return {"success": True, "stdout": response, "stderr": ""}
78
77
 
@@ -82,14 +81,16 @@ class WebpageTool:
82
81
  resp = http_get(url, timeout=10.0, allow_redirects=True)
83
82
  content_md = md(resp.text, strip=["script", "style"])
84
83
  except requests.exceptions.HTTPError as e:
85
- print(f"⚠️ HTTP错误 {e.response.status_code} 访问 {url}")
84
+ PrettyOutput.auto_print(
85
+ f"⚠️ HTTP错误 {e.response.status_code} 访问 {url}"
86
+ )
86
87
  return {
87
88
  "success": False,
88
89
  "stdout": "",
89
90
  "stderr": f"HTTP错误:{e.response.status_code}",
90
91
  }
91
92
  except requests.exceptions.RequestException as e:
92
- print(f"⚠️ 请求错误: {e}")
93
+ PrettyOutput.auto_print(f"⚠️ 请求错误: {e}")
93
94
  return {"success": False, "stdout": "", "stderr": f"请求错误:{e}"}
94
95
 
95
96
  if not content_md or not content_md.strip():
@@ -110,13 +111,13 @@ class WebpageTool:
110
111
 
111
112
  # 使用cheap平台进行网页内容总结(简单任务)
112
113
  model = PlatformRegistry().get_cheap_platform()
113
- model.set_suppress_output(False) # type: ignore
114
- summary = model.chat_until_success(summary_prompt) # type: ignore
114
+ model.set_suppress_output(False)
115
+ summary = model.chat_until_success(summary_prompt)
115
116
 
116
117
  return {"success": True, "stdout": summary, "stderr": ""}
117
118
 
118
119
  except Exception as e:
119
- print(f"❌ 读取网页失败: {str(e)}")
120
+ PrettyOutput.auto_print(f"❌ 读取网页失败: {str(e)}")
120
121
  return {
121
122
  "success": False,
122
123
  "stdout": "",