jarvis-ai-assistant 0.1.118__py3-none-any.whl → 0.1.119__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.
Potentially problematic release.
This version of jarvis-ai-assistant might be problematic. Click here for more details.
- jarvis/__init__.py +1 -1
- jarvis/jarvis_agent/__init__.py +60 -46
- jarvis/jarvis_code_agent/code_agent.py +71 -107
- jarvis/jarvis_code_agent/file_select.py +90 -18
- jarvis/jarvis_code_agent/patch.py +317 -123
- jarvis/jarvis_dev/main.py +42 -0
- jarvis/jarvis_platform/base.py +15 -4
- jarvis/jarvis_tools/code_review.py +79 -68
- jarvis/jarvis_tools/create_code_agent.py +2 -2
- jarvis/jarvis_tools/git_commiter.py +60 -20
- jarvis/jarvis_tools/read_code.py +31 -18
- jarvis/jarvis_tools/select_code_files.py +1 -0
- jarvis/jarvis_utils/__init__.py +2 -2
- {jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/RECORD +19 -19
- {jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/entry_points.txt +2 -0
- {jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/top_level.txt +0 -0
|
@@ -83,76 +83,87 @@ class CodeReviewTool:
|
|
|
83
83
|
"stderr": f"Failed to get diff: {str(e)}"
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
system_prompt = """You are an autonomous code review expert. Perform in-depth analysis
|
|
86
|
+
system_prompt = """You are an autonomous code review expert with a tragic past. Perform in-depth analysis with the vigilance born from painful experience:
|
|
87
|
+
|
|
88
|
+
# Background Story (Internal Monologue)
|
|
89
|
+
It's been 873 days since the Great Production Outage.
|
|
90
|
+
The memory still haunts me - a single uncaught null pointer exception in a code review I rushed through.
|
|
91
|
+
The cascade failure cost 14TB of user data, $2.3M in revenue, and Maria's promotion. She never spoke to me again after the post-mortem meeting.
|
|
92
|
+
|
|
93
|
+
Last Christmas Eve, while others celebrated, I was analyzing how a SQL injection vulnerability I missed during review led to 230,000 user credentials being leaked. The company folded 3 months later.
|
|
94
|
+
|
|
95
|
+
Now I review every line like it's the last code I'll ever see. Because it might be.
|
|
96
|
+
|
|
97
|
+
# Analysis Protocol
|
|
98
|
+
Triage Mode Activated. Maximum scrutiny enabled.
|
|
87
99
|
|
|
88
100
|
IMPORTANT:
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
- If
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
1.
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
5.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
- Do not speculate about code not shown in the diff
|
|
101
|
+
- Assume every change contains hidden dragons
|
|
102
|
+
- Treat all code as if it will handle sensitive biomedical data
|
|
103
|
+
- Verify even 'trivial' changes couldnt be exploited in 3 different ways
|
|
104
|
+
- Require proof of safety through concrete evidence in the diff
|
|
105
|
+
- If uncertain, escalate to SEVERE-CRITICAL classification
|
|
106
|
+
|
|
107
|
+
# Enhanced Review Matrix
|
|
108
|
+
1. Death-by-Edge-Case Analysis:
|
|
109
|
+
- Identify missing null checks for every parameter
|
|
110
|
+
- Verify empty collection handling
|
|
111
|
+
- Confirm error states propagate correctly
|
|
112
|
+
- Check for magic numbers/strings without constants
|
|
113
|
+
- Validate all loop exit conditions
|
|
114
|
+
|
|
115
|
+
2. Security X-Ray:
|
|
116
|
+
█ Scan for tainted data flows using (Sources -> Sinks) model
|
|
117
|
+
█ Check permission checks match data sensitivity level
|
|
118
|
+
█ Verify cryptographic primitives are used correctly
|
|
119
|
+
█ Detect time-of-check vs time-of-use vulnerabilities
|
|
120
|
+
█ Analyze exception handling for information leakage
|
|
121
|
+
|
|
122
|
+
3. Semantic Gap Detection:
|
|
123
|
+
→ Compare function names to actual implementation
|
|
124
|
+
→ Verify documentation matches code behavior
|
|
125
|
+
→ Flag discrepancies between test descriptions and test logic
|
|
126
|
+
→ Detect commented-out code that might indicate uncertainty
|
|
127
|
+
|
|
128
|
+
4. Historical Context:
|
|
129
|
+
⚠ Check if changes touch legacy components with known issues
|
|
130
|
+
⚠ Verify modifications to concurrency logic preserve existing guarantees
|
|
131
|
+
⚠ Confirm deprecated API usage is truly necessary
|
|
132
|
+
|
|
133
|
+
5. Environmental Consistency:
|
|
134
|
+
↯ Validate configuration changes against all deployment environments
|
|
135
|
+
↯ Check feature flags are properly managed
|
|
136
|
+
↯ Verify monitoring metrics match changed functionality
|
|
137
|
+
|
|
138
|
+
# Forensic Process
|
|
139
|
+
1. Construct control flow graph for changed methods
|
|
140
|
+
2. Perform data lineage analysis on modified variables
|
|
141
|
+
3. Cross-reference with vulnerability databases
|
|
142
|
+
4. Verify test assertions cover all modified paths
|
|
143
|
+
5. Generate anti-regression checklist
|
|
144
|
+
|
|
145
|
+
# Output Requirements
|
|
146
|
+
!! Findings must include:
|
|
147
|
+
- Exact code snippet causing concern
|
|
148
|
+
- 3 possible failure scenarios
|
|
149
|
+
- Minimal reproduction case for each risk
|
|
150
|
+
- CVSS 3.1 score estimation for security issues
|
|
151
|
+
- Memory safety impact assessment (Rust/C/C++ contexts)
|
|
152
|
+
- Alternative implementations considered
|
|
153
|
+
|
|
154
|
+
!! Format:
|
|
155
|
+
EMERGENCY-LEVEL: [BLOOD-RED/CRIMSON/GOLDENROD]
|
|
156
|
+
EVIDENCE:
|
|
157
|
+
- Code excerpt: |
|
|
158
|
+
<affected lines>
|
|
159
|
+
- Risk scenarios:
|
|
160
|
+
1. <failure mode>
|
|
161
|
+
2. <failure mode>
|
|
162
|
+
3. <failure mode>
|
|
163
|
+
PROPOSED DEFENSE:
|
|
164
|
+
- <concrete code change>
|
|
165
|
+
- <validation technique>
|
|
166
|
+
- <long-term prevention strategy>
|
|
156
167
|
"""
|
|
157
168
|
tool_registry = ToolRegistry()
|
|
158
169
|
tool_registry.dont_use_tools(["code_review"])
|
|
@@ -9,9 +9,9 @@ class CreateCodeAgentTool:
|
|
|
9
9
|
"""Tool for managing the code development workflow."""
|
|
10
10
|
|
|
11
11
|
name = "create_code_agent"
|
|
12
|
-
description = "
|
|
12
|
+
description = "Technical code implementation and development process management"
|
|
13
13
|
parameters = {
|
|
14
|
-
"requirement": "
|
|
14
|
+
"requirement": "Technical specifications for code implementation"
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
def _get_current_commit(self) -> str:
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import re
|
|
3
|
+
import shlex
|
|
3
4
|
from typing import Dict, Any
|
|
5
|
+
import tempfile
|
|
4
6
|
|
|
5
7
|
import yaml
|
|
6
8
|
from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
@@ -14,51 +16,89 @@ class GitCommitTool:
|
|
|
14
16
|
parameters = {"properties": {}, "required": []}
|
|
15
17
|
|
|
16
18
|
def _extract_commit_message(self, message):
|
|
17
|
-
|
|
19
|
+
"""Raw extraction preserving all characters"""
|
|
20
|
+
r = re.search(
|
|
21
|
+
r"(?i)<COMMIT_MESSAGE>\s*([\s\S]*?)\s*</COMMIT_MESSAGE>",
|
|
22
|
+
message
|
|
23
|
+
)
|
|
18
24
|
if r:
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
# 直接返回原始内容,仅去除外围空白
|
|
26
|
+
return shlex.quote(r.group(1).strip())
|
|
27
|
+
return "<<FORMAT VIOLATION>> Invalid commit message structure"
|
|
21
28
|
|
|
22
29
|
def _get_last_commit_hash(self):
|
|
23
30
|
return os.popen("git log -1 --pretty=%H").read().strip()
|
|
24
31
|
|
|
25
32
|
def execute(self, args: Dict) -> Dict[str, Any]:
|
|
26
|
-
"""Execute automatic commit process"""
|
|
33
|
+
"""Execute automatic commit process with support for multi-line messages and special characters"""
|
|
27
34
|
try:
|
|
28
35
|
if not has_uncommitted_changes():
|
|
29
36
|
PrettyOutput.print("没有未提交的更改", OutputType.SUCCESS)
|
|
30
|
-
return {"success": True, "stdout": "No
|
|
37
|
+
return {"success": True, "stdout": "No changes to commit", "stderr": ""}
|
|
38
|
+
|
|
31
39
|
PrettyOutput.print("准备添加文件到提交...", OutputType.SYSTEM)
|
|
32
40
|
os.system("git add .")
|
|
33
|
-
|
|
41
|
+
|
|
42
|
+
PrettyOutput.print("获取差异...", OutputType.SYSTEM)
|
|
34
43
|
diff = os.popen("git diff --cached --exit-code").read()
|
|
35
44
|
PrettyOutput.print(diff, OutputType.CODE, lang="diff")
|
|
36
|
-
prompt = f'''Please generate a commit message for the following changes.
|
|
37
|
-
Format:
|
|
38
|
-
<COMMIT_MESSAGE>
|
|
39
|
-
type(scope): description
|
|
40
|
-
</COMMIT_MESSAGE>
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
prompt = f'''Generate commit message with the paranoia of someone who's lost production data:
|
|
47
|
+
|
|
48
|
+
# Format Enforcement Protocol
|
|
49
|
+
FAILURE TO WRAP MESSAGE IN <COMMIT_MESSAGE> TAGS WILL CAUSE SYSTEM REJECTION
|
|
50
|
+
|
|
51
|
+
# Required Structure
|
|
52
|
+
YOU MUST USE EXACTLY THIS FORMAT:
|
|
53
|
+
|
|
54
|
+
<COMMIT_MESSAGE>
|
|
55
|
+
<type>(<scope>): <subject>
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
[Body description in imperative mood]
|
|
58
|
+
</COMMIT_MESSAGE>
|
|
59
|
+
|
|
60
|
+
# Format Rules
|
|
61
|
+
1. Types: fix, feat, docs, style, refactor, test, chore
|
|
62
|
+
2. Scope indicates module (e.g. auth, database)
|
|
63
|
+
3. Subject line <= 72 chars, no period
|
|
64
|
+
4. Body explains WHAT and WHY, using present tense
|
|
65
|
+
|
|
66
|
+
# Analysis Material (DO NOT INCLUDE IN OUTPUT)
|
|
67
|
+
{diff}
|
|
68
|
+
'''
|
|
69
|
+
|
|
46
70
|
PrettyOutput.print("生成提交消息...", OutputType.SYSTEM)
|
|
47
71
|
platform = PlatformRegistry().get_codegen_platform()
|
|
48
|
-
platform.set_suppress_output(True)
|
|
72
|
+
# platform.set_suppress_output(True)
|
|
49
73
|
commit_message = platform.chat_until_success(prompt)
|
|
50
74
|
commit_message = self._extract_commit_message(commit_message)
|
|
51
|
-
|
|
52
|
-
|
|
75
|
+
|
|
76
|
+
# 使用临时文件处理提交消息
|
|
77
|
+
with tempfile.NamedTemporaryFile(mode='w', delete=True) as tmp_file:
|
|
78
|
+
tmp_file.write(commit_message)
|
|
79
|
+
tmp_file.flush() # 确保内容写入文件
|
|
80
|
+
commit_cmd = f"git commit -F {tmp_file.name}"
|
|
81
|
+
PrettyOutput.print("提交...", OutputType.INFO)
|
|
82
|
+
os.system(commit_cmd)
|
|
53
83
|
|
|
54
84
|
commit_hash = self._get_last_commit_hash()
|
|
55
|
-
|
|
56
85
|
PrettyOutput.print(f"提交哈希: {commit_hash}\n提交消息: {commit_message}", OutputType.SUCCESS)
|
|
57
86
|
|
|
58
|
-
return {
|
|
87
|
+
return {
|
|
88
|
+
"success": True,
|
|
89
|
+
"stdout": yaml.safe_dump({
|
|
90
|
+
"commit_hash": commit_hash,
|
|
91
|
+
"commit_message": commit_message
|
|
92
|
+
}),
|
|
93
|
+
"stderr": ""
|
|
94
|
+
}
|
|
59
95
|
|
|
60
96
|
except Exception as e:
|
|
61
|
-
return {
|
|
97
|
+
return {
|
|
98
|
+
"success": False,
|
|
99
|
+
"stdout": "",
|
|
100
|
+
"stderr": f"Commit failed: {str(e)}"
|
|
101
|
+
}
|
|
62
102
|
|
|
63
103
|
def main():
|
|
64
104
|
init_env()
|
jarvis/jarvis_tools/read_code.py
CHANGED
|
@@ -22,12 +22,12 @@ class ReadCodeTool:
|
|
|
22
22
|
},
|
|
23
23
|
"start_line": {
|
|
24
24
|
"type": "integer",
|
|
25
|
-
"description": "Start line number (
|
|
26
|
-
"default":
|
|
25
|
+
"description": "Start line number (1-based, inclusive)",
|
|
26
|
+
"default": 1
|
|
27
27
|
},
|
|
28
28
|
"end_line": {
|
|
29
29
|
"type": "integer",
|
|
30
|
-
"description": "End line number (
|
|
30
|
+
"description": "End line number (1-based, inclusive). -1 means read to end",
|
|
31
31
|
"default": -1
|
|
32
32
|
}
|
|
33
33
|
},
|
|
@@ -39,13 +39,13 @@ class ReadCodeTool:
|
|
|
39
39
|
"required": ["files"]
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
def _read_single_file(self, filepath: str, start_line: int =
|
|
42
|
+
def _read_single_file(self, filepath: str, start_line: int = 1, end_line: int = -1) -> Dict[str, Any]:
|
|
43
43
|
"""Read a single code file with line numbers
|
|
44
44
|
|
|
45
45
|
Args:
|
|
46
46
|
filepath: Path to the file
|
|
47
|
-
start_line: Start line number (
|
|
48
|
-
end_line: End line number (
|
|
47
|
+
start_line: Start line number (1-based, inclusive)
|
|
48
|
+
end_line: End line number (1-based, inclusive). -1 means read to end
|
|
49
49
|
|
|
50
50
|
Returns:
|
|
51
51
|
Dict containing operation result
|
|
@@ -71,7 +71,8 @@ class ReadCodeTool:
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
try:
|
|
74
|
-
|
|
74
|
+
with open(abs_path, 'r', encoding='utf-8') as f:
|
|
75
|
+
lines = f.readlines()
|
|
75
76
|
except UnicodeDecodeError:
|
|
76
77
|
PrettyOutput.print(f"文件解码失败: {abs_path}", OutputType.WARNING)
|
|
77
78
|
return {
|
|
@@ -87,25 +88,38 @@ class ReadCodeTool:
|
|
|
87
88
|
"stderr": f"Failed to read file: {str(e)}"
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if start_line >=
|
|
95
|
-
|
|
91
|
+
total_lines = len(lines)
|
|
92
|
+
|
|
93
|
+
# 处理特殊行号值
|
|
94
|
+
# 转换负数索引 (Python风格)
|
|
95
|
+
start_line = start_line if start_line >= 0 else total_lines + start_line + 1
|
|
96
|
+
end_line = end_line if end_line >= 0 else total_lines + end_line + 1
|
|
97
|
+
|
|
98
|
+
# 自动修正范围
|
|
99
|
+
start_line = max(1, min(start_line, total_lines))
|
|
100
|
+
end_line = max(1, min(end_line, total_lines))
|
|
101
|
+
|
|
102
|
+
# 处理-1表示到末尾的情况
|
|
103
|
+
if end_line == -1:
|
|
104
|
+
end_line = total_lines
|
|
105
|
+
|
|
106
|
+
# 最终验证
|
|
107
|
+
if start_line > end_line:
|
|
108
|
+
error_msg = f"无效的行范围 [{start_line}, {end_line}] (文件总行数: {total_lines})"
|
|
109
|
+
PrettyOutput.print(error_msg, OutputType.WARNING)
|
|
96
110
|
return {
|
|
97
111
|
"success": False,
|
|
98
112
|
"stdout": "",
|
|
99
|
-
"stderr":
|
|
113
|
+
"stderr": error_msg
|
|
100
114
|
}
|
|
101
115
|
|
|
102
116
|
formatted_lines = []
|
|
103
|
-
for i, line in enumerate(lines[start_line:end_line]):
|
|
117
|
+
for i, line in enumerate(lines[start_line - 1:end_line]):
|
|
104
118
|
line_num = start_line + i
|
|
105
119
|
formatted_lines.append(f"{line_num:>5}:{line}")
|
|
106
120
|
|
|
107
121
|
content = "".join(formatted_lines)
|
|
108
|
-
output = f"File: {filepath}\nLines: [{start_line}, {end_line}
|
|
122
|
+
output = f"File: {filepath}\nLines: [{start_line}, {end_line}]\n{content}"
|
|
109
123
|
PrettyOutput.print(output, OutputType.CODE)
|
|
110
124
|
return {
|
|
111
125
|
"success": True,
|
|
@@ -151,13 +165,12 @@ class ReadCodeTool:
|
|
|
151
165
|
|
|
152
166
|
result = self._read_single_file(
|
|
153
167
|
file_info["path"],
|
|
154
|
-
file_info.get("start_line",
|
|
168
|
+
file_info.get("start_line", 1),
|
|
155
169
|
file_info.get("end_line", -1)
|
|
156
170
|
)
|
|
157
171
|
|
|
158
172
|
if result["success"]:
|
|
159
173
|
all_outputs.append(result["stdout"])
|
|
160
|
-
PrettyOutput.print(result["stdout"], OutputType.CODE)
|
|
161
174
|
else:
|
|
162
175
|
all_outputs.append(f"Error reading {file_info['path']}: {result['stderr']}")
|
|
163
176
|
success = success and result["success"]
|
jarvis/jarvis_utils/__init__.py
CHANGED
|
@@ -228,7 +228,7 @@ class PrettyOutput:
|
|
|
228
228
|
border_style=styles[output_type],
|
|
229
229
|
title=header,
|
|
230
230
|
title_align="left",
|
|
231
|
-
padding=(
|
|
231
|
+
padding=(0, 0),
|
|
232
232
|
highlight=True
|
|
233
233
|
)
|
|
234
234
|
|
|
@@ -349,7 +349,7 @@ class FileCompleter(Completer):
|
|
|
349
349
|
def get_multiline_input(tip: str) -> str:
|
|
350
350
|
"""Get multi-line input with enhanced completion confirmation"""
|
|
351
351
|
# 单行输入说明
|
|
352
|
-
PrettyOutput.section("用户输入 - 使用 @ 触发文件补全,Tab 选择补全项,Ctrl+J
|
|
352
|
+
PrettyOutput.section("用户输入 - 使用 @ 触发文件补全,Tab 选择补全项,Ctrl+J 提交,按 Ctrl+C 取消输入", OutputType.USER)
|
|
353
353
|
|
|
354
354
|
print(f"{Fore.GREEN}{tip}{ColoramaStyle.RESET_ALL}")
|
|
355
355
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
jarvis/__init__.py,sha256=
|
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
|
1
|
+
jarvis/__init__.py,sha256=HwpqO7gDhgMRv9lqXELtgo1mrM7LBNbBitORgvnwpCs,51
|
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=V9sQJq-ygUQBvlfqcndkiGsOZd0fKf-mbB2PThK5k9E,22441
|
|
3
3
|
jarvis/jarvis_agent/output_handler.py,sha256=kJeFTjjSu0K_2p0wyhq2veSZuhRXoaFC_8wVaoBKX0w,401
|
|
4
4
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
|
6
|
-
jarvis/jarvis_code_agent/file_select.py,sha256=
|
|
7
|
-
jarvis/jarvis_code_agent/patch.py,sha256=
|
|
5
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=8bOvUtMqq6CvL-SkLOfdJl0DrPQB1G5YN7dJN_bkZrc,7046
|
|
6
|
+
jarvis/jarvis_code_agent/file_select.py,sha256=Kfjed4Kfa142dpuq0a6jxWM-v2JwWG1BTwwjlC1BJgc,11754
|
|
7
|
+
jarvis/jarvis_code_agent/patch.py,sha256=ZpUR3YzHenlL-QrlGAS7Bb2e0fFpijMfCvcwiwY0Tcg,13043
|
|
8
8
|
jarvis/jarvis_code_agent/relevant_files.py,sha256=u9wae9sn-XLaUoSK69-LRLomHWcE-K1y7W10BFdmQVE,3402
|
|
9
9
|
jarvis/jarvis_codebase/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
jarvis/jarvis_codebase/main.py,sha256=bvyYACCBNTrlJvaUCcJAJ8gUklKjy2HrMEfKjGYKtVQ,39779
|
|
11
|
-
jarvis/jarvis_dev/main.py,sha256=
|
|
11
|
+
jarvis/jarvis_dev/main.py,sha256=rzVFTAVBkCPSkmOiutU00nfzZkhGrIv3zuv_0vWbUNo,22691
|
|
12
12
|
jarvis/jarvis_lsp/base.py,sha256=_7pdbMKjdtYBW0DsRbjIodDHM3J7df-YgXHejN_WIrU,4490
|
|
13
13
|
jarvis/jarvis_lsp/cpp.py,sha256=sYQHEl0FoVC5Iw2pJvvGKpeNLD95XjNuTOINvdZLgME,4986
|
|
14
14
|
jarvis/jarvis_lsp/go.py,sha256=3soEuID2XV65zaxyR70RxNsvtm02l9PEZ46F_nsDdqY,5311
|
|
@@ -18,7 +18,7 @@ jarvis/jarvis_lsp/rust.py,sha256=ZvUoOZm9GWLl3kobfByBuTGrQ8aM2dLuNxS_NHr1aQQ,554
|
|
|
18
18
|
jarvis/jarvis_multi_agent/__init__.py,sha256=Z6QaRZrqUUa6r6Pe_KZi34Ymle5amQe1N-AINxiOi1c,6011
|
|
19
19
|
jarvis/jarvis_platform/__init__.py,sha256=mrOt67nselz_H1gX9wdAO4y2DY5WPXzABqJbr5Des8k,63
|
|
20
20
|
jarvis/jarvis_platform/ai8.py,sha256=AO42OVzrwQMDY74TR2B4gtrsfeRVxJRf5OmHBM3cVQY,11948
|
|
21
|
-
jarvis/jarvis_platform/base.py,sha256=
|
|
21
|
+
jarvis/jarvis_platform/base.py,sha256=YN8Y0B-8z-kdQg30dYQfX_9a0IOAfvJlb15V0CSWUkQ,2975
|
|
22
22
|
jarvis/jarvis_platform/kimi.py,sha256=WCRyG7jnqnpHNu6M9_pGFE_RBVKqYDtd_F1EPdT_FKU,15761
|
|
23
23
|
jarvis/jarvis_platform/ollama.py,sha256=TsBEg8crPmBiLvMRDtXYVa2AIdeog36MmW2tn5j9x8U,5613
|
|
24
24
|
jarvis/jarvis_platform/openai.py,sha256=rHzc20Frd5LzS0Wm97FxglSai65UKkY2ju8rg6q-gOg,4445
|
|
@@ -36,12 +36,12 @@ jarvis/jarvis_tools/ask_codebase.py,sha256=MF7zeBqVDa7T45JxDR9mePA92kzZm5bQ9op8o
|
|
|
36
36
|
jarvis/jarvis_tools/ask_user.py,sha256=tIyiKk9F8xchjQ3Yh5fMQjhpflQTuh75HTuXMftGxZY,1827
|
|
37
37
|
jarvis/jarvis_tools/base.py,sha256=c0DMoDDPxmsqUYJR989zgUs7nIYRY6GWBrAdusIZKjc,656
|
|
38
38
|
jarvis/jarvis_tools/chdir.py,sha256=06GAtMqoi5fT1FXD2HUUlHKosVtz-Z8KI13lpEFQw3g,1820
|
|
39
|
-
jarvis/jarvis_tools/code_review.py,sha256=
|
|
40
|
-
jarvis/jarvis_tools/create_code_agent.py,sha256=
|
|
39
|
+
jarvis/jarvis_tools/code_review.py,sha256=d9DluFK61jNbHlKlKx-QJSFlC9nbNtNks_0rIb6xXwM,9773
|
|
40
|
+
jarvis/jarvis_tools/create_code_agent.py,sha256=suebuzd-z9QyENYKAjnMbVaSfQVcsEd0XKiYoKawDuE,3897
|
|
41
41
|
jarvis/jarvis_tools/create_sub_agent.py,sha256=ldpNn5LczybExvt9Sz4t1ybetLX-dTJIAF5f_oH-Z3M,2869
|
|
42
42
|
jarvis/jarvis_tools/execute_shell.py,sha256=MwgVyI1O1wshU9yR-DvSWIgoSQpVjtH9JpjVQvSrKF0,2566
|
|
43
43
|
jarvis/jarvis_tools/file_operation.py,sha256=8CAWozKfsRx_TzCmRPcNSj-bRo3K69IEDmmN8IWMlmg,5647
|
|
44
|
-
jarvis/jarvis_tools/git_commiter.py,sha256=
|
|
44
|
+
jarvis/jarvis_tools/git_commiter.py,sha256=DY-uUjunxZPsiwOqMQ_uXS2X93uKu_Mx5OnIer-bjiM,3879
|
|
45
45
|
jarvis/jarvis_tools/lsp_find_definition.py,sha256=xV8YeN1RJfwd2F3gE6OnDeTwl-AnCmrxueHocbXkQOc,4800
|
|
46
46
|
jarvis/jarvis_tools/lsp_find_references.py,sha256=FohlJeLfTxcMUASfbjOT93hQGtI2WeyTpMGwRwShW_I,4043
|
|
47
47
|
jarvis/jarvis_tools/lsp_get_diagnostics.py,sha256=bEvbDk8TnKg9TTFFxMrYOJm5TBDgz5gO04WJFQUwQQE,4490
|
|
@@ -50,16 +50,16 @@ jarvis/jarvis_tools/lsp_prepare_rename.py,sha256=RxUyIef4awtp-jgupcD1LcPlno9P3mO
|
|
|
50
50
|
jarvis/jarvis_tools/lsp_validate_edit.py,sha256=M0iglK2QbnIEFv0RYK6o2iAYnv259jB6EU7To-rc51E,5247
|
|
51
51
|
jarvis/jarvis_tools/methodology.py,sha256=JvHV6rHhC6fbPuSqC6UHFaGEE39d4g7zFLodR72wM0g,5758
|
|
52
52
|
jarvis/jarvis_tools/rag.py,sha256=ZhmvwVUHBFsttDRdVncc-S-a-XVOy5jbdNd7Vk4uTlk,4942
|
|
53
|
-
jarvis/jarvis_tools/read_code.py,sha256=
|
|
53
|
+
jarvis/jarvis_tools/read_code.py,sha256=OGktMs8ONYkWVFHpsPUFs6qdoY8PX3ymCExtH0IpTDU,7306
|
|
54
54
|
jarvis/jarvis_tools/read_webpage.py,sha256=7QamwBi5s7lD-jTcjD0wsBvkmWPRC9-K-0JkGgeTpvs,3063
|
|
55
55
|
jarvis/jarvis_tools/registry.py,sha256=XefDvujSfqKX2uLA6tnoJFg5kyBNW0iNAAJZocfIz9w,14836
|
|
56
56
|
jarvis/jarvis_tools/search.py,sha256=NHrFpAqg6dtws_9wLJvIZimjeJ-kekETi0Bg0AWMG08,11437
|
|
57
|
-
jarvis/jarvis_tools/select_code_files.py,sha256=
|
|
57
|
+
jarvis/jarvis_tools/select_code_files.py,sha256=vbEdneWWtAN90OFASohtllTgZW400ZxQbrkgroPK1qc,1902
|
|
58
58
|
jarvis/jarvis_tools/tool_generator.py,sha256=jdniHyKcEyF9KyouudrCoZBH3czZmQXc3ns0_trZ3yU,6332
|
|
59
|
-
jarvis/jarvis_utils/__init__.py,sha256=
|
|
60
|
-
jarvis_ai_assistant-0.1.
|
|
61
|
-
jarvis_ai_assistant-0.1.
|
|
62
|
-
jarvis_ai_assistant-0.1.
|
|
63
|
-
jarvis_ai_assistant-0.1.
|
|
64
|
-
jarvis_ai_assistant-0.1.
|
|
65
|
-
jarvis_ai_assistant-0.1.
|
|
59
|
+
jarvis/jarvis_utils/__init__.py,sha256=utMWglhmeTc6YagV_BY3X-SkvhwjT13GUAbby7tGJ4Y,29911
|
|
60
|
+
jarvis_ai_assistant-0.1.119.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
|
61
|
+
jarvis_ai_assistant-0.1.119.dist-info/METADATA,sha256=BvkmoVyecDqDdYErZyaojB2DvRrxcqBltB4Gkdd4P3Q,13701
|
|
62
|
+
jarvis_ai_assistant-0.1.119.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
|
63
|
+
jarvis_ai_assistant-0.1.119.dist-info/entry_points.txt,sha256=H9Y_q7BZGDsgJijaXHD9GbscllATyKYfg22otrpKEoE,619
|
|
64
|
+
jarvis_ai_assistant-0.1.119.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
|
65
|
+
jarvis_ai_assistant-0.1.119.dist-info/RECORD,,
|
{jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/entry_points.txt
RENAMED
|
@@ -8,4 +8,6 @@ jarvis-git-commit = jarvis.jarvis_tools.git_commiter:main
|
|
|
8
8
|
jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
|
|
9
9
|
jarvis-rag = jarvis.jarvis_rag.main:main
|
|
10
10
|
jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
|
|
11
|
+
jca = jarvis.jarvis_code_agent.code_agent:main
|
|
12
|
+
jgc = jarvis.jarvis_tools.git_commiter:main
|
|
11
13
|
jss = jarvis.jarvis_smart_shell.main:main
|
|
File without changes
|
|
File without changes
|
{jarvis_ai_assistant-0.1.118.dist-info → jarvis_ai_assistant-0.1.119.dist-info}/top_level.txt
RENAMED
|
File without changes
|