jarvis-ai-assistant 0.1.224__py3-none-any.whl → 0.2.0__py3-none-any.whl
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/__init__.py +1 -1
- jarvis/jarvis_agent/__init__.py +33 -11
- jarvis/jarvis_agent/jarvis.py +87 -32
- jarvis/jarvis_agent/main.py +13 -2
- jarvis/jarvis_code_agent/code_agent.py +17 -4
- jarvis/jarvis_code_analysis/checklists/loader.py +20 -6
- jarvis/jarvis_code_analysis/code_review.py +14 -3
- jarvis/jarvis_data/config_schema.json +41 -0
- jarvis/jarvis_git_utils/git_commiter.py +9 -2
- jarvis/jarvis_mcp/sse_mcp_client.py +9 -7
- jarvis/jarvis_mcp/stdio_mcp_client.py +2 -2
- jarvis/jarvis_platform/base.py +28 -13
- jarvis/jarvis_platform_manager/main.py +18 -6
- jarvis/jarvis_rag/llm_interface.py +1 -3
- jarvis/jarvis_smart_shell/main.py +18 -12
- jarvis/jarvis_tools/ask_user.py +1 -0
- jarvis/jarvis_tools/generate_new_tool.py +1 -0
- jarvis/jarvis_tools/registry.py +17 -9
- jarvis/jarvis_tools/search_web.py +19 -9
- jarvis/jarvis_utils/builtin_replace_map.py +0 -1
- jarvis/jarvis_utils/config.py +80 -21
- jarvis/jarvis_utils/git_utils.py +2 -2
- jarvis/jarvis_utils/globals.py +17 -11
- jarvis/jarvis_utils/methodology.py +37 -23
- jarvis/jarvis_utils/output.py +2 -2
- jarvis/jarvis_utils/utils.py +138 -3
- {jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/METADATA +49 -12
- {jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/RECORD +32 -32
- {jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/top_level.txt +0 -0
@@ -10,14 +10,15 @@
|
|
10
10
|
import json
|
11
11
|
import os
|
12
12
|
import tempfile
|
13
|
+
from pathlib import Path
|
13
14
|
from typing import Any, Dict, List, Optional
|
14
15
|
|
15
16
|
from jarvis.jarvis_platform.base import BasePlatform
|
16
17
|
from jarvis.jarvis_platform.registry import PlatformRegistry
|
17
|
-
from jarvis.jarvis_utils.config import get_data_dir
|
18
|
+
from jarvis.jarvis_utils.config import get_data_dir, get_methodology_dirs
|
19
|
+
from jarvis.jarvis_utils.globals import get_agent, current_agent_name
|
18
20
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
19
|
-
from jarvis.jarvis_utils.utils import is_context_overflow
|
20
|
-
|
21
|
+
from jarvis.jarvis_utils.utils import is_context_overflow, daily_check_git_updates
|
21
22
|
|
22
23
|
def _get_methodology_directory() -> str:
|
23
24
|
"""
|
@@ -37,32 +38,39 @@ def _get_methodology_directory() -> str:
|
|
37
38
|
|
38
39
|
def _load_all_methodologies() -> Dict[str, str]:
|
39
40
|
"""
|
40
|
-
|
41
|
+
从默认目录和配置的外部目录加载所有方法论文件。
|
41
42
|
|
42
43
|
返回:
|
43
|
-
Dict[str, str]:
|
44
|
+
Dict[str, str]: 方法论字典,键为问题类型,值为方法论内容。
|
44
45
|
"""
|
45
|
-
methodology_dir = _get_methodology_directory()
|
46
46
|
all_methodologies = {}
|
47
|
+
methodology_dirs = [_get_methodology_directory()] + get_methodology_dirs()
|
47
48
|
|
48
|
-
|
49
|
-
|
49
|
+
# --- 全局每日更新检查 ---
|
50
|
+
daily_check_git_updates(methodology_dirs, "methodologies")
|
50
51
|
|
51
52
|
import glob
|
52
53
|
|
53
|
-
for
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
54
|
+
for directory in set(methodology_dirs): # Use set to avoid duplicates
|
55
|
+
if not os.path.isdir(directory):
|
56
|
+
PrettyOutput.print(f"警告: 方法论目录不存在或不是一个目录: {directory}", OutputType.WARNING)
|
57
|
+
continue
|
58
|
+
|
59
|
+
for filepath in glob.glob(os.path.join(directory, "*.json")):
|
60
|
+
try:
|
61
|
+
with open(filepath, "r", encoding="utf-8", errors="ignore") as f:
|
62
|
+
methodology = json.load(f)
|
63
|
+
problem_type = methodology.get("problem_type", "")
|
64
|
+
content = methodology.get("content", "")
|
65
|
+
if problem_type and content:
|
66
|
+
if problem_type in all_methodologies:
|
67
|
+
PrettyOutput.print(f"警告: 方法论 '{problem_type}' 被 '{filepath}' 覆盖。", OutputType.WARNING)
|
68
|
+
all_methodologies[problem_type] = content
|
69
|
+
except Exception as e:
|
70
|
+
filename = os.path.basename(filepath)
|
71
|
+
PrettyOutput.print(
|
72
|
+
f"加载方法论文件 {filename} 失败: {str(e)}", OutputType.WARNING
|
73
|
+
)
|
66
74
|
|
67
75
|
return all_methodologies
|
68
76
|
|
@@ -163,7 +171,13 @@ def load_methodology(user_input: str, tool_registery: Optional[Any] = None) -> s
|
|
163
171
|
print(f"✅ 加载方法论文件完成 (共 {len(methodologies)} 个)")
|
164
172
|
|
165
173
|
# 获取当前平台
|
166
|
-
|
174
|
+
agent = get_agent(current_agent_name)
|
175
|
+
if agent:
|
176
|
+
platform = agent.model
|
177
|
+
model_group = agent.model.model_group
|
178
|
+
else:
|
179
|
+
platform = PlatformRegistry().get_normal_platform()
|
180
|
+
model_group = None
|
167
181
|
platform.set_suppress_output(False)
|
168
182
|
if not platform:
|
169
183
|
return ""
|
@@ -198,7 +212,7 @@ def load_methodology(user_input: str, tool_registery: Optional[Any] = None) -> s
|
|
198
212
|
"""
|
199
213
|
|
200
214
|
# 检查内容是否过大
|
201
|
-
is_large_content = is_context_overflow(full_content)
|
215
|
+
is_large_content = is_context_overflow(full_content, model_group)
|
202
216
|
temp_file_path = None
|
203
217
|
|
204
218
|
try:
|
jarvis/jarvis_utils/output.py
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"""
|
11
11
|
from datetime import datetime
|
12
12
|
from enum import Enum
|
13
|
-
from typing import Optional, Tuple
|
13
|
+
from typing import Dict, Optional, Tuple, Any
|
14
14
|
|
15
15
|
from pygments.lexers import guess_lexer
|
16
16
|
from pygments.util import ClassNotFound
|
@@ -175,7 +175,7 @@ class PrettyOutput:
|
|
175
175
|
lang: 语法高亮的语言
|
176
176
|
traceback: 是否显示错误的回溯信息
|
177
177
|
"""
|
178
|
-
styles = {
|
178
|
+
styles: Dict[OutputType, Dict[str, Any]] = {
|
179
179
|
OutputType.SYSTEM: dict(bgcolor="#1e2b3c"),
|
180
180
|
OutputType.CODE: dict(bgcolor="#1c2b1c"),
|
181
181
|
OutputType.RESULT: dict(bgcolor="#1c1c2b"),
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -7,7 +7,8 @@ import subprocess
|
|
7
7
|
import sys
|
8
8
|
import time
|
9
9
|
from pathlib import Path
|
10
|
-
from typing import Any, Callable, Dict, Optional
|
10
|
+
from typing import Any, Callable, Dict, List, Optional
|
11
|
+
from datetime import datetime
|
11
12
|
|
12
13
|
import yaml # type: ignore
|
13
14
|
|
@@ -129,6 +130,7 @@ def load_config():
|
|
129
130
|
PrettyOutput.print(
|
130
131
|
f"已生成默认配置文件: {config_file_path}", OutputType.INFO
|
131
132
|
)
|
133
|
+
sys.exit(0)
|
132
134
|
except Exception as e:
|
133
135
|
PrettyOutput.print(f"生成默认配置文件失败: {e}", OutputType.ERROR)
|
134
136
|
else:
|
@@ -415,9 +417,13 @@ def count_cmd_usage() -> None:
|
|
415
417
|
_update_cmd_stats(sys.argv[0])
|
416
418
|
|
417
419
|
|
418
|
-
def is_context_overflow(
|
420
|
+
def is_context_overflow(
|
421
|
+
content: str, model_group_override: Optional[str] = None
|
422
|
+
) -> bool:
|
419
423
|
"""判断文件内容是否超出上下文限制"""
|
420
|
-
return get_context_token_count(content) > get_max_big_content_size(
|
424
|
+
return get_context_token_count(content) > get_max_big_content_size(
|
425
|
+
model_group_override
|
426
|
+
)
|
421
427
|
|
422
428
|
|
423
429
|
def get_loc_stats() -> str:
|
@@ -474,3 +480,132 @@ def copy_to_clipboard(text: str) -> None:
|
|
474
480
|
)
|
475
481
|
except Exception as e:
|
476
482
|
PrettyOutput.print(f"使用xclip时出错: {e}", OutputType.WARNING)
|
483
|
+
|
484
|
+
|
485
|
+
def _pull_git_repo(repo_path: Path, repo_type: str):
|
486
|
+
"""对指定的git仓库执行git pull操作,并根据commit hash判断是否有更新。"""
|
487
|
+
git_dir = repo_path / ".git"
|
488
|
+
if not git_dir.is_dir():
|
489
|
+
return
|
490
|
+
|
491
|
+
PrettyOutput.print(f"正在更新{repo_type}库 '{repo_path.name}'...", OutputType.INFO)
|
492
|
+
try:
|
493
|
+
# 检查是否有远程仓库
|
494
|
+
remote_result = subprocess.run(
|
495
|
+
["git", "remote"],
|
496
|
+
cwd=repo_path,
|
497
|
+
capture_output=True,
|
498
|
+
text=True,
|
499
|
+
check=True,
|
500
|
+
timeout=10,
|
501
|
+
)
|
502
|
+
if not remote_result.stdout.strip():
|
503
|
+
PrettyOutput.print(
|
504
|
+
f"'{repo_path.name}' 未配置远程仓库,跳过更新。",
|
505
|
+
OutputType.INFO,
|
506
|
+
)
|
507
|
+
return
|
508
|
+
|
509
|
+
# 检查git仓库状态
|
510
|
+
status_result = subprocess.run(
|
511
|
+
["git", "status", "--porcelain"],
|
512
|
+
cwd=repo_path,
|
513
|
+
capture_output=True,
|
514
|
+
text=True,
|
515
|
+
check=True,
|
516
|
+
timeout=10,
|
517
|
+
)
|
518
|
+
if status_result.stdout:
|
519
|
+
PrettyOutput.print(
|
520
|
+
f"检测到 '{repo_path.name}' 存在未提交的更改,跳过自动更新。",
|
521
|
+
OutputType.WARNING,
|
522
|
+
)
|
523
|
+
return
|
524
|
+
|
525
|
+
# 获取更新前的commit hash
|
526
|
+
before_hash_result = subprocess.run(
|
527
|
+
["git", "rev-parse", "HEAD"],
|
528
|
+
cwd=repo_path,
|
529
|
+
capture_output=True,
|
530
|
+
text=True,
|
531
|
+
check=True,
|
532
|
+
timeout=10,
|
533
|
+
)
|
534
|
+
before_hash = before_hash_result.stdout.strip()
|
535
|
+
|
536
|
+
# 执行 git pull
|
537
|
+
pull_result = subprocess.run(
|
538
|
+
["git", "pull"],
|
539
|
+
cwd=repo_path,
|
540
|
+
capture_output=True,
|
541
|
+
text=True,
|
542
|
+
check=True,
|
543
|
+
timeout=60,
|
544
|
+
)
|
545
|
+
|
546
|
+
# 获取更新后的commit hash
|
547
|
+
after_hash_result = subprocess.run(
|
548
|
+
["git", "rev-parse", "HEAD"],
|
549
|
+
cwd=repo_path,
|
550
|
+
capture_output=True,
|
551
|
+
text=True,
|
552
|
+
check=True,
|
553
|
+
timeout=10,
|
554
|
+
)
|
555
|
+
after_hash = after_hash_result.stdout.strip()
|
556
|
+
|
557
|
+
if before_hash != after_hash:
|
558
|
+
PrettyOutput.print(f"{repo_type}库 '{repo_path.name}' 已更新。", OutputType.SUCCESS)
|
559
|
+
if pull_result.stdout.strip():
|
560
|
+
PrettyOutput.print(pull_result.stdout.strip(), OutputType.INFO)
|
561
|
+
else:
|
562
|
+
PrettyOutput.print(f"{repo_type}库 '{repo_path.name}' 已是最新版本。", OutputType.INFO)
|
563
|
+
|
564
|
+
except FileNotFoundError:
|
565
|
+
PrettyOutput.print(
|
566
|
+
f"git 命令未找到,跳过更新 '{repo_path.name}'。", OutputType.WARNING
|
567
|
+
)
|
568
|
+
except subprocess.TimeoutExpired:
|
569
|
+
PrettyOutput.print(f"更新 '{repo_path.name}' 超时。", OutputType.ERROR)
|
570
|
+
except subprocess.CalledProcessError as e:
|
571
|
+
error_message = e.stderr.strip() if e.stderr else str(e)
|
572
|
+
PrettyOutput.print(
|
573
|
+
f"更新 '{repo_path.name}' 失败: {error_message}", OutputType.ERROR
|
574
|
+
)
|
575
|
+
except Exception as e:
|
576
|
+
PrettyOutput.print(
|
577
|
+
f"更新 '{repo_path.name}' 时发生未知错误: {str(e)}", OutputType.ERROR
|
578
|
+
)
|
579
|
+
|
580
|
+
|
581
|
+
def daily_check_git_updates(repo_dirs: List[str], repo_type: str):
|
582
|
+
"""
|
583
|
+
对指定的目录列表执行每日一次的git更新检查。
|
584
|
+
|
585
|
+
Args:
|
586
|
+
repo_dirs (List[str]): 需要检查的git仓库目录列表。
|
587
|
+
repo_type (str): 仓库的类型名称,例如 "工具" 或 "方法论",用于日志输出。
|
588
|
+
"""
|
589
|
+
data_dir = Path(get_data_dir())
|
590
|
+
last_check_file = data_dir / f"{repo_type}_updates_last_check.txt"
|
591
|
+
should_check_for_updates = True
|
592
|
+
|
593
|
+
if last_check_file.exists():
|
594
|
+
try:
|
595
|
+
last_check_timestamp = float(last_check_file.read_text())
|
596
|
+
last_check_date = datetime.fromtimestamp(last_check_timestamp).date()
|
597
|
+
if last_check_date == datetime.now().date():
|
598
|
+
should_check_for_updates = False
|
599
|
+
except (ValueError, IOError):
|
600
|
+
pass
|
601
|
+
|
602
|
+
if should_check_for_updates:
|
603
|
+
PrettyOutput.print(f"执行每日{repo_type}库更新检查...", OutputType.INFO)
|
604
|
+
for repo_dir in repo_dirs:
|
605
|
+
p_repo_dir = Path(repo_dir)
|
606
|
+
if p_repo_dir.exists() and p_repo_dir.is_dir():
|
607
|
+
_pull_git_repo(p_repo_dir, repo_type)
|
608
|
+
try:
|
609
|
+
last_check_file.write_text(str(time.time()))
|
610
|
+
except IOError as e:
|
611
|
+
PrettyOutput.print(f"无法写入git更新检查时间戳: {e}", OutputType.WARNING)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jarvis-ai-assistant
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
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
|
@@ -57,8 +57,8 @@ Requires-Dist: pyte==0.8.2
|
|
57
57
|
Requires-Dist: httpx>=0.28.1
|
58
58
|
Requires-Dist: pyyaml>=5.3.1
|
59
59
|
Requires-Dist: ddgs==9.0.2
|
60
|
-
Requires-Dist: beautifulsoup4==4.13.4
|
61
60
|
Requires-Dist: lxml==6.0.0
|
61
|
+
Requires-Dist: markdownify>=1.1.0
|
62
62
|
Provides-Extra: dev
|
63
63
|
Requires-Dist: pytest; extra == "dev"
|
64
64
|
Requires-Dist: black; extra == "dev"
|
@@ -158,6 +158,7 @@ jarvis --llm_type thinking -t "初始任务"
|
|
158
158
|
| `-t/--task` | 直接从命令行输入任务内容 |
|
159
159
|
| `-f/--config` | 自定义配置文件的路径 |
|
160
160
|
| `--restore-session` | 从 .jarvis/saved_session.json 恢复会话 |
|
161
|
+
| `-e/--edit` | 编辑配置文件 |
|
161
162
|
|
162
163
|
#### 4. 工作流程
|
163
164
|
1. 初始化环境
|
@@ -507,9 +508,9 @@ ENV:
|
|
507
508
|
#### Kimi
|
508
509
|
```yaml
|
509
510
|
JARVIS_PLATFORM: kimi
|
510
|
-
JARVIS_MODEL:
|
511
|
+
JARVIS_MODEL: k1.5
|
511
512
|
JARVIS_THINKING_PLATFORM: kimi
|
512
|
-
JARVIS_THINKING_MODEL: k1
|
513
|
+
JARVIS_THINKING_MODEL: k1.5-thinking
|
513
514
|
ENV:
|
514
515
|
KIMI_API_KEY: <Kimi API KEY>
|
515
516
|
```
|
@@ -534,19 +535,55 @@ OPENAI_API_KEY: <OpenAI API Key>
|
|
534
535
|
OPENAI_API_BASE: https://api.openai.com/v1
|
535
536
|
```
|
536
537
|
|
537
|
-
### 2.
|
538
|
+
### 2. 模型组配置 (高级)
|
539
|
+
|
540
|
+
除了单独配置每个模型参数,您还可以定义和使用**模型组**来快速切换不同的模型组合。这对于需要在不同任务或平台间频繁切换的场景非常有用。
|
541
|
+
|
542
|
+
**配置示例** (`~/.jarvis/config.yaml`):
|
543
|
+
|
544
|
+
```yaml
|
545
|
+
# 定义模型组
|
546
|
+
JARVIS_MODEL_GROUPS:
|
547
|
+
- kimi:
|
548
|
+
JARVIS_PLATFORM: kimi
|
549
|
+
JARVIS_MODEL: k1.5
|
550
|
+
JARVIS_THINKING_PLATFORM: kimi
|
551
|
+
JARVIS_THINKING_MODEL: k1.5-thinking
|
552
|
+
JARVIS_MAX_TOKEN_COUNT: 8192
|
553
|
+
- ai8:
|
554
|
+
JARVIS_PLATFORM: ai8
|
555
|
+
JARVIS_MODEL: gemini-2.5-pro
|
556
|
+
# 如果不指定思考模型,将自动使用常规模型
|
557
|
+
# JARVIS_THINKING_PLATFORM: ai8
|
558
|
+
# JARVIS_THINKING_MODEL: gemini-2.5-pro
|
559
|
+
|
560
|
+
# 选择要使用的模型组
|
561
|
+
JARVIS_MODEL_GROUP: kimi
|
562
|
+
```
|
563
|
+
|
564
|
+
**配置优先级规则:**
|
565
|
+
|
566
|
+
Jarvis 会按照以下顺序解析模型配置,序号越小优先级越高:
|
567
|
+
|
568
|
+
1. **独立配置**: 直接设置的 `JARVIS_PLATFORM`, `JARVIS_MODEL`, `JARVIS_THINKING_PLATFORM`, `JARVIS_THINKING_MODEL` 环境变量。这些配置会**覆盖**任何模型组中的设置。
|
569
|
+
2. **模型组配置**: 通过 `JARVIS_MODEL_GROUP` 选中的模型组配置。
|
570
|
+
3. **默认值**: 如果以上均未配置,则使用代码中定义的默认模型(如 `yuanbao` 和 `deep_seek_v3`)。
|
571
|
+
|
572
|
+
### 3. 全部配置项说明
|
538
573
|
| 变量名称 | 默认值 | 说明 |
|
539
574
|
|----------|--------|------|
|
540
575
|
| `ENV` | {} | 环境变量配置 |
|
541
|
-
| `
|
542
|
-
| `
|
543
|
-
| `
|
544
|
-
| `
|
545
|
-
| `
|
546
|
-
| `
|
576
|
+
| `JARVIS_MODEL_GROUPS` | `[]` | 预定义的模型配置组列表 |
|
577
|
+
| `JARVIS_MODEL_GROUP` | `null` | 选择要激活的模型组名称 |
|
578
|
+
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 (可被模型组覆盖) |
|
579
|
+
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 (可被模型组覆盖) |
|
580
|
+
| `JARVIS_PLATFORM` | yuanbao | 默认AI平台 (可被模型组覆盖) |
|
581
|
+
| `JARVIS_MODEL` | deep_seek_v3 | 默认模型 (可被模型组覆盖) |
|
582
|
+
| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 (可被模型组覆盖) |
|
583
|
+
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 (可被模型组覆盖) |
|
547
584
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
548
585
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | 应用补丁前是否需要确认 |
|
549
|
-
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 |
|
586
|
+
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 (可被模型组覆盖) |
|
550
587
|
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
551
588
|
| `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
|
552
589
|
| `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
|
@@ -1,9 +1,9 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=EmFCOffXrFq1m3oGpL5fp5ciwQF4OV_6X1esvw2Ukdg,73
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=BmBbMUsCwe_0znrwxSipaKj-MuOgJTZvLbyKzBFfpic,22559
|
3
3
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
|
4
4
|
jarvis/jarvis_agent/edit_file_handler.py,sha256=ml1o-BE2Ca1-ybPlKuhstLQYwdJag39o0_-PXTUvFaE,11646
|
5
|
-
jarvis/jarvis_agent/jarvis.py,sha256=
|
6
|
-
jarvis/jarvis_agent/main.py,sha256=
|
5
|
+
jarvis/jarvis_agent/jarvis.py,sha256=dRJWrMbZnxo5g7_5-x9IPypPYynUhMIYBVlqtlOlOb0,7969
|
6
|
+
jarvis/jarvis_agent/main.py,sha256=ufMQsv1-9wU2E3UAyu48oITwFSIBVFsUfnlhDZ7dWbU,3293
|
7
7
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
8
8
|
jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
|
9
9
|
jarvis/jarvis_agent/prompts.py,sha256=e8i-3kaGr96mlzL3UUhQUHFDfbJSoE4xiF9TDksNDm4,7720
|
@@ -12,9 +12,9 @@ jarvis/jarvis_agent/session_manager.py,sha256=DnvI9rWkVmkyO1XfKZyo9lTn4ajg4ccwzE
|
|
12
12
|
jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
|
13
13
|
jarvis/jarvis_agent/tool_executor.py,sha256=nIq-sPNgrtimtM-IHpN09cWmId8jDzWRdCFoRzXnnoo,1721
|
14
14
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
15
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=YQYeaFx-dlf5p6_vw7T4mmtwyqQkytlxMUWDhF2V3_Y,18659
|
16
16
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
17
|
-
jarvis/jarvis_code_analysis/code_review.py,sha256=
|
17
|
+
jarvis/jarvis_code_analysis/code_review.py,sha256=eyezZ64ffiNC8vIHF-BZ1cF9cTnk1NdpuUXfoa-jWpc,30971
|
18
18
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
19
19
|
jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
|
20
20
|
jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
|
@@ -26,7 +26,7 @@ jarvis/jarvis_code_analysis/checklists/infrastructure.py,sha256=7z5MZnOUT3FpMrTQ
|
|
26
26
|
jarvis/jarvis_code_analysis/checklists/java.py,sha256=gWRVhXfsNhRFdthjIiQTkviqLwisuKCrr6gjxP0S9Z4,2085
|
27
27
|
jarvis/jarvis_code_analysis/checklists/javascript.py,sha256=SQkw2I09DaaLxD_WTZjuHn4leUKil68IEPB03BoSYuo,2340
|
28
28
|
jarvis/jarvis_code_analysis/checklists/kotlin.py,sha256=dNSHM1u3R7lxe8BU8ADtDyKJxmj3NUh9ZQuC7HHWHGY,4436
|
29
|
-
jarvis/jarvis_code_analysis/checklists/loader.py,sha256=
|
29
|
+
jarvis/jarvis_code_analysis/checklists/loader.py,sha256=bjE4On6WMLt41bfkCZsHnBpfXF61VPthFPsgNcbH90c,1903
|
30
30
|
jarvis/jarvis_code_analysis/checklists/php.py,sha256=qW34sF9AqLuSVuOVP5yJUHnB9V3-YRQjNPuB3lFI5UY,2481
|
31
31
|
jarvis/jarvis_code_analysis/checklists/python.py,sha256=gjyJ0QPY1CAwqhbDnIyLYruvFduZU5hiKyehAXMHu-I,1452
|
32
32
|
jarvis/jarvis_code_analysis/checklists/ruby.py,sha256=kzwd7Wl6gKrkAANq7_MvA5X5du5r1MeE-EY2Xb43n7U,4274
|
@@ -35,23 +35,23 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
|
|
35
35
|
jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
|
36
36
|
jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
|
37
37
|
jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
|
38
|
-
jarvis/jarvis_data/config_schema.json,sha256=
|
38
|
+
jarvis/jarvis_data/config_schema.json,sha256=XpQ7aaHMW-YCuFrnaAEjMWrnv6a8B7MqGjm2XgrvtgQ,8573
|
39
39
|
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
40
40
|
jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
41
|
jarvis/jarvis_git_details/main.py,sha256=DE1DcX-1lvUsb_K-FExpHs3NBRmo5KZb53PGa8QFBOc,8875
|
42
42
|
jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
43
43
|
jarvis/jarvis_git_squash/main.py,sha256=2nwX-Ghphn97Ua0SXPJIxix-rgm_Z9KRkrovjpSklUk,2311
|
44
|
-
jarvis/jarvis_git_utils/git_commiter.py,sha256=
|
44
|
+
jarvis/jarvis_git_utils/git_commiter.py,sha256=Yir26RyvoToTmkeh1-cFnG3LE3fH7z2njPOK3FIpQDc,12801
|
45
45
|
jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
|
46
|
-
jarvis/jarvis_mcp/sse_mcp_client.py,sha256
|
47
|
-
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=
|
46
|
+
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=AhYLPQb0mE9-6ZQw1JesRNyEy0esJumNEFb5LyzyIn0,22612
|
47
|
+
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
|
48
48
|
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=1OZpsG82U2MLbGuojllJAblFUAMmp1N0i5fsKM4n5Ts,14453
|
49
49
|
jarvis/jarvis_methodology/main.py,sha256=-PqsWvtpUJkkhiGgV-1JegEnEZBmv8SHnNMNNm_-QQc,11720
|
50
50
|
jarvis/jarvis_multi_agent/__init__.py,sha256=efB04nWPRl4EOD64RThqQ6w78GZc2t0GGisX2wwTP8I,5949
|
51
51
|
jarvis/jarvis_multi_agent/main.py,sha256=h7VUSwoPrES0XTK8z5kt3XLX1mmcm8UEuFEHQOUWPH4,1696
|
52
52
|
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
53
53
|
jarvis/jarvis_platform/ai8.py,sha256=yi7xG8ld4Yrf7drz-uu_JT_XCGYRB0obhygt-jKik8o,10871
|
54
|
-
jarvis/jarvis_platform/base.py,sha256
|
54
|
+
jarvis/jarvis_platform/base.py,sha256=cfeYB6ldfQH1tz1rroQpmJTLAw8KByKS74qun0pqE1c,9498
|
55
55
|
jarvis/jarvis_platform/human.py,sha256=cSN8Lqf0ts2_pPfS2_v7PaWxQKqcW_3bSmhRTHey7Qo,4674
|
56
56
|
jarvis/jarvis_platform/kimi.py,sha256=dn_P4EEZvWWCPS67MDbWStsP7n3MN4-Rrc6R7GhJyEg,15436
|
57
57
|
jarvis/jarvis_platform/openai.py,sha256=ccGqsU2cFfd5324P7SH1tSmFABpvto8fytmxQGkr3BA,6412
|
@@ -60,51 +60,51 @@ jarvis/jarvis_platform/registry.py,sha256=1bMy0YZUa8NLzuZlKfC4CBtpa0iniypTxUZk0H
|
|
60
60
|
jarvis/jarvis_platform/tongyi.py,sha256=vSK1b4NhTeHbNhTgGRj4PANXptwCAwitczwK8VXwWwU,22921
|
61
61
|
jarvis/jarvis_platform/yuanbao.py,sha256=AIGQ0VOD_IAwWLnU9G19OG0XAbHpcJDzVWX2VazsyAI,23092
|
62
62
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
|
-
jarvis/jarvis_platform_manager/main.py,sha256=
|
63
|
+
jarvis/jarvis_platform_manager/main.py,sha256=ysdM-_2vdOorqQiXiJOpZ50ukD5yPmakRHthK-JIl30,18558
|
64
64
|
jarvis/jarvis_platform_manager/service.py,sha256=hQGWQ2qAlzm_C_lNQDuLORQ4rmjR1P1-V3ou7l2Bv0s,13622
|
65
65
|
jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
|
66
66
|
jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
|
67
67
|
jarvis/jarvis_rag/cli.py,sha256=q1W7XWZ7u7oMckqeNUX7YQoiQ3PzT3Rh-FZvTeG_U3I,13159
|
68
68
|
jarvis/jarvis_rag/embedding_manager.py,sha256=BoV6Vr_3F4zbjBAOQ1FdEBnJXGPwBkv1IEkdRP9CgFw,3338
|
69
|
-
jarvis/jarvis_rag/llm_interface.py,sha256=
|
69
|
+
jarvis/jarvis_rag/llm_interface.py,sha256=eZHibNHD5dFK9yolr3hYNNhAEZUsPA-cIf1uHapI2h8,4338
|
70
70
|
jarvis/jarvis_rag/query_rewriter.py,sha256=JM1Q23zZISze77BleRgTPgNAtLUtLAXkEo3G70kaTK8,2190
|
71
71
|
jarvis/jarvis_rag/rag_pipeline.py,sha256=9yeNRv6qOS2zo7o0b0u3gFmiW_XSivesvPKVJ8e5DlE,6209
|
72
72
|
jarvis/jarvis_rag/reranker.py,sha256=wYUDIMHQL8_tFcQ7GFn_zYHTE1AbKk4a9TRoN2lKtA8,1767
|
73
73
|
jarvis/jarvis_rag/retriever.py,sha256=B6oq1SAh7QAE9G5o0sXyNtLjFodukd8p-Was2QJZXg0,7637
|
74
74
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
-
jarvis/jarvis_smart_shell/main.py,sha256=
|
75
|
+
jarvis/jarvis_smart_shell/main.py,sha256=3oAl4LbpkiJWCpxqwXF6-vmydZr5HMFKCvkQR94dzLc,6946
|
76
76
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
|
-
jarvis/jarvis_tools/ask_user.py,sha256=
|
77
|
+
jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
|
78
78
|
jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
|
79
79
|
jarvis/jarvis_tools/edit_file.py,sha256=hM345E9rxS-EkqCZpwwizL6fmPdTadtB798tEO5Ce3g,10417
|
80
80
|
jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
|
81
81
|
jarvis/jarvis_tools/file_analyzer.py,sha256=aVe1jBSp0YmlypihxrGADJpYrU_7CxDETxGUNySuSlI,4044
|
82
|
-
jarvis/jarvis_tools/generate_new_tool.py,sha256=
|
82
|
+
jarvis/jarvis_tools/generate_new_tool.py,sha256=ppMRuTYUZ0c02rHo7xi8DCGiDVPZTANVp9nS7bvkqqo,7819
|
83
83
|
jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
|
84
84
|
jarvis/jarvis_tools/read_code.py,sha256=EnI-R-5HyIQYhMD391nZWXHIuHHBF-OJIRE0QpLcPX4,6417
|
85
85
|
jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
|
86
|
-
jarvis/jarvis_tools/registry.py,sha256=
|
86
|
+
jarvis/jarvis_tools/registry.py,sha256=3SMzVM9rhI9Gl8EdI13_NOHBxwygueqw-nUcCi6AgRM,26754
|
87
87
|
jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
|
88
|
-
jarvis/jarvis_tools/search_web.py,sha256=
|
88
|
+
jarvis/jarvis_tools/search_web.py,sha256=DDAPjYWTFaF85zsnhJ6VNDSc1BcY8EHus5ymKP9nnPs,5703
|
89
89
|
jarvis/jarvis_tools/virtual_tty.py,sha256=KKr3jpvQWWMPr2o40hlmN6fuXJCN8H4_ma5QU40Citc,16089
|
90
90
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
91
|
jarvis/jarvis_tools/cli/main.py,sha256=Mg6TQDxMdzB1Ua1UrZ2EE-uQWsbaeojWaEGHJp2HimA,6375
|
92
92
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
93
|
-
jarvis/jarvis_utils/builtin_replace_map.py,sha256=
|
94
|
-
jarvis/jarvis_utils/config.py,sha256=
|
93
|
+
jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
|
94
|
+
jarvis/jarvis_utils/config.py,sha256=YcPGjCSJ2_2CKtlY8ecyqaovKVb65XcQ5WNizjwmdVs,10689
|
95
95
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
96
96
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
97
|
-
jarvis/jarvis_utils/git_utils.py,sha256=
|
98
|
-
jarvis/jarvis_utils/globals.py,sha256=
|
97
|
+
jarvis/jarvis_utils/git_utils.py,sha256=_b4-5uWOTVFjAB48QbRJNBR7PTD_jzi7-5V5M_wjXFo,21740
|
98
|
+
jarvis/jarvis_utils/globals.py,sha256=QKeiiWhUlu9HE7SzAn0lKaeaXQF1uhmLXPZTeLKyGPQ,4048
|
99
99
|
jarvis/jarvis_utils/http.py,sha256=Uqt1kcz0HWnAfXHHi1fNGwLb2lcVUqpbrG2Uk_-kcIU,4882
|
100
100
|
jarvis/jarvis_utils/input.py,sha256=V2w3xV0MO73c4Y4XY_yy9jVNg7MmN76FmAnpKRiJUog,9160
|
101
|
-
jarvis/jarvis_utils/methodology.py,sha256
|
102
|
-
jarvis/jarvis_utils/output.py,sha256=
|
101
|
+
jarvis/jarvis_utils/methodology.py,sha256=V2Y0mbamrWBhhCK-3foAM1hKewOEcIDcXO-Sv_AU-kQ,9106
|
102
|
+
jarvis/jarvis_utils/output.py,sha256=2QMpzb8ZOysQ6HHsRjRzjgUnNXaFGkIiZ_qElPKLbsA,10858
|
103
103
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
104
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
105
|
-
jarvis_ai_assistant-0.
|
106
|
-
jarvis_ai_assistant-0.
|
107
|
-
jarvis_ai_assistant-0.
|
108
|
-
jarvis_ai_assistant-0.
|
109
|
-
jarvis_ai_assistant-0.
|
110
|
-
jarvis_ai_assistant-0.
|
104
|
+
jarvis/jarvis_utils/utils.py,sha256=G6UuiBrPlWLpau1LbSGStrlAHCHG8JufINLD_bwtjTE,20006
|
105
|
+
jarvis_ai_assistant-0.2.0.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
106
|
+
jarvis_ai_assistant-0.2.0.dist-info/METADATA,sha256=ddh41XdsU955MHnmlVF1YhXW5D2oYZK-M7ZsTUqVMAs,25713
|
107
|
+
jarvis_ai_assistant-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
108
|
+
jarvis_ai_assistant-0.2.0.dist-info/entry_points.txt,sha256=JXK_n-d9HZ_RLz959CvpK5-UPOCwssn5oAH8dAHuebA,1277
|
109
|
+
jarvis_ai_assistant-0.2.0.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
110
|
+
jarvis_ai_assistant-0.2.0.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.224.dist-info → jarvis_ai_assistant-0.2.0.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|