jarvis-ai-assistant 0.3.17__tar.gz → 0.3.19__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.17/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.3.19}/PKG-INFO +1 -1
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/pyproject.toml +1 -1
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/setup.py +1 -1
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/__init__.py +23 -10
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/edit_file_handler.py +8 -13
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/jarvis.py +13 -3
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/memory_manager.py +4 -4
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/methodology_share_manager.py +2 -2
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/task_analyzer.py +4 -3
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/task_manager.py +6 -6
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/tool_executor.py +2 -2
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/tool_share_manager.py +2 -2
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_agent/code_agent.py +21 -29
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/code_review.py +2 -4
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_data/config_schema.json +5 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_git_utils/git_commiter.py +17 -18
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_methodology/main.py +12 -12
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/base.py +21 -13
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/kimi.py +13 -13
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/tongyi.py +17 -15
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/yuanbao.py +11 -11
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform_manager/main.py +12 -22
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/cli.py +36 -32
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/embedding_manager.py +11 -6
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/llm_interface.py +6 -5
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/rag_pipeline.py +9 -8
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/reranker.py +3 -2
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/retriever.py +18 -8
- jarvis_ai_assistant-0.3.19/src/jarvis/jarvis_smart_shell/main.py +490 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_stats/stats.py +40 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_stats/storage.py +220 -9
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/clear_memory.py +0 -11
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/cli/main.py +18 -17
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/edit_file.py +4 -4
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/execute_script.py +5 -1
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/file_analyzer.py +6 -6
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/generate_new_tool.py +6 -17
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/read_code.py +3 -6
- jarvis_ai_assistant-0.3.19/src/jarvis/jarvis_tools/read_webpage.py +120 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/registry.py +8 -28
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/retrieve_memory.py +5 -16
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/rewrite_file.py +0 -4
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/save_memory.py +2 -10
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/search_web.py +5 -8
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/virtual_tty.py +22 -40
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/clipboard.py +3 -3
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/config.py +8 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/input.py +67 -27
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/methodology.py +3 -3
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/output.py +1 -7
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/utils.py +44 -58
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19/src/jarvis_ai_assistant.egg-info}/PKG-INFO +1 -1
- jarvis_ai_assistant-0.3.17/src/jarvis/jarvis_smart_shell/main.py +0 -230
- jarvis_ai_assistant-0.3.17/src/jarvis/jarvis_tools/read_webpage.py +0 -59
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/README.md +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/agent_manager.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/config_editor.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/file_methodology_manager.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/main.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/prompt_builder.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/prompts.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/protocols.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/session_manager.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/share_manager.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_agent/lint.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_memory_organizer/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_memory_organizer/memory_organizer.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/ai8.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/human.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/openai.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_platform_manager/service.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/cache.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_rag/query_rewriter.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_stats/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_stats/cli.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_stats/visualizer.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/embedding.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/git_utils.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/http.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_utils/tag.py +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -0
- {jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -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.19"
|
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" }]
|
@@ -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.19",
|
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",
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/__init__.py
RENAMED
@@ -413,6 +413,19 @@ class Agent:
|
|
413
413
|
"""Sets the flag to run input handlers on the next turn."""
|
414
414
|
self.run_input_handlers_next_turn = value
|
415
415
|
|
416
|
+
def _multiline_input(self, tip: str, print_on_empty: bool) -> str:
|
417
|
+
"""
|
418
|
+
Safe wrapper for multiline input to optionally suppress empty-input notice.
|
419
|
+
If the configured multiline_inputer supports 'print_on_empty' keyword, pass it;
|
420
|
+
otherwise, fall back to calling with a single argument for compatibility.
|
421
|
+
"""
|
422
|
+
try:
|
423
|
+
# Try to pass the keyword for enhanced input handler
|
424
|
+
return self.multiline_inputer(tip, print_on_empty=print_on_empty) # type: ignore
|
425
|
+
except TypeError:
|
426
|
+
# Fallback for custom handlers that only accept one argument
|
427
|
+
return self.multiline_inputer(tip) # type: ignore
|
428
|
+
|
416
429
|
def set_after_tool_call_cb(self, cb: Callable[[Any], None]): # type: ignore
|
417
430
|
"""设置工具调用后回调函数。
|
418
431
|
|
@@ -527,17 +540,17 @@ class Agent:
|
|
527
540
|
注意:
|
528
541
|
仅生成摘要,不修改对话状态
|
529
542
|
"""
|
530
|
-
|
543
|
+
|
531
544
|
try:
|
532
545
|
if not self.model:
|
533
546
|
raise RuntimeError("Model not initialized")
|
534
547
|
summary = self.model.chat_until_success(
|
535
548
|
self.session.prompt + "\n" + SUMMARY_REQUEST_PROMPT
|
536
549
|
) # type: ignore
|
537
|
-
|
550
|
+
|
538
551
|
return summary
|
539
552
|
except Exception as e:
|
540
|
-
print("
|
553
|
+
PrettyOutput.print("总结对话历史失败", OutputType.ERROR)
|
541
554
|
return ""
|
542
555
|
|
543
556
|
def _summarize_and_clear_history(self) -> str:
|
@@ -559,7 +572,7 @@ class Agent:
|
|
559
572
|
"""
|
560
573
|
# 在清理历史之前,提示用户保存重要记忆
|
561
574
|
if self.force_save_memory:
|
562
|
-
print("
|
575
|
+
PrettyOutput.print("对话历史即将被总结和清理,请先保存重要信息...", OutputType.INFO)
|
563
576
|
self.memory_manager.prompt_memory_save()
|
564
577
|
|
565
578
|
if self._should_use_file_upload():
|
@@ -634,12 +647,12 @@ class Agent:
|
|
634
647
|
self._check_and_organize_memory()
|
635
648
|
|
636
649
|
if self.need_summary:
|
637
|
-
|
650
|
+
|
638
651
|
self.session.prompt = self.summary_prompt
|
639
652
|
if not self.model:
|
640
653
|
raise RuntimeError("Model not initialized")
|
641
654
|
ret = self.model.chat_until_success(self.session.prompt) # type: ignore
|
642
|
-
|
655
|
+
|
643
656
|
return ret
|
644
657
|
|
645
658
|
return "任务完成"
|
@@ -789,7 +802,9 @@ class Agent:
|
|
789
802
|
return None
|
790
803
|
|
791
804
|
set_interrupt(False)
|
792
|
-
user_input = self.
|
805
|
+
user_input = self._multiline_input("模型交互期间被中断,请输入用户干预信息:", False)
|
806
|
+
|
807
|
+
self.run_input_handlers_next_turn = True
|
793
808
|
|
794
809
|
if not user_input:
|
795
810
|
# 用户输入为空,完成任务
|
@@ -812,9 +827,7 @@ class Agent:
|
|
812
827
|
返回:
|
813
828
|
str: "continue" 或 "complete"
|
814
829
|
"""
|
815
|
-
user_input = self.
|
816
|
-
f"{self.name}: 请输入,或输入空行来结束当前任务:"
|
817
|
-
)
|
830
|
+
user_input = self._multiline_input(f"{self.name}: 请输入,或输入空行来结束当前任务:", False)
|
818
831
|
|
819
832
|
if user_input:
|
820
833
|
self.session.prompt = user_input
|
@@ -68,7 +68,7 @@ class EditFileHandler(OutputHandler):
|
|
68
68
|
{"SEARCH": diff["SEARCH"], "REPLACE": diff["REPLACE"]} for diff in diffs
|
69
69
|
]
|
70
70
|
|
71
|
-
|
71
|
+
|
72
72
|
success, result = self._fast_edit(file_path, file_patches)
|
73
73
|
|
74
74
|
if success:
|
@@ -208,7 +208,7 @@ class EditFileHandler(OutputHandler):
|
|
208
208
|
modified_content = modified_content.replace(
|
209
209
|
exact_search, replace_text, 1
|
210
210
|
)
|
211
|
-
|
211
|
+
|
212
212
|
found = True
|
213
213
|
else:
|
214
214
|
# 如果匹配不到,并且search与replace块的首尾都是换行,尝试去掉第一个和最后一个换行
|
@@ -224,7 +224,7 @@ class EditFileHandler(OutputHandler):
|
|
224
224
|
modified_content = modified_content.replace(
|
225
225
|
stripped_search, stripped_replace, 1
|
226
226
|
)
|
227
|
-
|
227
|
+
|
228
228
|
found = True
|
229
229
|
|
230
230
|
if not found:
|
@@ -253,9 +253,7 @@ class EditFileHandler(OutputHandler):
|
|
253
253
|
modified_content = modified_content.replace(
|
254
254
|
indented_search, indented_replace, 1
|
255
255
|
)
|
256
|
-
|
257
|
-
f"✅ 补丁 #{patch_count} 应用成功 (自动增加 {space_count} 个空格缩进)"
|
258
|
-
)
|
256
|
+
|
259
257
|
found = True
|
260
258
|
break
|
261
259
|
|
@@ -263,10 +261,7 @@ class EditFileHandler(OutputHandler):
|
|
263
261
|
successful_patches += 1
|
264
262
|
else:
|
265
263
|
error_msg = "搜索文本在文件中不存在"
|
266
|
-
|
267
|
-
f"{error_msg}:\n{search_text}",
|
268
|
-
output_type=OutputType.WARNING,
|
269
|
-
)
|
264
|
+
|
270
265
|
failed_patches.append({"patch": patch, "error": error_msg})
|
271
266
|
|
272
267
|
# 写入修改后的内容
|
@@ -284,12 +279,12 @@ class EditFileHandler(OutputHandler):
|
|
284
279
|
f"失败: {len(failed_patches)}/{patch_count}.\n"
|
285
280
|
f"失败详情:\n" + "\n".join(error_details)
|
286
281
|
)
|
287
|
-
print(
|
282
|
+
PrettyOutput.print(summary, OutputType.ERROR)
|
288
283
|
return False, summary
|
289
284
|
|
290
|
-
|
285
|
+
|
291
286
|
return True, modified_content
|
292
287
|
|
293
288
|
except Exception as e:
|
294
|
-
print(f"
|
289
|
+
PrettyOutput.print(f"文件修改失败: {str(e)}", OutputType.ERROR)
|
295
290
|
return False, f"文件修改失败: {str(e)}"
|
@@ -240,6 +240,7 @@ def handle_builtin_config_selector(
|
|
240
240
|
# 解析YAML以获取可读名称/描述(失败时静默降级为文件名)
|
241
241
|
name = fpath.stem
|
242
242
|
desc = ""
|
243
|
+
roles_count = 0
|
243
244
|
try:
|
244
245
|
with open(
|
245
246
|
fpath, "r", encoding="utf-8", errors="ignore"
|
@@ -251,8 +252,9 @@ def handle_builtin_config_selector(
|
|
251
252
|
if cat == "roles" and isinstance(
|
252
253
|
data.get("roles"), list
|
253
254
|
):
|
255
|
+
roles_count = len(data["roles"])
|
254
256
|
if not desc:
|
255
|
-
desc = f"{
|
257
|
+
desc = f"{roles_count} 个角色"
|
256
258
|
except Exception:
|
257
259
|
# 忽略解析错误,使用默认显示
|
258
260
|
pass
|
@@ -285,6 +287,7 @@ def handle_builtin_config_selector(
|
|
285
287
|
"name": str(name),
|
286
288
|
"desc": str(desc),
|
287
289
|
"details": str(details),
|
290
|
+
"roles_count": int(roles_count),
|
288
291
|
}
|
289
292
|
)
|
290
293
|
|
@@ -302,9 +305,16 @@ def handle_builtin_config_selector(
|
|
302
305
|
category = opt.get("category", "")
|
303
306
|
name = opt.get("name", "")
|
304
307
|
file_path = opt.get("file", "")
|
305
|
-
# 描述列显示配置描述;若为 roles
|
308
|
+
# 描述列显示配置描述;若为 roles 同时显示角色数量与列表
|
306
309
|
if category == "roles":
|
307
|
-
|
310
|
+
count = opt.get("roles_count")
|
311
|
+
details = opt.get("details", "")
|
312
|
+
parts = []
|
313
|
+
if isinstance(count, int) and count > 0:
|
314
|
+
parts.append(f"{count} 个角色")
|
315
|
+
if details:
|
316
|
+
parts.append(details)
|
317
|
+
desc_display = "\n".join(parts) if parts else ""
|
308
318
|
else:
|
309
319
|
desc_display = opt.get("desc", "")
|
310
320
|
table.add_row(str(idx), category, name, file_path, desc_display)
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/memory_manager.py
RENAMED
@@ -74,7 +74,7 @@ class MemoryManager:
|
|
74
74
|
if "save_memory" not in tool_names:
|
75
75
|
return
|
76
76
|
|
77
|
-
|
77
|
+
|
78
78
|
|
79
79
|
# 构建提示词,让大模型自己判断并保存记忆
|
80
80
|
prompt = """请回顾本次任务的整个过程,判断是否有值得长期记忆或项目记忆的信息。
|
@@ -97,12 +97,12 @@ class MemoryManager:
|
|
97
97
|
|
98
98
|
# 根据响应判断是否保存了记忆
|
99
99
|
if "save_memory" in response:
|
100
|
-
print("
|
100
|
+
PrettyOutput.print("已自动保存有价值的信息到记忆系统", OutputType.SUCCESS)
|
101
101
|
else:
|
102
|
-
print("
|
102
|
+
PrettyOutput.print("本次任务没有特别需要记忆的信息", OutputType.INFO)
|
103
103
|
|
104
104
|
except Exception as e:
|
105
|
-
print(f"
|
105
|
+
PrettyOutput.print(f"记忆分析失败: {str(e)}", OutputType.ERROR)
|
106
106
|
|
107
107
|
def add_memory_prompts_to_addon(self, addon_prompt: str, tool_registry) -> str:
|
108
108
|
"""在附加提示中添加记忆相关提示"""
|
@@ -151,12 +151,12 @@ class MethodologyShareManager(ShareManager):
|
|
151
151
|
"没有找到新的方法论文件(所有方法论可能已存在于中心仓库)",
|
152
152
|
OutputType.WARNING,
|
153
153
|
)
|
154
|
-
|
154
|
+
return
|
155
155
|
|
156
156
|
# 选择要分享的资源
|
157
157
|
selected_resources = self.select_resources(local_resources)
|
158
158
|
if not selected_resources:
|
159
|
-
|
159
|
+
return
|
160
160
|
|
161
161
|
# 分享资源
|
162
162
|
copied_list = self.share_resources(selected_resources)
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/task_analyzer.py
RENAMED
@@ -8,6 +8,7 @@ from typing import Optional
|
|
8
8
|
from jarvis.jarvis_utils.globals import get_interrupt, set_interrupt
|
9
9
|
from jarvis.jarvis_utils.input import user_confirm
|
10
10
|
from jarvis.jarvis_agent.prompts import TASK_ANALYSIS_PROMPT
|
11
|
+
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
11
12
|
|
12
13
|
|
13
14
|
class TaskAnalyzer:
|
@@ -24,7 +25,7 @@ class TaskAnalyzer:
|
|
24
25
|
|
25
26
|
def analysis_task(self, satisfaction_feedback: str = ""):
|
26
27
|
"""分析任务并生成方法论"""
|
27
|
-
|
28
|
+
|
28
29
|
try:
|
29
30
|
# 准备分析提示
|
30
31
|
self.agent.session.prompt = self._prepare_analysis_prompt(
|
@@ -37,9 +38,9 @@ class TaskAnalyzer:
|
|
37
38
|
# 循环处理工具调用,直到没有工具调用为止
|
38
39
|
self._process_analysis_loop()
|
39
40
|
|
40
|
-
|
41
|
+
|
41
42
|
except Exception as e:
|
42
|
-
print("
|
43
|
+
PrettyOutput.print("分析失败", OutputType.ERROR)
|
43
44
|
|
44
45
|
def _prepare_analysis_prompt(self, satisfaction_feedback: str) -> str:
|
45
46
|
"""准备分析提示"""
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/task_manager.py
RENAMED
@@ -29,7 +29,7 @@ class TaskManager:
|
|
29
29
|
data_dir = get_data_dir()
|
30
30
|
pre_command_path = os.path.join(data_dir, "pre-command")
|
31
31
|
if os.path.exists(pre_command_path):
|
32
|
-
print(f"
|
32
|
+
PrettyOutput.print(f"从{pre_command_path}加载预定义任务...", OutputType.INFO)
|
33
33
|
try:
|
34
34
|
with open(
|
35
35
|
pre_command_path, "r", encoding="utf-8", errors="ignore"
|
@@ -39,15 +39,15 @@ class TaskManager:
|
|
39
39
|
for name, desc in user_tasks.items():
|
40
40
|
if desc:
|
41
41
|
tasks[str(name)] = str(desc)
|
42
|
-
print(f"
|
42
|
+
PrettyOutput.print(f"预定义任务加载完成 {pre_command_path}", OutputType.SUCCESS)
|
43
43
|
except (yaml.YAMLError, OSError):
|
44
|
-
print(f"
|
44
|
+
PrettyOutput.print(f"预定义任务加载失败 {pre_command_path}", OutputType.ERROR)
|
45
45
|
|
46
46
|
# Check .jarvis/pre-command in current directory
|
47
47
|
pre_command_path = ".jarvis/pre-command"
|
48
48
|
if os.path.exists(pre_command_path):
|
49
49
|
abs_path = os.path.abspath(pre_command_path)
|
50
|
-
print(f"
|
50
|
+
PrettyOutput.print(f"从{abs_path}加载预定义任务...", OutputType.INFO)
|
51
51
|
try:
|
52
52
|
with open(
|
53
53
|
pre_command_path, "r", encoding="utf-8", errors="ignore"
|
@@ -57,9 +57,9 @@ class TaskManager:
|
|
57
57
|
for name, desc in local_tasks.items():
|
58
58
|
if desc:
|
59
59
|
tasks[str(name)] = str(desc)
|
60
|
-
print(f"
|
60
|
+
PrettyOutput.print(f"预定义任务加载完成 {pre_command_path}", OutputType.SUCCESS)
|
61
61
|
except (yaml.YAMLError, OSError):
|
62
|
-
print(f"
|
62
|
+
PrettyOutput.print(f"预定义任务加载失败 {pre_command_path}", OutputType.ERROR)
|
63
63
|
|
64
64
|
return tasks
|
65
65
|
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_agent/tool_executor.py
RENAMED
@@ -42,9 +42,9 @@ def execute_tool_call(response: str, agent: "Agent") -> Tuple[bool, Any]:
|
|
42
42
|
f"需要执行{tool_to_execute.name()}确认执行?", True
|
43
43
|
):
|
44
44
|
try:
|
45
|
-
|
45
|
+
|
46
46
|
result = tool_to_execute.handle(response, agent)
|
47
|
-
|
47
|
+
|
48
48
|
return result
|
49
49
|
except Exception as e:
|
50
50
|
PrettyOutput.print(f"工具执行失败: {str(e)}", OutputType.ERROR)
|
@@ -112,12 +112,12 @@ class ToolShareManager(ShareManager):
|
|
112
112
|
"没有找到新的工具文件(所有工具可能已存在于中心仓库)",
|
113
113
|
OutputType.WARNING,
|
114
114
|
)
|
115
|
-
|
115
|
+
return
|
116
116
|
|
117
117
|
# 选择要分享的资源
|
118
118
|
selected_resources = self.select_resources(local_resources)
|
119
119
|
if not selected_resources:
|
120
|
-
|
120
|
+
return
|
121
121
|
|
122
122
|
# 分享资源
|
123
123
|
moved_list = self.share_resources(selected_resources)
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_code_agent/code_agent.py
RENAMED
@@ -205,11 +205,11 @@ class CodeAgent:
|
|
205
205
|
返回:
|
206
206
|
str: git根目录路径
|
207
207
|
"""
|
208
|
-
|
208
|
+
|
209
209
|
curr_dir = os.getcwd()
|
210
210
|
git_dir = find_git_root_and_cd(curr_dir)
|
211
211
|
self.root_dir = git_dir
|
212
|
-
|
212
|
+
|
213
213
|
return git_dir
|
214
214
|
|
215
215
|
def _update_gitignore(self, git_dir: str) -> None:
|
@@ -218,33 +218,30 @@ class CodeAgent:
|
|
218
218
|
参数:
|
219
219
|
git_dir: git根目录路径
|
220
220
|
"""
|
221
|
-
|
221
|
+
|
222
222
|
gitignore_path = os.path.join(git_dir, ".gitignore")
|
223
223
|
jarvis_ignore = ".jarvis"
|
224
224
|
|
225
225
|
if not os.path.exists(gitignore_path):
|
226
226
|
with open(gitignore_path, "w", encoding="utf-8") as f:
|
227
227
|
f.write(f"{jarvis_ignore}\n")
|
228
|
-
print(f"
|
228
|
+
PrettyOutput.print(f"已创建 .gitignore 并添加 '{jarvis_ignore}'", OutputType.SUCCESS)
|
229
229
|
else:
|
230
230
|
with open(gitignore_path, "r+", encoding="utf-8") as f:
|
231
231
|
content = f.read()
|
232
232
|
if jarvis_ignore not in content.splitlines():
|
233
233
|
f.write(f"\n{jarvis_ignore}\n")
|
234
|
-
print(
|
235
|
-
|
236
|
-
|
234
|
+
PrettyOutput.print(
|
235
|
+
f"已更新 .gitignore,添加 '{jarvis_ignore}'", OutputType.SUCCESS
|
236
|
+
)
|
237
237
|
|
238
238
|
def _handle_git_changes(self, prefix: str, suffix: str) -> None:
|
239
239
|
"""处理git仓库中的未提交修改"""
|
240
|
-
|
240
|
+
|
241
241
|
if has_uncommitted_changes():
|
242
|
-
|
242
|
+
|
243
243
|
git_commiter = GitCommitTool()
|
244
244
|
git_commiter.execute({"prefix": prefix, "suffix": suffix})
|
245
|
-
print("✅ 未提交修改已处理完成")
|
246
|
-
else:
|
247
|
-
print("✅ 没有未提交的修改")
|
248
245
|
|
249
246
|
def _init_env(self, prefix: str, suffix: str) -> None:
|
250
247
|
"""初始化环境,组合以下功能:
|
@@ -253,13 +250,12 @@ class CodeAgent:
|
|
253
250
|
3. 处理未提交的修改
|
254
251
|
4. 配置git对换行符变化不敏感
|
255
252
|
"""
|
256
|
-
|
253
|
+
|
257
254
|
git_dir = self._find_git_root()
|
258
255
|
self._update_gitignore(git_dir)
|
259
256
|
self._handle_git_changes(prefix, suffix)
|
260
257
|
# 配置git对换行符变化不敏感
|
261
258
|
self._configure_line_ending_settings()
|
262
|
-
print("✅ 环境初始化完成")
|
263
259
|
|
264
260
|
def _configure_line_ending_settings(self) -> None:
|
265
261
|
"""配置git对换行符变化不敏感,只在当前设置与目标设置不一致时修改"""
|
@@ -285,17 +281,17 @@ class CodeAgent:
|
|
285
281
|
need_change = True
|
286
282
|
|
287
283
|
if not need_change:
|
288
|
-
|
284
|
+
|
289
285
|
return
|
290
286
|
|
291
287
|
PrettyOutput.print(
|
292
288
|
"⚠️ 正在修改git换行符敏感设置,这会影响所有文件的换行符处理方式",
|
293
289
|
OutputType.WARNING,
|
294
290
|
)
|
295
|
-
print("将进行以下设置:")
|
291
|
+
PrettyOutput.print("将进行以下设置:", OutputType.INFO)
|
296
292
|
for key, value in target_settings.items():
|
297
293
|
current = current_settings.get(key, "未设置")
|
298
|
-
print(f"
|
294
|
+
PrettyOutput.print(f"{key}: {current} -> {value}", OutputType.INFO)
|
299
295
|
|
300
296
|
# 直接执行设置,不需要用户确认
|
301
297
|
for key, value in target_settings.items():
|
@@ -305,7 +301,7 @@ class CodeAgent:
|
|
305
301
|
if sys.platform.startswith("win"):
|
306
302
|
self._handle_windows_line_endings()
|
307
303
|
|
308
|
-
print("
|
304
|
+
PrettyOutput.print("git换行符敏感设置已更新", OutputType.SUCCESS)
|
309
305
|
|
310
306
|
def _handle_windows_line_endings(self) -> None:
|
311
307
|
"""在Windows系统上处理换行符问题,提供建议而非强制修改"""
|
@@ -319,10 +315,8 @@ class CodeAgent:
|
|
319
315
|
if any(keyword in content for keyword in ["text=", "eol=", "binary"]):
|
320
316
|
return
|
321
317
|
|
322
|
-
print(
|
323
|
-
|
324
|
-
)
|
325
|
-
print("这可以防止仅因换行符不同而导致整个文件被标记为修改。")
|
318
|
+
PrettyOutput.print("提示:在Windows系统上,建议配置 .gitattributes 文件来避免换行符问题。", OutputType.INFO)
|
319
|
+
PrettyOutput.print("这可以防止仅因换行符不同而导致整个文件被标记为修改。", OutputType.INFO)
|
326
320
|
|
327
321
|
if user_confirm("是否要创建一个最小化的.gitattributes文件?", False):
|
328
322
|
# 最小化的内容,只影响特定类型的文件
|
@@ -341,20 +335,18 @@ class CodeAgent:
|
|
341
335
|
if not os.path.exists(gitattributes_path):
|
342
336
|
with open(gitattributes_path, "w", encoding="utf-8", newline="\n") as f:
|
343
337
|
f.write(minimal_content)
|
344
|
-
print("
|
338
|
+
PrettyOutput.print("已创建最小化的 .gitattributes 文件", OutputType.SUCCESS)
|
345
339
|
else:
|
346
|
-
print("
|
347
|
-
print(minimal_content)
|
340
|
+
PrettyOutput.print("将以下内容追加到现有 .gitattributes 文件:", OutputType.INFO)
|
341
|
+
PrettyOutput.print(minimal_content, OutputType.CODE, lang="text")
|
348
342
|
if user_confirm("是否追加到现有文件?", True):
|
349
343
|
with open(
|
350
344
|
gitattributes_path, "a", encoding="utf-8", newline="\n"
|
351
345
|
) as f:
|
352
346
|
f.write("\n" + minimal_content)
|
353
|
-
print("
|
347
|
+
PrettyOutput.print("已更新 .gitattributes 文件", OutputType.SUCCESS)
|
354
348
|
else:
|
355
|
-
print(
|
356
|
-
"ℹ️ 跳过.gitattributes文件创建。如果遇到换行符问题,可以手动创建此文件。"
|
357
|
-
)
|
349
|
+
PrettyOutput.print("跳过 .gitattributes 文件创建。如遇换行符问题,可手动创建此文件。", OutputType.INFO)
|
358
350
|
|
359
351
|
def _record_code_changes_stats(self, diff_text: str) -> None:
|
360
352
|
"""记录代码变更的统计信息。
|
@@ -286,7 +286,6 @@ class CodeReviewTool:
|
|
286
286
|
diff_output = ""
|
287
287
|
|
288
288
|
# Build git diff command based on review type
|
289
|
-
print("📊 正在获取代码变更...")
|
290
289
|
|
291
290
|
if review_type == "commit":
|
292
291
|
if "commit_sha" not in args:
|
@@ -458,7 +457,6 @@ class CodeReviewTool:
|
|
458
457
|
diff_output = review_info + diff_output
|
459
458
|
|
460
459
|
PrettyOutput.print(diff_output, OutputType.CODE, lang="diff")
|
461
|
-
print("✅ 代码变更获取完成")
|
462
460
|
|
463
461
|
system_prompt = """<code_review_guide>
|
464
462
|
<role>
|
@@ -753,10 +751,10 @@ class CodeReviewTool:
|
|
753
751
|
"stdout": "",
|
754
752
|
"stderr": "代码差异太大,无法处理",
|
755
753
|
}
|
756
|
-
|
754
|
+
|
757
755
|
upload_success = agent.model.upload_files([temp_file_path])
|
758
756
|
if upload_success:
|
759
|
-
|
757
|
+
pass
|
760
758
|
else:
|
761
759
|
return {
|
762
760
|
"success": False,
|
{jarvis_ai_assistant-0.3.17 → jarvis_ai_assistant-0.3.19}/src/jarvis/jarvis_data/config_schema.json
RENAMED
@@ -294,6 +294,11 @@
|
|
294
294
|
"description": "在进入默认通用代理前,列出可用配置(agent/multi_agent/roles)供选择",
|
295
295
|
"default": false
|
296
296
|
},
|
297
|
+
"JARVIS_IMMEDIATE_ABORT": {
|
298
|
+
"type": "boolean",
|
299
|
+
"description": "是否启用立即中断:在对话迭代中检测到中断信号时立即返回",
|
300
|
+
"default": false
|
301
|
+
},
|
297
302
|
"JARVIS_TOOL_GROUP": {
|
298
303
|
"type": "string",
|
299
304
|
"description": "选择一个预定义的工具配置组",
|