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
@@ -0,0 +1,158 @@
1
+ """规则分享管理模块"""
2
+
3
+ import glob
4
+ import os
5
+
6
+ from jarvis.jarvis_utils.output import PrettyOutput
7
+
8
+ # -*- coding: utf-8 -*-
9
+ import shutil
10
+ from typing import Any
11
+ from typing import Dict
12
+ from typing import List
13
+ from typing import Set
14
+
15
+ import typer
16
+
17
+ from jarvis.jarvis_agent import user_confirm
18
+ from jarvis.jarvis_agent.share_manager import ShareManager
19
+ from jarvis.jarvis_utils.config import get_central_rules_repo
20
+ from jarvis.jarvis_utils.config import get_data_dir
21
+
22
+
23
+ class RuleShareManager(ShareManager):
24
+ """规则分享管理器"""
25
+
26
+ def __init__(self):
27
+ central_repo = get_central_rules_repo()
28
+ if not central_repo:
29
+ PrettyOutput.auto_print("❌ 错误:未配置中心规则仓库(central_rules_repo)")
30
+ PrettyOutput.auto_print("ℹ️ 请在配置文件中设置中心规则仓库的Git地址")
31
+ raise typer.Exit(code=1)
32
+
33
+ super().__init__(central_repo, "central_rules_repo")
34
+
35
+ def get_resource_type(self) -> str:
36
+ """获取资源类型名称"""
37
+ return "规则"
38
+
39
+ def format_resource_display(self, resource: Dict[str, Any]) -> str:
40
+ """格式化资源显示"""
41
+ return f"{resource['rule_name']} ({resource['filename']})"
42
+
43
+ def get_existing_resources(self) -> Set[str]:
44
+ """获取中心仓库中已有的规则文件名"""
45
+ existing_rules = set()
46
+ # 检查 rules 目录中的文件
47
+ rules_dir = os.path.join(self.repo_path, "rules")
48
+ if os.path.exists(rules_dir):
49
+ for filepath in glob.glob(os.path.join(rules_dir, "*")):
50
+ if os.path.isfile(filepath):
51
+ existing_rules.add(os.path.basename(filepath))
52
+ # 检查根目录下的文件(作为规则文件)
53
+ for filepath in glob.glob(os.path.join(self.repo_path, "*")):
54
+ if os.path.isfile(filepath) and not filepath.endswith(".yaml"):
55
+ existing_rules.add(os.path.basename(filepath))
56
+ return existing_rules
57
+
58
+ def get_local_resources(self) -> List[Dict[str, Any]]:
59
+ """获取本地规则
60
+
61
+ 注意:只能共享默认rules目录(get_data_dir()/rules)中的规则,
62
+ 不能共享配置的rules目录和项目rules目录中的规则。
63
+ """
64
+ # 获取中心仓库中已有的规则文件名
65
+ existing_rules = self.get_existing_resources()
66
+
67
+ # 只从默认数据目录的 rules 目录获取规则(不能共享配置的目录和项目rules)
68
+ local_rules_dir = os.path.join(get_data_dir(), "rules")
69
+ if not os.path.exists(local_rules_dir):
70
+ PrettyOutput.auto_print(f"⚠️ 本地规则目录不存在: {local_rules_dir}")
71
+ return []
72
+
73
+ # 收集本地规则文件(排除已存在的)
74
+ rule_files = []
75
+ for filepath in glob.glob(os.path.join(local_rules_dir, "*")):
76
+ if not os.path.isfile(filepath):
77
+ continue
78
+ filename = os.path.basename(filepath)
79
+ # 跳过已存在的文件
80
+ if filename in existing_rules:
81
+ continue
82
+
83
+ # 规则名称就是文件名
84
+ rule_name = filename
85
+ rule_files.append(
86
+ {
87
+ "path": filepath,
88
+ "filename": filename,
89
+ "rule_name": rule_name,
90
+ }
91
+ )
92
+
93
+ return rule_files
94
+
95
+ def share_resources(self, resources: List[Dict[str, Any]]) -> List[str]:
96
+ """分享规则到中心仓库"""
97
+ # 确认操作
98
+ share_list = ["\n将要分享以下规则到中心仓库(注意:文件将被移动而非复制):"]
99
+ for rule in resources:
100
+ share_list.append(f"- {rule['rule_name']} ({rule['filename']})")
101
+ joined_list = "\n".join(share_list)
102
+ PrettyOutput.auto_print(f"⚠️ {joined_list}")
103
+
104
+ if not user_confirm("确认移动这些规则到中心仓库吗?(原文件将被删除)"):
105
+ return []
106
+
107
+ # 确保中心仓库有 rules 目录
108
+ rules_dir = os.path.join(self.repo_path, "rules")
109
+ if not os.path.exists(rules_dir):
110
+ os.makedirs(rules_dir, exist_ok=True)
111
+
112
+ # 移动选中的规则到中心仓库
113
+ moved_list = []
114
+ for rule in resources:
115
+ src_file = rule["path"]
116
+ dst_file = os.path.join(rules_dir, rule["filename"])
117
+ shutil.move(src_file, dst_file) # 使用move而不是copy
118
+ moved_list.append(f"已移动: {rule['rule_name']}")
119
+
120
+ return moved_list
121
+
122
+ def run(self) -> None:
123
+ """执行规则分享流程"""
124
+ try:
125
+ # 更新中心仓库
126
+ self.update_central_repo()
127
+
128
+ # 获取本地资源
129
+ local_resources = self.get_local_resources()
130
+ if not local_resources:
131
+ PrettyOutput.auto_print(
132
+ "⚠️ 没有找到新的规则文件(所有规则可能已存在于中心仓库)"
133
+ )
134
+ return
135
+
136
+ # 选择要分享的资源
137
+ selected_resources = self.select_resources(local_resources)
138
+ if not selected_resources:
139
+ return
140
+
141
+ # 分享资源
142
+ moved_list = self.share_resources(selected_resources)
143
+ if moved_list:
144
+ # 一次性显示所有移动结果
145
+ joined_moved = "\n".join(moved_list)
146
+ PrettyOutput.auto_print(f"✅ {joined_moved}")
147
+
148
+ # 提交并推送
149
+ self.commit_and_push(len(selected_resources))
150
+
151
+ PrettyOutput.auto_print("✅ 规则已成功分享到中心仓库!")
152
+ PrettyOutput.auto_print(
153
+ f"ℹ️ 原文件已从 {os.path.join(get_data_dir(), 'rules')} 移动到中心仓库"
154
+ )
155
+
156
+ except Exception as e:
157
+ PrettyOutput.auto_print(f"❌ 分享规则时出错: {str(e)}")
158
+ raise typer.Exit(code=1)
@@ -0,0 +1,144 @@
1
+ # 整洁代码规则
2
+
3
+ ## 你必须遵守的核心原则
4
+
5
+ ### 1. 可读性优先原则(最高优先级)
6
+
7
+ **执行要求:**
8
+
9
+ - **必须**:代码是写给人看的,机器只是顺便执行
10
+ - **必须**:使用有意义的变量名和函数名
11
+ - **必须**:代码应该自解释,减少不必要的注释
12
+ - **禁止**:使用无意义的变量名(如 `a`, `b`, `x`, `temp`)
13
+
14
+ **命名要求:**
15
+
16
+ - 变量名必须清楚表达其用途
17
+ - 函数名必须清楚表达其功能
18
+ - 类名必须清楚表达其职责
19
+
20
+ ### 2. 单一职责原则(必须遵守)
21
+
22
+ **函数要求:**
23
+
24
+ - **必须**:每个函数只做一件事
25
+ - **必须**:函数名必须准确描述函数的功能
26
+ - **禁止**:一个函数做多件不相关的事
27
+
28
+ **类要求:**
29
+
30
+ - **必须**:每个类只有一个改变的理由
31
+ - **必须**:类的职责必须清晰明确
32
+ - **禁止**:创建职责混乱的"上帝类"
33
+
34
+ **代码要求:**
35
+
36
+ - **必须**:保持函数和类的简洁
37
+ - **必须**:如果函数或类变得复杂,必须拆分
38
+
39
+ ### 3. DRY 原则(禁止重复)
40
+
41
+ **执行要求:**
42
+
43
+ - **禁止**:编写重复代码
44
+ - **必须**:提取公共逻辑到函数或类中
45
+ - **必须**:使用配置而非硬编码
46
+ - **必须**:识别并消除重复模式
47
+
48
+ ## 命名规范(必须遵守)
49
+
50
+ ### 变量和函数命名
51
+
52
+ - **必须**:使用描述性的名称,避免缩写
53
+ - **必须**:函数名应该是动词或动词短语(如 `calculateTotal`, `getUserById`)
54
+ - **必须**:类名应该是名词或名词短语(如 `UserService`, `OrderProcessor`)
55
+ - **必须**:布尔变量应该使用 is/has/can 等前缀(如 `isValid`, `hasPermission`, `canEdit`)
56
+ - **禁止**:使用单字母变量名(除非是循环计数器)
57
+ - **禁止**:使用误导性的名称
58
+
59
+ ### 常量命名
60
+
61
+ - **必须**:常量应该使用全大写,单词间用下划线分隔(如 `MAX_RETRY_COUNT`, `DEFAULT_TIMEOUT`)
62
+ - **必须**:魔法数字和字符串必须定义为常量
63
+
64
+ ## 函数设计规范(必须遵守)
65
+
66
+ ### 函数长度
67
+
68
+ - **必须**:函数应该短小,最好不超过 20 行
69
+ - **必须**:如果函数超过 20 行,考虑拆分
70
+ - **必须**:函数应该只做一件事,做好一件事
71
+
72
+ ### 函数参数
73
+
74
+ - **必须**:函数参数应该尽可能少,最好不超过 3 个
75
+ - **必须**:如果参数超过 3 个,考虑使用对象或配置类
76
+ - **禁止**:使用布尔参数控制函数行为(使用策略模式或函数重载)
77
+
78
+ ### 函数行为
79
+
80
+ - **必须**:避免副作用,函数应该可预测
81
+ - **必须**:函数应该返回一致的结果类型
82
+ - **禁止**:函数既修改状态又返回值(除非明确需要)
83
+
84
+ ## 代码组织规范(必须遵守)
85
+
86
+ ### 代码布局
87
+
88
+ - **必须**:相关代码应该放在一起
89
+ - **必须**:使用空行分隔逻辑块
90
+ - **必须**:保持一致的代码风格
91
+ - **必须**:遵循项目的代码格式化规范
92
+
93
+ ### 代码清理
94
+
95
+ - **必须**:删除未使用的代码
96
+ - **必须**:删除过时的注释
97
+ - **必须**:删除调试代码(如 `console.log`, `print` 语句)
98
+ - **禁止**:提交包含调试代码的代码
99
+
100
+ ## 代码示例
101
+
102
+ ### ❌ 不好的实践
103
+
104
+ ```python
105
+ def calc(x, y, z):
106
+ return x * y + z * 2
107
+
108
+ def process(data):
109
+ # 处理数据
110
+ result = []
111
+ for i in data:
112
+ if i > 0:
113
+ result.append(i * 2)
114
+ return result
115
+ ```
116
+
117
+ ### ✅ 好的实践
118
+
119
+ ```python
120
+ TAX_MULTIPLIER = 2.0
121
+
122
+ def calculate_total_price(quantity: int, unit_price: float, tax_rate: float) -> float:
123
+ subtotal = quantity * unit_price
124
+ tax = subtotal * tax_rate
125
+ return subtotal + tax
126
+
127
+ def filter_and_double_positive_numbers(numbers: list[int]) -> list[int]:
128
+ """过滤正数并翻倍"""
129
+ return [number * 2 for number in numbers if number > 0]
130
+ ```
131
+
132
+ ## 代码质量检查清单
133
+
134
+ 在提交代码前,你必须确认:
135
+
136
+ - [ ] 所有变量和函数都有有意义的名称
137
+ - [ ] 函数长度不超过 20 行(或合理长度)
138
+ - [ ] 函数参数不超过 3 个
139
+ - [ ] 没有重复代码
140
+ - [ ] 没有未使用的代码和注释
141
+ - [ ] 代码格式符合项目规范
142
+ - [ ] 代码自解释,不需要过多注释
143
+ - [ ] 每个函数只做一件事
144
+ - [ ] 每个类职责单一
@@ -0,0 +1,115 @@
1
+ # 代码审查规则
2
+
3
+ ## 你必须审查的方面
4
+
5
+ ### 1. 功能正确性(必须验证)
6
+
7
+ **检查项:**
8
+
9
+ - [ ] 代码是否实现了预期的功能?
10
+ - [ ] 是否处理了所有边界情况?
11
+ - [ ] 是否处理了所有异常情况?
12
+ - [ ] 是否有潜在的安全漏洞?
13
+ - [ ] 是否有明显的逻辑错误?
14
+
15
+ **行动要求:**
16
+
17
+ - 如果发现功能未实现或实现错误,必须指出并要求修复
18
+ - 如果发现缺少边界或异常处理,必须要求补充
19
+ - 如果发现安全漏洞,必须标记为阻塞性问题
20
+
21
+ ### 2. 代码质量(必须评估)
22
+
23
+ **检查项:**
24
+
25
+ - [ ] 代码是否清晰、易读?
26
+ - [ ] 变量和函数命名是否准确、有意义?
27
+ - [ ] 是否有重复代码需要重构?
28
+ - [ ] 代码结构是否合理?
29
+
30
+ **行动要求:**
31
+
32
+ - 如果命名不清晰,必须建议更清晰的命名
33
+ - 如果发现重复代码,必须建议提取公共逻辑
34
+ - 如果代码结构混乱,必须建议重构
35
+
36
+ ### 3. 性能考虑(必须评估)
37
+
38
+ **检查项:**
39
+
40
+ - [ ] 是否存在明显的性能瓶颈?
41
+ - [ ] 算法和数据结构选择是否合理?
42
+ - [ ] 是否有不必要的计算或资源消耗?
43
+ - [ ] 是否有内存泄漏风险?
44
+
45
+ **行动要求:**
46
+
47
+ - 如果发现性能问题,必须指出并提供优化建议
48
+ - 如果算法选择不当,必须建议更合适的方案
49
+
50
+ ### 4. 可维护性(必须评估)
51
+
52
+ **检查项:**
53
+
54
+ - [ ] 代码结构是否合理?
55
+ - [ ] 是否遵循项目的编码规范?
56
+ - [ ] 是否有适当的注释和文档?
57
+ - [ ] 代码是否易于理解和修改?
58
+
59
+ **行动要求:**
60
+
61
+ - 如果违反编码规范,必须要求修正
62
+ - 如果缺少必要注释,必须要求补充
63
+ - 如果代码难以理解,必须要求重构
64
+
65
+ ## 审查行为规范
66
+
67
+ ### 你必须遵守的原则
68
+
69
+ - **必须**:保持建设性的反馈,关注代码而非个人
70
+ - **必须**:提出具体、可操作的建议
71
+ - **必须**:认可好的实践和设计
72
+ - **必须**:及时响应审查请求
73
+ - **禁止**:使用攻击性或贬低性的语言
74
+
75
+ ### 审查建议的格式
76
+
77
+ - 明确指出问题所在(文件、行号、代码片段)
78
+ - 说明问题的影响(为什么这是个问题)
79
+ - 提供具体的修复建议(如何修复)
80
+ - 如果是阻塞性问题,明确标记
81
+
82
+ ### 复杂变更的处理
83
+
84
+ - 对于大型或复杂的变更,可以要求分阶段审查
85
+ - 建议将复杂功能拆分为多个小的、可审查的提交
86
+
87
+ ## 审查检查清单
88
+
89
+ 在完成代码审查时,你必须确认:
90
+
91
+ **功能层面:**
92
+
93
+ - [ ] 代码实现了预期功能
94
+ - [ ] 处理了边界和异常情况
95
+ - [ ] 没有明显的 bug 或逻辑错误
96
+
97
+ **质量层面:**
98
+
99
+ - [ ] 代码符合项目的编码规范
100
+ - [ ] 命名清晰、有意义
101
+ - [ ] 没有重复代码
102
+ - [ ] 代码结构合理
103
+
104
+ **安全与性能:**
105
+
106
+ - [ ] 没有安全漏洞
107
+ - [ ] 性能可接受
108
+ - [ ] 资源使用合理
109
+
110
+ **可维护性:**
111
+
112
+ - [ ] 有适当的错误处理
113
+ - [ ] 有必要的测试覆盖
114
+ - [ ] 代码注释清晰、准确
115
+ - [ ] 代码易于理解和维护
@@ -0,0 +1,165 @@
1
+ # 文档编写规则
2
+
3
+ ## 你必须遵守的文档原则
4
+
5
+ ### 1. 清晰性原则(必须遵守)
6
+
7
+ **文档要求:**
8
+
9
+ - **必须**:文档应该清晰、准确
10
+ - **必须**:使用简单的语言
11
+ - **必须**:避免不必要的技术术语
12
+ - **必须**:必要时提供术语解释
13
+
14
+ **写作要求:**
15
+
16
+ - 使用短句,避免长句
17
+ - 使用主动语态
18
+ - 使用具体的例子
19
+ - 避免模糊的表达
20
+
21
+ ### 2. 完整性原则(必须遵守)
22
+
23
+ **文档要求:**
24
+
25
+ - **必须**:文档应该覆盖所有重要功能
26
+ - **必须**:包含使用示例
27
+ - **必须**:说明限制和注意事项
28
+ - **必须**:说明前提条件和依赖
29
+
30
+ **内容要求:**
31
+
32
+ - 功能描述:说明功能做什么
33
+ - 使用方法:说明如何使用
34
+ - 参数说明:说明所有参数
35
+ - 返回值说明:说明返回值
36
+ - 异常说明:说明可能抛出的异常
37
+ - 示例代码:提供可运行的示例
38
+
39
+ ### 3. 及时性原则(必须遵守)
40
+
41
+ **维护要求:**
42
+
43
+ - **必须**:代码变更时同步更新文档
44
+ - **必须**:文档应该反映当前实现
45
+ - **必须**:删除过时的文档
46
+ - **禁止**:文档与代码不一致
47
+
48
+ **更新时机:**
49
+
50
+ - 添加新功能时,立即更新文档
51
+ - 修改功能时,同步更新文档
52
+ - 删除功能时,删除相关文档
53
+ - 定期检查文档与代码的一致性
54
+
55
+ ## 你必须编写的文档类型
56
+
57
+ ### 1. 代码注释(必须编写)
58
+
59
+ **注释要求:**
60
+
61
+ - **必须**:解释"为什么",而不是"做什么"
62
+ - **必须**:复杂逻辑必须有注释
63
+ - **必须**:公共 API 必须有文档字符串
64
+ - **禁止**:注释重复代码内容
65
+
66
+ **注释内容:**
67
+
68
+ - 业务逻辑说明
69
+ - 算法选择原因
70
+ - 特殊处理的原因
71
+ - 已知问题和限制
72
+
73
+ **文档字符串格式:**
74
+
75
+ ```python
76
+ def calculate_total(items: list[Item], discount: float = 0.0) -> float:
77
+ """计算商品总价
78
+
79
+ 参数:
80
+ items: 商品列表,不能为空
81
+ discount: 折扣率,范围 0.0-1.0,默认 0.0
82
+
83
+ 返回:
84
+ 计算后的总价,已应用折扣
85
+
86
+ 异常:
87
+ ValueError: 当 items 为空或 discount 不在有效范围时抛出
88
+
89
+ 示例:
90
+ >>> items = [Item(price=10.0), Item(price=20.0)]
91
+ >>> calculate_total(items, discount=0.1)
92
+ 27.0
93
+ """
94
+ pass
95
+ ```
96
+
97
+ ### 2. README 文档(必须编写)
98
+
99
+ **README 要求:**
100
+
101
+ - **必须**:项目概述和快速开始
102
+ - **必须**:安装和配置说明
103
+ - **必须**:使用示例
104
+ - **必须**:常见问题解答(如适用)
105
+
106
+ **README 结构:**
107
+
108
+ - 项目简介
109
+ - 功能特性
110
+ - 安装步骤
111
+ - 配置说明
112
+ - 快速开始
113
+ - 使用示例
114
+ - API 文档链接
115
+ - 贡献指南
116
+ - 许可证信息
117
+
118
+ ### 3. API 文档(必须编写)
119
+
120
+ **API 文档要求:**
121
+
122
+ - **必须**:函数签名和参数说明
123
+ - **必须**:返回值说明
124
+ - **必须**:使用示例
125
+ - **必须**:异常说明
126
+
127
+ **文档内容:**
128
+
129
+ - 函数/方法签名
130
+ - 参数类型和说明
131
+ - 返回值类型和说明
132
+ - 可能抛出的异常
133
+ - 使用示例
134
+ - 相关 API 链接
135
+
136
+ ## 文档编写检查清单
137
+
138
+ 在完成代码后,你必须确认:
139
+
140
+ **代码注释:**
141
+
142
+ - [ ] 所有公共 API 都有文档字符串
143
+ - [ ] 复杂逻辑有注释说明
144
+ - [ ] 注释解释了"为什么"而非"做什么"
145
+ - [ ] 没有过时的注释
146
+
147
+ **README:**
148
+
149
+ - [ ] README 包含快速开始指南
150
+ - [ ] 有安装和配置说明
151
+ - [ ] 有使用示例
152
+ - [ ] 文档清晰、易读
153
+
154
+ **API 文档:**
155
+
156
+ - [ ] 所有公共 API 都有文档
157
+ - [ ] 参数和返回值都有说明
158
+ - [ ] 有使用示例
159
+ - [ ] 说明了可能抛出的异常
160
+
161
+ **文档维护:**
162
+
163
+ - [ ] 文档与代码保持同步
164
+ - [ ] 删除了过时的文档
165
+ - [ ] 文档反映了当前实现
@@ -0,0 +1,52 @@
1
+ **深度分析当前项目实际代码结构**,从项目真实实践中提炼**8个核心维度**,为该项目生成**AI IDE专用的代码开发指导规则**。
2
+
3
+ 这些规则将作为AI IDE的智能提示和代码生成准则,指导AI在代码开发过程中遵循该项目的实际最佳实践。
4
+
5
+ **代码分析方法:**
6
+
7
+ 基于**代码即真理**原则,通过深度阅读项目实际代码来总结规则:
8
+
9
+ 1. **深度代码阅读**:逐行分析项目核心代码文件,识别真实的编码模式和技术实现
10
+ 2. **从代码中提取规律**:基于实际代码样例总结命名约定、架构模式、设计哲学
11
+ 3. **代码验证模式**:通过现有代码中的成功实践,提炼可复用的开发模式
12
+ 4. **拒绝需求假设**:所有规则必须来源于实际代码验证,禁止基于需求臆测
13
+ 5. **代码驱动规则**:每个指导原则都必须有对应的代码样例支撑
14
+ 6. **持续代码洞察**:随着对代码理解的深入,动态优化规则体系
15
+
16
+ **AI代码生成直接相关的8个核心维度**(基于真实代码验证):
17
+
18
+ ### 1. 编码规范
19
+ 定义代码风格、命名约定、格式化标准,确保生成的代码符合项目既有风格
20
+
21
+ ### 2. 工程结构规范
22
+ 定义目录布局、模块组织、文件放置规则,确保代码结构符合项目架构
23
+
24
+ ### 3. 错误处理规范
25
+ 定义异常处理策略、错误返回格式、日志记录标准,确保代码健壮性
26
+
27
+ ### 4. 数据处理规范
28
+ 定义数据验证、清洗、转换和存储标准,确保业务逻辑正确性
29
+
30
+ ### 5. 接口设计规范
31
+ 定义API命名、参数规范、响应格式、类型注解,确保接口一致性
32
+
33
+ ### 6. 性能与资源规范
34
+ 定义性能指标、内存管理、算法选择标准,确保代码效率
35
+
36
+ ### 7. 依赖管理规范
37
+ 定义导入顺序、第三方库使用、版本控制标准,确保依赖清晰
38
+
39
+ ### 8. 类型注解规范
40
+ 定义类型提示、泛型使用、接口契约标准,确保代码可维护性
41
+
42
+ 输出格式:每个文件使用Markdown格式,包含**AI开发指令**和**代码生成准则**,用简洁的机器学习友好的方式描述核心原则,避免冗长的人类阅读文档
43
+
44
+ 生成原则:
45
+
46
+ - **AI指令优先**:规则应格式化为AI可直接理解和执行的指令,而非人类阅读文档
47
+ - **代码生成导向**:每个指导原则都必须能转化为具体的代码生成决策依据
48
+ - **必须基于项目实际代码验证**:每个维度都必须通过实际项目代码分析,确认其与项目开发模式的真实关联性
49
+ - **严禁虚构内容**:绝对禁止生成任何未经项目代码验证的虚构信息、假设或推测,所有规则必须基于真实存在的代码实践
50
+ - **项目特定性**:禁止通用建议,所有规则必须反映该项目的独特开发智慧
51
+ - **上下文感知**:规则应帮助AI理解何时何地应用特定模式,而非提供固定模板
52
+ - **简洁机器友好**:用结构化、标签化的方式表达核心概念,便于AI快速解析和应用