jarvis-ai-assistant 0.1.104__py3-none-any.whl → 0.1.106__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/agent.py +124 -67
- jarvis/jarvis_code_agent/code_agent.py +133 -22
- jarvis/jarvis_code_agent/patch.py +4 -7
- jarvis/jarvis_code_agent/relevant_files.py +163 -72
- jarvis/jarvis_codebase/main.py +36 -15
- jarvis/jarvis_lsp/base.py +143 -0
- jarvis/jarvis_lsp/cpp.py +134 -0
- jarvis/jarvis_lsp/go.py +140 -0
- jarvis/jarvis_lsp/python.py +135 -0
- jarvis/jarvis_lsp/registry.py +234 -0
- jarvis/jarvis_lsp/rust.py +142 -0
- jarvis/jarvis_platform/__init__.py +3 -0
- jarvis/{models → jarvis_platform}/ai8.py +1 -1
- jarvis/{models → jarvis_platform}/kimi.py +1 -1
- jarvis/{models → jarvis_platform}/ollama.py +1 -1
- jarvis/{models → jarvis_platform}/openai.py +1 -1
- jarvis/{models → jarvis_platform}/oyi.py +1 -1
- jarvis/{models → jarvis_platform}/registry.py +11 -11
- jarvis/{jarvis_platform → jarvis_platform_manager}/main.py +1 -1
- jarvis/jarvis_rag/main.py +6 -6
- jarvis/jarvis_smart_shell/main.py +3 -3
- jarvis/jarvis_tools/__init__.py +0 -0
- jarvis/{tools → jarvis_tools}/ask_user.py +1 -1
- jarvis/{tools → jarvis_tools}/code_review.py +34 -8
- jarvis/jarvis_tools/create_code_agent.py +115 -0
- jarvis/{tools → jarvis_tools}/create_sub_agent.py +1 -1
- jarvis/jarvis_tools/deep_thinking.py +160 -0
- jarvis/jarvis_tools/deep_thinking_agent.py +146 -0
- jarvis/{tools → jarvis_tools}/git_commiter.py +2 -2
- jarvis/jarvis_tools/lsp_find_definition.py +134 -0
- jarvis/jarvis_tools/lsp_find_references.py +111 -0
- jarvis/jarvis_tools/lsp_get_diagnostics.py +121 -0
- jarvis/jarvis_tools/lsp_get_document_symbols.py +87 -0
- jarvis/jarvis_tools/lsp_prepare_rename.py +130 -0
- jarvis/jarvis_tools/lsp_validate_edit.py +141 -0
- jarvis/{tools → jarvis_tools}/methodology.py +6 -1
- jarvis/{tools → jarvis_tools}/registry.py +6 -5
- jarvis/{tools → jarvis_tools}/search.py +2 -2
- jarvis/utils.py +68 -25
- {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.106.dist-info}/METADATA +23 -16
- jarvis_ai_assistant-0.1.106.dist-info/RECORD +62 -0
- {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.106.dist-info}/entry_points.txt +3 -4
- jarvis/models/__init__.py +0 -3
- jarvis/tools/create_code_test_agent.py +0 -115
- jarvis/tools/create_ctags_agent.py +0 -164
- jarvis/tools/find_in_codebase.py +0 -78
- jarvis_ai_assistant-0.1.104.dist-info/RECORD +0 -50
- /jarvis/{models → jarvis_platform}/base.py +0 -0
- /jarvis/{tools → jarvis_platform_manager}/__init__.py +0 -0
- /jarvis/{tools → jarvis_tools}/ask_codebase.py +0 -0
- /jarvis/{tools → jarvis_tools}/base.py +0 -0
- /jarvis/{tools → jarvis_tools}/chdir.py +0 -0
- /jarvis/{tools → jarvis_tools}/execute_shell.py +0 -0
- /jarvis/{tools → jarvis_tools}/file_operation.py +0 -0
- /jarvis/{tools → jarvis_tools}/rag.py +0 -0
- /jarvis/{tools → jarvis_tools}/read_code.py +0 -0
- /jarvis/{tools → jarvis_tools}/read_webpage.py +0 -0
- /jarvis/{tools → jarvis_tools}/select_code_files.py +0 -0
- {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.106.dist-info}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.106.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.106.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Dict, Any
|
|
3
|
+
from jarvis.jarvis_lsp.registry import LSPRegistry
|
|
4
|
+
|
|
5
|
+
class LSPPrepareRenameTool:
|
|
6
|
+
"""Tool for checking if a symbol can be renamed using LSP."""
|
|
7
|
+
|
|
8
|
+
name = "lsp_prepare_rename"
|
|
9
|
+
description = "Check if a symbol can be safely renamed and show all locations that would be affected"
|
|
10
|
+
parameters = {
|
|
11
|
+
"file_path": "Path to the file containing the symbol",
|
|
12
|
+
"line": "Line number (0-based) of the symbol",
|
|
13
|
+
"character": "Character position in the line",
|
|
14
|
+
"language": f"Programming language of the file ({', '.join(LSPRegistry.get_global_lsp_registry().get_supported_languages())})"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@staticmethod
|
|
18
|
+
def check() -> bool:
|
|
19
|
+
"""Check if any LSP server is available."""
|
|
20
|
+
registry = LSPRegistry.get_global_lsp_registry()
|
|
21
|
+
return len(registry.get_supported_languages()) > 0
|
|
22
|
+
|
|
23
|
+
def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
|
|
24
|
+
"""Execute the tool."""
|
|
25
|
+
file_path = args.get("file_path", "")
|
|
26
|
+
line = args.get("line", None)
|
|
27
|
+
character = args.get("character", None)
|
|
28
|
+
language = args.get("language", "")
|
|
29
|
+
|
|
30
|
+
# Validate inputs
|
|
31
|
+
if not all([file_path, line is not None, character is not None, language]):
|
|
32
|
+
return {
|
|
33
|
+
"success": False,
|
|
34
|
+
"stderr": "All parameters (file_path, line, character, language) must be provided",
|
|
35
|
+
"stdout": ""
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
line = int(line)
|
|
40
|
+
character = int(character)
|
|
41
|
+
except ValueError:
|
|
42
|
+
return {
|
|
43
|
+
"success": False,
|
|
44
|
+
"stderr": "Line and character must be integers",
|
|
45
|
+
"stdout": ""
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if not os.path.exists(file_path):
|
|
49
|
+
return {
|
|
50
|
+
"success": False,
|
|
51
|
+
"stderr": f"File not found: {file_path}",
|
|
52
|
+
"stdout": ""
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Get LSP instance
|
|
56
|
+
registry = LSPRegistry.get_global_lsp_registry()
|
|
57
|
+
lsp = registry.create_lsp(language)
|
|
58
|
+
|
|
59
|
+
if not lsp:
|
|
60
|
+
return {
|
|
61
|
+
"success": False,
|
|
62
|
+
"stderr": f"No LSP support for language: {language}",
|
|
63
|
+
"stdout": ""
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
# Initialize LSP
|
|
68
|
+
if not lsp.initialize(os.path.dirname(os.path.abspath(file_path))):
|
|
69
|
+
return {
|
|
70
|
+
"success": False,
|
|
71
|
+
"stderr": "LSP initialization failed",
|
|
72
|
+
"stdout": ""
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Get symbol at position
|
|
76
|
+
symbol = LSPRegistry.get_text_at_position(file_path, line, character)
|
|
77
|
+
if not symbol:
|
|
78
|
+
return {
|
|
79
|
+
"success": False,
|
|
80
|
+
"stderr": f"No symbol found at position {line}:{character}",
|
|
81
|
+
"stdout": ""
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Check if rename is possible
|
|
85
|
+
rename_info = lsp.prepare_rename(file_path, (line, character))
|
|
86
|
+
if not rename_info:
|
|
87
|
+
return {
|
|
88
|
+
"success": True,
|
|
89
|
+
"stdout": f"Symbol '{symbol}' cannot be renamed. It might be:\n" +
|
|
90
|
+
"- A built-in or library symbol\n" +
|
|
91
|
+
"- A read-only symbol\n" +
|
|
92
|
+
"- Not a valid identifier",
|
|
93
|
+
"stderr": ""
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# Get all references to show affected locations
|
|
97
|
+
refs = lsp.find_references(file_path, (line, character))
|
|
98
|
+
|
|
99
|
+
# Format output
|
|
100
|
+
output = [
|
|
101
|
+
f"Symbol '{symbol}' can be renamed.",
|
|
102
|
+
f"\nRenaming will affect the following locations:"
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
for ref in refs:
|
|
106
|
+
ref_line = ref["range"]["start"]["line"]
|
|
107
|
+
ref_char = ref["range"]["start"]["character"]
|
|
108
|
+
context = LSPRegistry.get_line_at_position(ref["uri"], ref_line).strip()
|
|
109
|
+
output.extend([
|
|
110
|
+
f"\nFile: {ref['uri']}",
|
|
111
|
+
f"Line {ref_line + 1}, Col {ref_char + 1}: {context}"
|
|
112
|
+
])
|
|
113
|
+
|
|
114
|
+
output.append("\nNote: Make sure to review all locations before performing the rename.")
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
"success": True,
|
|
118
|
+
"stdout": "\n".join(output),
|
|
119
|
+
"stderr": ""
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
except Exception as e:
|
|
123
|
+
return {
|
|
124
|
+
"success": False,
|
|
125
|
+
"stderr": f"Error checking rename possibility: {str(e)}",
|
|
126
|
+
"stdout": ""
|
|
127
|
+
}
|
|
128
|
+
finally:
|
|
129
|
+
if lsp:
|
|
130
|
+
lsp.shutdown()
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Dict, Any
|
|
3
|
+
from jarvis.jarvis_lsp.registry import LSPRegistry
|
|
4
|
+
|
|
5
|
+
class LSPValidateEditTool:
|
|
6
|
+
"""Tool for validating code edits using LSP."""
|
|
7
|
+
|
|
8
|
+
name = "lsp_validate_edit"
|
|
9
|
+
description = "Validate if a proposed code edit is syntactically correct"
|
|
10
|
+
parameters = {
|
|
11
|
+
"file_path": "Path to the file to edit",
|
|
12
|
+
"start_line": "Starting line number (0-based) of the edit",
|
|
13
|
+
"start_character": "Starting character position in the start line",
|
|
14
|
+
"end_line": "Ending line number (0-based) of the edit",
|
|
15
|
+
"end_character": "Ending character position in the end line",
|
|
16
|
+
"new_text": "New text to insert",
|
|
17
|
+
"language": f"Programming language of the file ({', '.join(LSPRegistry.get_global_lsp_registry().get_supported_languages())})"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@staticmethod
|
|
21
|
+
def check() -> bool:
|
|
22
|
+
"""Check if any LSP server is available."""
|
|
23
|
+
registry = LSPRegistry.get_global_lsp_registry()
|
|
24
|
+
return len(registry.get_supported_languages()) > 0
|
|
25
|
+
|
|
26
|
+
def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
|
|
27
|
+
"""Execute the tool."""
|
|
28
|
+
file_path = args.get("file_path", "")
|
|
29
|
+
start_line = args.get("start_line", None)
|
|
30
|
+
start_character = args.get("start_character", None)
|
|
31
|
+
end_line = args.get("end_line", None)
|
|
32
|
+
end_character = args.get("end_character", None)
|
|
33
|
+
new_text = args.get("new_text", "")
|
|
34
|
+
language = args.get("language", "")
|
|
35
|
+
|
|
36
|
+
# Validate inputs
|
|
37
|
+
if not all([file_path, start_line is not None, start_character is not None,
|
|
38
|
+
end_line is not None, end_character is not None, language]):
|
|
39
|
+
return {
|
|
40
|
+
"success": False,
|
|
41
|
+
"stderr": "All parameters except new_text must be provided",
|
|
42
|
+
"stdout": ""
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
start_line = int(start_line)
|
|
47
|
+
start_character = int(start_character)
|
|
48
|
+
end_line = int(end_line)
|
|
49
|
+
end_character = int(end_character)
|
|
50
|
+
except ValueError:
|
|
51
|
+
return {
|
|
52
|
+
"success": False,
|
|
53
|
+
"stderr": "Line and character positions must be integers",
|
|
54
|
+
"stdout": ""
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if not os.path.exists(file_path):
|
|
58
|
+
return {
|
|
59
|
+
"success": False,
|
|
60
|
+
"stderr": f"File not found: {file_path}",
|
|
61
|
+
"stdout": ""
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Get LSP instance
|
|
65
|
+
registry = LSPRegistry.get_global_lsp_registry()
|
|
66
|
+
lsp = registry.create_lsp(language)
|
|
67
|
+
|
|
68
|
+
if not lsp:
|
|
69
|
+
return {
|
|
70
|
+
"success": False,
|
|
71
|
+
"stderr": f"No LSP support for language: {language}",
|
|
72
|
+
"stdout": ""
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
try:
|
|
76
|
+
# Initialize LSP
|
|
77
|
+
if not lsp.initialize(os.path.dirname(os.path.abspath(file_path))):
|
|
78
|
+
return {
|
|
79
|
+
"success": False,
|
|
80
|
+
"stderr": "LSP initialization failed",
|
|
81
|
+
"stdout": ""
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Prepare edit operation
|
|
85
|
+
edit = {
|
|
86
|
+
"range": {
|
|
87
|
+
"start": {"line": start_line, "character": start_character},
|
|
88
|
+
"end": {"line": end_line, "character": end_character}
|
|
89
|
+
},
|
|
90
|
+
"newText": new_text
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
# Show the edit preview
|
|
94
|
+
output = ["Edit Preview:"]
|
|
95
|
+
|
|
96
|
+
# Show original code
|
|
97
|
+
try:
|
|
98
|
+
with open(file_path, 'r') as f:
|
|
99
|
+
lines = f.readlines()
|
|
100
|
+
context_start = max(0, start_line - 2)
|
|
101
|
+
context_end = min(len(lines), end_line + 3)
|
|
102
|
+
|
|
103
|
+
output.append("\nOriginal code:")
|
|
104
|
+
for i in range(context_start, context_end):
|
|
105
|
+
prefix = ">" if start_line <= i <= end_line else " "
|
|
106
|
+
output.append(f"{prefix} {i+1:4d} | {lines[i].rstrip()}")
|
|
107
|
+
except Exception:
|
|
108
|
+
pass
|
|
109
|
+
|
|
110
|
+
# Show new text
|
|
111
|
+
output.extend([
|
|
112
|
+
"\nNew text to insert:",
|
|
113
|
+
new_text,
|
|
114
|
+
"\nEdit range:",
|
|
115
|
+
f"From line {start_line + 1}, character {start_character}",
|
|
116
|
+
f"To line {end_line + 1}, character {end_character}"
|
|
117
|
+
])
|
|
118
|
+
|
|
119
|
+
# Validate edit
|
|
120
|
+
is_valid = lsp.validate_edit(file_path, edit)
|
|
121
|
+
|
|
122
|
+
if is_valid:
|
|
123
|
+
output.append("\nValidation Result: The edit is syntactically correct ✓")
|
|
124
|
+
else:
|
|
125
|
+
output.append("\nValidation Result: The edit would introduce syntax errors ✗")
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
"success": True,
|
|
129
|
+
"stdout": "\n".join(output),
|
|
130
|
+
"stderr": ""
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
except Exception as e:
|
|
134
|
+
return {
|
|
135
|
+
"success": False,
|
|
136
|
+
"stderr": f"Error validating edit: {str(e)}",
|
|
137
|
+
"stdout": ""
|
|
138
|
+
}
|
|
139
|
+
finally:
|
|
140
|
+
if lsp:
|
|
141
|
+
lsp.shutdown()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import yaml
|
|
3
3
|
from typing import Dict, Optional, Any
|
|
4
|
-
from jarvis.utils import OutputType, PrettyOutput
|
|
4
|
+
from jarvis.utils import OutputType, PrettyOutput, is_use_methodology
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class MethodologyTool:
|
|
@@ -29,6 +29,11 @@ class MethodologyTool:
|
|
|
29
29
|
},
|
|
30
30
|
"required": ["operation", "problem_type"]
|
|
31
31
|
}
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def check()->bool:
|
|
35
|
+
"""Check if the methodology is enabled"""
|
|
36
|
+
return is_use_methodology()
|
|
32
37
|
|
|
33
38
|
def __init__(self):
|
|
34
39
|
"""Initialize the experience management tool"""
|
|
@@ -3,12 +3,12 @@ from pathlib import Path
|
|
|
3
3
|
import sys
|
|
4
4
|
from typing import Any, Callable, Dict, List, Optional
|
|
5
5
|
|
|
6
|
-
from jarvis.
|
|
7
|
-
from jarvis.
|
|
6
|
+
from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
7
|
+
from jarvis.jarvis_tools.base import Tool
|
|
8
8
|
from jarvis.utils import OutputType, PrettyOutput, get_max_context_length
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
tool_call_help = """Tool Usage Format
|
|
11
|
+
tool_call_help = """## Tool Usage Format
|
|
12
12
|
|
|
13
13
|
<TOOL_CALL>
|
|
14
14
|
name: tool_name
|
|
@@ -49,7 +49,7 @@ class ToolRegistry:
|
|
|
49
49
|
"""Load tools"""
|
|
50
50
|
tools = self.get_all_tools()
|
|
51
51
|
if tools:
|
|
52
|
-
tools_prompt = "Available tools:\n"
|
|
52
|
+
tools_prompt = "## Available tools:\n"
|
|
53
53
|
for tool in tools:
|
|
54
54
|
tools_prompt += f"- Name: {tool['name']}\n"
|
|
55
55
|
tools_prompt += f" Description: {tool['description']}\n"
|
|
@@ -136,7 +136,8 @@ class ToolRegistry:
|
|
|
136
136
|
if (isinstance(item, type) and
|
|
137
137
|
hasattr(item, 'name') and
|
|
138
138
|
hasattr(item, 'description') and
|
|
139
|
-
hasattr(item, 'parameters')
|
|
139
|
+
hasattr(item, 'parameters') and
|
|
140
|
+
hasattr(item, 'execute')):
|
|
140
141
|
|
|
141
142
|
if hasattr(item, "check"):
|
|
142
143
|
if not item.check():
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Dict, Any, List
|
|
2
|
-
from jarvis.
|
|
2
|
+
from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
3
3
|
from jarvis.utils import PrettyOutput, OutputType
|
|
4
|
-
from jarvis.
|
|
4
|
+
from jarvis.jarvis_tools.read_webpage import WebpageTool
|
|
5
5
|
from playwright.sync_api import sync_playwright
|
|
6
6
|
from urllib.parse import quote
|
|
7
7
|
|
jarvis/utils.py
CHANGED
|
@@ -85,7 +85,7 @@ class PrettyOutput:
|
|
|
85
85
|
"""Pretty output using rich"""
|
|
86
86
|
|
|
87
87
|
# Icons for different output types
|
|
88
|
-
|
|
88
|
+
_ICONS = {
|
|
89
89
|
OutputType.SYSTEM: "🤖", # Robot - AI assistant
|
|
90
90
|
OutputType.CODE: "📝", # Notebook - Code
|
|
91
91
|
OutputType.RESULT: "✨", # Flash - Result
|
|
@@ -147,7 +147,7 @@ class PrettyOutput:
|
|
|
147
147
|
return default_lang
|
|
148
148
|
|
|
149
149
|
@staticmethod
|
|
150
|
-
def
|
|
150
|
+
def _format(text: str, output_type: OutputType, timestamp: bool = True) -> Text:
|
|
151
151
|
"""Format output text using rich Text"""
|
|
152
152
|
# Create rich Text object
|
|
153
153
|
formatted = Text()
|
|
@@ -157,7 +157,7 @@ class PrettyOutput:
|
|
|
157
157
|
formatted.append(f"[{datetime.now().strftime('%H:%M:%S')}] ", style="white")
|
|
158
158
|
formatted.append(f"[{get_agent_list()}]", style="blue")
|
|
159
159
|
# Add icon
|
|
160
|
-
icon = PrettyOutput.
|
|
160
|
+
icon = PrettyOutput._ICONS.get(output_type, "")
|
|
161
161
|
formatted.append(f"{icon} ", style=output_type.value)
|
|
162
162
|
|
|
163
163
|
return formatted
|
|
@@ -167,7 +167,7 @@ class PrettyOutput:
|
|
|
167
167
|
"""Print formatted output using rich console"""
|
|
168
168
|
# Get formatted header
|
|
169
169
|
lang = lang if lang is not None else PrettyOutput._detect_language(text, default_lang='markdown')
|
|
170
|
-
header = PrettyOutput.
|
|
170
|
+
header = PrettyOutput._format("", output_type, timestamp)
|
|
171
171
|
|
|
172
172
|
content = Syntax(text, lang, theme="monokai")
|
|
173
173
|
|
|
@@ -208,14 +208,6 @@ def get_single_line_input(tip: str) -> str:
|
|
|
208
208
|
})
|
|
209
209
|
return session.prompt(f"{tip}", style=style)
|
|
210
210
|
|
|
211
|
-
def make_choice_input(tip: str, choices: list) -> str:
|
|
212
|
-
"""Get choice input, support direction key, history function, etc."""
|
|
213
|
-
session = PromptSession(history=None)
|
|
214
|
-
style = PromptStyle.from_dict({
|
|
215
|
-
'prompt': 'ansicyan',
|
|
216
|
-
})
|
|
217
|
-
return session.prompt(f"{tip}", style=style)
|
|
218
|
-
|
|
219
211
|
class FileCompleter(Completer):
|
|
220
212
|
"""Custom completer for file paths with fuzzy matching."""
|
|
221
213
|
def __init__(self):
|
|
@@ -341,7 +333,7 @@ def init_env():
|
|
|
341
333
|
with open(env_file, "r", encoding="utf-8") as f:
|
|
342
334
|
for line in f:
|
|
343
335
|
line = line.strip()
|
|
344
|
-
if line and not line.startswith("#"):
|
|
336
|
+
if line and not line.startswith(("#", ";")):
|
|
345
337
|
try:
|
|
346
338
|
key, value = line.split("=", 1)
|
|
347
339
|
os.environ[key.strip()] = value.strip().strip("'").strip('"')
|
|
@@ -445,8 +437,7 @@ def load_rerank_model():
|
|
|
445
437
|
|
|
446
438
|
return model, tokenizer
|
|
447
439
|
|
|
448
|
-
|
|
449
|
-
return int(os.getenv('JARVIS_MAX_CONTEXT_LENGTH', '131072')) # 默认128k
|
|
440
|
+
|
|
450
441
|
|
|
451
442
|
def is_long_context(files: list) -> bool:
|
|
452
443
|
"""Check if the file list belongs to a long context (total characters exceed 80% of the maximum context length)"""
|
|
@@ -468,15 +459,12 @@ def is_long_context(files: list) -> bool:
|
|
|
468
459
|
|
|
469
460
|
return total_chars > threshold
|
|
470
461
|
|
|
471
|
-
|
|
472
|
-
return int(os.getenv('JARVIS_THREAD_COUNT', '1'))
|
|
462
|
+
|
|
473
463
|
|
|
474
464
|
def get_file_md5(filepath: str)->str:
|
|
475
465
|
return hashlib.md5(open(filepath, "rb").read(100*1024*1024)).hexdigest()
|
|
476
466
|
|
|
477
467
|
|
|
478
|
-
def dont_use_local_model():
|
|
479
|
-
return os.getenv('JARVIS_DONT_USE_LOCAL_MODEL', 'false') == 'true'
|
|
480
468
|
|
|
481
469
|
|
|
482
470
|
def _create_methodology_embedding(embedding_model: Any, methodology_text: str) -> np.ndarray:
|
|
@@ -576,12 +564,7 @@ def load_methodology(user_input: str) -> str:
|
|
|
576
564
|
import traceback
|
|
577
565
|
PrettyOutput.print(f"Error trace: {traceback.format_exc()}", OutputType.INFO)
|
|
578
566
|
return ""
|
|
579
|
-
|
|
580
|
-
def is_auto_complete() -> bool:
|
|
581
|
-
return os.getenv('JARVIS_AUTO_COMPLETE', 'false') == 'true'
|
|
582
567
|
|
|
583
|
-
def is_disable_codebase() -> bool:
|
|
584
|
-
return os.getenv('JARVIS_DISABLE_CODEBASE', 'false') == 'true'
|
|
585
568
|
|
|
586
569
|
def user_confirm(tip: str, default: bool = True) -> bool:
|
|
587
570
|
"""Prompt the user for confirmation.
|
|
@@ -601,4 +584,64 @@ def get_file_line_count(filename: str) -> int:
|
|
|
601
584
|
try:
|
|
602
585
|
return len(open(filename, "r", encoding="utf-8").readlines())
|
|
603
586
|
except Exception as e:
|
|
604
|
-
return 0
|
|
587
|
+
return 0
|
|
588
|
+
|
|
589
|
+
def get_max_context_length():
|
|
590
|
+
return int(os.getenv('JARVIS_MAX_CONTEXT_LENGTH', '131072')) # 默认128k
|
|
591
|
+
|
|
592
|
+
def get_thread_count():
|
|
593
|
+
return int(os.getenv('JARVIS_THREAD_COUNT', '1'))
|
|
594
|
+
|
|
595
|
+
def dont_use_local_model():
|
|
596
|
+
return os.getenv('JARVIS_DONT_USE_LOCAL_MODEL', 'false') == 'true'
|
|
597
|
+
|
|
598
|
+
def is_auto_complete() -> bool:
|
|
599
|
+
return os.getenv('JARVIS_AUTO_COMPLETE', 'false') == 'true'
|
|
600
|
+
|
|
601
|
+
def is_disable_codebase() -> bool:
|
|
602
|
+
return os.getenv('JARVIS_DISABLE_CODEBASE', 'false') == 'true'
|
|
603
|
+
|
|
604
|
+
def is_use_methodology() -> bool:
|
|
605
|
+
return os.getenv('JARVIS_USE_METHODOLOGY', 'true') == 'true'
|
|
606
|
+
|
|
607
|
+
def is_record_methodology() -> bool:
|
|
608
|
+
return os.getenv('JARVIS_RECORD_METHODOLOGY', 'true') == 'true'
|
|
609
|
+
|
|
610
|
+
def is_need_summary() -> bool:
|
|
611
|
+
return os.getenv('JARVIS_NEED_SUMMARY', 'true') == 'true'
|
|
612
|
+
|
|
613
|
+
def get_min_paragraph_length() -> int:
|
|
614
|
+
return int(os.getenv('JARVIS_MIN_PARAGRAPH_LENGTH', '50'))
|
|
615
|
+
|
|
616
|
+
def get_max_paragraph_length() -> int:
|
|
617
|
+
return int(os.getenv('JARVIS_MAX_PARAGRAPH_LENGTH', '1000'))
|
|
618
|
+
|
|
619
|
+
def get_context_window() -> int:
|
|
620
|
+
return int(os.getenv('JARVIS_CONTEXT_WINDOW', '5'))
|
|
621
|
+
|
|
622
|
+
def get_shell_name() -> str:
|
|
623
|
+
return os.getenv('SHELL', 'bash')
|
|
624
|
+
|
|
625
|
+
def get_normal_platform_name() -> str:
|
|
626
|
+
return os.getenv('JARVIS_PLATFORM', 'kimi')
|
|
627
|
+
|
|
628
|
+
def get_normal_model_name() -> str:
|
|
629
|
+
return os.getenv('JARVIS_MODEL', 'kimi')
|
|
630
|
+
|
|
631
|
+
def get_codegen_platform_name() -> str:
|
|
632
|
+
return os.getenv('JARVIS_CODEGEN_PLATFORM', os.getenv('JARVIS_PLATFORM', 'kimi'))
|
|
633
|
+
|
|
634
|
+
def get_codegen_model_name() -> str:
|
|
635
|
+
return os.getenv('JARVIS_CODEGEN_MODEL', os.getenv('JARVIS_MODEL', 'kimi'))
|
|
636
|
+
|
|
637
|
+
def get_thinking_platform_name() -> str:
|
|
638
|
+
return os.getenv('JARVIS_THINKING_PLATFORM', os.getenv('JARVIS_PLATFORM', 'kimi'))
|
|
639
|
+
|
|
640
|
+
def get_thinking_model_name() -> str:
|
|
641
|
+
return os.getenv('JARVIS_THINKING_MODEL', os.getenv('JARVIS_MODEL', 'kimi'))
|
|
642
|
+
|
|
643
|
+
def get_cheap_platform_name() -> str:
|
|
644
|
+
return os.getenv('JARVIS_CHEAP_PLATFORM', os.getenv('JARVIS_PLATFORM', 'kimi'))
|
|
645
|
+
|
|
646
|
+
def get_cheap_model_name() -> str:
|
|
647
|
+
return os.getenv('JARVIS_CHEAP_MODEL', os.getenv('JARVIS_MODEL', 'kimi'))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: jarvis-ai-assistant
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.106
|
|
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
|
|
@@ -59,6 +59,7 @@ Requires-Dist: rich>=13.3.1
|
|
|
59
59
|
Requires-Dist: pygments>=2.15.0
|
|
60
60
|
Requires-Dist: fuzzywuzzy>=0.18.0
|
|
61
61
|
Requires-Dist: python-Levenshtein>=0.26.1
|
|
62
|
+
Requires-Dist: jedi>=0.19.0
|
|
62
63
|
Provides-Extra: dev
|
|
63
64
|
Requires-Dist: pytest; extra == "dev"
|
|
64
65
|
Requires-Dist: black; extra == "dev"
|
|
@@ -133,15 +134,25 @@ Jarvis supports configuration through environment variables that can be set in t
|
|
|
133
134
|
|
|
134
135
|
| Environment Variable | Description | Default Value | Required |
|
|
135
136
|
|---------|------|--------|------|
|
|
136
|
-
| JARVIS_PLATFORM | AI platform to use
|
|
137
|
-
| JARVIS_MODEL | Model name to use |
|
|
138
|
-
| JARVIS_CODEGEN_PLATFORM |
|
|
139
|
-
| JARVIS_CODEGEN_MODEL | Model
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
| JARVIS_THREAD_COUNT | Number of threads
|
|
137
|
+
| JARVIS_PLATFORM | AI platform to use | kimi | Yes |
|
|
138
|
+
| JARVIS_MODEL | Model name to use | kimi | No |
|
|
139
|
+
| JARVIS_CODEGEN_PLATFORM | Platform for code generation | Same as JARVIS_PLATFORM | No |
|
|
140
|
+
| JARVIS_CODEGEN_MODEL | Model for code generation | Same as JARVIS_MODEL | No |
|
|
141
|
+
| JARVIS_THINKING_PLATFORM | Platform for thinking tasks | Same as JARVIS_PLATFORM | No |
|
|
142
|
+
| JARVIS_THINKING_MODEL | Model for thinking tasks | Same as JARVIS_MODEL | No |
|
|
143
|
+
| JARVIS_CHEAP_PLATFORM | Platform for cheap operations | Same as JARVIS_PLATFORM | No |
|
|
144
|
+
| JARVIS_CHEAP_MODEL | Model for cheap operations | Same as JARVIS_MODEL | No |
|
|
145
|
+
| JARVIS_THREAD_COUNT | Number of threads | 1 | No |
|
|
146
|
+
| JARVIS_MAX_CONTEXT_LENGTH | Maximum context length | 131072 | No |
|
|
147
|
+
| JARVIS_MIN_PARAGRAPH_LENGTH | Minimum paragraph length | 50 | No |
|
|
148
|
+
| JARVIS_MAX_PARAGRAPH_LENGTH | Maximum paragraph length | 1000 | No |
|
|
149
|
+
| JARVIS_CONTEXT_WINDOW | Context window size | 5 | No |
|
|
150
|
+
| JARVIS_AUTO_COMPLETE | Enable auto completion | false | No |
|
|
151
|
+
| JARVIS_DISABLE_CODEBASE | Disable codebase features | false | No |
|
|
152
|
+
| JARVIS_USE_METHODOLOGY | Enable methodology | true | No |
|
|
153
|
+
| JARVIS_RECORD_METHODOLOGY | Record methodology | true | No |
|
|
154
|
+
| JARVIS_NEED_SUMMARY | Generate summaries | true | No |
|
|
155
|
+
| JARVIS_DONT_USE_LOCAL_MODEL | Avoid using local models | false | No |
|
|
145
156
|
| OPENAI_API_KEY | API key for OpenAI platform | - | Required for OpenAI |
|
|
146
157
|
| OPENAI_API_BASE | Base URL for OpenAI API | https://api.deepseek.com | No |
|
|
147
158
|
| OPENAI_MODEL_NAME | Model name for OpenAI | deepseek-chat | No |
|
|
@@ -191,11 +202,8 @@ jss "describe what you want to do"
|
|
|
191
202
|
# Manage git commits
|
|
192
203
|
jarvis-git-commit
|
|
193
204
|
|
|
194
|
-
# Generate and manage ctags
|
|
195
|
-
jarvis-ctags
|
|
196
|
-
|
|
197
205
|
# Manage AI platforms
|
|
198
|
-
jarvis-platform
|
|
206
|
+
jarvis-platform-manager
|
|
199
207
|
```
|
|
200
208
|
|
|
201
209
|
Each command supports `--help` flag for detailed usage information:
|
|
@@ -205,9 +213,8 @@ jarvis-code-agent --help
|
|
|
205
213
|
jarvis-codebase --help
|
|
206
214
|
jarvis-rag --help
|
|
207
215
|
jarvis-smart-shell --help
|
|
208
|
-
jarvis-platform --help
|
|
216
|
+
jarvis-platform-manager --help
|
|
209
217
|
jarvis-git-commit --help
|
|
210
|
-
jarvis-ctags --help
|
|
211
218
|
```
|
|
212
219
|
|
|
213
220
|
## 🛠️ Tools
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
jarvis/__init__.py,sha256=fNMRdvCC2_Ay9MhSWDwdC8ObuXwdGhsRs-l8alQ-sec,51
|
|
2
|
+
jarvis/agent.py,sha256=7FDrJc2_JlY9u7TRfeHKZRQ0PrY04r-0w4H64eGcbUM,22626
|
|
3
|
+
jarvis/utils.py,sha256=0w1rYsSovS7vgbHNdfdzpo3zSb3y-KWM7RvYMqBhDnM,22086
|
|
4
|
+
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=DDKqM4m235Ryd8aMHbHKeC0ULdNLF6JPW__FKbI-Gk0,10748
|
|
6
|
+
jarvis/jarvis_code_agent/file_select.py,sha256=KNxalhepCM2e-V__ca8ErmbXSXHP_1xmd0UEVWUXic8,8083
|
|
7
|
+
jarvis/jarvis_code_agent/patch.py,sha256=bbNB8k8mebjPVsNdI8aT3oOyjLyAhUQbKmX54tyziDk,4034
|
|
8
|
+
jarvis/jarvis_code_agent/relevant_files.py,sha256=PxSKQyHfCe6878bDqP6XyQd_jwcvNK4a9YKTfpLImRI,6160
|
|
9
|
+
jarvis/jarvis_codebase/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
jarvis/jarvis_codebase/main.py,sha256=8ihn2JpZE27VwV2BC5kKSZxsuYyVOppcqOJU0UPMd80,37570
|
|
11
|
+
jarvis/jarvis_lsp/base.py,sha256=_7pdbMKjdtYBW0DsRbjIodDHM3J7df-YgXHejN_WIrU,4490
|
|
12
|
+
jarvis/jarvis_lsp/cpp.py,sha256=F7Zo3BErkvtWS1_H9zQO83pX_FUmnijux-2SjhWzKCE,4985
|
|
13
|
+
jarvis/jarvis_lsp/go.py,sha256=p8LULiFdq4qjDYQzXFlzH0-FQZ3IyfiwN_sbO9i0L_A,5310
|
|
14
|
+
jarvis/jarvis_lsp/python.py,sha256=MpnCWDwudJuSZuIxAU7o79ADLAqw_BaVpOzqwRZw-sg,4807
|
|
15
|
+
jarvis/jarvis_lsp/registry.py,sha256=e3gw1ubIi64YyjkbvhgvsxIpb5iWS5glD_279kMASCg,9831
|
|
16
|
+
jarvis/jarvis_lsp/rust.py,sha256=VeInvOvjcK2otOM4bTakjII6bJHl6TockwpXD3PLi5U,5541
|
|
17
|
+
jarvis/jarvis_platform/__init__.py,sha256=mrOt67nselz_H1gX9wdAO4y2DY5WPXzABqJbr5Des8k,63
|
|
18
|
+
jarvis/jarvis_platform/ai8.py,sha256=ZBWHZ1QQp8gjgEAVgDWPmzoALA1v8TKNdlo-hV5DkuY,12003
|
|
19
|
+
jarvis/jarvis_platform/base.py,sha256=nQ-rsJL1Z-gMev3TPoY7tYdwxhCJY8LG6_gtJ-maiW0,2181
|
|
20
|
+
jarvis/jarvis_platform/kimi.py,sha256=3yiOL2PsEcKEL0Yj0Hm3lTg9M0Ahy0Ou1AUnJ0AS0Ss,15768
|
|
21
|
+
jarvis/jarvis_platform/ollama.py,sha256=9Ptu-UzRMnNxqFlx9uDpHO0_Imrzf0Wfw9sZqnv2wRI,5681
|
|
22
|
+
jarvis/jarvis_platform/openai.py,sha256=NYAIaQbFH9Usg5ZxkBSek1F0imu-pDB9Qf6Am0AtU0s,4130
|
|
23
|
+
jarvis/jarvis_platform/oyi.py,sha256=mV8tsQty2Htz--DNemBAnCiauih3JQ4jSyuZi5L4WQo,15089
|
|
24
|
+
jarvis/jarvis_platform/registry.py,sha256=9QLoihcnkYckrCzgNnlTqaLn_z_HMhaxMSyUNb8IEys,8538
|
|
25
|
+
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
jarvis/jarvis_platform_manager/main.py,sha256=17607aNAStqJ1sOQLTGi6Tnv-cIQme_r5YvbB_S3enc,4985
|
|
27
|
+
jarvis/jarvis_rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
+
jarvis/jarvis_rag/main.py,sha256=0bVISZxDNZQpOUzAsTFl3QbISBiOMpJWMectmTzA4Hk,33164
|
|
29
|
+
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
jarvis/jarvis_smart_shell/main.py,sha256=VdUR-x932OccEwU0pcQM_pb_I4yfrAutE3hfm6jf5es,3955
|
|
31
|
+
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
jarvis/jarvis_tools/ask_codebase.py,sha256=1mLe9CHDU-NFJHmu3mxrWuA4IiHqQyum2ga31P3hLzU,2991
|
|
33
|
+
jarvis/jarvis_tools/ask_user.py,sha256=9ZhIffoPGSfxJIwiIsL03V95yM8uYJsRg7j1C8ltNGc,1830
|
|
34
|
+
jarvis/jarvis_tools/base.py,sha256=c0DMoDDPxmsqUYJR989zgUs7nIYRY6GWBrAdusIZKjc,656
|
|
35
|
+
jarvis/jarvis_tools/chdir.py,sha256=A53BNXFB9tvwoV_cxW_LpF_DfxANgAEJ8rjikTaTa-I,1813
|
|
36
|
+
jarvis/jarvis_tools/code_review.py,sha256=SY6Xw1VhAmmNVCJZsgd6ItDBmth4bgjnpd0T0afGVSA,8581
|
|
37
|
+
jarvis/jarvis_tools/create_code_agent.py,sha256=prkWzgYPMt6N2IHaom5cyEQCE4d0adRRG3K1E71Tbfk,3923
|
|
38
|
+
jarvis/jarvis_tools/create_sub_agent.py,sha256=jBwh8hvg_LST2biLwjZkLseJFegn56mTdjh-xCIghmo,2860
|
|
39
|
+
jarvis/jarvis_tools/deep_thinking.py,sha256=ltsMUfmE8XNyYTkgpWMD1Qow-6_x0dcD8WL7qL4i8R8,4471
|
|
40
|
+
jarvis/jarvis_tools/deep_thinking_agent.py,sha256=UBBWq8kp6SDEhwYXjO-tMMHP7Wblx5OA-gpQ8h_1tdk,4378
|
|
41
|
+
jarvis/jarvis_tools/execute_shell.py,sha256=bawfof8bUg3f9bjyCSifLa9bU-hkNoNOuos22uZffdg,2564
|
|
42
|
+
jarvis/jarvis_tools/file_operation.py,sha256=-1U_J5SEuBjRylzEl7wvCfjspNv6aA49UvFHLNQ3bJU,4098
|
|
43
|
+
jarvis/jarvis_tools/git_commiter.py,sha256=4dcFMTN3qmfuTfMkF6an4K95PTR1_0qBoplr20lH2jQ,2565
|
|
44
|
+
jarvis/jarvis_tools/lsp_find_definition.py,sha256=xV8YeN1RJfwd2F3gE6OnDeTwl-AnCmrxueHocbXkQOc,4800
|
|
45
|
+
jarvis/jarvis_tools/lsp_find_references.py,sha256=FohlJeLfTxcMUASfbjOT93hQGtI2WeyTpMGwRwShW_I,4043
|
|
46
|
+
jarvis/jarvis_tools/lsp_get_diagnostics.py,sha256=bEvbDk8TnKg9TTFFxMrYOJm5TBDgz5gO04WJFQUwQQE,4490
|
|
47
|
+
jarvis/jarvis_tools/lsp_get_document_symbols.py,sha256=dspL6r9HYnXL5TpARSApFY3IQLm2kcYVNVWCff2xoXI,3080
|
|
48
|
+
jarvis/jarvis_tools/lsp_prepare_rename.py,sha256=RxUyIef4awtp-jgupcD1LcPlno9P3mOE8AS3_Fm71Ys,4832
|
|
49
|
+
jarvis/jarvis_tools/lsp_validate_edit.py,sha256=M0iglK2QbnIEFv0RYK6o2iAYnv259jB6EU7To-rc51E,5247
|
|
50
|
+
jarvis/jarvis_tools/methodology.py,sha256=RFqcVjKuj8ESGmNYcQz_HyphsitDvF3XtqgGaqhafDQ,5770
|
|
51
|
+
jarvis/jarvis_tools/rag.py,sha256=2fQHqc4bw8JM-OxGTsHobLIOTo8Mip3rdtJCmAoY8XU,4952
|
|
52
|
+
jarvis/jarvis_tools/read_code.py,sha256=5DGmeXTgumAiG0RP1xB4sF4NdmBm5BEGjRRlIBzjGnQ,4002
|
|
53
|
+
jarvis/jarvis_tools/read_webpage.py,sha256=JCReSXhkDHDkQ606sZYIKG1Itlprjpmu1sSbF-Ed-jI,2478
|
|
54
|
+
jarvis/jarvis_tools/registry.py,sha256=mkAQ1NDPwDy1ESAaAFnzSxAJRrhce3NO3E7cWkb-quA,11732
|
|
55
|
+
jarvis/jarvis_tools/search.py,sha256=PLSSNETyajpqDoStCTfkoy-D41IMNudTuVzonMlT6Aw,9225
|
|
56
|
+
jarvis/jarvis_tools/select_code_files.py,sha256=bjJGwCNw0Ue_8jW60K1gcy1rUgKqoHihicu5SS58WNk,1890
|
|
57
|
+
jarvis_ai_assistant-0.1.106.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
|
58
|
+
jarvis_ai_assistant-0.1.106.dist-info/METADATA,sha256=GoQPYpaNwJtIngNd7dx3y5BjSDEiLdUTeSUD3c0ZU2c,14162
|
|
59
|
+
jarvis_ai_assistant-0.1.106.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
60
|
+
jarvis_ai_assistant-0.1.106.dist-info/entry_points.txt,sha256=UYj4FYvOH8jJ0GgCJTA_TAmJ3wvikos-hUVbCwt_KOc,480
|
|
61
|
+
jarvis_ai_assistant-0.1.106.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
|
62
|
+
jarvis_ai_assistant-0.1.106.dist-info/RECORD,,
|
{jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.106.dist-info}/entry_points.txt
RENAMED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
2
|
jarvis = jarvis.agent:main
|
|
3
3
|
jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
|
|
4
|
-
jarvis-code-review = jarvis.
|
|
4
|
+
jarvis-code-review = jarvis.jarvis_tools.code_review:main
|
|
5
5
|
jarvis-codebase = jarvis.jarvis_codebase.main:main
|
|
6
|
-
jarvis-
|
|
7
|
-
jarvis-
|
|
8
|
-
jarvis-platform = jarvis.jarvis_platform.main:main
|
|
6
|
+
jarvis-git-commit = jarvis.jarvis_tools.git_commiter:main
|
|
7
|
+
jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
|
|
9
8
|
jarvis-rag = jarvis.jarvis_rag.main:main
|
|
10
9
|
jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
|
|
11
10
|
jss = jarvis.jarvis_smart_shell.main:main
|
jarvis/models/__init__.py
DELETED