jarvis-ai-assistant 0.1.207__tar.gz → 0.1.209__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.1.207/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.209}/PKG-INFO +4 -19
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/README.md +1 -15
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/pyproject.toml +4 -9
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/setup.py +8 -14
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/__init__.py +63 -103
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/edit_file_handler.py +43 -47
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/jarvis.py +33 -39
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_agent/code_agent.py +74 -30
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_agent/lint.py +6 -6
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/code_review.py +164 -175
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_data/config_schema.json +0 -25
- jarvis_ai_assistant-0.1.209/src/jarvis/jarvis_git_utils/git_commiter.py +331 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_methodology/main.py +70 -81
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/base.py +21 -17
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/kimi.py +59 -64
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/tongyi.py +118 -131
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/yuanbao.py +117 -122
- jarvis_ai_assistant-0.1.209/src/jarvis/jarvis_platform_manager/main.py +407 -0
- jarvis_ai_assistant-0.1.209/src/jarvis/jarvis_platform_manager/service.py +432 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_smart_shell/main.py +99 -33
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/ask_user.py +0 -1
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/edit_file.py +64 -55
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/file_analyzer.py +17 -28
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/read_code.py +80 -81
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/builtin_replace_map.py +1 -36
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/config.py +13 -48
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/embedding.py +6 -51
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/git_utils.py +93 -43
- jarvis_ai_assistant-0.1.209/src/jarvis/jarvis_utils/http.py +104 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/methodology.py +12 -17
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/utils.py +186 -63
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209/src/jarvis_ai_assistant.egg-info}/PKG-INFO +4 -19
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +2 -8
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis_ai_assistant.egg-info/entry_points.txt +1 -1
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis_ai_assistant.egg-info/requires.txt +2 -3
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_data/huggingface.tar.gz +0 -0
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_dev/main.py +0 -1247
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_git_utils/git_commiter.py +0 -336
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_platform_manager/main.py +0 -807
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_tools/chdir.py +0 -72
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_tools/code_plan.py +0 -218
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_tools/create_code_agent.py +0 -95
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_tools/create_sub_agent.py +0 -82
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_tools/file_operation.py +0 -238
- jarvis_ai_assistant-0.1.207/src/jarvis/jarvis_utils/jarvis_history.py +0 -98
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_git_details/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_git_details/main.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/human.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/openai.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/cli/main.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/registry.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/search_web.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/output.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_utils/tag.py +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/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.1.
|
3
|
+
Version: 0.1.209
|
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
|
@@ -43,19 +43,18 @@ License-File: LICENSE
|
|
43
43
|
Requires-Dist: requests==2.32.3
|
44
44
|
Requires-Dist: colorama==0.4.6
|
45
45
|
Requires-Dist: prompt_toolkit==3.0.50
|
46
|
-
Requires-Dist: yaspin==2.4.0
|
47
46
|
Requires-Dist: pygments==2.19.1
|
48
47
|
Requires-Dist: fuzzywuzzy==0.18.0
|
49
48
|
Requires-Dist: fastapi==0.115.12
|
50
49
|
Requires-Dist: uvicorn==0.33.0
|
51
50
|
Requires-Dist: rich==14.0.0
|
52
|
-
Requires-Dist: transformers==4.46.3
|
53
|
-
Requires-Dist: torch==2.4.1
|
54
51
|
Requires-Dist: python-Levenshtein==0.25.1
|
52
|
+
Requires-Dist: tiktoken==0.7.0
|
55
53
|
Requires-Dist: pillow==10.2.0
|
56
54
|
Requires-Dist: openai==1.78.1
|
57
55
|
Requires-Dist: tabulate==0.9.0
|
58
56
|
Requires-Dist: pyte==0.8.2
|
57
|
+
Requires-Dist: pyyaml>=6.0.2
|
59
58
|
Provides-Extra: dev
|
60
59
|
Requires-Dist: pytest; extra == "dev"
|
61
60
|
Requires-Dist: black; extra == "dev"
|
@@ -106,10 +105,9 @@ pip3 install jarvis-ai-assistant
|
|
106
105
|
| `jarvis` | - | 使用通用代理 |
|
107
106
|
| `jarvis-code-agent` | `jca` | 使用代码代理 |
|
108
107
|
| `jarvis-smart-shell` | `jss` | 使用智能shell功能 |
|
109
|
-
| `jarvis-platform-manager` |
|
108
|
+
| `jarvis-platform-manager` | `jpm` | 使用平台管理功能 |
|
110
109
|
| `jarvis-code-review` | - | 使用代码审查功能 |
|
111
110
|
| `jarvis-git-commit` | `jgc` | 使用自动化git commit功能 |
|
112
|
-
| `jarvis-dev` | - | 使用dev功能(开发中) |
|
113
111
|
| `jarvis-git-squash` | - | 使用git squash功能 |
|
114
112
|
| `jarvis-multi-agent` | - | 使用多代理功能 |
|
115
113
|
| `jarvis-agent` | - | 使用agent功能 |
|
@@ -483,7 +481,6 @@ JARVIS_THINKING_PLATFORM: yuanbao
|
|
483
481
|
JARVIS_THINKING_MODEL: deep_seek
|
484
482
|
ENV:
|
485
483
|
YUANBAO_COOKIES: <元宝cookies>
|
486
|
-
YUANBAO_AGENT_ID: <元宝AgentID>
|
487
484
|
```
|
488
485
|
|
489
486
|
#### Kimi
|
@@ -522,23 +519,18 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
522
519
|
| `ENV` | {} | 环境变量配置 |
|
523
520
|
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
|
524
521
|
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
|
525
|
-
| `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能 |
|
526
|
-
| `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
|
527
522
|
| `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
|
528
523
|
| `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
|
529
524
|
| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
|
530
525
|
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
|
531
526
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
532
527
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | 应用补丁前是否需要确认 |
|
533
|
-
| `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数 |
|
534
|
-
| `JARVIS_AUTO_UPDATE` | true | 是否自动更新Jarvis |
|
535
528
|
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 |
|
536
529
|
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
537
530
|
| `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
|
538
531
|
| `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
|
539
532
|
| `JARVIS_USE_METHODOLOGY` | true | 是否启用方法论功能 |
|
540
533
|
| `JARVIS_USE_ANALYSIS` | true | 是否启用任务分析功能 |
|
541
|
-
| `JARVIS_USE_HISTORY_COUNT` | 0 | 使用N次历史记录作为上下文记忆 |
|
542
534
|
| `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis数据存储目录路径 |
|
543
535
|
|
544
536
|
## 🛠️ 工具说明 <a id="tools"></a>
|
@@ -547,15 +539,10 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
547
539
|
| 工具名称 | 描述 |
|
548
540
|
|----------|------|
|
549
541
|
| ask_user | 交互式用户输入收集 |
|
550
|
-
| chdir | 更改当前工作目录 |
|
551
542
|
| rewrite_file | 文件重写工具 |
|
552
543
|
| edit_file | 代码编辑工具 |
|
553
|
-
| code_plan | 理解需求并制定代码修改计划 |
|
554
|
-
| create_code_agent | 代码开发工具 |
|
555
|
-
| create_sub_agent | 创建子代理处理特定任务 |
|
556
544
|
| execute_script | 执行脚本并返回结果 |
|
557
545
|
| file_analyzer | 分析文件内容并提取关键信息 |
|
558
|
-
| file_operation | 文件批量操作工具 |
|
559
546
|
| methodology | 方法论管理工具 |
|
560
547
|
| read_code | 代码阅读与分析工具 |
|
561
548
|
| read_webpage | 读取网页内容并分析 |
|
@@ -572,9 +559,7 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
572
559
|
| `'ToolUsage'` | 显示可用工具列表及使用方法 |
|
573
560
|
| `'ReloadConfig'` | 重新加载配置文件 |
|
574
561
|
| `'Web'` | 网页搜索,支持多种提问格式 |
|
575
|
-
| `'Plan'` | 生成代码修改计划,提供详细需求描述 |
|
576
562
|
| `'FindRelatedFiles'` | 查找与功能相关的文件 |
|
577
|
-
| `'Dev'` | 调用create_code_agent开发需求 |
|
578
563
|
| `'Fix'` | 修复问题 |
|
579
564
|
| `'Check'` | 执行静态代码检查,包括错误和风格问题 |
|
580
565
|
|
@@ -36,10 +36,9 @@ pip3 install jarvis-ai-assistant
|
|
36
36
|
| `jarvis` | - | 使用通用代理 |
|
37
37
|
| `jarvis-code-agent` | `jca` | 使用代码代理 |
|
38
38
|
| `jarvis-smart-shell` | `jss` | 使用智能shell功能 |
|
39
|
-
| `jarvis-platform-manager` |
|
39
|
+
| `jarvis-platform-manager` | `jpm` | 使用平台管理功能 |
|
40
40
|
| `jarvis-code-review` | - | 使用代码审查功能 |
|
41
41
|
| `jarvis-git-commit` | `jgc` | 使用自动化git commit功能 |
|
42
|
-
| `jarvis-dev` | - | 使用dev功能(开发中) |
|
43
42
|
| `jarvis-git-squash` | - | 使用git squash功能 |
|
44
43
|
| `jarvis-multi-agent` | - | 使用多代理功能 |
|
45
44
|
| `jarvis-agent` | - | 使用agent功能 |
|
@@ -413,7 +412,6 @@ JARVIS_THINKING_PLATFORM: yuanbao
|
|
413
412
|
JARVIS_THINKING_MODEL: deep_seek
|
414
413
|
ENV:
|
415
414
|
YUANBAO_COOKIES: <元宝cookies>
|
416
|
-
YUANBAO_AGENT_ID: <元宝AgentID>
|
417
415
|
```
|
418
416
|
|
419
417
|
#### Kimi
|
@@ -452,23 +450,18 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
452
450
|
| `ENV` | {} | 环境变量配置 |
|
453
451
|
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
|
454
452
|
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
|
455
|
-
| `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能 |
|
456
|
-
| `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
|
457
453
|
| `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
|
458
454
|
| `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
|
459
455
|
| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
|
460
456
|
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
|
461
457
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
462
458
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | 应用补丁前是否需要确认 |
|
463
|
-
| `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数 |
|
464
|
-
| `JARVIS_AUTO_UPDATE` | true | 是否自动更新Jarvis |
|
465
459
|
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 |
|
466
460
|
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
467
461
|
| `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
|
468
462
|
| `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
|
469
463
|
| `JARVIS_USE_METHODOLOGY` | true | 是否启用方法论功能 |
|
470
464
|
| `JARVIS_USE_ANALYSIS` | true | 是否启用任务分析功能 |
|
471
|
-
| `JARVIS_USE_HISTORY_COUNT` | 0 | 使用N次历史记录作为上下文记忆 |
|
472
465
|
| `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis数据存储目录路径 |
|
473
466
|
|
474
467
|
## 🛠️ 工具说明 <a id="tools"></a>
|
@@ -477,15 +470,10 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
477
470
|
| 工具名称 | 描述 |
|
478
471
|
|----------|------|
|
479
472
|
| ask_user | 交互式用户输入收集 |
|
480
|
-
| chdir | 更改当前工作目录 |
|
481
473
|
| rewrite_file | 文件重写工具 |
|
482
474
|
| edit_file | 代码编辑工具 |
|
483
|
-
| code_plan | 理解需求并制定代码修改计划 |
|
484
|
-
| create_code_agent | 代码开发工具 |
|
485
|
-
| create_sub_agent | 创建子代理处理特定任务 |
|
486
475
|
| execute_script | 执行脚本并返回结果 |
|
487
476
|
| file_analyzer | 分析文件内容并提取关键信息 |
|
488
|
-
| file_operation | 文件批量操作工具 |
|
489
477
|
| methodology | 方法论管理工具 |
|
490
478
|
| read_code | 代码阅读与分析工具 |
|
491
479
|
| read_webpage | 读取网页内容并分析 |
|
@@ -502,9 +490,7 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
502
490
|
| `'ToolUsage'` | 显示可用工具列表及使用方法 |
|
503
491
|
| `'ReloadConfig'` | 重新加载配置文件 |
|
504
492
|
| `'Web'` | 网页搜索,支持多种提问格式 |
|
505
|
-
| `'Plan'` | 生成代码修改计划,提供详细需求描述 |
|
506
493
|
| `'FindRelatedFiles'` | 查找与功能相关的文件 |
|
507
|
-
| `'Dev'` | 调用create_code_agent开发需求 |
|
508
494
|
| `'Fix'` | 修复问题 |
|
509
495
|
| `'Check'` | 执行静态代码检查,包括错误和风格问题 |
|
510
496
|
|
@@ -2,13 +2,9 @@
|
|
2
2
|
requires = ["setuptools>=45", "wheel"]
|
3
3
|
build-backend = "setuptools.build_meta"
|
4
4
|
|
5
|
-
[[tool.uv.index]]
|
6
|
-
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
7
|
-
default = true
|
8
|
-
|
9
5
|
[project]
|
10
6
|
name = "jarvis-ai-assistant"
|
11
|
-
version = "0.1.
|
7
|
+
version = "0.1.209"
|
12
8
|
description = "Jarvis: An AI assistant that uses tools to interact with the system"
|
13
9
|
readme = "README.md"
|
14
10
|
authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
|
@@ -29,19 +25,18 @@ dependencies = [
|
|
29
25
|
"requests==2.32.3",
|
30
26
|
"colorama==0.4.6",
|
31
27
|
"prompt_toolkit==3.0.50",
|
32
|
-
"yaspin==2.4.0",
|
33
28
|
"pygments==2.19.1",
|
34
29
|
"fuzzywuzzy==0.18.0",
|
35
30
|
"fastapi==0.115.12",
|
36
31
|
"uvicorn==0.33.0",
|
37
32
|
"rich==14.0.0",
|
38
|
-
"transformers==4.46.3",
|
39
|
-
"torch==2.4.1",
|
40
33
|
"python-Levenshtein==0.25.1",
|
34
|
+
"tiktoken==0.7.0",
|
41
35
|
"pillow==10.2.0",
|
42
36
|
"openai==1.78.1",
|
43
37
|
"tabulate==0.9.0",
|
44
38
|
"pyte==0.8.2",
|
39
|
+
"pyyaml>=6.0.2",
|
45
40
|
]
|
46
41
|
requires-python = ">=3.8"
|
47
42
|
|
@@ -58,10 +53,10 @@ jca = "jarvis.jarvis_code_agent.code_agent:main"
|
|
58
53
|
jarvis-smart-shell = "jarvis.jarvis_smart_shell.main:main"
|
59
54
|
jss = "jarvis.jarvis_smart_shell.main:main"
|
60
55
|
jarvis-platform-manager = "jarvis.jarvis_platform_manager.main:main"
|
56
|
+
jpm = "jarvis.jarvis_platform_manager.main:main"
|
61
57
|
jarvis-git-commit = "jarvis.jarvis_git_utils.git_commiter:main"
|
62
58
|
jarvis-code-review = "jarvis.jarvis_code_analysis.code_review:main"
|
63
59
|
jgc = "jarvis.jarvis_git_utils.git_commiter:main"
|
64
|
-
jarvis-dev = "jarvis.jarvis_dev.main:main"
|
65
60
|
jarvis-git-squash = "jarvis.jarvis_git_squash.main:main"
|
66
61
|
jarvis-multi-agent = "jarvis.jarvis_multi_agent.main:main"
|
67
62
|
jarvis-agent = "jarvis.jarvis_agent.main:main"
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
from setuptools import setup, find_packages
|
2
|
+
from setuptools import setup, find_packages # type: ignore
|
3
3
|
|
4
4
|
setup(
|
5
5
|
name="jarvis-ai-assistant",
|
6
|
-
version="0.1.
|
6
|
+
version="0.1.209",
|
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",
|
@@ -14,32 +14,26 @@ setup(
|
|
14
14
|
package_dir={"": "src"},
|
15
15
|
include_package_data=True,
|
16
16
|
package_data={
|
17
|
-
"jarvis": [
|
18
|
-
"jarvis_data/huggingface.tar.gz",
|
19
|
-
"jarvis_data/config_schema.json"
|
20
|
-
],
|
17
|
+
"jarvis": ["jarvis_data/config_schema.json"],
|
21
18
|
},
|
22
19
|
install_requires=[
|
23
20
|
"requests==2.32.3",
|
24
21
|
"colorama==0.4.6",
|
25
22
|
"prompt_toolkit==3.0.50",
|
26
|
-
"yaspin==2.4.0",
|
27
23
|
"pygments==2.19.1",
|
28
24
|
"fuzzywuzzy==0.18.0",
|
29
25
|
"fastapi==0.115.12",
|
30
26
|
"uvicorn==0.33.0",
|
31
27
|
"rich==14.0.0",
|
32
|
-
"transformers==4.46.3",
|
33
|
-
"torch==2.4.1",
|
34
28
|
"python-Levenshtein==0.25.1",
|
29
|
+
"tiktoken==0.7.0",
|
35
30
|
"pillow==10.2.0",
|
36
31
|
"openai==1.78.1",
|
37
32
|
"tabulate==0.9.0",
|
38
33
|
"pyte==0.8.2",
|
34
|
+
"pyyaml>=6.0.2",
|
39
35
|
],
|
40
|
-
extras_require={
|
41
|
-
"dev": ["pytest", "black", "isort", "mypy", "build", "twine"]
|
42
|
-
},
|
36
|
+
extras_require={"dev": ["pytest", "black", "isort", "mypy", "build", "twine"]},
|
43
37
|
entry_points={
|
44
38
|
"console_scripts": [
|
45
39
|
"jarvis=jarvis.jarvis_agent.jarvis:main",
|
@@ -48,10 +42,10 @@ setup(
|
|
48
42
|
"jarvis-smart-shell=jarvis.jarvis_smart_shell.main:main",
|
49
43
|
"jss=jarvis.jarvis_smart_shell.main:main",
|
50
44
|
"jarvis-platform-manager=jarvis.jarvis_platform_manager.main:main",
|
45
|
+
"jpm=jarvis.jarvis_platform_manager.main:main",
|
51
46
|
"jarvis-code-review=jarvis.jarvis_code_analysis.code_review:main",
|
52
|
-
"jarvis-git-commit=jarvis.jarvis_git_utils.git_commiter:main",
|
47
|
+
"jarvis-git-commit=jarvis.jarvis_git_utils.git_commiter:main",
|
53
48
|
"jgc=jarvis.jarvis_git_utils.git_commiter:main",
|
54
|
-
"jarvis-dev=jarvis.jarvis_dev.main:main",
|
55
49
|
"jarvis-git-squash=jarvis.jarvis_git_squash.main:main",
|
56
50
|
"jarvis-multi-agent=jarvis.jarvis_multi_agent.main:main",
|
57
51
|
"jarvis-agent=jarvis.jarvis_agent.main:main",
|
{jarvis_ai_assistant-0.1.207 → jarvis_ai_assistant-0.1.209}/src/jarvis/jarvis_agent/__init__.py
RENAMED
@@ -7,27 +7,30 @@ import platform
|
|
7
7
|
from typing import Any, Callable, Dict, List, Optional, Protocol, Tuple, Union
|
8
8
|
|
9
9
|
# 第三方库导入
|
10
|
-
from yaspin import yaspin # type: ignore
|
11
10
|
|
12
11
|
# 本地库导入
|
13
12
|
# jarvis_agent 相关
|
14
13
|
# jarvis_platform 相关
|
15
14
|
from jarvis.jarvis_platform.base import BasePlatform
|
16
15
|
from jarvis.jarvis_platform.registry import PlatformRegistry
|
16
|
+
|
17
17
|
# jarvis_utils 相关
|
18
|
-
from jarvis.jarvis_utils.config import (
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
from jarvis.jarvis_utils.config import (
|
19
|
+
get_max_token_count,
|
20
|
+
is_execute_tool_confirm,
|
21
|
+
is_use_analysis,
|
22
|
+
is_use_methodology,
|
23
|
+
)
|
23
24
|
from jarvis.jarvis_utils.embedding import get_context_token_count
|
24
|
-
from jarvis.jarvis_utils.globals import (
|
25
|
-
|
26
|
-
|
25
|
+
from jarvis.jarvis_utils.globals import (
|
26
|
+
delete_agent,
|
27
|
+
get_interrupt,
|
28
|
+
make_agent_name,
|
29
|
+
set_agent,
|
30
|
+
set_interrupt,
|
31
|
+
)
|
27
32
|
from jarvis.jarvis_utils.input import get_multiline_input
|
28
|
-
from jarvis.jarvis_utils.
|
29
|
-
from jarvis.jarvis_utils.methodology import (load_methodology,
|
30
|
-
upload_methodology)
|
33
|
+
from jarvis.jarvis_utils.methodology import load_methodology, upload_methodology
|
31
34
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
32
35
|
from jarvis.jarvis_utils.tag import ct, ot
|
33
36
|
from jarvis.jarvis_utils.utils import user_confirm
|
@@ -139,7 +142,7 @@ class Agent:
|
|
139
142
|
self.prompt = ""
|
140
143
|
|
141
144
|
def __del__(self):
|
142
|
-
|
145
|
+
# 只有在记录启动时才停止记录
|
143
146
|
delete_agent(self.name)
|
144
147
|
|
145
148
|
def __init__(
|
@@ -150,7 +153,7 @@ class Agent:
|
|
150
153
|
platform: Union[Optional[BasePlatform], Optional[str]] = None,
|
151
154
|
model_name: Optional[str] = None,
|
152
155
|
summary_prompt: Optional[str] = None,
|
153
|
-
auto_complete:
|
156
|
+
auto_complete: bool = False,
|
154
157
|
output_handler: List[OutputHandlerProtocol] = [],
|
155
158
|
use_tools: List[str] = [],
|
156
159
|
input_handler: Optional[List[Callable[[str, Any], Tuple[str, bool]]]] = None,
|
@@ -160,7 +163,6 @@ class Agent:
|
|
160
163
|
use_methodology: Optional[bool] = None,
|
161
164
|
use_analysis: Optional[bool] = None,
|
162
165
|
files: List[str] = [],
|
163
|
-
history_count: Optional[int] = None,
|
164
166
|
):
|
165
167
|
self.files = files
|
166
168
|
"""初始化Jarvis Agent实例
|
@@ -235,17 +237,8 @@ class Agent:
|
|
235
237
|
# Load configuration from environment variables
|
236
238
|
self.addon_prompt = ""
|
237
239
|
|
238
|
-
self.tool_call_count = 0
|
239
|
-
self.max_tool_call_count = get_max_tool_call_count()
|
240
240
|
self.after_tool_call_cb: Optional[Callable[[Agent], None]] = None
|
241
241
|
|
242
|
-
self.history = JarvisHistory()
|
243
|
-
self.history_dir = str(Path(get_data_dir())/"history")
|
244
|
-
self.history.start_record(self.history_dir)
|
245
|
-
|
246
|
-
self.history_count = history_count if history_count is not None else get_history_count()
|
247
|
-
|
248
|
-
|
249
242
|
self.execute_tool_confirm = (
|
250
243
|
execute_tool_confirm
|
251
244
|
if execute_tool_confirm is not None
|
@@ -274,9 +267,7 @@ class Agent:
|
|
274
267
|
)
|
275
268
|
|
276
269
|
self.max_token_count = get_max_token_count()
|
277
|
-
self.auto_complete =
|
278
|
-
auto_complete if auto_complete is not None else is_auto_complete()
|
279
|
-
)
|
270
|
+
self.auto_complete = auto_complete
|
280
271
|
welcome_message = f"{name} 初始化完成 - 使用 {self.model.name()} 模型"
|
281
272
|
|
282
273
|
PrettyOutput.print(welcome_message, OutputType.SYSTEM)
|
@@ -407,10 +398,10 @@ class Agent:
|
|
407
398
|
if self.conversation_length > self.max_token_count:
|
408
399
|
message = self._summarize_and_clear_history() + "\n\n" + message
|
409
400
|
self.conversation_length += get_context_token_count(message)
|
410
|
-
|
401
|
+
|
411
402
|
response = self.model.chat_until_success(message) # type: ignore
|
412
403
|
self.conversation_length += get_context_token_count(response)
|
413
|
-
|
404
|
+
|
414
405
|
return response
|
415
406
|
|
416
407
|
def generate_summary(self) -> str:
|
@@ -422,8 +413,8 @@ class Agent:
|
|
422
413
|
注意:
|
423
414
|
仅生成摘要,不修改对话状态
|
424
415
|
"""
|
425
|
-
|
426
|
-
|
416
|
+
print("📄 正在总结对话历史...")
|
417
|
+
summary_prompt = """
|
427
418
|
<summary_request>
|
428
419
|
<objective>
|
429
420
|
请对当前对话历史进行简明扼要的总结,提取关键信息和重要决策点。这个总结将作为上下文继续任务,因此需要保留对后续对话至关重要的内容。
|
@@ -447,14 +438,11 @@ class Agent:
|
|
447
438
|
"""
|
448
439
|
|
449
440
|
try:
|
450
|
-
|
451
|
-
|
452
|
-
spinner.text = "总结对话历史完成"
|
453
|
-
spinner.ok("✅")
|
441
|
+
summary = self.model.chat_until_success(self.prompt + "\n" + summary_prompt) # type: ignore
|
442
|
+
print("✅ 总结对话历史完成")
|
454
443
|
return summary
|
455
444
|
except Exception as e:
|
456
|
-
|
457
|
-
spinner.fail("❌")
|
445
|
+
print("❌ 总结对话历史失败")
|
458
446
|
return ""
|
459
447
|
|
460
448
|
def _summarize_and_clear_history(self) -> str:
|
@@ -482,9 +470,9 @@ class Agent:
|
|
482
470
|
summary = self.generate_summary()
|
483
471
|
else:
|
484
472
|
import tempfile
|
473
|
+
|
485
474
|
tmp_file = tempfile.NamedTemporaryFile(delete=False)
|
486
475
|
tmp_file_name = tmp_file.name
|
487
|
-
self.history.save_history(tmp_file_name)
|
488
476
|
self.clear_history() # type: ignore
|
489
477
|
|
490
478
|
if need_summary:
|
@@ -540,32 +528,16 @@ class Agent:
|
|
540
528
|
)
|
541
529
|
if len(tool_list) == 0:
|
542
530
|
return False, ""
|
543
|
-
|
544
|
-
self.max_tool_call_count > 0
|
545
|
-
and self.tool_call_count >= self.max_tool_call_count
|
546
|
-
):
|
547
|
-
if user_confirm(f"工具调用次数超过限制,是否继续执行?", True):
|
548
|
-
self.reset_tool_call_count()
|
549
|
-
else:
|
550
|
-
return False, ""
|
551
|
-
if self.execute_tool_confirm:
|
552
|
-
self.reset_tool_call_count()
|
531
|
+
|
553
532
|
if not self.execute_tool_confirm or user_confirm(
|
554
533
|
f"需要执行{tool_list[0].name()}确认执行?", True
|
555
534
|
):
|
556
|
-
|
557
|
-
|
558
|
-
)
|
559
|
-
with spinner.hidden():
|
560
|
-
result = tool_list[0].handle(response, self)
|
561
|
-
spinner.text = f"{tool_list[0].name()}执行完成"
|
562
|
-
spinner.ok("✅")
|
563
|
-
self.tool_call_count += 1
|
564
|
-
return result
|
565
|
-
return False, ""
|
535
|
+
print(f"🔧 正在执行{tool_list[0].name()}...")
|
536
|
+
result = tool_list[0].handle(response, self)
|
537
|
+
print(f"✅ {tool_list[0].name()}执行完成")
|
566
538
|
|
567
|
-
|
568
|
-
|
539
|
+
return result
|
540
|
+
return False, ""
|
569
541
|
|
570
542
|
def _complete_task(self) -> str:
|
571
543
|
"""完成任务并生成总结(如果需要)
|
@@ -581,21 +553,19 @@ class Agent:
|
|
581
553
|
if self.use_analysis:
|
582
554
|
self._analysis_task()
|
583
555
|
if self.need_summary:
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
spinner.ok("✅")
|
590
|
-
return ret
|
556
|
+
print("📄 正在生成总结...")
|
557
|
+
self.prompt = self.summary_prompt
|
558
|
+
ret = self.model.chat_until_success(self.prompt) # type: ignore
|
559
|
+
print("✅ 总结生成完成")
|
560
|
+
return ret
|
591
561
|
|
592
562
|
return "任务完成"
|
593
563
|
|
594
564
|
def _analysis_task(self):
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
565
|
+
print("🔍 正在分析任务...")
|
566
|
+
try:
|
567
|
+
# 让模型判断是否需要生成方法论
|
568
|
+
analysis_prompt = f"""<task_analysis>
|
599
569
|
<request>
|
600
570
|
当前任务已结束,请分析该任务的解决方案:
|
601
571
|
1. 首先检查现有工具或方法论是否已经可以完成该任务,如果可以,直接说明即可,无需生成新内容
|
@@ -741,17 +711,12 @@ arguments:
|
|
741
711
|
</output_requirements>
|
742
712
|
</task_analysis>"""
|
743
713
|
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
spinner.text = "分析完成"
|
751
|
-
spinner.ok("✅")
|
752
|
-
except Exception as e:
|
753
|
-
spinner.text = "分析失败"
|
754
|
-
spinner.fail("❌")
|
714
|
+
self.prompt = analysis_prompt
|
715
|
+
response = self.model.chat_until_success(self.prompt) # type: ignore
|
716
|
+
self._call_tools(response)
|
717
|
+
print("✅ 分析完成")
|
718
|
+
except Exception as e:
|
719
|
+
print("❌ 分析失败")
|
755
720
|
|
756
721
|
def make_default_addon_prompt(self, need_complete: bool) -> str:
|
757
722
|
"""生成附加提示。
|
@@ -808,9 +773,8 @@ arguments:
|
|
808
773
|
set_agent(self.name, self)
|
809
774
|
|
810
775
|
while True:
|
811
|
-
history_md = ""
|
812
776
|
if self.first:
|
813
|
-
|
777
|
+
self._first_run()
|
814
778
|
try:
|
815
779
|
current_response = self._call_model(self.prompt, True)
|
816
780
|
self.prompt = ""
|
@@ -822,8 +786,13 @@ arguments:
|
|
822
786
|
)
|
823
787
|
if user_input:
|
824
788
|
# 如果有工具调用且用户确认继续,则将干预信息和工具执行结果拼接为prompt
|
825
|
-
if any(
|
826
|
-
|
789
|
+
if any(
|
790
|
+
handler.can_handle(current_response)
|
791
|
+
for handler in self.output_handler
|
792
|
+
):
|
793
|
+
if user_confirm(
|
794
|
+
"检测到有工具调用,是否继续处理工具调用?", True
|
795
|
+
):
|
827
796
|
self.prompt = f"{user_input}\n\n{current_response}"
|
828
797
|
continue
|
829
798
|
self.prompt += f"{user_input}"
|
@@ -843,8 +812,6 @@ arguments:
|
|
843
812
|
if self.auto_complete and ot("!!!COMPLETE!!!") in current_response:
|
844
813
|
return self._complete_task()
|
845
814
|
|
846
|
-
self.reset_tool_call_count()
|
847
|
-
|
848
815
|
# 获取用户输入
|
849
816
|
user_input = self.multiline_inputer(
|
850
817
|
f"{self.name}: 请输入,或输入空行来结束当前任务:"
|
@@ -858,8 +825,6 @@ arguments:
|
|
858
825
|
return self._complete_task()
|
859
826
|
|
860
827
|
except Exception as e:
|
861
|
-
if history_md:
|
862
|
-
os.remove(history_md)
|
863
828
|
PrettyOutput.print(f"任务失败: {str(e)}", OutputType.ERROR)
|
864
829
|
return f"Task failed: {str(e)}"
|
865
830
|
|
@@ -868,21 +833,15 @@ arguments:
|
|
868
833
|
return f"Task failed: {str(e)}"
|
869
834
|
|
870
835
|
def _first_run(self):
|
871
|
-
|
872
|
-
if self.history_count > 0 and self.model and self.model.support_upload_files():
|
873
|
-
import tempfile
|
874
|
-
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
|
875
|
-
history_md = str(Path(tempfile.gettempdir())/f"{self.name}_history_{timestamp}.md")
|
876
|
-
self.history.export_history_to_markdown(self.history_dir, history_md, max_files=self.history_count)
|
877
|
-
self.files.append(history_md)
|
878
|
-
|
879
|
-
# 如果有上传文件,先上传文件
|
836
|
+
# 如果有上传文件,先上传文件
|
880
837
|
if self.model and self.model.support_upload_files():
|
881
838
|
if self.use_methodology:
|
882
839
|
if not upload_methodology(self.model, other_files=self.files):
|
883
840
|
if self.files:
|
884
|
-
PrettyOutput.print(
|
885
|
-
|
841
|
+
PrettyOutput.print(
|
842
|
+
"文件上传失败,将忽略文件列表", OutputType.WARNING
|
843
|
+
)
|
844
|
+
# 上传失败则回退到本地加载
|
886
845
|
msg = self.prompt
|
887
846
|
for handler in self.input_handler:
|
888
847
|
msg, _ = handler(msg, self)
|
@@ -894,7 +853,9 @@ arguments:
|
|
894
853
|
self.prompt = f"{self.prompt}\n\n上传的文件包含历史对话信息,可以从中获取一些经验信息。"
|
895
854
|
elif self.files:
|
896
855
|
if not self.model.upload_files(self.files):
|
897
|
-
PrettyOutput.print(
|
856
|
+
PrettyOutput.print(
|
857
|
+
"文件上传失败,将忽略文件列表", OutputType.WARNING
|
858
|
+
)
|
898
859
|
else:
|
899
860
|
self.prompt = f"{self.prompt}\n\n上传的文件包含历史对话信息,可以从中获取一些经验信息。"
|
900
861
|
else:
|
@@ -907,7 +868,6 @@ arguments:
|
|
907
868
|
self.prompt = f"{self.prompt}\n\n以下是历史类似问题的执行经验,可参考:\n{load_methodology(msg, self.get_tool_registry())}"
|
908
869
|
|
909
870
|
self.first = False
|
910
|
-
return history_md
|
911
871
|
|
912
872
|
def clear_history(self):
|
913
873
|
"""清空对话历史但保留系统提示
|