jarvis-ai-assistant 0.3.2__tar.gz → 0.3.4__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.
- {jarvis_ai_assistant-0.3.2/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.3.4}/PKG-INFO +40 -1
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/README.md +39 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/pyproject.toml +12 -4
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/setup.py +3 -1
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/__init__.py +170 -9
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/file_methodology_manager.py +6 -1
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/share_manager.py +21 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/tool_executor.py +8 -4
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_agent/code_agent.py +7 -12
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/code_review.py +117 -12
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_git_utils/git_commiter.py +63 -9
- jarvis_ai_assistant-0.3.4/src/jarvis/jarvis_memory_organizer/memory_organizer.py +729 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/base.py +9 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/kimi.py +20 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/openai.py +27 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/tongyi.py +19 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/yuanbao.py +18 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform_manager/main.py +22 -16
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/base.py +8 -1
- jarvis_ai_assistant-0.3.4/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/git_utils.py +20 -3
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/globals.py +16 -10
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/methodology.py +19 -2
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/utils.py +159 -78
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4/src/jarvis_ai_assistant.egg-info}/PKG-INFO +40 -1
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +2 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis_ai_assistant.egg-info/entry_points.txt +2 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/agent_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/config_editor.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/edit_file_handler.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/jarvis.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/main.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/memory_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/methodology_share_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/prompt_builder.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/prompts.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/protocols.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/session_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/task_analyzer.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/task_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/tool_share_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_agent/lint.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_data/config_schema.json +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.2/src/jarvis/jarvis_platform_manager → jarvis_ai_assistant-0.3.4/src/jarvis/jarvis_memory_organizer}/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/ai8.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/human.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.3.2/src/jarvis/jarvis_smart_shell → jarvis_ai_assistant-0.3.4/src/jarvis/jarvis_platform_manager}/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_platform_manager/service.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/cache.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/cli.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/embedding_manager.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/llm_interface.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/query_rewriter.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/rag_pipeline.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/reranker.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_rag/retriever.py +0 -0
- {jarvis_ai_assistant-0.3.2/src/jarvis/jarvis_tools → jarvis_ai_assistant-0.3.4/src/jarvis/jarvis_smart_shell}/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_smart_shell/main.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_stats/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_stats/cli.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_stats/stats.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_stats/storage.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_stats/visualizer.py +0 -0
- {jarvis_ai_assistant-0.3.2/src/jarvis/jarvis_tools/cli → jarvis_ai_assistant-0.3.4/src/jarvis/jarvis_tools}/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/clear_memory.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/cli/main.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/edit_file.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/read_code.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/registry.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/retrieve_memory.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/save_memory.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/search_web.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/clipboard.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/config.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/embedding.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/http.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/output.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_utils/tag.py +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -0
- {jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
{jarvis_ai_assistant-0.3.2/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.3.4}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jarvis-ai-assistant
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.4
|
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
|
@@ -202,27 +202,66 @@ iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercon
|
|
202
202
|
|
203
203
|
#### 手动安装
|
204
204
|
```bash
|
205
|
+
# 1. 克隆仓库
|
205
206
|
git clone https://github.com/skyfireitdiy/Jarvis
|
207
|
+
|
208
|
+
# 2. 进入项目目录
|
206
209
|
cd Jarvis
|
210
|
+
|
211
|
+
# 3. 安装项目为可编辑模式
|
207
212
|
pip3 install -e .
|
208
213
|
```
|
214
|
+
> **提示**: 使用 `-e .` (可编辑模式) 安装后,您对源码的任何修改都会立刻生效,非常适合开发者。
|
215
|
+
|
209
216
|
或者从PyPI安装 (可能不是最新版):
|
210
217
|
```bash
|
211
218
|
pip3 install jarvis-ai-assistant
|
212
219
|
```
|
213
220
|
|
221
|
+
**通过 uv 安装 (推荐)**
|
222
|
+
```bash
|
223
|
+
# 1. 安装 uv (如果未安装)
|
224
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
225
|
+
|
226
|
+
# 2. 克隆仓库
|
227
|
+
git clone https://github.com/skyfireitdiy/Jarvis
|
228
|
+
|
229
|
+
# 3. 进入项目目录
|
230
|
+
cd Jarvis
|
231
|
+
|
232
|
+
# 4. 创建虚拟环境并安装
|
233
|
+
uv venv
|
234
|
+
|
235
|
+
# 安装基础功能
|
236
|
+
uv pip install .
|
237
|
+
|
238
|
+
# 可选: 安装RAG功能(包含PyTorch等较重的依赖)
|
239
|
+
# uv pip install .[rag]
|
240
|
+
```
|
241
|
+
|
242
|
+
> **提示**: 安装完成后,建议将虚拟环境激活命令添加到您的 shell 配置文件中:
|
243
|
+
> - Bash/Zsh: 在 ~/.bashrc 或 ~/.zshrc 中添加 `source /path/to/Jarvis/.venv/bin/activate`
|
244
|
+
> - Fish: 在 ~/.config/fish/config.fish 中添加 `source /path/to/Jarvis/.venv/bin/activate.fish`
|
245
|
+
|
214
246
|
### 基本使用
|
215
247
|
Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及其快捷方式:
|
216
248
|
|
217
249
|
| 命令 | 快捷方式 | 功能描述 |
|
218
250
|
|------|----------|----------|
|
219
251
|
| `jarvis` | `jvs` | 通用AI代理,适用于多种任务 |
|
252
|
+
| `jarvis-agent` | `ja` | AI代理基础功能,处理会话和任务 |
|
220
253
|
| `jarvis-code-agent` | `jca` | 专注于代码分析、修改和生成的代码代理 |
|
254
|
+
| `jarvis-code-review` | `jcr` | 智能代码审查工具 |
|
221
255
|
| `jarvis-git-commit` | `jgc` | 自动化分析代码变更并生成规范的Git提交信息 |
|
256
|
+
| `jarvis-git-squash` | `jgs` | Git提交历史整理工具 |
|
222
257
|
| `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
|
258
|
+
| `jarvis-multi-agent` | `jma` | 多智能体协作系统 |
|
259
|
+
| `jarvis-tool` | `jt` | 工具管理与调用系统 |
|
260
|
+
| `jarvis-methodology` | `jm` | 方法论知识库管理 |
|
223
261
|
| `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
|
224
262
|
| `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
|
225
263
|
| `jarvis-stats` | `jst` | 通用统计模块,支持记录和可视化任意指标数据 |
|
264
|
+
| `jarvis-memory-organizer` | `jmo` | 记忆管理工具,支持整理、合并、导入导出记忆 |
|
226
265
|
|
227
266
|
更多详细用法和参数,请查阅我们的 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
|
228
267
|
|
@@ -117,27 +117,66 @@ iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercon
|
|
117
117
|
|
118
118
|
#### 手动安装
|
119
119
|
```bash
|
120
|
+
# 1. 克隆仓库
|
120
121
|
git clone https://github.com/skyfireitdiy/Jarvis
|
122
|
+
|
123
|
+
# 2. 进入项目目录
|
121
124
|
cd Jarvis
|
125
|
+
|
126
|
+
# 3. 安装项目为可编辑模式
|
122
127
|
pip3 install -e .
|
123
128
|
```
|
129
|
+
> **提示**: 使用 `-e .` (可编辑模式) 安装后,您对源码的任何修改都会立刻生效,非常适合开发者。
|
130
|
+
|
124
131
|
或者从PyPI安装 (可能不是最新版):
|
125
132
|
```bash
|
126
133
|
pip3 install jarvis-ai-assistant
|
127
134
|
```
|
128
135
|
|
136
|
+
**通过 uv 安装 (推荐)**
|
137
|
+
```bash
|
138
|
+
# 1. 安装 uv (如果未安装)
|
139
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
140
|
+
|
141
|
+
# 2. 克隆仓库
|
142
|
+
git clone https://github.com/skyfireitdiy/Jarvis
|
143
|
+
|
144
|
+
# 3. 进入项目目录
|
145
|
+
cd Jarvis
|
146
|
+
|
147
|
+
# 4. 创建虚拟环境并安装
|
148
|
+
uv venv
|
149
|
+
|
150
|
+
# 安装基础功能
|
151
|
+
uv pip install .
|
152
|
+
|
153
|
+
# 可选: 安装RAG功能(包含PyTorch等较重的依赖)
|
154
|
+
# uv pip install .[rag]
|
155
|
+
```
|
156
|
+
|
157
|
+
> **提示**: 安装完成后,建议将虚拟环境激活命令添加到您的 shell 配置文件中:
|
158
|
+
> - Bash/Zsh: 在 ~/.bashrc 或 ~/.zshrc 中添加 `source /path/to/Jarvis/.venv/bin/activate`
|
159
|
+
> - Fish: 在 ~/.config/fish/config.fish 中添加 `source /path/to/Jarvis/.venv/bin/activate.fish`
|
160
|
+
|
129
161
|
### 基本使用
|
130
162
|
Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及其快捷方式:
|
131
163
|
|
132
164
|
| 命令 | 快捷方式 | 功能描述 |
|
133
165
|
|------|----------|----------|
|
134
166
|
| `jarvis` | `jvs` | 通用AI代理,适用于多种任务 |
|
167
|
+
| `jarvis-agent` | `ja` | AI代理基础功能,处理会话和任务 |
|
135
168
|
| `jarvis-code-agent` | `jca` | 专注于代码分析、修改和生成的代码代理 |
|
169
|
+
| `jarvis-code-review` | `jcr` | 智能代码审查工具 |
|
136
170
|
| `jarvis-git-commit` | `jgc` | 自动化分析代码变更并生成规范的Git提交信息 |
|
171
|
+
| `jarvis-git-squash` | `jgs` | Git提交历史整理工具 |
|
137
172
|
| `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
|
173
|
+
| `jarvis-multi-agent` | `jma` | 多智能体协作系统 |
|
174
|
+
| `jarvis-tool` | `jt` | 工具管理与调用系统 |
|
175
|
+
| `jarvis-methodology` | `jm` | 方法论知识库管理 |
|
138
176
|
| `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
|
139
177
|
| `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
|
140
178
|
| `jarvis-stats` | `jst` | 通用统计模块,支持记录和可视化任意指标数据 |
|
179
|
+
| `jarvis-memory-organizer` | `jmo` | 记忆管理工具,支持整理、合并、导入导出记忆 |
|
141
180
|
|
142
181
|
更多详细用法和参数,请查阅我们的 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
|
143
182
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "jarvis-ai-assistant"
|
7
|
-
version = "0.3.
|
7
|
+
version = "0.3.4"
|
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" }]
|
@@ -80,6 +80,8 @@ jarvis-platform-manager = "jarvis.jarvis_platform_manager.main:main"
|
|
80
80
|
jpm = "jarvis.jarvis_platform_manager.main:main"
|
81
81
|
jarvis-git-commit = "jarvis.jarvis_git_utils.git_commiter:main"
|
82
82
|
jarvis-code-review = "jarvis.jarvis_code_analysis.code_review:main"
|
83
|
+
jarvis-memory-organizer = "jarvis.jarvis_memory_organizer.memory_organizer:main"
|
84
|
+
jmo = "jarvis.jarvis_memory_organizer.memory_organizer:main"
|
83
85
|
jcr = "jarvis.jarvis_code_analysis.code_review:main"
|
84
86
|
jgc = "jarvis.jarvis_git_utils.git_commiter:main"
|
85
87
|
jarvis-git-squash = "jarvis.jarvis_git_squash.main:main"
|
@@ -97,10 +99,16 @@ jrg = "jarvis.jarvis_rag.cli:main"
|
|
97
99
|
jarvis-stats = "jarvis.jarvis_stats.cli:main"
|
98
100
|
jst = "jarvis.jarvis_stats.cli:main"
|
99
101
|
|
100
|
-
|
101
|
-
url = "https://artsz.zte.com.cn/artifactory/api/pypi/public-pypi-virtual/simple"
|
102
|
-
default = true
|
102
|
+
|
103
103
|
|
104
104
|
[[tool.uv.index]]
|
105
105
|
name = "tsinghua"
|
106
106
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
107
|
+
|
108
|
+
[[tool.uv.index]]
|
109
|
+
name = "aliyun"
|
110
|
+
url = "https://mirrors.aliyun.com/pypi/simple/"
|
111
|
+
|
112
|
+
[[tool.uv.index]]
|
113
|
+
name = "ustc"
|
114
|
+
url = "https://pypi.mirrors.ustc.edu.cn/simple/"
|
@@ -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.3.
|
6
|
+
version="0.3.4",
|
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",
|
@@ -75,6 +75,8 @@ setup(
|
|
75
75
|
"ja=jarvis.jarvis_agent.main:main",
|
76
76
|
"jarvis-tool=jarvis.jarvis_tools.cli.main:main",
|
77
77
|
"jt=jarvis.jarvis_tools.cli.main:main",
|
78
|
+
"jarvis-memory-organizer=jarvis.jarvis_memory_organizer.memory_organizer:main",
|
79
|
+
"jmo=jarvis.jarvis_memory_organizer.memory_organizer:main",
|
78
80
|
"jarvis-methodology=jarvis.jarvis_methodology.main:main",
|
79
81
|
"jm=jarvis.jarvis_methodology.main:main",
|
80
82
|
"jarvis-rag=jarvis.jarvis_rag.cli:main",
|
@@ -3,6 +3,7 @@
|
|
3
3
|
import datetime
|
4
4
|
import os
|
5
5
|
import platform
|
6
|
+
from pathlib import Path
|
6
7
|
from typing import Any, Callable, Dict, List, Optional, Protocol, Tuple, Union
|
7
8
|
|
8
9
|
# 第三方库导入
|
@@ -14,6 +15,7 @@ from jarvis.jarvis_agent.protocols import OutputHandlerProtocol
|
|
14
15
|
from jarvis.jarvis_agent.session_manager import SessionManager
|
15
16
|
from jarvis.jarvis_agent.tool_executor import execute_tool_call
|
16
17
|
from jarvis.jarvis_agent.memory_manager import MemoryManager
|
18
|
+
from jarvis.jarvis_memory_organizer.memory_organizer import MemoryOrganizer
|
17
19
|
from jarvis.jarvis_agent.task_analyzer import TaskAnalyzer
|
18
20
|
from jarvis.jarvis_agent.file_methodology_manager import FileMethodologyManager
|
19
21
|
from jarvis.jarvis_agent.prompts import (
|
@@ -28,6 +30,7 @@ from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
28
30
|
|
29
31
|
# jarvis_utils 相关
|
30
32
|
from jarvis.jarvis_utils.config import (
|
33
|
+
get_data_dir,
|
31
34
|
get_max_token_count,
|
32
35
|
get_normal_model_name,
|
33
36
|
get_normal_platform_name,
|
@@ -50,6 +53,98 @@ from jarvis.jarvis_utils.input import get_multiline_input, user_confirm
|
|
50
53
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
51
54
|
from jarvis.jarvis_utils.tag import ct, ot
|
52
55
|
|
56
|
+
|
57
|
+
def show_agent_startup_stats(agent_name: str, model_name: str) -> None:
|
58
|
+
"""输出启动时的统计信息
|
59
|
+
|
60
|
+
参数:
|
61
|
+
agent_name: Agent的名称
|
62
|
+
model_name: 使用的模型名称
|
63
|
+
"""
|
64
|
+
try:
|
65
|
+
from jarvis.jarvis_utils.methodology import _load_all_methodologies
|
66
|
+
from jarvis.jarvis_tools.registry import ToolRegistry
|
67
|
+
from jarvis.jarvis_utils.config import get_data_dir
|
68
|
+
from pathlib import Path
|
69
|
+
from rich.console import Console
|
70
|
+
from rich.panel import Panel
|
71
|
+
from rich.text import Text
|
72
|
+
from rich.align import Align
|
73
|
+
import os
|
74
|
+
|
75
|
+
methodologies = _load_all_methodologies()
|
76
|
+
methodology_count = len(methodologies)
|
77
|
+
|
78
|
+
# 获取工具数量
|
79
|
+
# 创建一个临时的工具注册表类来获取所有工具(不应用过滤)
|
80
|
+
class TempToolRegistry(ToolRegistry):
|
81
|
+
def _apply_tool_config_filter(self) -> None:
|
82
|
+
"""重写过滤方法,不执行任何过滤"""
|
83
|
+
pass
|
84
|
+
|
85
|
+
# 获取所有工具的数量
|
86
|
+
tool_registry_all = TempToolRegistry()
|
87
|
+
total_tool_count = len(tool_registry_all.tools)
|
88
|
+
|
89
|
+
# 获取可用工具的数量(应用过滤)
|
90
|
+
tool_registry = ToolRegistry()
|
91
|
+
available_tool_count = len(tool_registry.get_all_tools())
|
92
|
+
|
93
|
+
global_memory_dir = Path(get_data_dir()) / "memory" / "global_long_term"
|
94
|
+
global_memory_count = 0
|
95
|
+
if global_memory_dir.exists():
|
96
|
+
global_memory_count = len(list(global_memory_dir.glob("*.json")))
|
97
|
+
|
98
|
+
# 检查项目记忆
|
99
|
+
project_memory_dir = Path(".jarvis/memory")
|
100
|
+
project_memory_count = 0
|
101
|
+
if project_memory_dir.exists():
|
102
|
+
project_memory_count = len(list(project_memory_dir.glob("*.json")))
|
103
|
+
|
104
|
+
# 获取当前工作目录
|
105
|
+
current_dir = os.getcwd()
|
106
|
+
|
107
|
+
# 构建欢迎信息
|
108
|
+
welcome_message = f"{agent_name} 初始化完成 - 使用 {model_name} 模型"
|
109
|
+
|
110
|
+
stats_parts = [
|
111
|
+
f"📚 本地方法论: [bold cyan]{methodology_count}[/bold cyan]",
|
112
|
+
f"🛠️ 工具: [bold green]{available_tool_count}/{total_tool_count}[/bold green] (可用/全部)",
|
113
|
+
f"🧠 全局记忆: [bold yellow]{global_memory_count}[/bold yellow]",
|
114
|
+
]
|
115
|
+
|
116
|
+
# 如果有项目记忆,添加到统计信息中
|
117
|
+
if project_memory_count > 0:
|
118
|
+
stats_parts.append(
|
119
|
+
f"📝 项目记忆: [bold magenta]{project_memory_count}[/bold magenta]"
|
120
|
+
)
|
121
|
+
|
122
|
+
stats_text = Text.from_markup(" | ".join(stats_parts), justify="center")
|
123
|
+
|
124
|
+
# 创建包含欢迎信息和统计信息的面板内容
|
125
|
+
panel_content = Text()
|
126
|
+
panel_content.append(welcome_message, style="bold white")
|
127
|
+
panel_content.append("\n")
|
128
|
+
panel_content.append(f"📁 工作目录: {current_dir}", style="dim white")
|
129
|
+
panel_content.append("\n\n")
|
130
|
+
panel_content.append(stats_text)
|
131
|
+
panel_content.justify = "center"
|
132
|
+
|
133
|
+
panel = Panel(
|
134
|
+
panel_content,
|
135
|
+
title="✨ Jarvis 资源概览 ✨",
|
136
|
+
title_align="center",
|
137
|
+
border_style="blue",
|
138
|
+
expand=False,
|
139
|
+
)
|
140
|
+
|
141
|
+
console = Console()
|
142
|
+
console.print(Align.center(panel))
|
143
|
+
|
144
|
+
except Exception as e:
|
145
|
+
PrettyOutput.print(f"加载统计信息失败: {e}", OutputType.WARNING)
|
146
|
+
|
147
|
+
|
53
148
|
origin_agent_system_prompt = f"""
|
54
149
|
<role>
|
55
150
|
# 🤖 角色
|
@@ -175,9 +270,8 @@ class Agent:
|
|
175
270
|
# 设置系统提示词
|
176
271
|
self._setup_system_prompt()
|
177
272
|
|
178
|
-
#
|
179
|
-
|
180
|
-
PrettyOutput.print(welcome_message, OutputType.SYSTEM)
|
273
|
+
# 输出统计信息(包含欢迎信息)
|
274
|
+
show_agent_startup_stats(name, self.model.name()) # type: ignore
|
181
275
|
|
182
276
|
def _init_model(self, llm_type: str, model_group: Optional[str]):
|
183
277
|
"""初始化模型平台"""
|
@@ -190,7 +284,9 @@ class Agent:
|
|
190
284
|
|
191
285
|
self.model = PlatformRegistry().create_platform(platform_name)
|
192
286
|
if self.model is None:
|
193
|
-
PrettyOutput.print(
|
287
|
+
PrettyOutput.print(
|
288
|
+
f"平台 {platform_name} 不存在,将使用普通模型", OutputType.WARNING
|
289
|
+
)
|
194
290
|
self.model = PlatformRegistry().get_normal_platform()
|
195
291
|
|
196
292
|
if model_name:
|
@@ -512,10 +608,8 @@ class Agent:
|
|
512
608
|
|
513
609
|
if self.use_analysis:
|
514
610
|
self.task_analyzer.analysis_task(satisfaction_feedback)
|
515
|
-
|
516
|
-
|
517
|
-
if self.force_save_memory:
|
518
|
-
self.memory_manager.prompt_memory_save()
|
611
|
+
|
612
|
+
self._check_and_organize_memory()
|
519
613
|
|
520
614
|
if self.need_summary:
|
521
615
|
print("📄 正在生成总结...")
|
@@ -689,7 +783,9 @@ class Agent:
|
|
689
783
|
返回:
|
690
784
|
str: "continue" 或 "complete"
|
691
785
|
"""
|
692
|
-
user_input = self.multiline_inputer(
|
786
|
+
user_input = self.multiline_inputer(
|
787
|
+
f"{self.name}: 请输入,或输入空行来结束当前任务:"
|
788
|
+
)
|
693
789
|
|
694
790
|
if user_input:
|
695
791
|
self.session.prompt = user_input
|
@@ -711,6 +807,71 @@ class Agent:
|
|
711
807
|
|
712
808
|
self.first = False
|
713
809
|
|
810
|
+
def _check_and_organize_memory(self):
|
811
|
+
"""
|
812
|
+
检查记忆库状态,如果满足条件则提示用户整理。
|
813
|
+
每天只检测一次。
|
814
|
+
"""
|
815
|
+
try:
|
816
|
+
# 检查项目记忆
|
817
|
+
self._perform_memory_check("project_long_term", Path(".jarvis"), "project")
|
818
|
+
# 检查全局记忆
|
819
|
+
self._perform_memory_check(
|
820
|
+
"global_long_term",
|
821
|
+
Path(get_data_dir()),
|
822
|
+
"global",
|
823
|
+
)
|
824
|
+
except Exception as e:
|
825
|
+
PrettyOutput.print(f"检查记忆库时发生意外错误: {e}", OutputType.WARNING)
|
826
|
+
|
827
|
+
def _perform_memory_check(self, memory_type: str, base_path: Path, scope_name: str):
|
828
|
+
"""执行特定范围的记忆检查和整理"""
|
829
|
+
check_file = base_path / ".last_memory_organizer_check"
|
830
|
+
now = datetime.datetime.now()
|
831
|
+
|
832
|
+
if check_file.exists():
|
833
|
+
try:
|
834
|
+
last_check_time = datetime.datetime.fromisoformat(
|
835
|
+
check_file.read_text()
|
836
|
+
)
|
837
|
+
if (now - last_check_time).total_seconds() < 24 * 3600:
|
838
|
+
return # 24小时内已检查
|
839
|
+
except (ValueError, FileNotFoundError):
|
840
|
+
# 文件内容无效或文件在读取时被删除,继续执行检查
|
841
|
+
pass
|
842
|
+
|
843
|
+
# 立即更新检查时间,防止并发或重复检查
|
844
|
+
base_path.mkdir(parents=True, exist_ok=True)
|
845
|
+
check_file.write_text(now.isoformat())
|
846
|
+
|
847
|
+
organizer = MemoryOrganizer()
|
848
|
+
# NOTE: 使用受保护方法以避免重复实现逻辑
|
849
|
+
memories = organizer._load_memories(memory_type)
|
850
|
+
|
851
|
+
if len(memories) < 200:
|
852
|
+
return
|
853
|
+
|
854
|
+
# NOTE: 使用受保护方法以避免重复实现逻辑
|
855
|
+
overlap_groups = organizer._find_overlapping_memories(memories, min_overlap=3)
|
856
|
+
has_significant_overlap = any(groups for groups in overlap_groups.values())
|
857
|
+
|
858
|
+
if not has_significant_overlap:
|
859
|
+
return
|
860
|
+
|
861
|
+
prompt = (
|
862
|
+
f"检测到您的 '{scope_name}' 记忆库中包含 {len(memories)} 条记忆,"
|
863
|
+
f"并且存在3个以上标签重叠的记忆。\n"
|
864
|
+
f"是否立即整理记忆库以优化性能和相关性?"
|
865
|
+
)
|
866
|
+
if user_confirm(prompt, default=True):
|
867
|
+
PrettyOutput.print(
|
868
|
+
f"正在开始整理 '{scope_name}' ({memory_type}) 记忆库...",
|
869
|
+
OutputType.INFO,
|
870
|
+
)
|
871
|
+
organizer.organize_memories(memory_type, min_overlap=3)
|
872
|
+
else:
|
873
|
+
PrettyOutput.print(f"已取消 '{scope_name}' 记忆库整理。", OutputType.INFO)
|
874
|
+
|
714
875
|
def clear_history(self):
|
715
876
|
"""
|
716
877
|
Clears conversation history by delegating to the session manager.
|
@@ -80,7 +80,12 @@ class FileMethodologyManager:
|
|
80
80
|
|
81
81
|
memory_manager = MemoryManager(self.agent)
|
82
82
|
memory_tags_prompt = memory_manager.prepare_memory_tags_prompt()
|
83
|
-
methodology = load_methodology(
|
83
|
+
methodology = load_methodology(
|
84
|
+
msg,
|
85
|
+
self.agent.get_tool_registry(),
|
86
|
+
platform_name=self.agent.model.platform_name(),
|
87
|
+
model_name=self.agent.model.name(),
|
88
|
+
)
|
84
89
|
self.agent.session.prompt = f"{self.agent.session.prompt}\n\n以下是历史类似问题的执行经验,可参考:\n{methodology}{memory_tags_prompt}"
|
85
90
|
|
86
91
|
def handle_history_with_file_upload(self) -> str:
|
{jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/share_manager.py
RENAMED
@@ -98,6 +98,27 @@ class ShareManager(ABC):
|
|
98
98
|
)
|
99
99
|
# 如果有远程分支,执行pull
|
100
100
|
if result.stdout.strip():
|
101
|
+
# 检查是否有未提交的更改
|
102
|
+
status_result = subprocess.run(
|
103
|
+
["git", "status", "--porcelain"],
|
104
|
+
cwd=self.repo_path,
|
105
|
+
capture_output=True,
|
106
|
+
text=True,
|
107
|
+
check=True,
|
108
|
+
)
|
109
|
+
if status_result.stdout:
|
110
|
+
if user_confirm(
|
111
|
+
f"检测到中心{self.get_resource_type()}仓库 '{self.repo_name}' 存在未提交的更改,是否放弃这些更改并更新?"
|
112
|
+
):
|
113
|
+
subprocess.run(
|
114
|
+
["git", "checkout", "."], cwd=self.repo_path, check=True
|
115
|
+
)
|
116
|
+
else:
|
117
|
+
PrettyOutput.print(
|
118
|
+
f"跳过更新 '{self.repo_name}' 以保留未提交的更改。",
|
119
|
+
OutputType.INFO,
|
120
|
+
)
|
121
|
+
return
|
101
122
|
subprocess.run(["git", "pull"], cwd=self.repo_path, check=True)
|
102
123
|
else:
|
103
124
|
PrettyOutput.print(
|
{jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_agent/tool_executor.py
RENAMED
@@ -41,9 +41,13 @@ def execute_tool_call(response: str, agent: "Agent") -> Tuple[bool, Any]:
|
|
41
41
|
if not agent.execute_tool_confirm or user_confirm(
|
42
42
|
f"需要执行{tool_to_execute.name()}确认执行?", True
|
43
43
|
):
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
try:
|
45
|
+
print(f"🔧 正在执行{tool_to_execute.name()}...")
|
46
|
+
result = tool_to_execute.handle(response, agent)
|
47
|
+
print(f"✅ {tool_to_execute.name()}执行完成")
|
48
|
+
return result
|
49
|
+
except Exception as e:
|
50
|
+
PrettyOutput.print(f"工具执行失败: {str(e)}", OutputType.ERROR)
|
51
|
+
return False, str(e)
|
48
52
|
|
49
53
|
return False, ""
|
{jarvis_ai_assistant-0.3.2 → jarvis_ai_assistant-0.3.4}/src/jarvis/jarvis_code_agent/code_agent.py
RENAMED
@@ -398,11 +398,6 @@ class CodeAgent:
|
|
398
398
|
if not user_confirm("是否要提交?", True):
|
399
399
|
return
|
400
400
|
|
401
|
-
# 用户确认修改,统计修改次数
|
402
|
-
from jarvis.jarvis_stats.stats import StatsManager
|
403
|
-
|
404
|
-
StatsManager.increment("code_modification_confirmed", group="code_agent")
|
405
|
-
|
406
401
|
try:
|
407
402
|
confirm_add_new_files()
|
408
403
|
|
@@ -431,9 +426,6 @@ class CodeAgent:
|
|
431
426
|
["git", "commit", "-m", f"CheckPoint #{commit_count + 1}"],
|
432
427
|
check=True,
|
433
428
|
)
|
434
|
-
|
435
|
-
# 统计提交次数
|
436
|
-
StatsManager.increment("code_commits_accepted", group="code_agent")
|
437
429
|
except subprocess.CalledProcessError as e:
|
438
430
|
PrettyOutput.print(f"提交失败: {str(e)}", OutputType.ERROR)
|
439
431
|
|
@@ -484,6 +476,10 @@ class CodeAgent:
|
|
484
476
|
)
|
485
477
|
git_commiter = GitCommitTool()
|
486
478
|
git_commiter.execute({})
|
479
|
+
|
480
|
+
# 在用户接受commit后,根据配置决定是否保存记忆
|
481
|
+
if self.agent.force_save_memory:
|
482
|
+
self.agent.memory_manager.prompt_memory_save()
|
487
483
|
elif start_commit:
|
488
484
|
os.system(f"git reset --hard {str(start_commit)}") # 确保转换为字符串
|
489
485
|
PrettyOutput.print("已重置到初始提交", OutputType.INFO)
|
@@ -642,7 +638,8 @@ class CodeAgent:
|
|
642
638
|
def cli(
|
643
639
|
llm_type: str = typer.Option(
|
644
640
|
"normal",
|
645
|
-
"-t",
|
641
|
+
"-t",
|
642
|
+
"--llm_type",
|
646
643
|
help="使用的LLM类型,可选值:'normal'(普通)或 'thinking'(思考模式)",
|
647
644
|
),
|
648
645
|
model_group: Optional[str] = typer.Option(
|
@@ -695,9 +692,7 @@ def cli(
|
|
695
692
|
sys.exit(0)
|
696
693
|
|
697
694
|
curr_dir = os.getcwd()
|
698
|
-
|
699
|
-
PrettyOutput.print(f"当前目录: {git_dir}", OutputType.INFO)
|
700
|
-
|
695
|
+
find_git_root_and_cd(curr_dir)
|
701
696
|
try:
|
702
697
|
agent = CodeAgent(
|
703
698
|
llm_type=llm_type,
|