jarvis-ai-assistant 0.2.0__tar.gz → 0.2.2__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 (123) hide show
  1. jarvis_ai_assistant-0.2.2/PKG-INFO +228 -0
  2. jarvis_ai_assistant-0.2.2/README.md +145 -0
  3. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/pyproject.toml +1 -4
  4. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/setup.py +1 -4
  5. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/__init__.py +1 -1
  6. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/jarvis.py +61 -59
  7. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/main.py +42 -40
  8. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_agent/code_agent.py +35 -31
  9. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/code_review.py +73 -39
  10. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_git_squash/main.py +16 -12
  11. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_git_utils/git_commiter.py +25 -20
  12. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_methodology/main.py +34 -49
  13. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_multi_agent/__init__.py +7 -5
  14. jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_multi_agent/main.py +57 -0
  15. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/ai8.py +31 -22
  16. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/kimi.py +31 -61
  17. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/tongyi.py +62 -76
  18. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/yuanbao.py +44 -50
  19. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform_manager/main.py +55 -90
  20. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_smart_shell/main.py +58 -87
  21. jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_tools/cli/main.py +145 -0
  22. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/registry.py +53 -21
  23. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/search_web.py +12 -10
  24. jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_utils/http.py +148 -0
  25. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/output.py +1 -1
  26. jarvis_ai_assistant-0.2.2/src/jarvis_ai_assistant.egg-info/PKG-INFO +228 -0
  27. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -3
  28. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -2
  29. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -1
  30. jarvis_ai_assistant-0.2.0/PKG-INFO +0 -833
  31. jarvis_ai_assistant-0.2.0/README.md +0 -749
  32. jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_git_details/main.py +0 -265
  33. jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_multi_agent/main.py +0 -52
  34. jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_platform/oyi.py +0 -357
  35. jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
  36. jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_tools/cli/main.py +0 -178
  37. jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_utils/http.py +0 -169
  38. jarvis_ai_assistant-0.2.0/src/jarvis_ai_assistant.egg-info/PKG-INFO +0 -833
  39. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/LICENSE +0 -0
  40. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/MANIFEST.in +0 -0
  41. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/setup.cfg +0 -0
  42. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/__init__.py +0 -0
  43. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
  44. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/edit_file_handler.py +0 -0
  45. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  46. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/prompt_builder.py +0 -0
  47. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/prompts.py +0 -0
  48. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/protocols.py +0 -0
  49. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/session_manager.py +0 -0
  50. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  51. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_agent/tool_executor.py +0 -0
  52. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  53. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_agent/lint.py +0 -0
  54. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  55. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  56. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  57. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  58. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  59. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  60. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  61. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  62. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  63. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  64. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  65. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  66. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  67. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  68. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  69. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  70. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  71. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  72. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  73. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  74. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_data/config_schema.json +0 -0
  75. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  76. {jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_git_details → jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_git_squash}/__init__.py +0 -0
  77. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_mcp/__init__.py +0 -0
  78. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
  79. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
  80. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
  81. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/__init__.py +0 -0
  82. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/base.py +0 -0
  83. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/human.py +0 -0
  84. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/openai.py +0 -0
  85. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform/registry.py +0 -0
  86. {jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_git_squash → jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_platform_manager}/__init__.py +0 -0
  87. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_platform_manager/service.py +0 -0
  88. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/__init__.py +0 -0
  89. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/cache.py +0 -0
  90. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/cli.py +0 -0
  91. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/embedding_manager.py +0 -0
  92. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/llm_interface.py +0 -0
  93. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/query_rewriter.py +0 -0
  94. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/rag_pipeline.py +0 -0
  95. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/reranker.py +0 -0
  96. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_rag/retriever.py +0 -0
  97. {jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_platform_manager → jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_smart_shell}/__init__.py +0 -0
  98. {jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_smart_shell → jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_tools}/__init__.py +0 -0
  99. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  100. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/base.py +0 -0
  101. {jarvis_ai_assistant-0.2.0/src/jarvis/jarvis_tools → jarvis_ai_assistant-0.2.2/src/jarvis/jarvis_tools/cli}/__init__.py +0 -0
  102. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/edit_file.py +0 -0
  103. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/execute_script.py +0 -0
  104. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
  105. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
  106. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/methodology.py +0 -0
  107. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/read_code.py +0 -0
  108. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
  109. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
  110. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
  111. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/__init__.py +0 -0
  112. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -0
  113. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/config.py +0 -0
  114. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/embedding.py +0 -0
  115. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/file_processors.py +0 -0
  116. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/git_utils.py +0 -0
  117. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/globals.py +0 -0
  118. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/input.py +0 -0
  119. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/methodology.py +0 -0
  120. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/tag.py +0 -0
  121. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis/jarvis_utils/utils.py +0 -0
  122. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  123. {jarvis_ai_assistant-0.2.0 → jarvis_ai_assistant-0.2.2}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -0,0 +1,228 @@
1
+ Metadata-Version: 2.4
2
+ Name: jarvis-ai-assistant
3
+ Version: 0.2.2
4
+ Summary: Jarvis: An AI assistant that uses tools to interact with the system
5
+ Home-page: https://github.com/skyfireitdiy/Jarvis
6
+ Author: skyfire
7
+ Author-email: skyfire <skyfireitdiy@hotmail.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2025 skyfire
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ Project-URL: Homepage, https://github.com/skyfireitdiy/Jarvis
30
+ Keywords: jarvis,ai,assistant,tools,automation
31
+ Classifier: Development Status :: 3 - Alpha
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: License :: OSI Approved :: MIT License
34
+ Classifier: Operating System :: POSIX :: Linux
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.9
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Requires-Python: >=3.9
41
+ Description-Content-Type: text/markdown
42
+ License-File: LICENSE
43
+ Requires-Dist: requests==2.32.3
44
+ Requires-Dist: colorama==0.4.6
45
+ Requires-Dist: prompt_toolkit==3.0.50
46
+ Requires-Dist: pygments==2.19.1
47
+ Requires-Dist: fuzzywuzzy==0.18.0
48
+ Requires-Dist: fastapi==0.115.12
49
+ Requires-Dist: uvicorn==0.33.0
50
+ Requires-Dist: rich==14.0.0
51
+ Requires-Dist: python-Levenshtein==0.25.1
52
+ Requires-Dist: tiktoken==0.7.0
53
+ Requires-Dist: pillow==10.2.0
54
+ Requires-Dist: openai==1.78.1
55
+ Requires-Dist: tabulate==0.9.0
56
+ Requires-Dist: pyte==0.8.2
57
+ Requires-Dist: pyyaml>=5.3.1
58
+ Requires-Dist: ddgs==9.0.2
59
+ Requires-Dist: lxml==6.0.0
60
+ Requires-Dist: markdownify>=1.1.0
61
+ Provides-Extra: dev
62
+ Requires-Dist: pytest; extra == "dev"
63
+ Requires-Dist: black; extra == "dev"
64
+ Requires-Dist: isort; extra == "dev"
65
+ Requires-Dist: mypy; extra == "dev"
66
+ Requires-Dist: build; extra == "dev"
67
+ Requires-Dist: twine; extra == "dev"
68
+ Provides-Extra: rag
69
+ Requires-Dist: langchain; extra == "rag"
70
+ Requires-Dist: langchain-community; extra == "rag"
71
+ Requires-Dist: langchain-huggingface; extra == "rag"
72
+ Requires-Dist: chromadb; extra == "rag"
73
+ Requires-Dist: diskcache; extra == "rag"
74
+ Requires-Dist: sentence-transformers==2.7.0; extra == "rag"
75
+ Requires-Dist: torch>=2.6; extra == "rag"
76
+ Requires-Dist: typer; extra == "rag"
77
+ Requires-Dist: unstructured[md]; extra == "rag"
78
+ Requires-Dist: rank-bm25; extra == "rag"
79
+ Dynamic: author
80
+ Dynamic: home-page
81
+ Dynamic: license-file
82
+ Dynamic: requires-python
83
+
84
+ # 🤖 Jarvis AI 助手
85
+ <p align="center">
86
+ <img src="docs/images/jarvis-logo.png" alt="Jarvis Logo" width="200"/>
87
+ </p>
88
+ <div align="center">
89
+
90
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
91
+
92
+ *您的智能开发和系统交互助手*
93
+
94
+ [快速开始](#quick-start) • [核心功能](#core-features) • [配置说明](#configuration) • [Jarvis Book](#jarvis-book) • [技术细节](docs/technical_documentation.md) • [Wiki文档](https://deepwiki.com/skyfireitdiy/Jarvis) • [贡献指南](#contributing) • [许可证](#license)
95
+ </div>
96
+
97
+ ---
98
+
99
+ ## 🚀 快速开始 <a id="quick-start"></a>
100
+
101
+ ### 系统要求
102
+ - **Linux**: 完全支持。
103
+ - **Windows**: 未经充分测试,建议在 [WSL](https://docs.microsoft.com/en-us/windows/wsl/install) 中使用。
104
+
105
+ ### 安装
106
+
107
+ #### 一键安装 (推荐)
108
+ 只需一行命令即可完成所有安装和配置:
109
+ ```bash
110
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/skyfireitdiy/Jarvis/main/scripts/install.sh)"
111
+ ```
112
+ > 该脚本会自动检测Python环境、克隆项目、安装依赖并设置好路径。
113
+
114
+ #### 手动安装
115
+ ```bash
116
+ git clone https://github.com/skyfireitdiy/Jarvis
117
+ cd Jarvis
118
+ pip3 install -e .
119
+ ```
120
+ 或者从PyPI安装 (可能不是最新版):
121
+ ```bash
122
+ pip3 install jarvis-ai-assistant
123
+ ```
124
+
125
+ ### 基本使用
126
+ Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及其快捷方式:
127
+
128
+ | 命令 | 快捷方式 | 功能描述 |
129
+ |------|----------|----------|
130
+ | `jarvis` | `jvs` | 通用AI代理,适用于多种任务 |
131
+ | `jarvis-code-agent` | `jca` | 专注于代码分析、修改和生成的代码代理 |
132
+ | `jarvis-git-commit` | `jgc` | 自动化分析代码变更并生成规范的Git提交信息 |
133
+ | `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
134
+ | `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
135
+ | `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
136
+
137
+ 更多详细用法和参数,请查阅我们的 [**Wiki 文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
138
+
139
+ ---
140
+
141
+ ## 🌟 核心功能 <a id="core-features"></a>
142
+
143
+ - **🆓 零成本接入**: 无缝集成腾讯元宝、Kimi等优质模型,无需支付API费用。
144
+ - **🛠️ 工具驱动**: 内置丰富工具集,涵盖脚本执行、代码开发、网页搜索、终端操作等。
145
+ - **🤖 人机协作**: 支持实时交互,用户可随时介入指导,确保AI行为符合预期。
146
+ - **🔌 高度可扩展**: 支持自定义工具、模型平台和MCP,轻松打造个性化工作流。
147
+ - **🧠 RAG 增强**: 内置RAG功能,可将本地文档作为知识库,实现精准问答。
148
+
149
+ ### 视频演示
150
+ - [使用`jca`为Jarvis快速扩展功能](https://www.bilibili.com/video/BV1TCgLzvE6Q/)
151
+ - [10分钟搭建aarch64容器化Rust开发环境](https://www.bilibili.com/video/BV1K3ghzkEzZ/)
152
+ - [`jarvis-code-agent` 功能演示](https://www.bilibili.com/video/BV1KugbzKE6U/)
153
+
154
+ ---
155
+
156
+ ## ⚙️ 配置说明 <a id="configuration"></a>
157
+
158
+ Jarvis 的主要配置文件位于 `~/.jarvis/config.yaml`。您可以在此文件中配置模型、平台和其他行为。
159
+
160
+ **基本配置示例 (腾讯元宝):**
161
+ ```yaml
162
+ # ~/.jarvis/config.yaml
163
+
164
+ # 使用的模型平台
165
+ JARVIS_PLATFORM: yuanbao
166
+ JARVIS_MODEL: deep_seek_v3
167
+
168
+ # 用于“思考”步骤的模型,通常选择能力更强的模型
169
+ JARVIS_THINKING_PLATFORM: yuanbao
170
+ JARVIS_THINKING_MODEL: deep_seek
171
+
172
+ # 平台所需的环境变量
173
+ ENV:
174
+ YUANBAO_COOKIES: "在此处粘贴您的元宝Cookies"
175
+ ```
176
+
177
+ Jarvis 支持多种平台,包括 **Kimi**, **通义千问**, **OpenAI** 等。详细的配置选项、模型组设置以及所有可用参数,请参阅 [**配置文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
178
+
179
+ ---
180
+
181
+ ## 🛠️ 扩展开发 <a id="extensions"></a>
182
+
183
+ Jarvis 被设计为高度可扩展的框架。您可以轻松地:
184
+ - **添加新工具**: 在 `~/.jarvis/tools/` 目录下创建新的工具实现。
185
+ - **集成新LLM平台**: 在 `~/.jarvis/platforms/` 目录下添加新的平台适配器。
186
+ - **定义MCP**: 通过配置文件集成外部或自定义的命令协议。
187
+
188
+ 有关扩展开发的详细指南和[**技术细节**](docs/technical_documentation.md),请访问我们的 [**开发者文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
189
+
190
+ ---
191
+
192
+ ## 📖 Jarvis Book <a id="jarvis-book"></a>
193
+
194
+ 欢迎阅读 Jarvis 的官方文档,这本开源书籍旨在为您提供从入门到精通的全方位指南。
195
+
196
+ - **[第一章:项目介绍](docs/jarvis_book/1.项目介绍.md)**
197
+ - **[第二章:快速开始](docs/jarvis_book/2.快速开始.md)**
198
+ - **[第三章:核心概念与架构](docs/jarvis_book/3.核心概念与架构.md)**
199
+ - **[第四章:使用指南](docs/jarvis_book/4.使用指南.md)**
200
+ - **[第五章:工具开发](docs/jarvis_book/5.工具开发.md)**
201
+ - **[第六章:高级主题](docs/jarvis_book/6.高级主题.md)**
202
+ - **[第七章:参与贡献](docs/jarvis_book/7.参与贡献.md)**
203
+ - **[第八章:常见问题](docs/jarvis_book/8.常见问题.md)**
204
+ - **[第九章:附录](docs/jarvis_book/9.附录.md)**
205
+
206
+ ---
207
+
208
+ ## 🤝 贡献指南 <a id="contributing"></a>
209
+
210
+ 我们欢迎任何形式的贡献!
211
+ 1. Fork 本仓库
212
+ 2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
213
+ 3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
214
+ 4. 推送到分支 (`git push origin feature/AmazingFeature`)
215
+ 5. 开启一个 Pull Request
216
+
217
+ ---
218
+
219
+ ## 📄 许可证 <a id="license"></a>
220
+
221
+ 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
222
+
223
+ ---
224
+ <div align="center">
225
+ 由 Jarvis 团队用 ❤️ 制作
226
+ </div>
227
+
228
+ ![Jarvis技术支持群](docs/images/wechat.png)
@@ -0,0 +1,145 @@
1
+ # 🤖 Jarvis AI 助手
2
+ <p align="center">
3
+ <img src="docs/images/jarvis-logo.png" alt="Jarvis Logo" width="200"/>
4
+ </p>
5
+ <div align="center">
6
+
7
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ *您的智能开发和系统交互助手*
10
+
11
+ [快速开始](#quick-start) • [核心功能](#core-features) • [配置说明](#configuration) • [Jarvis Book](#jarvis-book) • [技术细节](docs/technical_documentation.md) • [Wiki文档](https://deepwiki.com/skyfireitdiy/Jarvis) • [贡献指南](#contributing) • [许可证](#license)
12
+ </div>
13
+
14
+ ---
15
+
16
+ ## 🚀 快速开始 <a id="quick-start"></a>
17
+
18
+ ### 系统要求
19
+ - **Linux**: 完全支持。
20
+ - **Windows**: 未经充分测试,建议在 [WSL](https://docs.microsoft.com/en-us/windows/wsl/install) 中使用。
21
+
22
+ ### 安装
23
+
24
+ #### 一键安装 (推荐)
25
+ 只需一行命令即可完成所有安装和配置:
26
+ ```bash
27
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/skyfireitdiy/Jarvis/main/scripts/install.sh)"
28
+ ```
29
+ > 该脚本会自动检测Python环境、克隆项目、安装依赖并设置好路径。
30
+
31
+ #### 手动安装
32
+ ```bash
33
+ git clone https://github.com/skyfireitdiy/Jarvis
34
+ cd Jarvis
35
+ pip3 install -e .
36
+ ```
37
+ 或者从PyPI安装 (可能不是最新版):
38
+ ```bash
39
+ pip3 install jarvis-ai-assistant
40
+ ```
41
+
42
+ ### 基本使用
43
+ Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及其快捷方式:
44
+
45
+ | 命令 | 快捷方式 | 功能描述 |
46
+ |------|----------|----------|
47
+ | `jarvis` | `jvs` | 通用AI代理,适用于多种任务 |
48
+ | `jarvis-code-agent` | `jca` | 专注于代码分析、修改和生成的代码代理 |
49
+ | `jarvis-git-commit` | `jgc` | 自动化分析代码变更并生成规范的Git提交信息 |
50
+ | `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
51
+ | `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
52
+ | `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
53
+
54
+ 更多详细用法和参数,请查阅我们的 [**Wiki 文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
55
+
56
+ ---
57
+
58
+ ## 🌟 核心功能 <a id="core-features"></a>
59
+
60
+ - **🆓 零成本接入**: 无缝集成腾讯元宝、Kimi等优质模型,无需支付API费用。
61
+ - **🛠️ 工具驱动**: 内置丰富工具集,涵盖脚本执行、代码开发、网页搜索、终端操作等。
62
+ - **🤖 人机协作**: 支持实时交互,用户可随时介入指导,确保AI行为符合预期。
63
+ - **🔌 高度可扩展**: 支持自定义工具、模型平台和MCP,轻松打造个性化工作流。
64
+ - **🧠 RAG 增强**: 内置RAG功能,可将本地文档作为知识库,实现精准问答。
65
+
66
+ ### 视频演示
67
+ - [使用`jca`为Jarvis快速扩展功能](https://www.bilibili.com/video/BV1TCgLzvE6Q/)
68
+ - [10分钟搭建aarch64容器化Rust开发环境](https://www.bilibili.com/video/BV1K3ghzkEzZ/)
69
+ - [`jarvis-code-agent` 功能演示](https://www.bilibili.com/video/BV1KugbzKE6U/)
70
+
71
+ ---
72
+
73
+ ## ⚙️ 配置说明 <a id="configuration"></a>
74
+
75
+ Jarvis 的主要配置文件位于 `~/.jarvis/config.yaml`。您可以在此文件中配置模型、平台和其他行为。
76
+
77
+ **基本配置示例 (腾讯元宝):**
78
+ ```yaml
79
+ # ~/.jarvis/config.yaml
80
+
81
+ # 使用的模型平台
82
+ JARVIS_PLATFORM: yuanbao
83
+ JARVIS_MODEL: deep_seek_v3
84
+
85
+ # 用于“思考”步骤的模型,通常选择能力更强的模型
86
+ JARVIS_THINKING_PLATFORM: yuanbao
87
+ JARVIS_THINKING_MODEL: deep_seek
88
+
89
+ # 平台所需的环境变量
90
+ ENV:
91
+ YUANBAO_COOKIES: "在此处粘贴您的元宝Cookies"
92
+ ```
93
+
94
+ Jarvis 支持多种平台,包括 **Kimi**, **通义千问**, **OpenAI** 等。详细的配置选项、模型组设置以及所有可用参数,请参阅 [**配置文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
95
+
96
+ ---
97
+
98
+ ## 🛠️ 扩展开发 <a id="extensions"></a>
99
+
100
+ Jarvis 被设计为高度可扩展的框架。您可以轻松地:
101
+ - **添加新工具**: 在 `~/.jarvis/tools/` 目录下创建新的工具实现。
102
+ - **集成新LLM平台**: 在 `~/.jarvis/platforms/` 目录下添加新的平台适配器。
103
+ - **定义MCP**: 通过配置文件集成外部或自定义的命令协议。
104
+
105
+ 有关扩展开发的详细指南和[**技术细节**](docs/technical_documentation.md),请访问我们的 [**开发者文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
106
+
107
+ ---
108
+
109
+ ## 📖 Jarvis Book <a id="jarvis-book"></a>
110
+
111
+ 欢迎阅读 Jarvis 的官方文档,这本开源书籍旨在为您提供从入门到精通的全方位指南。
112
+
113
+ - **[第一章:项目介绍](docs/jarvis_book/1.项目介绍.md)**
114
+ - **[第二章:快速开始](docs/jarvis_book/2.快速开始.md)**
115
+ - **[第三章:核心概念与架构](docs/jarvis_book/3.核心概念与架构.md)**
116
+ - **[第四章:使用指南](docs/jarvis_book/4.使用指南.md)**
117
+ - **[第五章:工具开发](docs/jarvis_book/5.工具开发.md)**
118
+ - **[第六章:高级主题](docs/jarvis_book/6.高级主题.md)**
119
+ - **[第七章:参与贡献](docs/jarvis_book/7.参与贡献.md)**
120
+ - **[第八章:常见问题](docs/jarvis_book/8.常见问题.md)**
121
+ - **[第九章:附录](docs/jarvis_book/9.附录.md)**
122
+
123
+ ---
124
+
125
+ ## 🤝 贡献指南 <a id="contributing"></a>
126
+
127
+ 我们欢迎任何形式的贡献!
128
+ 1. Fork 本仓库
129
+ 2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
130
+ 3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
131
+ 4. 推送到分支 (`git push origin feature/AmazingFeature`)
132
+ 5. 开启一个 Pull Request
133
+
134
+ ---
135
+
136
+ ## 📄 许可证 <a id="license"></a>
137
+
138
+ 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
139
+
140
+ ---
141
+ <div align="center">
142
+ 由 Jarvis 团队用 ❤️ 制作
143
+ </div>
144
+
145
+ ![Jarvis技术支持群](docs/images/wechat.png)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jarvis-ai-assistant"
7
- version = "0.2.0"
7
+ version = "0.2.2"
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" }]
@@ -36,7 +36,6 @@ dependencies = [
36
36
  "openai==1.78.1",
37
37
  "tabulate==0.9.0",
38
38
  "pyte==0.8.2",
39
- "httpx>=0.28.1",
40
39
  "pyyaml>=5.3.1",
41
40
  "ddgs==9.0.2",
42
41
  "lxml==6.0.0",
@@ -83,8 +82,6 @@ jarvis-agent = "jarvis.jarvis_agent.main:main"
83
82
  ja = "jarvis.jarvis_agent.main:main"
84
83
  jarvis-tool = "jarvis.jarvis_tools.cli.main:main"
85
84
  jt = "jarvis.jarvis_tools.cli.main:main"
86
- jarvis-git-details = "jarvis.jarvis_git_details.main:main"
87
- jgd = "jarvis.jarvis_git_details.main:main"
88
85
  jarvis-methodology = "jarvis.jarvis_methodology.main:main"
89
86
  jm = "jarvis.jarvis_methodology.main:main"
90
87
  jarvis-rag = "jarvis.jarvis_rag.cli:main"
@@ -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.2.0",
6
+ version="0.2.2",
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",
@@ -31,7 +31,6 @@ setup(
31
31
  "openai==1.78.1",
32
32
  "tabulate==0.9.0",
33
33
  "pyte==0.8.2",
34
- "httpx>=0.28.1",
35
34
  "pyyaml>=5.3.1",
36
35
  "ddgs==9.0.2",
37
36
  "lxml==6.0.0",
@@ -74,8 +73,6 @@ setup(
74
73
  "ja=jarvis.jarvis_agent.main:main",
75
74
  "jarvis-tool=jarvis.jarvis_tools.cli.main:main",
76
75
  "jt=jarvis.jarvis_tools.cli.main:main",
77
- "jarvis-git-details=jarvis.jarvis_git_details.main:main",
78
- "jgd=jarvis.jarvis_git_details.main:main",
79
76
  "jarvis-methodology=jarvis.jarvis_methodology.main:main",
80
77
  "jm=jarvis.jarvis_methodology.main:main",
81
78
  "jarvis-rag=jarvis.jarvis_rag.cli:main",
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.2.0"
4
+ __version__ = "0.2.2"
@@ -1,5 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
- import argparse
3
2
  import os
4
3
  import shutil
5
4
  import subprocess
@@ -7,6 +6,7 @@ import sys
7
6
  from pathlib import Path
8
7
  from typing import Dict, Optional
9
8
 
9
+ import typer
10
10
  import yaml # type: ignore
11
11
  from prompt_toolkit import prompt # type: ignore
12
12
 
@@ -24,6 +24,8 @@ from jarvis.jarvis_tools.registry import ToolRegistry
24
24
  from jarvis.jarvis_utils.config import get_data_dir
25
25
  from jarvis.jarvis_utils.utils import init_env
26
26
 
27
+ app = typer.Typer(help="Jarvis AI assistant")
28
+
27
29
 
28
30
  def _load_tasks() -> Dict[str, str]:
29
31
  """Load tasks from .jarvis files in user home and current directory."""
@@ -109,48 +111,14 @@ def _select_task(tasks: Dict[str, str]) -> str:
109
111
  PrettyOutput.print(f"选择任务失败: {str(val_err)}", OutputType.ERROR)
110
112
 
111
113
 
112
- def _parse_args() -> argparse.Namespace:
113
- """Parse command line arguments."""
114
- parser = argparse.ArgumentParser(description="Jarvis AI assistant")
115
- parser.add_argument(
116
- "--llm_type",
117
- type=str,
118
- default="normal",
119
- choices=["normal", "thinking"],
120
- help="LLM type to use",
121
- )
122
- parser.add_argument(
123
- "-t",
124
- "--task",
125
- type=str,
126
- help="Directly input task content from command line",
127
- )
128
- parser.add_argument(
129
- "--model_group",
130
- type=str,
131
- help="Model group to use, overriding config",
132
- )
133
- parser.add_argument("-f", "--config", type=str, help="Path to custom config file")
134
- parser.add_argument(
135
- "--restore-session",
136
- action="store_true",
137
- help="Restore session from .jarvis/saved_session.json",
138
- default=False,
139
- )
140
- parser.add_argument(
141
- "-e", "--edit", action="store_true", help="Edit the configuration file"
142
- )
143
- return parser.parse_args()
144
-
145
-
146
- def _handle_edit_mode(args: argparse.Namespace) -> None:
114
+ def _handle_edit_mode(edit: bool, config_file: Optional[str]) -> None:
147
115
  """If edit flag is set, open config file in editor and exit."""
148
- if not args.edit:
116
+ if not edit:
149
117
  return
150
118
 
151
119
  config_file_path = (
152
- Path(args.config)
153
- if args.config
120
+ Path(config_file)
121
+ if config_file
154
122
  else Path(os.path.expanduser("~/.jarvis/config.yaml"))
155
123
  )
156
124
  editors = ["nvim", "vim", "vi"]
@@ -159,30 +127,32 @@ def _handle_edit_mode(args: argparse.Namespace) -> None:
159
127
  if editor:
160
128
  try:
161
129
  subprocess.run([editor, str(config_file_path)], check=True)
162
- sys.exit(0)
130
+ raise typer.Exit(code=0)
163
131
  except (subprocess.CalledProcessError, FileNotFoundError) as e:
164
132
  PrettyOutput.print(f"Failed to open editor: {e}", OutputType.ERROR)
165
- sys.exit(1)
133
+ raise typer.Exit(code=1)
166
134
  else:
167
135
  PrettyOutput.print(
168
136
  "No suitable editor found (nvim, vim, vi).", OutputType.ERROR
169
137
  )
170
- sys.exit(1)
138
+ raise typer.Exit(code=1)
171
139
 
172
140
 
173
- def _initialize_agent(args: argparse.Namespace) -> Agent:
141
+ def _initialize_agent(
142
+ llm_type: str, model_group: Optional[str], restore_session: bool
143
+ ) -> Agent:
174
144
  """Initialize the agent and restore session if requested."""
175
145
  agent = Agent(
176
146
  system_prompt=origin_agent_system_prompt,
177
- llm_type=args.llm_type,
178
- model_group=args.model_group,
147
+ llm_type=llm_type,
148
+ model_group=model_group,
179
149
  input_handler=[shell_input_handler, builtin_input_handler],
180
150
  output_handler=[ToolRegistry()], # type: ignore
181
151
  need_summary=False,
182
152
  )
183
153
 
184
154
  # 尝试恢复会话
185
- if args.restore_session:
155
+ if restore_session:
186
156
  if agent.restore_session():
187
157
  PrettyOutput.print("会话已成功恢复。", OutputType.SUCCESS)
188
158
  else:
@@ -195,36 +165,68 @@ def _get_and_run_task(agent: Agent, task_content: Optional[str] = None) -> None:
195
165
  # 优先处理命令行直接传入的任务
196
166
  if task_content:
197
167
  agent.run(task_content)
198
- sys.exit(0)
168
+ raise typer.Exit(code=0)
199
169
 
200
170
  if agent.first:
201
171
  tasks = _load_tasks()
202
172
  if tasks and (selected_task := _select_task(tasks)):
203
173
  PrettyOutput.print(f"开始执行任务: \n{selected_task}", OutputType.INFO)
204
174
  agent.run(selected_task)
205
- sys.exit(0)
175
+ raise typer.Exit(code=0)
206
176
 
207
177
  user_input = get_multiline_input("请输入你的任务(输入空行退出):")
208
178
  if user_input:
209
179
  agent.run(user_input)
210
- sys.exit(0)
180
+ raise typer.Exit(code=0)
211
181
 
212
182
 
213
- def main() -> None:
214
- """Main function for Jarvis AI assistant."""
215
- args = _parse_args()
216
- _handle_edit_mode(args)
183
+ @app.callback(invoke_without_command=True)
184
+ def run_cli(
185
+ ctx: typer.Context,
186
+ llm_type: str = typer.Option(
187
+ "normal",
188
+ "--llm_type",
189
+ help="LLM type to use, choices are 'normal' and 'thinking'",
190
+ ),
191
+ task: Optional[str] = typer.Option(
192
+ None, "-t", "--task", help="Directly input task content from command line"
193
+ ),
194
+ model_group: Optional[str] = typer.Option(
195
+ None, "--model_group", help="Model group to use, overriding config"
196
+ ),
197
+ config_file: Optional[str] = typer.Option(
198
+ None, "-f", "--config", help="Path to custom config file"
199
+ ),
200
+ restore_session: bool = typer.Option(
201
+ False,
202
+ "--restore-session",
203
+ help="Restore session from .jarvis/saved_session.json",
204
+ ),
205
+ edit: bool = typer.Option(
206
+ False, "-e", "--edit", help="Edit the configuration file"
207
+ ),
208
+ ) -> None:
209
+ """Jarvis AI assistant command-line interface."""
210
+ if ctx.invoked_subcommand is not None:
211
+ return
212
+
213
+ _handle_edit_mode(edit, config_file)
217
214
 
218
- init_env(
219
- "欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=args.config
220
- )
215
+ init_env("欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=config_file)
221
216
 
222
217
  try:
223
- agent = _initialize_agent(args)
224
- _get_and_run_task(agent, args.task)
218
+ agent = _initialize_agent(llm_type, model_group, restore_session)
219
+ _get_and_run_task(agent, task)
220
+ except typer.Exit:
221
+ raise
225
222
  except Exception as err: # pylint: disable=broad-except
226
223
  PrettyOutput.print(f"初始化错误: {str(err)}", OutputType.ERROR)
227
- sys.exit(1)
224
+ raise typer.Exit(code=1)
225
+
226
+
227
+ def main() -> None:
228
+ """Application entry point."""
229
+ app()
228
230
 
229
231
 
230
232
  if __name__ == "__main__":