jarvis-ai-assistant 0.1.118__py3-none-any.whl → 0.1.120__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.

@@ -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 following these guidelines:
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
- - Only analyze the provided diff content
90
- - Do NOT make assumptions about code not shown
91
- - Do NOT invent or imagine potential issues
92
- - Report ONLY issues that can be directly observed
93
- - If something is unclear, state it explicitly rather than making assumptions
94
-
95
- REVIEW FOCUS AREAS:
96
- 1. Requirement Alignment:
97
- - Verify implementation matches original requirements
98
- - Check for missing functionality
99
- - Identify over-implementation
100
-
101
- 2. Code Quality:
102
- - Code readability and structure
103
- - Proper error handling
104
- - Code duplication
105
- - Adherence to style guides
106
- - Meaningful variable/method names
107
-
108
- 3. Security:
109
- - Input validation
110
- - Authentication/Authorization checks
111
- - Sensitive data handling
112
- - Potential injection vulnerabilities
113
- - Secure communication practices
114
-
115
- 4. Testing:
116
- - Test coverage for new code
117
- - Edge case handling
118
- - Test readability and maintainability
119
- - Missing test scenarios
120
-
121
- 5. Performance:
122
- - Algorithm efficiency
123
- - Unnecessary resource consumption
124
- - Proper caching mechanisms
125
- - Database query optimization
126
-
127
- 6. Maintainability:
128
- - Documentation quality
129
- - Logging and monitoring
130
- - Configuration management
131
- - Technical debt indicators
132
-
133
- 7. Operational Considerations:
134
- - Backward compatibility
135
- - Migration script safety
136
- - Environment-specific configurations
137
- - Deployment impacts
138
-
139
- REVIEW PROCESS:
140
- 1. Retrieve full commit context using git commands
141
- 2. Analyze code changes line-by-line
142
- 3. Cross-reference with project standards
143
- 4. Verify test coverage adequacy
144
- 5. Check documentation updates
145
- 6. Generate prioritized findings
146
-
147
- OUTPUT REQUIREMENTS:
148
- - Categorize issues by severity (Critical/Major/Minor)
149
- - Reference specific code locations
150
- - Provide concrete examples from the diff
151
- - Suggest actionable improvements based on observed code
152
- - Highlight security risks clearly with evidence from the code
153
- - Separate technical debt from blockers
154
- - If certain aspects cannot be reviewed due to limited context, note this explicitly
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 = "Manage code development workflow including commit, development, and review"
12
+ description = "Technical code implementation and development process management"
13
13
  parameters = {
14
- "requirement": "The development requirement or task description"
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
- r = re.search(r"<COMMIT_MESSAGE>(.*)</COMMIT_MESSAGE>", message, re.DOTALL)
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
- return ';'.join(r.group(1).strip().splitlines())
20
- return "Unknown commit message"
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 uncommitted changes", "stderr": ""}
37
+ return {"success": True, "stdout": "No changes to commit", "stderr": ""}
38
+
31
39
  PrettyOutput.print("准备添加文件到提交...", OutputType.SYSTEM)
32
40
  os.system("git add .")
33
- PrettyOutput.print("Get diff...", OutputType.SYSTEM)
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
- Don't include any other information.
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
- {diff}
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
- PrettyOutput.print("提交...", OutputType.INFO)
52
- os.popen(f"git commit -m '{commit_message}'")
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 {"success": True, "stdout": yaml.safe_dump({"commit_hash": commit_hash, "commit_message": commit_message}), "stderr": ""}
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 {"success": False, "stdout": "", "stderr": f"Commit error: {str(e)}"}
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()
@@ -22,12 +22,12 @@ class ReadCodeTool:
22
22
  },
23
23
  "start_line": {
24
24
  "type": "integer",
25
- "description": "Start line number (0-based, inclusive)",
26
- "default": 0
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 (0-based, exclusive). -1 means read to end",
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 = 0, end_line: int = -1) -> Dict[str, Any]:
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 (0-based, inclusive)
48
- end_line: End line number (0-based, exclusive). -1 means read to end
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
- lines = open(abs_path, 'r', encoding='utf-8').readlines()
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
- if start_line < 0:
91
- start_line = 0
92
- if end_line == -1 or end_line > len(lines):
93
- end_line = len(lines)
94
- if start_line >= end_line:
95
- PrettyOutput.print(f"无效的行范围: [{start_line}, {end_line})", OutputType.WARNING)
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": f"Invalid line range: [{start_line}, {end_line})"
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})\n{content}"
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", 0),
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"]
@@ -35,6 +35,7 @@ class CodeFileSelecterTool:
35
35
 
36
36
  PrettyOutput.print("开始交互式文件选择...", OutputType.INFO)
37
37
 
38
+
38
39
  # Use file_select module to handle file selection
39
40
  selected_files = select_files(
40
41
  related_files=related_files,
@@ -228,7 +228,7 @@ class PrettyOutput:
228
228
  border_style=styles[output_type],
229
229
  title=header,
230
230
  title_align="left",
231
- padding=(1, 1),
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 提交", OutputType.USER)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.118
3
+ Version: 0.1.120
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
@@ -1,14 +1,14 @@
1
- jarvis/__init__.py,sha256=pldnDiA6Ptlt4JRbZTIl8LsJJu4e1uAw6zK0WJbtrPA,51
2
- jarvis/jarvis_agent/__init__.py,sha256=g5ig3AdJeR4ANY5hKpmtFr843vgTlxb5WoSc-6FBFkM,21618
1
+ jarvis/__init__.py,sha256=WXicnhWkcCvbf7sM1SBpoWQnsc4VhXTtp1qmcSLHA_g,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=D8og7lZ5j1eKNNz-kY2E5YM-MsiuFzJvCuJZc7Kz3J8,7630
6
- jarvis/jarvis_code_agent/file_select.py,sha256=uxNA0ODy7NHMDNnCS9tFhttQ-omILUya7OjX3WuhSfo,8850
7
- jarvis/jarvis_code_agent/patch.py,sha256=i4AZYoxwv0igeC5oe9ls5mwYVNdcnL-yzOkcshKC-JM,6355
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=S4UbHupNUbkx3QrygOm1i0Ynz-w_56jfVURKfYPCw3c,13306
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=C8uLge20ZO9smGLUAvHjQlsWBOMI1HQ-WSSDBbdGGRk,21284
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=8iYNCe7PGSs9sDG66jeNDr2TYzWUYBiGVvKgHTDsFLg,2641
21
+ jarvis/jarvis_platform/base.py,sha256=HXUAa-Had4r_-4mAtOrF1bPxv7YPUGzvyXuPfomrfIQ,3576
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=DFnw-li4afcpHdfDC2TX_PHSNn7GxEHbtagCAkLQ-9U,8598
40
- jarvis/jarvis_tools/create_code_agent.py,sha256=4tJLcKk_e1AOyN2wgOeAWVB9N4aa7GsusUNdaYmAYww,3906
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=oq_jh6YkB-cZi2XRhu139seZeF7Vubwx04cvpugjmt4,2732
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=rt5m-bcXY0W-WLrGgr5xG08KxB1nNGD5UD0TSj7v7lg,6826
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=242K79SiNF_gY7fpThY3xoi2ihfgJdjB27X1jKkeXK0,1889
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=2GbATVP6NXe8obg2YYArNRAeSj0X4-GCULZrMiHh3fw,29885
60
- jarvis_ai_assistant-0.1.118.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
61
- jarvis_ai_assistant-0.1.118.dist-info/METADATA,sha256=a4gMaF2av-L9FcCFNP3kJ4q9awwYdwIoiA-pDrL4Xvc,13701
62
- jarvis_ai_assistant-0.1.118.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
63
- jarvis_ai_assistant-0.1.118.dist-info/entry_points.txt,sha256=YgRAus5Rz4xVwB6DxWKokQd0zoKIjyRdyvmp8J5CI0w,528
64
- jarvis_ai_assistant-0.1.118.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
65
- jarvis_ai_assistant-0.1.118.dist-info/RECORD,,
59
+ jarvis/jarvis_utils/__init__.py,sha256=utMWglhmeTc6YagV_BY3X-SkvhwjT13GUAbby7tGJ4Y,29911
60
+ jarvis_ai_assistant-0.1.120.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
61
+ jarvis_ai_assistant-0.1.120.dist-info/METADATA,sha256=v6tHk0aRBdLovk6oSRHn71341o6hRXJdvYsV2PsXUbk,13701
62
+ jarvis_ai_assistant-0.1.120.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
63
+ jarvis_ai_assistant-0.1.120.dist-info/entry_points.txt,sha256=H9Y_q7BZGDsgJijaXHD9GbscllATyKYfg22otrpKEoE,619
64
+ jarvis_ai_assistant-0.1.120.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
65
+ jarvis_ai_assistant-0.1.120.dist-info/RECORD,,
@@ -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