jarvis-ai-assistant 0.3.33__tar.gz → 0.3.34__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.33/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.3.34}/PKG-INFO +1 -1
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/pyproject.toml +1 -1
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/setup.py +1 -1
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/__init__.py +2 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/agent_manager.py +3 -2
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/config.py +7 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/jarvis.py +100 -9
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/main.py +32 -2
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_agent/code_agent.py +32 -1
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_data/config_schema.json +5 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_multi_agent/main.py +28 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/execute_script.py +45 -8
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/config.py +33 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/input.py +6 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34/src/jarvis_ai_assistant.egg-info}/PKG-INFO +1 -1
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/README.md +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/config_editor.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/edit_file_handler.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/event_bus.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/events.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/file_context_handler.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/file_methodology_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/memory_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/methodology_share_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/prompt_builder.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/prompt_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/prompts.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/protocols.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/run_loop.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/session_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/share_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/task_analyzer.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/task_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/tool_executor.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/tool_share_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/user_interaction.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/utils.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_agent/lint.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_analysis/code_review.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_git_utils/git_commiter.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_memory_organizer/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_memory_organizer/memory_organizer.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/ai8.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/base.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/human.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/kimi.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/openai.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/tongyi.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/yuanbao.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform_manager/main.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform_manager/service.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/cache.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/cli.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/embedding_manager.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/llm_interface.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/query_rewriter.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/rag_pipeline.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/reranker.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/retriever.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_smart_shell/main.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/cli.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/stats.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/storage.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/visualizer.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/clear_memory.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/cli/main.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/edit_file.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/read_code.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/registry.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/retrieve_memory.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/save_memory.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/search_web.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/sub_agent.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/sub_code_agent.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/clipboard.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/embedding.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/fzf.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/git_utils.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/http.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/methodology.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/output.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/tag.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/utils.py +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -0
- {jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/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.34"
|
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.34",
|
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.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/__init__.py
RENAMED
@@ -439,6 +439,8 @@ class Agent:
|
|
439
439
|
self.summary_prompt = cfg.summary_prompt or DEFAULT_SUMMARY_PROMPT
|
440
440
|
self.max_token_count = int(cfg.max_token_count or get_max_token_count(model_group))
|
441
441
|
self.force_save_memory = bool(cfg.force_save_memory)
|
442
|
+
# 非交互模式下自动完成标志需要同步到 Agent 实例,避免循环
|
443
|
+
self.auto_complete = bool(cfg.auto_complete)
|
442
444
|
|
443
445
|
# 聚合配置到 AgentConfig,作为后续单一事实来源(保持兼容,不改变既有属性使用)
|
444
446
|
self.config = cfg
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/agent_manager.py
RENAMED
@@ -16,6 +16,7 @@ from jarvis.jarvis_agent.file_context_handler import file_context_handler
|
|
16
16
|
from jarvis.jarvis_agent.shell_input_handler import shell_input_handler
|
17
17
|
from jarvis.jarvis_agent.task_manager import TaskManager
|
18
18
|
from jarvis.jarvis_tools.registry import ToolRegistry
|
19
|
+
from jarvis.jarvis_utils.config import is_non_interactive
|
19
20
|
|
20
21
|
|
21
22
|
class AgentManager:
|
@@ -77,8 +78,8 @@ class AgentManager:
|
|
77
78
|
self.agent.run(task_content)
|
78
79
|
raise typer.Exit(code=0)
|
79
80
|
|
80
|
-
#
|
81
|
-
if self.agent.first:
|
81
|
+
# 处理预定义任务(非交互模式下跳过)
|
82
|
+
if not is_non_interactive() and self.agent.first:
|
82
83
|
task_manager = TaskManager()
|
83
84
|
tasks = task_manager.load_tasks()
|
84
85
|
if tasks and (selected_task := task_manager.select_task(tasks)):
|
@@ -17,6 +17,7 @@ from jarvis.jarvis_utils.config import (
|
|
17
17
|
is_force_save_memory,
|
18
18
|
is_use_analysis,
|
19
19
|
is_use_methodology,
|
20
|
+
is_non_interactive,
|
20
21
|
)
|
21
22
|
|
22
23
|
|
@@ -30,6 +31,7 @@ class AgentConfig:
|
|
30
31
|
|
31
32
|
# 运行行为
|
32
33
|
auto_complete: bool = False
|
34
|
+
non_interactive: bool = False
|
33
35
|
need_summary: bool = True
|
34
36
|
|
35
37
|
# 可选配置(None 表示使用默认策略解析)
|
@@ -53,6 +55,7 @@ class AgentConfig:
|
|
53
55
|
description=self.description,
|
54
56
|
model_group=self.model_group,
|
55
57
|
auto_complete=self.auto_complete,
|
58
|
+
non_interactive=self.non_interactive,
|
56
59
|
need_summary=self.need_summary,
|
57
60
|
summary_prompt=self.summary_prompt,
|
58
61
|
execute_tool_confirm=self.execute_tool_confirm,
|
@@ -89,4 +92,8 @@ class AgentConfig:
|
|
89
92
|
if cfg.force_save_memory is None:
|
90
93
|
cfg.force_save_memory = is_force_save_memory()
|
91
94
|
|
95
|
+
# 非交互模式下默认开启自动完成
|
96
|
+
if is_non_interactive():
|
97
|
+
cfg.auto_complete = True
|
98
|
+
|
92
99
|
return cfg
|
@@ -19,6 +19,8 @@ from jarvis.jarvis_utils.config import (
|
|
19
19
|
get_multi_agent_dirs,
|
20
20
|
get_roles_dirs,
|
21
21
|
get_data_dir,
|
22
|
+
set_config,
|
23
|
+
is_non_interactive,
|
22
24
|
)
|
23
25
|
import jarvis.jarvis_utils.utils as jutils
|
24
26
|
from jarvis.jarvis_utils.input import user_confirm, get_single_line_input
|
@@ -30,6 +32,32 @@ import yaml # type: ignore
|
|
30
32
|
from rich.table import Table
|
31
33
|
from rich.console import Console
|
32
34
|
|
35
|
+
import sys
|
36
|
+
|
37
|
+
|
38
|
+
def _normalize_backup_data_argv(argv: List[str]) -> None:
|
39
|
+
"""
|
40
|
+
兼容旧版 Click/Typer 对可选参数的解析差异:
|
41
|
+
若用户仅提供 --backup-data 而不跟参数,则在解析前注入默认目录。
|
42
|
+
"""
|
43
|
+
try:
|
44
|
+
i = 0
|
45
|
+
while i < len(argv):
|
46
|
+
tok = argv[i]
|
47
|
+
if tok == "--backup-data":
|
48
|
+
# 情况1:位于末尾,无参数
|
49
|
+
# 情况2:后续是下一个选项(以 '-' 开头),表示未提供参数
|
50
|
+
if i == len(argv) - 1 or (i + 1 < len(argv) and argv[i + 1].startswith("-")):
|
51
|
+
argv.insert(i + 1, "~/jarvis_backups")
|
52
|
+
i += 1 # 跳过我们插入的默认值,避免重复插入
|
53
|
+
i += 1
|
54
|
+
except Exception:
|
55
|
+
# 静默忽略任何异常,避免影响主流程
|
56
|
+
pass
|
57
|
+
|
58
|
+
|
59
|
+
_normalize_backup_data_argv(sys.argv)
|
60
|
+
|
33
61
|
app = typer.Typer(help="Jarvis AI 助手")
|
34
62
|
|
35
63
|
|
@@ -187,9 +215,9 @@ def handle_interactive_config_option(
|
|
187
215
|
return True
|
188
216
|
|
189
217
|
|
190
|
-
def handle_backup_option(
|
218
|
+
def handle_backup_option(backup_dir_path: Optional[str]) -> bool:
|
191
219
|
"""处理数据备份选项,返回是否已处理并需提前结束。"""
|
192
|
-
if
|
220
|
+
if backup_dir_path is None:
|
193
221
|
return False
|
194
222
|
|
195
223
|
init_env("", config_file=None)
|
@@ -198,7 +226,8 @@ def handle_backup_option(backup: bool) -> bool:
|
|
198
226
|
PrettyOutput.print(f"数据目录不存在: {data_dir}", OutputType.ERROR)
|
199
227
|
return True
|
200
228
|
|
201
|
-
|
229
|
+
backup_dir_str = backup_dir_path if backup_dir_path.strip() else "~/jarvis_backups"
|
230
|
+
backup_dir = Path(os.path.expanduser(backup_dir_str))
|
202
231
|
backup_dir.mkdir(exist_ok=True)
|
203
232
|
|
204
233
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
@@ -290,6 +319,9 @@ def try_switch_to_jca_if_git_repo(
|
|
290
319
|
task: Optional[str],
|
291
320
|
) -> None:
|
292
321
|
"""在初始化环境前检测Git仓库,并可选择自动切换到代码开发模式(jca)。"""
|
322
|
+
# 非交互模式下跳过代码模式切换提示与相关输出
|
323
|
+
if is_non_interactive():
|
324
|
+
return
|
293
325
|
if is_enable_git_repo_jca_switch():
|
294
326
|
try:
|
295
327
|
res = subprocess.run(
|
@@ -632,12 +664,19 @@ def run_cli(
|
|
632
664
|
"--disable-methodology-analysis",
|
633
665
|
help="禁用方法论和任务分析(覆盖配置文件设置)",
|
634
666
|
),
|
635
|
-
backup_data:
|
636
|
-
|
667
|
+
backup_data: Optional[str] = typer.Option(
|
668
|
+
None,
|
669
|
+
"--backup-data",
|
670
|
+
help="备份 Jarvis 数据目录. 可选地传入备份目录. 默认为 '~/jarvis_backups'",
|
671
|
+
show_default=False,
|
672
|
+
flag_value="~/jarvis_backups",
|
637
673
|
),
|
638
674
|
restore_data: Optional[str] = typer.Option(
|
639
675
|
None, "--restore-data", help="从指定的压缩包恢复 Jarvis 数据"
|
640
676
|
),
|
677
|
+
non_interactive: bool = typer.Option(
|
678
|
+
False, "-n", "--non-interactive", help="启用非交互模式:用户无法与命令交互,脚本执行超时限制为5分钟"
|
679
|
+
),
|
641
680
|
) -> None:
|
642
681
|
"""Jarvis AI assistant command-line interface."""
|
643
682
|
if ctx.invoked_subcommand is not None:
|
@@ -646,6 +685,37 @@ def run_cli(
|
|
646
685
|
# 使用 rich 输出命令与快捷方式总览
|
647
686
|
print_commands_overview()
|
648
687
|
|
688
|
+
# CLI 标志:非交互模式(不依赖配置文件)
|
689
|
+
if non_interactive:
|
690
|
+
try:
|
691
|
+
os.environ["JARVIS_NON_INTERACTIVE"] = "true"
|
692
|
+
except Exception:
|
693
|
+
pass
|
694
|
+
# 注意:全局配置同步在 init_env 之后执行,避免被覆盖
|
695
|
+
|
696
|
+
# 同步其他 CLI 选项到全局配置,确保后续模块读取一致
|
697
|
+
try:
|
698
|
+
if model_group:
|
699
|
+
set_config("JARVIS_LLM_GROUP", str(model_group))
|
700
|
+
if tool_group:
|
701
|
+
set_config("JARVIS_TOOL_GROUP", str(tool_group))
|
702
|
+
if disable_methodology_analysis:
|
703
|
+
set_config("JARVIS_USE_METHODOLOGY", False)
|
704
|
+
set_config("JARVIS_USE_ANALYSIS", False)
|
705
|
+
if restore_session:
|
706
|
+
set_config("JARVIS_RESTORE_SESSION", True)
|
707
|
+
except Exception:
|
708
|
+
# 静默忽略同步异常,不影响主流程
|
709
|
+
pass
|
710
|
+
|
711
|
+
# 非交互模式要求从命令行传入任务
|
712
|
+
if non_interactive and not (task and str(task).strip()):
|
713
|
+
PrettyOutput.print(
|
714
|
+
"非交互模式已启用:必须使用 --task 传入任务内容,因多行输入不可用。",
|
715
|
+
OutputType.ERROR,
|
716
|
+
)
|
717
|
+
raise typer.Exit(code=2)
|
718
|
+
|
649
719
|
# 处理数据备份
|
650
720
|
if handle_backup_option(backup_data):
|
651
721
|
return
|
@@ -674,18 +744,39 @@ def run_cli(
|
|
674
744
|
preload_config_for_flags(config_file)
|
675
745
|
|
676
746
|
# 在初始化环境前检测Git仓库,并可选择自动切换到代码开发模式(jca)
|
677
|
-
|
678
|
-
|
679
|
-
|
747
|
+
if not non_interactive:
|
748
|
+
try_switch_to_jca_if_git_repo(
|
749
|
+
model_group, tool_group, config_file, restore_session, task
|
750
|
+
)
|
680
751
|
|
681
752
|
# 在进入默认通用代理前,列出内置配置供选择(agent/multi_agent/roles)
|
682
|
-
|
753
|
+
# 非交互模式下跳过内置角色/配置选择
|
754
|
+
if not non_interactive:
|
755
|
+
handle_builtin_config_selector(model_group, tool_group, config_file, task)
|
683
756
|
|
684
757
|
# 初始化环境
|
685
758
|
init_env(
|
686
759
|
"欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=config_file
|
687
760
|
)
|
688
761
|
|
762
|
+
# 在初始化环境后同步 CLI 选项到全局配置,避免被 init_env 覆盖
|
763
|
+
try:
|
764
|
+
if model_group:
|
765
|
+
set_config("JARVIS_LLM_GROUP", str(model_group))
|
766
|
+
if tool_group:
|
767
|
+
set_config("JARVIS_TOOL_GROUP", str(tool_group))
|
768
|
+
if disable_methodology_analysis:
|
769
|
+
set_config("JARVIS_USE_METHODOLOGY", False)
|
770
|
+
set_config("JARVIS_USE_ANALYSIS", False)
|
771
|
+
if restore_session:
|
772
|
+
set_config("JARVIS_RESTORE_SESSION", True)
|
773
|
+
if non_interactive:
|
774
|
+
# 保持运行期非交互标志
|
775
|
+
set_config("JARVIS_NON_INTERACTIVE", True)
|
776
|
+
except Exception:
|
777
|
+
# 静默忽略同步异常,不影响主流程
|
778
|
+
pass
|
779
|
+
|
689
780
|
# 运行主流程
|
690
781
|
try:
|
691
782
|
agent_manager = AgentManager(
|
@@ -9,6 +9,7 @@ from jarvis.jarvis_agent import Agent
|
|
9
9
|
from jarvis.jarvis_utils.input import get_multiline_input
|
10
10
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
11
11
|
from jarvis.jarvis_utils.utils import init_env
|
12
|
+
from jarvis.jarvis_utils.config import set_config
|
12
13
|
|
13
14
|
app = typer.Typer(help="Jarvis AI 助手")
|
14
15
|
|
@@ -46,16 +47,45 @@ def cli(
|
|
46
47
|
None, "-c", "--agent-definition", help="代理定义文件路径"
|
47
48
|
),
|
48
49
|
task: Optional[str] = typer.Option(None, "-T", "--task", help="初始任务内容"),
|
49
|
-
|
50
|
+
|
50
51
|
model_group: Optional[str] = typer.Option(
|
51
52
|
None, "-g", "--llm-group", help="使用的模型组,覆盖配置文件中的设置"
|
52
53
|
),
|
54
|
+
non_interactive: bool = typer.Option(
|
55
|
+
False, "-n", "--non-interactive", help="启用非交互模式:用户无法与命令交互,脚本执行超时限制为5分钟"
|
56
|
+
),
|
53
57
|
):
|
54
58
|
"""Main entry point for Jarvis agent"""
|
55
|
-
#
|
59
|
+
# CLI 标志:非交互模式(不依赖配置文件)
|
60
|
+
if non_interactive:
|
61
|
+
try:
|
62
|
+
os.environ["JARVIS_NON_INTERACTIVE"] = "true"
|
63
|
+
except Exception:
|
64
|
+
pass
|
65
|
+
try:
|
66
|
+
set_config("JARVIS_NON_INTERACTIVE", True)
|
67
|
+
except Exception:
|
68
|
+
pass
|
69
|
+
# 非交互模式要求从命令行传入任务
|
70
|
+
if non_interactive and not (task and str(task).strip()):
|
71
|
+
PrettyOutput.print(
|
72
|
+
"非交互模式已启用:必须使用 --task 传入任务内容,因多行输入不可用。",
|
73
|
+
OutputType.ERROR,
|
74
|
+
)
|
75
|
+
raise typer.Exit(code=2)
|
76
|
+
# Initialize环境
|
56
77
|
init_env(
|
57
78
|
"欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=config_file
|
58
79
|
)
|
80
|
+
# 在初始化环境后同步 CLI 选项到全局配置,避免被 init_env 覆盖
|
81
|
+
try:
|
82
|
+
if model_group:
|
83
|
+
set_config("JARVIS_LLM_GROUP", str(model_group))
|
84
|
+
if non_interactive:
|
85
|
+
set_config("JARVIS_NON_INTERACTIVE", True)
|
86
|
+
except Exception:
|
87
|
+
# 静默忽略同步异常,不影响主流程
|
88
|
+
pass
|
59
89
|
|
60
90
|
# Load configuration
|
61
91
|
config = load_config(agent_definition) if agent_definition else {}
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_agent/code_agent.py
RENAMED
@@ -24,6 +24,7 @@ from jarvis.jarvis_utils.config import (
|
|
24
24
|
is_confirm_before_apply_patch,
|
25
25
|
is_enable_static_analysis,
|
26
26
|
get_git_check_mode,
|
27
|
+
set_config,
|
27
28
|
)
|
28
29
|
from jarvis.jarvis_utils.git_utils import (
|
29
30
|
confirm_add_new_files,
|
@@ -775,7 +776,6 @@ class CodeAgent:
|
|
775
776
|
|
776
777
|
@app.command()
|
777
778
|
def cli(
|
778
|
-
|
779
779
|
model_group: Optional[str] = typer.Option(
|
780
780
|
None, "-g", "--llm-group", help="使用的模型组,覆盖配置文件中的设置"
|
781
781
|
),
|
@@ -806,13 +806,44 @@ def cli(
|
|
806
806
|
"--suffix",
|
807
807
|
help="提交信息后缀(用换行分隔)",
|
808
808
|
),
|
809
|
+
non_interactive: bool = typer.Option(
|
810
|
+
False, "-n", "--non-interactive", help="启用非交互模式:用户无法与命令交互,脚本执行超时限制为5分钟"
|
811
|
+
),
|
809
812
|
) -> None:
|
810
813
|
"""Jarvis主入口点。"""
|
814
|
+
# CLI 标志:非交互模式(不依赖配置文件)
|
815
|
+
if non_interactive:
|
816
|
+
try:
|
817
|
+
os.environ["JARVIS_NON_INTERACTIVE"] = "true"
|
818
|
+
except Exception:
|
819
|
+
pass
|
820
|
+
# 注意:全局配置同步放在 init_env 之后执行,避免被 init_env 覆盖
|
821
|
+
# 非交互模式要求从命令行传入任务
|
822
|
+
if non_interactive and not (requirement and str(requirement).strip()):
|
823
|
+
PrettyOutput.print(
|
824
|
+
"非交互模式已启用:必须使用 --requirement 传入任务内容,因多行输入不可用。",
|
825
|
+
OutputType.ERROR,
|
826
|
+
)
|
827
|
+
raise typer.Exit(code=2)
|
811
828
|
init_env(
|
812
829
|
"欢迎使用 Jarvis-CodeAgent,您的代码工程助手已准备就绪!",
|
813
830
|
config_file=config_file,
|
814
831
|
)
|
815
832
|
|
833
|
+
# 在初始化环境后同步 CLI 选项到全局配置,避免被 init_env 覆盖
|
834
|
+
try:
|
835
|
+
if model_group:
|
836
|
+
set_config("JARVIS_LLM_GROUP", str(model_group))
|
837
|
+
if tool_group:
|
838
|
+
set_config("JARVIS_TOOL_GROUP", str(tool_group))
|
839
|
+
if restore_session:
|
840
|
+
set_config("JARVIS_RESTORE_SESSION", True)
|
841
|
+
if non_interactive:
|
842
|
+
set_config("JARVIS_NON_INTERACTIVE", True)
|
843
|
+
except Exception:
|
844
|
+
# 静默忽略同步异常,不影响主流程
|
845
|
+
pass
|
846
|
+
|
816
847
|
try:
|
817
848
|
subprocess.run(
|
818
849
|
["git", "rev-parse", "--git-dir"],
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_data/config_schema.json
RENAMED
@@ -188,6 +188,11 @@
|
|
188
188
|
"description": "AI工具筛选阈值:当可用工具数量超过此值时触发AI筛选",
|
189
189
|
"default": 30
|
190
190
|
},
|
191
|
+
"JARVIS_SCRIPT_EXECUTION_TIMEOUT": {
|
192
|
+
"type": "number",
|
193
|
+
"description": "脚本执行的超时时间(秒),仅在非交互模式下生效。",
|
194
|
+
"default": 300
|
195
|
+
},
|
191
196
|
"JARVIS_CONFIRM_BEFORE_APPLY_PATCH": {
|
192
197
|
"type": "boolean",
|
193
198
|
"description": "应用补丁前是否需要确认",
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_multi_agent/main.py
RENAMED
@@ -3,10 +3,12 @@ from typing import Optional
|
|
3
3
|
|
4
4
|
import typer
|
5
5
|
import yaml # type: ignore[import-untyped]
|
6
|
+
import os
|
6
7
|
|
7
8
|
from jarvis.jarvis_multi_agent import MultiAgent
|
8
9
|
from jarvis.jarvis_utils.input import get_multiline_input
|
9
10
|
from jarvis.jarvis_utils.utils import init_env
|
11
|
+
from jarvis.jarvis_utils.config import set_config
|
10
12
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
11
13
|
|
12
14
|
app = typer.Typer(help="多智能体系统启动器")
|
@@ -18,9 +20,35 @@ def cli(
|
|
18
20
|
user_input: Optional[str] = typer.Option(
|
19
21
|
None, "--input", "-i", help="用户输入(可选)"
|
20
22
|
),
|
23
|
+
non_interactive: bool = typer.Option(
|
24
|
+
False, "-n", "--non-interactive", help="启用非交互模式:用户无法与命令交互,脚本执行超时限制为5分钟"
|
25
|
+
),
|
26
|
+
),
|
21
27
|
):
|
22
28
|
"""从YAML配置文件初始化并运行多智能体系统"""
|
29
|
+
# CLI 标志:非交互模式(不依赖配置文件)
|
30
|
+
if non_interactive:
|
31
|
+
try:
|
32
|
+
os.environ["JARVIS_NON_INTERACTIVE"] = "true"
|
33
|
+
except Exception:
|
34
|
+
pass
|
35
|
+
# 注意:全局配置同步在 init_env 之后执行,避免被覆盖
|
36
|
+
# 非交互模式要求从命令行传入任务
|
37
|
+
if non_interactive and not (user_input and str(user_input).strip()):
|
38
|
+
PrettyOutput.print(
|
39
|
+
"非交互模式已启用:必须使用 --input 传入任务内容,因多行输入不可用。",
|
40
|
+
OutputType.ERROR,
|
41
|
+
)
|
42
|
+
raise typer.Exit(code=2)
|
23
43
|
init_env("欢迎使用 Jarvis-MultiAgent,您的多智能体系统已准备就绪!")
|
44
|
+
|
45
|
+
# 在初始化环境后同步 CLI 选项到全局配置,避免被 init_env 覆盖
|
46
|
+
try:
|
47
|
+
if non_interactive:
|
48
|
+
set_config("JARVIS_NON_INTERACTIVE", True)
|
49
|
+
except Exception:
|
50
|
+
# 静默忽略同步异常,不影响主流程
|
51
|
+
pass
|
24
52
|
|
25
53
|
try:
|
26
54
|
with open(config, "r", errors="ignore") as f:
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/execute_script.py
RENAMED
@@ -19,6 +19,7 @@ class ScriptTool:
|
|
19
19
|
+ "注意:由于模型上下文长度限制,请避免在脚本中输出大量信息,应该使用rg过滤输出。"
|
20
20
|
+ "与virtual_tty不同,此工具会创建一个临时的脚本文件,并使用脚本命令执行脚本,不具备交互式操作的能力,"
|
21
21
|
+ "适用于需要执行脚本并获取结果的场景。不适合需要交互式操作的场景(如:ssh连接、sftp传输、gdb/dlv调试等)。"
|
22
|
+
+ "在非交互模式(JARVIS_NON_INTERACTIVE=true)下:脚本执行时间限制为5分钟,超时将被终止并返回超时信息;用户无法与命令交互,请不要执行需要交互的命令。"
|
22
23
|
)
|
23
24
|
parameters = {
|
24
25
|
"type": "object",
|
@@ -115,8 +116,37 @@ class ScriptTool:
|
|
115
116
|
f"script -q -c '{interpreter} {script_path}' {output_file}"
|
116
117
|
)
|
117
118
|
|
118
|
-
# Execute command
|
119
|
-
|
119
|
+
# Execute command with optional timeout in non-interactive mode
|
120
|
+
from jarvis.jarvis_utils.config import get_script_execution_timeout, is_non_interactive
|
121
|
+
import subprocess
|
122
|
+
|
123
|
+
timed_out = False
|
124
|
+
if is_non_interactive():
|
125
|
+
try:
|
126
|
+
proc = subprocess.Popen(tee_command, shell=True)
|
127
|
+
try:
|
128
|
+
proc.wait(timeout=get_script_execution_timeout())
|
129
|
+
except subprocess.TimeoutExpired:
|
130
|
+
timed_out = True
|
131
|
+
try:
|
132
|
+
proc.kill()
|
133
|
+
except Exception:
|
134
|
+
pass
|
135
|
+
except Exception as e:
|
136
|
+
PrettyOutput.print(str(e), OutputType.ERROR)
|
137
|
+
# Attempt to read any partial output if available
|
138
|
+
try:
|
139
|
+
output = self.get_display_output(output_file)
|
140
|
+
except Exception as ee:
|
141
|
+
output = f"读取输出文件失败: {str(ee)}"
|
142
|
+
return {
|
143
|
+
"success": False,
|
144
|
+
"stdout": output,
|
145
|
+
"stderr": f"执行脚本失败: {str(e)}",
|
146
|
+
}
|
147
|
+
else:
|
148
|
+
# Execute command and capture return code
|
149
|
+
os.system(tee_command)
|
120
150
|
|
121
151
|
# Read and process output file
|
122
152
|
try:
|
@@ -125,12 +155,19 @@ class ScriptTool:
|
|
125
155
|
except Exception as e:
|
126
156
|
output = f"读取输出文件失败: {str(e)}"
|
127
157
|
|
128
|
-
# Return
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
158
|
+
# Return result (handle timeout in non-interactive mode)
|
159
|
+
if is_non_interactive() and timed_out:
|
160
|
+
return {
|
161
|
+
"success": False,
|
162
|
+
"stdout": output,
|
163
|
+
"stderr": f"执行超时(超过{get_script_execution_timeout()}秒),进程已被终止(非交互模式)。",
|
164
|
+
}
|
165
|
+
else:
|
166
|
+
return {
|
167
|
+
"success": True,
|
168
|
+
"stdout": output,
|
169
|
+
"stderr": "",
|
170
|
+
}
|
134
171
|
|
135
172
|
finally:
|
136
173
|
# Clean up temporary files
|
@@ -712,6 +712,16 @@ def get_tool_filter_threshold() -> int:
|
|
712
712
|
return int(GLOBAL_CONFIG_DATA.get("JARVIS_TOOL_FILTER_THRESHOLD", 30))
|
713
713
|
|
714
714
|
|
715
|
+
def get_script_execution_timeout() -> int:
|
716
|
+
"""
|
717
|
+
获取脚本执行的超时时间(秒)。
|
718
|
+
|
719
|
+
返回:
|
720
|
+
int: 超时时间,默认为300秒(5分钟)
|
721
|
+
"""
|
722
|
+
return int(GLOBAL_CONFIG_DATA.get("JARVIS_SCRIPT_EXECUTION_TIMEOUT", 300))
|
723
|
+
|
724
|
+
|
715
725
|
def is_enable_git_repo_jca_switch() -> bool:
|
716
726
|
"""
|
717
727
|
是否启用:在初始化环境前检测Git仓库并提示可切换到代码开发模式(jca)
|
@@ -746,3 +756,26 @@ def is_immediate_abort() -> bool:
|
|
746
756
|
默认关闭
|
747
757
|
"""
|
748
758
|
return GLOBAL_CONFIG_DATA.get("JARVIS_IMMEDIATE_ABORT", False) is True
|
759
|
+
|
760
|
+
|
761
|
+
def is_non_interactive() -> bool:
|
762
|
+
"""
|
763
|
+
获取是否启用非交互模式。
|
764
|
+
|
765
|
+
返回:
|
766
|
+
bool: 如果启用非交互模式则返回True,默认为False
|
767
|
+
"""
|
768
|
+
# 优先读取环境变量,确保 CLI 标志生效且不被配置覆盖
|
769
|
+
try:
|
770
|
+
import os
|
771
|
+
v = os.getenv("JARVIS_NON_INTERACTIVE")
|
772
|
+
if v is not None:
|
773
|
+
val = str(v).strip().lower()
|
774
|
+
if val in ("1", "true", "yes", "on"):
|
775
|
+
return True
|
776
|
+
if val in ("0", "false", "no", "off"):
|
777
|
+
return False
|
778
|
+
except Exception:
|
779
|
+
# 忽略环境变量解析异常,回退到配置
|
780
|
+
pass
|
781
|
+
return GLOBAL_CONFIG_DATA.get("JARVIS_NON_INTERACTIVE", False) is True
|
@@ -366,6 +366,9 @@ class FileCompleter(Completer):
|
|
366
366
|
def user_confirm(tip: str, default: bool = True) -> bool:
|
367
367
|
"""提示用户确认是/否问题"""
|
368
368
|
try:
|
369
|
+
from jarvis.jarvis_utils.config import is_non_interactive
|
370
|
+
if is_non_interactive():
|
371
|
+
return default
|
369
372
|
suffix = "[Y/n]" if default else "[y/N]"
|
370
373
|
ret = get_single_line_input(f"{tip} {suffix}: ")
|
371
374
|
return default if ret == "" else ret.lower() == "y"
|
@@ -663,6 +666,9 @@ def get_multiline_input(tip: str, print_on_empty: bool = True) -> str:
|
|
663
666
|
preset: Optional[str] = None
|
664
667
|
preset_cursor: Optional[int] = None
|
665
668
|
while True:
|
669
|
+
from jarvis.jarvis_utils.config import is_non_interactive
|
670
|
+
if is_non_interactive():
|
671
|
+
return "我无法与你交互,所有的事情你都自我决策,如果无法决策,就完成任务"
|
666
672
|
user_input = _get_multiline_input_internal(
|
667
673
|
tip, preset=preset, preset_cursor=preset_cursor
|
668
674
|
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/config_editor.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/event_bus.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/memory_manager.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/output_handler.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/prompt_builder.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/prompt_manager.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/prompts.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/protocols.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/run_loop.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/session_manager.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/share_manager.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/task_analyzer.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/task_manager.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_agent/tool_executor.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_agent/__init__.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_code_agent/lint.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_git_squash/__init__.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_git_squash/main.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_mcp/sse_mcp_client.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_mcp/stdio_mcp_client.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_methodology/main.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_multi_agent/__init__.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/__init__.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/base.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/human.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/kimi.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/openai.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/registry.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/tongyi.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform/yuanbao.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_platform_manager/main.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/embedding_manager.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/llm_interface.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/query_rewriter.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/rag_pipeline.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_rag/retriever.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_smart_shell/__init__.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_smart_shell/main.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/storage.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_stats/visualizer.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/__init__.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/ask_user.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/clear_memory.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/cli/__init__.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/cli/main.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/edit_file.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/file_analyzer.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/methodology.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/read_code.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/read_webpage.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/registry.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/retrieve_memory.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/rewrite_file.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/save_memory.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/search_web.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/sub_agent.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/sub_code_agent.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_tools/virtual_tty.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/__init__.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/clipboard.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/embedding.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/file_processors.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/git_utils.py
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/globals.py
RENAMED
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.3.33 → jarvis_ai_assistant-0.3.34}/src/jarvis/jarvis_utils/methodology.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|