jarvis-ai-assistant 0.5.0__tar.gz → 0.7.0__tar.gz

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 (203) hide show
  1. {jarvis_ai_assistant-0.5.0/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.7.0}/PKG-INFO +85 -1
  2. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/README.md +2 -0
  3. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/pyproject.toml +52 -2
  4. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/setup.py +48 -1
  5. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/__init__.py +1 -1
  6. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/__init__.py +153 -11
  7. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/agent_manager.py +3 -4
  8. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/edit_file_handler.py +28 -5
  9. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/event_bus.py +1 -1
  10. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/file_context_handler.py +17 -7
  11. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/jarvis.py +48 -10
  12. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/rewrite_file_handler.py +1 -3
  13. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/run_loop.py +6 -1
  14. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/stdio_redirect.py +1 -2
  15. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/task_analyzer.py +5 -2
  16. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_agent/task_planner.py +496 -0
  17. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/web_server.py +23 -17
  18. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/__init__.py +26 -0
  19. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/cli.py +613 -0
  20. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/collector.py +258 -0
  21. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/library_replacer.py +1122 -0
  22. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/llm_module_agent.py +1300 -0
  23. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/optimizer.py +960 -0
  24. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/scanner.py +1681 -0
  25. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_c2rust/transpiler.py +2325 -0
  26. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/build_validation_config.py +133 -0
  27. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_agent.py +1883 -0
  28. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/__init__.py +62 -0
  29. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/base_language.py +74 -0
  30. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py +44 -0
  31. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py +102 -0
  32. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py +59 -0
  33. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py +125 -0
  34. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py +69 -0
  35. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py +38 -0
  36. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py +44 -0
  37. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py +38 -0
  38. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py +50 -0
  39. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py +93 -0
  40. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py +129 -0
  41. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py +54 -0
  42. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py +154 -0
  43. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/build_validator.py +43 -0
  44. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/context_manager.py +363 -0
  45. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/context_recommender.py +18 -0
  46. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py +132 -0
  47. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/file_ignore.py +330 -0
  48. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py +781 -0
  49. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/language_registry.py +185 -0
  50. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/language_support.py +89 -0
  51. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py +31 -0
  52. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py +231 -0
  53. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py +183 -0
  54. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py +219 -0
  55. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py +209 -0
  56. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py +451 -0
  57. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py +77 -0
  58. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py +48 -0
  59. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/lint.py +413 -0
  60. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_code_agent/utils.py +142 -0
  61. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_data/config_schema.json +38 -3
  62. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_git_utils/git_commiter.py +38 -26
  63. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_mcp/sse_mcp_client.py +2 -2
  64. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +1 -1
  65. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_memory_organizer/memory_organizer.py +1 -1
  66. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/base.py +33 -48
  67. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/yuanbao.py +1 -1
  68. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform_manager/service.py +2 -2
  69. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/cli.py +4 -4
  70. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/__init__.py +3605 -0
  71. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/checkers/__init__.py +32 -0
  72. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/checkers/c_checker.py +2680 -0
  73. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/checkers/rust_checker.py +1108 -0
  74. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/cli.py +116 -0
  75. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/report.py +257 -0
  76. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/status.py +264 -0
  77. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/types.py +20 -0
  78. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_sec/workflow.py +219 -0
  79. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_stats/cli.py +1 -1
  80. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_stats/stats.py +1 -1
  81. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_stats/visualizer.py +1 -1
  82. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/cli/main.py +1 -0
  83. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/execute_script.py +1 -1
  84. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/generate_new_tool.py +3 -1
  85. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_tools/read_code.py +441 -0
  86. jarvis_ai_assistant-0.7.0/src/jarvis/jarvis_tools/read_symbols.py +141 -0
  87. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/read_webpage.py +1 -1
  88. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/registry.py +31 -6
  89. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/search_web.py +1 -1
  90. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/sub_agent.py +5 -5
  91. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/sub_code_agent.py +11 -12
  92. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/virtual_tty.py +1 -1
  93. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/config.py +104 -27
  94. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/git_utils.py +169 -6
  95. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/globals.py +3 -3
  96. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/http.py +1 -1
  97. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/input.py +0 -1
  98. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/utils.py +610 -435
  99. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0/src/jarvis_ai_assistant.egg-info}/PKG-INFO +85 -1
  100. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +52 -0
  101. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis_ai_assistant.egg-info/entry_points.txt +4 -0
  102. jarvis_ai_assistant-0.7.0/src/jarvis_ai_assistant.egg-info/requires.txt +146 -0
  103. jarvis_ai_assistant-0.5.0/src/jarvis/jarvis_code_agent/code_agent.py +0 -1011
  104. jarvis_ai_assistant-0.5.0/src/jarvis/jarvis_code_agent/lint.py +0 -151
  105. jarvis_ai_assistant-0.5.0/src/jarvis/jarvis_tools/read_code.py +0 -179
  106. jarvis_ai_assistant-0.5.0/src/jarvis_ai_assistant.egg-info/requires.txt +0 -40
  107. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/LICENSE +0 -0
  108. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/MANIFEST.in +0 -0
  109. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/setup.cfg +0 -0
  110. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
  111. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/config_editor.py +0 -0
  112. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/events.py +0 -0
  113. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/file_methodology_manager.py +0 -0
  114. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/main.py +0 -0
  115. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/memory_manager.py +0 -0
  116. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/methodology_share_manager.py +0 -0
  117. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  118. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/prompt_builder.py +0 -0
  119. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/prompt_manager.py +0 -0
  120. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/prompts.py +0 -0
  121. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/protocols.py +0 -0
  122. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/session_manager.py +0 -0
  123. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/share_manager.py +0 -0
  124. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  125. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/task_manager.py +0 -0
  126. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/tool_executor.py +0 -0
  127. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/tool_share_manager.py +0 -0
  128. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/user_interaction.py +0 -0
  129. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/utils.py +0 -0
  130. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/web_bridge.py +0 -0
  131. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_agent/web_output_sink.py +0 -0
  132. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  133. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  134. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  135. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  136. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  137. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  138. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  139. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  140. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  141. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  142. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  143. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  144. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  145. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  146. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  147. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  148. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  149. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  150. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  151. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  152. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  153. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_code_analysis/code_review.py +0 -0
  154. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  155. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
  156. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_git_squash/main.py +0 -0
  157. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_mcp/__init__.py +0 -0
  158. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
  159. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_memory_organizer/__init__.py +0 -0
  160. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_methodology/main.py +0 -0
  161. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
  162. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_multi_agent/main.py +0 -0
  163. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/__init__.py +0 -0
  164. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/ai8.py +0 -0
  165. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/human.py +0 -0
  166. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/kimi.py +0 -0
  167. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/openai.py +0 -0
  168. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/registry.py +0 -0
  169. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform/tongyi.py +0 -0
  170. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
  171. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_platform_manager/main.py +0 -0
  172. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/__init__.py +0 -0
  173. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/cache.py +0 -0
  174. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/embedding_manager.py +0 -0
  175. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/llm_interface.py +0 -0
  176. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/query_rewriter.py +0 -0
  177. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/rag_pipeline.py +0 -0
  178. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/reranker.py +0 -0
  179. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_rag/retriever.py +0 -0
  180. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  181. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_smart_shell/main.py +0 -0
  182. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_stats/__init__.py +0 -0
  183. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_stats/storage.py +0 -0
  184. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/__init__.py +0 -0
  185. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  186. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/base.py +0 -0
  187. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/clear_memory.py +0 -0
  188. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
  189. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
  190. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/methodology.py +0 -0
  191. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/retrieve_memory.py +0 -0
  192. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_tools/save_memory.py +0 -0
  193. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/__init__.py +0 -0
  194. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -0
  195. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/clipboard.py +0 -0
  196. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/embedding.py +0 -0
  197. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/file_processors.py +0 -0
  198. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/fzf.py +0 -0
  199. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/methodology.py +0 -0
  200. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/output.py +0 -0
  201. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis/jarvis_utils/tag.py +0 -0
  202. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  203. {jarvis_ai_assistant-0.5.0 → jarvis_ai_assistant-0.7.0}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.5.0
3
+ Version: 0.7.0
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
@@ -78,6 +78,88 @@ Requires-Dist: sentence-transformers==2.7.0; extra == "rag"
78
78
  Requires-Dist: torch>=2.6; extra == "rag"
79
79
  Requires-Dist: unstructured[md]; extra == "rag"
80
80
  Requires-Dist: rank-bm25; extra == "rag"
81
+ Provides-Extra: clang16
82
+ Requires-Dist: clang==16.*; extra == "clang16"
83
+ Provides-Extra: clang17
84
+ Requires-Dist: clang==17.*; extra == "clang17"
85
+ Provides-Extra: clang18
86
+ Requires-Dist: clang==18.*; extra == "clang18"
87
+ Provides-Extra: clang19
88
+ Requires-Dist: clang==19.*; extra == "clang19"
89
+ Provides-Extra: clang20
90
+ Requires-Dist: clang==20.*; extra == "clang20"
91
+ Provides-Extra: clang21
92
+ Requires-Dist: clang==21.*; extra == "clang21"
93
+ Provides-Extra: tree-sitter-python
94
+ Requires-Dist: tree-sitter; extra == "tree-sitter-python"
95
+ Requires-Dist: tree-sitter-python; extra == "tree-sitter-python"
96
+ Provides-Extra: tree-sitter-javascript
97
+ Requires-Dist: tree-sitter; extra == "tree-sitter-javascript"
98
+ Requires-Dist: tree-sitter-javascript; extra == "tree-sitter-javascript"
99
+ Provides-Extra: tree-sitter-typescript
100
+ Requires-Dist: tree-sitter; extra == "tree-sitter-typescript"
101
+ Requires-Dist: tree-sitter-typescript; extra == "tree-sitter-typescript"
102
+ Provides-Extra: tree-sitter-rust
103
+ Requires-Dist: tree-sitter; extra == "tree-sitter-rust"
104
+ Requires-Dist: tree-sitter-rust; extra == "tree-sitter-rust"
105
+ Provides-Extra: tree-sitter-go
106
+ Requires-Dist: tree-sitter; extra == "tree-sitter-go"
107
+ Requires-Dist: tree-sitter-go; extra == "tree-sitter-go"
108
+ Provides-Extra: tree-sitter-java
109
+ Requires-Dist: tree-sitter; extra == "tree-sitter-java"
110
+ Requires-Dist: tree-sitter-java; extra == "tree-sitter-java"
111
+ Provides-Extra: tree-sitter-cpp
112
+ Requires-Dist: tree-sitter; extra == "tree-sitter-cpp"
113
+ Requires-Dist: tree-sitter-cpp; extra == "tree-sitter-cpp"
114
+ Provides-Extra: tree-sitter-c
115
+ Requires-Dist: tree-sitter; extra == "tree-sitter-c"
116
+ Requires-Dist: tree-sitter-c; extra == "tree-sitter-c"
117
+ Provides-Extra: tree-sitter-json
118
+ Requires-Dist: tree-sitter; extra == "tree-sitter-json"
119
+ Requires-Dist: tree-sitter-json; extra == "tree-sitter-json"
120
+ Provides-Extra: tree-sitter-yaml
121
+ Requires-Dist: tree-sitter; extra == "tree-sitter-yaml"
122
+ Requires-Dist: tree-sitter-yaml; extra == "tree-sitter-yaml"
123
+ Provides-Extra: tree-sitter-markdown
124
+ Requires-Dist: tree-sitter; extra == "tree-sitter-markdown"
125
+ Requires-Dist: tree-sitter-markdown; extra == "tree-sitter-markdown"
126
+ Provides-Extra: tree-sitter-html
127
+ Requires-Dist: tree-sitter; extra == "tree-sitter-html"
128
+ Requires-Dist: tree-sitter-html; extra == "tree-sitter-html"
129
+ Provides-Extra: tree-sitter-css
130
+ Requires-Dist: tree-sitter; extra == "tree-sitter-css"
131
+ Requires-Dist: tree-sitter-css; extra == "tree-sitter-css"
132
+ Provides-Extra: tree-sitter-bash
133
+ Requires-Dist: tree-sitter; extra == "tree-sitter-bash"
134
+ Requires-Dist: tree-sitter-bash; extra == "tree-sitter-bash"
135
+ Provides-Extra: tree-sitter-ruby
136
+ Requires-Dist: tree-sitter; extra == "tree-sitter-ruby"
137
+ Requires-Dist: tree-sitter-ruby; extra == "tree-sitter-ruby"
138
+ Provides-Extra: tree-sitter-php
139
+ Requires-Dist: tree-sitter; extra == "tree-sitter-php"
140
+ Requires-Dist: tree-sitter-php; extra == "tree-sitter-php"
141
+ Provides-Extra: tree-sitter-sql
142
+ Requires-Dist: tree-sitter; extra == "tree-sitter-sql"
143
+ Requires-Dist: tree-sitter-sql; extra == "tree-sitter-sql"
144
+ Provides-Extra: tree-sitter-all
145
+ Requires-Dist: tree-sitter; extra == "tree-sitter-all"
146
+ Requires-Dist: tree-sitter-python; extra == "tree-sitter-all"
147
+ Requires-Dist: tree-sitter-javascript; extra == "tree-sitter-all"
148
+ Requires-Dist: tree-sitter-typescript; extra == "tree-sitter-all"
149
+ Requires-Dist: tree-sitter-rust; extra == "tree-sitter-all"
150
+ Requires-Dist: tree-sitter-go; extra == "tree-sitter-all"
151
+ Requires-Dist: tree-sitter-java; extra == "tree-sitter-all"
152
+ Requires-Dist: tree-sitter-cpp; extra == "tree-sitter-all"
153
+ Requires-Dist: tree-sitter-c; extra == "tree-sitter-all"
154
+ Requires-Dist: tree-sitter-json; extra == "tree-sitter-all"
155
+ Requires-Dist: tree-sitter-yaml; extra == "tree-sitter-all"
156
+ Requires-Dist: tree-sitter-markdown; extra == "tree-sitter-all"
157
+ Requires-Dist: tree-sitter-html; extra == "tree-sitter-all"
158
+ Requires-Dist: tree-sitter-css; extra == "tree-sitter-all"
159
+ Requires-Dist: tree-sitter-bash; extra == "tree-sitter-all"
160
+ Requires-Dist: tree-sitter-ruby; extra == "tree-sitter-all"
161
+ Requires-Dist: tree-sitter-php; extra == "tree-sitter-all"
162
+ Requires-Dist: tree-sitter-sql; extra == "tree-sitter-all"
81
163
  Dynamic: author
82
164
  Dynamic: home-page
83
165
  Dynamic: license-file
@@ -262,6 +344,8 @@ Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及
262
344
  | `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
263
345
  | `jarvis-stats` | `jst` | 通用统计模块,支持记录和可视化任意指标数据 |
264
346
  | `jarvis-memory-organizer` | `jmo` | 记忆管理工具,支持整理、合并、导入导出记忆 |
347
+ | `jarvis-sec` | `jsec` | 安全分析套件,对代码工程进行安全扫描和分析 |
348
+ | `jarvis-c2rust` | `jc2r` | C→Rust 迁移套件,将 C/C++ 代码迁移到 Rust |
265
349
 
266
350
  更多详细用法和参数,请查阅我们的 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
267
351
 
@@ -177,6 +177,8 @@ Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及
177
177
  | `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
178
178
  | `jarvis-stats` | `jst` | 通用统计模块,支持记录和可视化任意指标数据 |
179
179
  | `jarvis-memory-organizer` | `jmo` | 记忆管理工具,支持整理、合并、导入导出记忆 |
180
+ | `jarvis-sec` | `jsec` | 安全分析套件,对代码工程进行安全扫描和分析 |
181
+ | `jarvis-c2rust` | `jc2r` | C→Rust 迁移套件,将 C/C++ 代码迁移到 Rust |
180
182
 
181
183
  更多详细用法和参数,请查阅我们的 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
182
184
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jarvis-ai-assistant"
7
- version = "0.5.0"
7
+ version = "0.7.0"
8
8
  description = "Jarvis: An AI assistant that uses tools to interact with the system"
9
9
  readme = "README.md"
10
10
  authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
@@ -43,7 +43,7 @@ dependencies = [
43
43
  "typer",
44
44
  "pathspec",
45
45
  "plotext==5.2.8",
46
- "packaging>=24.2",
46
+ "packaging>=24.2"
47
47
  ]
48
48
  requires-python = ">=3.9,<3.13"
49
49
 
@@ -60,6 +60,49 @@ rag = [
60
60
  "unstructured[md]",
61
61
  "rank-bm25",
62
62
  ]
63
+ clang16 = ["clang==16.*"]
64
+ clang17 = ["clang==17.*"]
65
+ clang18 = ["clang==18.*"]
66
+ clang19 = ["clang==19.*"]
67
+ clang20 = ["clang==20.*"]
68
+ clang21 = ["clang==21.*"]
69
+ tree-sitter-python = ["tree-sitter", "tree-sitter-python"]
70
+ tree-sitter-javascript = ["tree-sitter", "tree-sitter-javascript"]
71
+ tree-sitter-typescript = ["tree-sitter", "tree-sitter-typescript"]
72
+ tree-sitter-rust = ["tree-sitter", "tree-sitter-rust"]
73
+ tree-sitter-go = ["tree-sitter", "tree-sitter-go"]
74
+ tree-sitter-java = ["tree-sitter", "tree-sitter-java"]
75
+ tree-sitter-cpp = ["tree-sitter", "tree-sitter-cpp"]
76
+ tree-sitter-c = ["tree-sitter", "tree-sitter-c"]
77
+ tree-sitter-json = ["tree-sitter", "tree-sitter-json"]
78
+ tree-sitter-yaml = ["tree-sitter", "tree-sitter-yaml"]
79
+ tree-sitter-markdown = ["tree-sitter", "tree-sitter-markdown"]
80
+ tree-sitter-html = ["tree-sitter", "tree-sitter-html"]
81
+ tree-sitter-css = ["tree-sitter", "tree-sitter-css"]
82
+ tree-sitter-bash = ["tree-sitter", "tree-sitter-bash"]
83
+ tree-sitter-ruby = ["tree-sitter", "tree-sitter-ruby"]
84
+ tree-sitter-php = ["tree-sitter", "tree-sitter-php"]
85
+ tree-sitter-sql = ["tree-sitter", "tree-sitter-sql"]
86
+ tree-sitter-all = [
87
+ "tree-sitter",
88
+ "tree-sitter-python",
89
+ "tree-sitter-javascript",
90
+ "tree-sitter-typescript",
91
+ "tree-sitter-rust",
92
+ "tree-sitter-go",
93
+ "tree-sitter-java",
94
+ "tree-sitter-cpp",
95
+ "tree-sitter-c",
96
+ "tree-sitter-json",
97
+ "tree-sitter-yaml",
98
+ "tree-sitter-markdown",
99
+ "tree-sitter-html",
100
+ "tree-sitter-css",
101
+ "tree-sitter-bash",
102
+ "tree-sitter-ruby",
103
+ "tree-sitter-php",
104
+ "tree-sitter-sql",
105
+ ]
63
106
 
64
107
  [project.urls]
65
108
  Homepage = "https://github.com/skyfireitdiy/Jarvis"
@@ -96,6 +139,13 @@ jarvis-rag = "jarvis.jarvis_rag.cli:main"
96
139
  jrg = "jarvis.jarvis_rag.cli:main"
97
140
  jarvis-stats = "jarvis.jarvis_stats.cli:main"
98
141
  jst = "jarvis.jarvis_stats.cli:main"
142
+ jarvis-sec = "jarvis.jarvis_sec.cli:main"
143
+ jsec = "jarvis.jarvis_sec.cli:main"
144
+ jarvis-c2rust = "jarvis.jarvis_c2rust.cli:main"
145
+ jc2r = "jarvis.jarvis_c2rust.cli:main"
146
+
147
+
148
+
99
149
 
100
150
 
101
151
 
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages # type: ignore
3
3
 
4
4
  setup(
5
5
  name="jarvis-ai-assistant",
6
- version="0.5.0",
6
+ version="0.7.0",
7
7
  author="skyfire",
8
8
  author_email="skyfireitdiy@hotmail.com",
9
9
  description="An AI assistant that uses various tools to interact with the system",
@@ -53,6 +53,49 @@ setup(
53
53
  "rank-bm25",
54
54
  "pathspec",
55
55
  ],
56
+ "clang16": ["clang==16.*"],
57
+ "clang17": ["clang==17.*"],
58
+ "clang18": ["clang==18.*"],
59
+ "clang19": ["clang==19.*"],
60
+ "clang20": ["clang==20.*"],
61
+ "clang21": ["clang==21.*"],
62
+ "tree-sitter-python": ["tree-sitter", "tree-sitter-python"],
63
+ "tree-sitter-javascript": ["tree-sitter", "tree-sitter-javascript"],
64
+ "tree-sitter-typescript": ["tree-sitter", "tree-sitter-typescript"],
65
+ "tree-sitter-rust": ["tree-sitter", "tree-sitter-rust"],
66
+ "tree-sitter-go": ["tree-sitter", "tree-sitter-go"],
67
+ "tree-sitter-java": ["tree-sitter", "tree-sitter-java"],
68
+ "tree-sitter-cpp": ["tree-sitter", "tree-sitter-cpp"],
69
+ "tree-sitter-c": ["tree-sitter", "tree-sitter-c"],
70
+ "tree-sitter-json": ["tree-sitter", "tree-sitter-json"],
71
+ "tree-sitter-yaml": ["tree-sitter", "tree-sitter-yaml"],
72
+ "tree-sitter-markdown": ["tree-sitter", "tree-sitter-markdown"],
73
+ "tree-sitter-html": ["tree-sitter", "tree-sitter-html"],
74
+ "tree-sitter-css": ["tree-sitter", "tree-sitter-css"],
75
+ "tree-sitter-bash": ["tree-sitter", "tree-sitter-bash"],
76
+ "tree-sitter-ruby": ["tree-sitter", "tree-sitter-ruby"],
77
+ "tree-sitter-php": ["tree-sitter", "tree-sitter-php"],
78
+ "tree-sitter-sql": ["tree-sitter", "tree-sitter-sql"],
79
+ "tree-sitter-all": [
80
+ "tree-sitter",
81
+ "tree-sitter-python",
82
+ "tree-sitter-javascript",
83
+ "tree-sitter-typescript",
84
+ "tree-sitter-rust",
85
+ "tree-sitter-go",
86
+ "tree-sitter-java",
87
+ "tree-sitter-cpp",
88
+ "tree-sitter-c",
89
+ "tree-sitter-json",
90
+ "tree-sitter-yaml",
91
+ "tree-sitter-markdown",
92
+ "tree-sitter-html",
93
+ "tree-sitter-css",
94
+ "tree-sitter-bash",
95
+ "tree-sitter-ruby",
96
+ "tree-sitter-php",
97
+ "tree-sitter-sql",
98
+ ],
56
99
  },
57
100
  entry_points={
58
101
  "console_scripts": [
@@ -84,6 +127,10 @@ setup(
84
127
  "jrg=jarvis.jarvis_rag.cli:main",
85
128
  "jarvis-stats=jarvis.jarvis_stats.cli:main",
86
129
  "jst=jarvis.jarvis_stats.cli:main",
130
+ "jarvis-sec=jarvis.jarvis_sec.cli:main",
131
+ "jsec=jarvis.jarvis_sec.cli:main",
132
+ "jarvis-c2rust=jarvis.jarvis_c2rust.cli:main",
133
+ "jc2r=jarvis.jarvis_c2rust.cli:main",
87
134
  ],
88
135
  },
89
136
  python_requires=">=3.9,<3.13",
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.5.0"
4
+ __version__ = "0.7.0"
@@ -7,7 +7,7 @@ import re
7
7
  import sys
8
8
  from pathlib import Path
9
9
  from enum import Enum
10
- from typing import Any, Callable, Dict, List, Optional, Protocol, Tuple, Union
10
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
11
11
 
12
12
 
13
13
  # 第三方库导入
@@ -25,11 +25,12 @@ from jarvis.jarvis_agent.tool_executor import execute_tool_call
25
25
  from jarvis.jarvis_agent.memory_manager import MemoryManager
26
26
  from jarvis.jarvis_memory_organizer.memory_organizer import MemoryOrganizer
27
27
  from jarvis.jarvis_agent.task_analyzer import TaskAnalyzer
28
+ from jarvis.jarvis_agent.task_planner import TaskPlanner
28
29
  from jarvis.jarvis_agent.file_methodology_manager import FileMethodologyManager
29
30
  from jarvis.jarvis_agent.prompts import (
30
31
  DEFAULT_SUMMARY_PROMPT,
31
32
  SUMMARY_REQUEST_PROMPT,
32
- TASK_ANALYSIS_PROMPT,
33
+ TASK_ANALYSIS_PROMPT as TASK_ANALYSIS_PROMPT,
33
34
  )
34
35
  from jarvis.jarvis_tools.registry import ToolRegistry
35
36
  from jarvis.jarvis_agent.edit_file_handler import EditFileHandler
@@ -75,8 +76,9 @@ from jarvis.jarvis_utils.config import (
75
76
  is_use_methodology,
76
77
  get_tool_filter_threshold,
77
78
  get_after_tool_call_cb_dirs,
78
-
79
-
79
+ get_plan_max_depth,
80
+ is_plan_enabled,
81
+ get_addon_prompt_threshold,
80
82
  )
81
83
  from jarvis.jarvis_utils.embedding import get_context_token_count
82
84
  from jarvis.jarvis_utils.globals import (
@@ -259,6 +261,8 @@ class Agent:
259
261
 
260
262
  # 清理会话历史并重置模型状态
261
263
  self.session.clear_history()
264
+ # 重置 addon_prompt 跳过轮数计数器
265
+ self._addon_prompt_skip_rounds = 0
262
266
 
263
267
  # 重置后重新设置系统提示词,确保系统约束仍然生效
264
268
  try:
@@ -285,6 +289,21 @@ class Agent:
285
289
  """获取工具使用提示"""
286
290
  return build_action_prompt(self.output_handler) # type: ignore
287
291
 
292
+ def __new__(cls, *args, **kwargs):
293
+ if kwargs.get("agent_type") == "code":
294
+ try:
295
+ from jarvis.jarvis_code_agent.code_agent import CodeAgent
296
+ except ImportError as e:
297
+ raise RuntimeError(
298
+ "CodeAgent could not be imported. Please ensure jarvis_code_agent is installed correctly."
299
+ ) from e
300
+
301
+ # 移除 agent_type 避免无限循环,并传递所有其他参数
302
+ kwargs.pop("agent_type", None)
303
+ return CodeAgent(**kwargs)
304
+ else:
305
+ return super().__new__(cls)
306
+
288
307
  def __init__(
289
308
  self,
290
309
  system_prompt: str,
@@ -302,10 +321,15 @@ class Agent:
302
321
  use_methodology: Optional[bool] = None,
303
322
  use_analysis: Optional[bool] = None,
304
323
  force_save_memory: Optional[bool] = None,
324
+ disable_file_edit: bool = False,
305
325
  files: Optional[List[str]] = None,
306
326
  confirm_callback: Optional[Callable[[str, bool], bool]] = None,
307
327
  non_interactive: Optional[bool] = None,
308
328
  in_multi_agent: Optional[bool] = None,
329
+ plan: Optional[bool] = None,
330
+ plan_max_depth: Optional[int] = None,
331
+ plan_depth: int = 0,
332
+ agent_type: str = "normal",
309
333
  **kwargs,
310
334
  ):
311
335
  """初始化Jarvis Agent实例
@@ -325,6 +349,9 @@ class Agent:
325
349
  force_save_memory: 是否强制保存记忆
326
350
  confirm_callback: 用户确认回调函数,签名为 (tip: str, default: bool) -> bool;默认使用CLI的user_confirm
327
351
  non_interactive: 是否以非交互模式运行(优先级最高,覆盖环境变量与配置)
352
+ plan: 是否启用任务规划与子任务拆分(默认从配置加载;启用后在进入主循环前评估是否需要将任务拆分为 <SUB_TASK> 列表,逐一由子Agent执行并汇总结果)
353
+ plan_max_depth: 任务规划的最大层数(默认3,可通过配置 JARVIS_PLAN_MAX_DEPTH 或入参覆盖)
354
+ plan_depth: 当前规划层数(内部用于递归控制,子Agent会在父基础上+1)
328
355
  """
329
356
  # 基础属性初始化(仅根据入参设置原始值;实际生效的默认回退在 _init_config 中统一解析)
330
357
  # 标识与描述
@@ -341,6 +368,7 @@ class Agent:
341
368
  self.execute_tool_confirm = execute_tool_confirm
342
369
  self.summary_prompt = summary_prompt
343
370
  self.force_save_memory = force_save_memory
371
+ self.disable_file_edit = bool(disable_file_edit)
344
372
  # 资源与环境
345
373
  self.model_group = model_group
346
374
  self.files = files or []
@@ -348,10 +376,25 @@ class Agent:
348
376
  self.non_interactive = non_interactive
349
377
  # 多智能体运行标志:用于控制非交互模式下的自动完成行为
350
378
  self.in_multi_agent = bool(in_multi_agent)
379
+ # 任务规划:优先使用入参,否则回退到配置
380
+ self.plan = bool(plan) if plan is not None else is_plan_enabled()
381
+ # 规划深度与上限
382
+ try:
383
+ self.plan_max_depth = (
384
+ int(plan_max_depth) if plan_max_depth is not None else int(get_plan_max_depth())
385
+ )
386
+ except Exception:
387
+ self.plan_max_depth = 2
388
+ try:
389
+ self.plan_depth = int(plan_depth)
390
+ except Exception:
391
+ self.plan_depth = 0
351
392
  # 运行时状态
352
393
  self.first = True
353
394
  self.run_input_handlers_next_turn = False
354
395
  self.user_data: Dict[str, Any] = {}
396
+ # 记录连续未添加 addon_prompt 的轮数
397
+ self._addon_prompt_skip_rounds: int = 0
355
398
 
356
399
 
357
400
  # 用户确认回调:默认使用 CLI 的 user_confirm,可由外部注入以支持 TUI/GUI
@@ -429,6 +472,8 @@ class Agent:
429
472
  self.task_analyzer = TaskAnalyzer(self)
430
473
  self.file_methodology_manager = FileMethodologyManager(self)
431
474
  self.prompt_manager = PromptManager(self)
475
+ # 任务规划器:封装规划与子任务调度逻辑
476
+ self.task_planner = TaskPlanner(self, plan_depth=self.plan_depth, plan_max_depth=self.plan_max_depth)
432
477
 
433
478
  # 设置系统提示词
434
479
  self._setup_system_prompt()
@@ -475,7 +520,13 @@ class Agent:
475
520
  use_tools: List[str],
476
521
  ):
477
522
  """初始化各种处理器"""
478
- self.output_handler = output_handler or [ToolRegistry(), EditFileHandler(), RewriteFileHandler()]
523
+ default_handlers: List[Any] = [ToolRegistry()]
524
+ if not getattr(self, "disable_file_edit", False):
525
+ default_handlers.extend([EditFileHandler(), RewriteFileHandler()])
526
+ handlers = output_handler or default_handlers
527
+ if getattr(self, "disable_file_edit", False):
528
+ handlers = [h for h in handlers if not isinstance(h, (EditFileHandler, RewriteFileHandler))]
529
+ self.output_handler = handlers
479
530
  self.set_use_tools(use_tools)
480
531
  self.input_handler = [
481
532
  builtin_input_handler,
@@ -707,7 +758,13 @@ class Agent:
707
758
  return message
708
759
 
709
760
  def _add_addon_prompt(self, message: str, need_complete: bool) -> str:
710
- """添加附加提示到消息"""
761
+ """添加附加提示到消息
762
+
763
+ 规则:
764
+ 1. 如果 session.addon_prompt 存在,优先使用它
765
+ 2. 如果消息长度超过阈值,添加默认 addon_prompt
766
+ 3. 如果连续10轮都没有添加过 addon_prompt,强制添加一次
767
+ """
711
768
  # 广播添加附加提示前事件(不影响主流程)
712
769
  try:
713
770
  self.event_bus.emit(
@@ -721,13 +778,32 @@ class Agent:
721
778
  pass
722
779
 
723
780
  addon_text = ""
781
+ should_add = False
782
+
724
783
  if self.session.addon_prompt:
784
+ # 优先使用 session 中设置的 addon_prompt
725
785
  addon_text = self.session.addon_prompt
726
786
  message = join_prompts([message, addon_text])
727
787
  self.session.addon_prompt = ""
788
+ should_add = True
728
789
  else:
729
- addon_text = self.make_default_addon_prompt(need_complete)
730
- message = join_prompts([message, addon_text])
790
+ threshold = get_addon_prompt_threshold()
791
+ # 条件1:消息长度超过阈值
792
+ if len(message) > threshold:
793
+ addon_text = self.make_default_addon_prompt(need_complete)
794
+ message = join_prompts([message, addon_text])
795
+ should_add = True
796
+ # 条件2:连续10轮都没有添加过 addon_prompt,强制添加一次
797
+ elif self._addon_prompt_skip_rounds >= 10:
798
+ addon_text = self.make_default_addon_prompt(need_complete)
799
+ message = join_prompts([message, addon_text])
800
+ should_add = True
801
+
802
+ # 更新计数器:如果添加了 addon_prompt,重置计数器;否则递增
803
+ if should_add:
804
+ self._addon_prompt_skip_rounds = 0
805
+ else:
806
+ self._addon_prompt_skip_rounds += 1
731
807
 
732
808
  # 广播添加附加提示后事件(不影响主流程)
733
809
  try:
@@ -801,9 +877,14 @@ class Agent:
801
877
  try:
802
878
  if not self.model:
803
879
  raise RuntimeError("Model not initialized")
804
- summary = self.model.chat_until_success(
805
- self.session.prompt + "\n" + SUMMARY_REQUEST_PROMPT
806
- ) # type: ignore
880
+ # 优先使用外部传入的 summary_prompt;如为空则回退到默认的会话摘要请求
881
+ safe_summary_prompt = self.summary_prompt or ""
882
+ if isinstance(safe_summary_prompt, str) and safe_summary_prompt.strip() != "":
883
+ prompt_to_use = safe_summary_prompt
884
+ else:
885
+ prompt_to_use = self.session.prompt + "\n" + SUMMARY_REQUEST_PROMPT
886
+
887
+ summary = self.model.chat_until_success(prompt_to_use) # type: ignore
807
888
  # 防御: 可能返回空响应(None或空字符串),统一为空字符串并告警
808
889
  if not summary:
809
890
  try:
@@ -869,6 +950,8 @@ class Agent:
869
950
  self._setup_system_prompt()
870
951
  # 重置会话
871
952
  self.session.clear_history()
953
+ # 重置 addon_prompt 跳过轮数计数器
954
+ self._addon_prompt_skip_rounds = 0
872
955
  # 广播清理历史后的事件
873
956
  try:
874
957
  self.event_bus.emit(AFTER_HISTORY_CLEAR, agent=self)
@@ -885,6 +968,8 @@ class Agent:
885
968
  except Exception:
886
969
  pass
887
970
  result = self.file_methodology_manager.handle_history_with_file_upload()
971
+ # 重置 addon_prompt 跳过轮数计数器
972
+ self._addon_prompt_skip_rounds = 0
888
973
  # 广播清理历史后的事件
889
974
  try:
890
975
  self.event_bus.emit(AFTER_HISTORY_CLEAR, agent=self)
@@ -1057,6 +1142,13 @@ class Agent:
1057
1142
  )
1058
1143
  except Exception:
1059
1144
  pass
1145
+ # 如启用规划模式,先判断是否需要拆分并调度子任务
1146
+ if self.plan:
1147
+ try:
1148
+ self._maybe_plan_and_dispatch(self.session.prompt)
1149
+ except Exception:
1150
+ # 防御式处理,规划失败不影响主流程
1151
+ pass
1060
1152
  return self._main_loop()
1061
1153
  except Exception as e:
1062
1154
  PrettyOutput.print(f"任务失败: {str(e)}", OutputType.ERROR)
@@ -1164,6 +1256,56 @@ class Agent:
1164
1256
  temp_model.set_system_prompt(system_prompt)
1165
1257
  return temp_model
1166
1258
 
1259
+ def _build_child_agent_params(self, name: str, description: str) -> Dict[str, Any]:
1260
+ """构建子Agent参数,尽量继承父Agent配置,并确保子Agent非交互自动完成。"""
1261
+ use_tools_param: Optional[List[str]] = None
1262
+ try:
1263
+ tr = self.get_tool_registry()
1264
+ if isinstance(tr, ToolRegistry):
1265
+ selected_tools = tr.get_all_tools()
1266
+ use_tools_param = [t["name"] for t in selected_tools]
1267
+ except Exception:
1268
+ use_tools_param = None
1269
+
1270
+ return {
1271
+ "system_prompt": origin_agent_system_prompt,
1272
+ "name": name,
1273
+ "description": description,
1274
+ "model_group": self.model_group,
1275
+ "summary_prompt": self.summary_prompt,
1276
+ "auto_complete": True,
1277
+ "use_tools": use_tools_param,
1278
+ "execute_tool_confirm": self.execute_tool_confirm,
1279
+ "need_summary": self.need_summary,
1280
+ "auto_summary_rounds": self.auto_summary_rounds,
1281
+ "multiline_inputer": self.multiline_inputer,
1282
+ "use_methodology": self.use_methodology,
1283
+ "use_analysis": self.use_analysis,
1284
+ "force_save_memory": self.force_save_memory,
1285
+ "disable_file_edit": self.disable_file_edit,
1286
+ "files": self.files,
1287
+ "confirm_callback": self.confirm_callback,
1288
+ "non_interactive": True,
1289
+ "in_multi_agent": True,
1290
+ "plan": self.plan, # 继承父Agent的规划开关
1291
+ "plan_depth": self.plan_depth + 1, # 子Agent层数+1
1292
+ "plan_max_depth": self.plan_max_depth, # 继承上限
1293
+ }
1294
+
1295
+ def _maybe_plan_and_dispatch(self, task_text: str) -> None:
1296
+ """委托给 TaskPlanner 执行任务规划与子任务调度,保持向后兼容。"""
1297
+ try:
1298
+ if hasattr(self, "task_planner") and self.task_planner:
1299
+ # 优先使用初始化时注入的规划器
1300
+ self.task_planner.maybe_plan_and_dispatch(task_text) # type: ignore[attr-defined]
1301
+ else:
1302
+ # 防御式回退:临时创建规划器以避免因未初始化导致的崩溃
1303
+ from jarvis.jarvis_agent.task_planner import TaskPlanner
1304
+ TaskPlanner(self, plan_depth=self.plan_depth, plan_max_depth=self.plan_max_depth).maybe_plan_and_dispatch(task_text)
1305
+ except Exception:
1306
+ # 规划失败不影响主流程
1307
+ pass
1308
+
1167
1309
  def _filter_tools_if_needed(self, task: str):
1168
1310
  """如果工具数量超过阈值,使用大模型筛选相关工具"""
1169
1311
  tool_registry = self.get_tool_registry()
@@ -11,11 +11,7 @@ from jarvis.jarvis_agent import (
11
11
  get_multiline_input,
12
12
  origin_agent_system_prompt,
13
13
  )
14
- from jarvis.jarvis_agent.builtin_input_handler import builtin_input_handler
15
- from jarvis.jarvis_agent.file_context_handler import file_context_handler
16
- from jarvis.jarvis_agent.shell_input_handler import shell_input_handler
17
14
  from jarvis.jarvis_agent.task_manager import TaskManager
18
- from jarvis.jarvis_tools.registry import ToolRegistry
19
15
  from jarvis.jarvis_utils.config import is_non_interactive, is_skip_predefined_tasks
20
16
 
21
17
 
@@ -32,6 +28,7 @@ class AgentManager:
32
28
  multiline_inputer: Optional[Callable[[str], str]] = None,
33
29
  confirm_callback: Optional[Callable[[str, bool], bool]] = None,
34
30
  non_interactive: Optional[bool] = None,
31
+ plan: Optional[bool] = None,
35
32
  ):
36
33
  self.model_group = model_group
37
34
  self.tool_group = tool_group
@@ -43,6 +40,7 @@ class AgentManager:
43
40
  self.multiline_inputer = multiline_inputer
44
41
  self.confirm_callback = confirm_callback
45
42
  self.non_interactive = non_interactive
43
+ self.plan = plan
46
44
 
47
45
  def initialize(self) -> Agent:
48
46
  """初始化Agent"""
@@ -61,6 +59,7 @@ class AgentManager:
61
59
  multiline_inputer=self.multiline_inputer,
62
60
  confirm_callback=self.confirm_callback,
63
61
  non_interactive=self.non_interactive,
62
+ plan=self.plan,
64
63
  )
65
64
 
66
65
  # 尝试恢复会话