jarvis-ai-assistant 0.3.21__py3-none-any.whl → 0.3.23__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_code_agent/code_agent.py +2 -2
- jarvis/jarvis_rag/rag_pipeline.py +40 -0
- jarvis/jarvis_rag/retriever.py +99 -0
- jarvis/jarvis_tools/edit_file.py +15 -89
- jarvis/jarvis_tools/registry.py +18 -6
- jarvis/jarvis_utils/utils.py +3 -0
- {jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/RECORD +13 -13
- {jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/top_level.txt +0 -0
jarvis/__init__.py
CHANGED
@@ -135,7 +135,7 @@ class CodeAgent:
|
|
135
135
|
- 仅在命令行工具不足时使用专用工具
|
136
136
|
|
137
137
|
## 文件编辑工具使用规范
|
138
|
-
- 对于部分文件内容修改,使用
|
138
|
+
- 对于部分文件内容修改,使用edit_file工具
|
139
139
|
- 对于需要重写整个文件内容,使用rewrite_file工具
|
140
140
|
- 对于简单的修改,可以使用execute_script工具执行shell命令完成
|
141
141
|
|
@@ -639,7 +639,7 @@ class CodeAgent:
|
|
639
639
|
if lint_tools_info and is_enable_static_analysis():
|
640
640
|
addon_prompt = f"""
|
641
641
|
请对以下修改的文件进行静态扫描:
|
642
|
-
{file_list}
|
642
|
+
{file_list}
|
643
643
|
{tool_info}
|
644
644
|
如果本次修改引入了警告和错误,请根据警告和错误信息修复代码
|
645
645
|
注意:如果要进行静态检查,需要在所有的修改都完成之后进行集中检查,如果文件有多个检查工具,尽量一次全部调用,不要分多次调用
|
@@ -15,6 +15,7 @@ from jarvis.jarvis_utils.config import (
|
|
15
15
|
get_rag_vector_db_path,
|
16
16
|
get_rag_embedding_cache_path,
|
17
17
|
)
|
18
|
+
from jarvis.jarvis_utils.utils import get_yes_no
|
18
19
|
|
19
20
|
|
20
21
|
class JarvisRAGPipeline:
|
@@ -145,6 +146,41 @@ class JarvisRAGPipeline:
|
|
145
146
|
self._query_rewriter = QueryRewriter(JarvisPlatform_LLM())
|
146
147
|
return self._query_rewriter
|
147
148
|
|
149
|
+
def _pre_search_update_index_if_needed(self) -> None:
|
150
|
+
"""
|
151
|
+
在重写query之前执行:
|
152
|
+
- 检测索引变更(变更/删除)
|
153
|
+
- 询问用户是否立即更新索引
|
154
|
+
- 如确认,则执行增量更新并重建BM25
|
155
|
+
"""
|
156
|
+
try:
|
157
|
+
retriever = self._get_retriever()
|
158
|
+
result = retriever.detect_index_changes()
|
159
|
+
changed = result.get("changed", [])
|
160
|
+
deleted = result.get("deleted", [])
|
161
|
+
if not changed and not deleted:
|
162
|
+
return
|
163
|
+
# 打印摘要
|
164
|
+
PrettyOutput.print(
|
165
|
+
f"检测到索引可能不一致:变更 {len(changed)} 个,删除 {len(deleted)} 个。",
|
166
|
+
OutputType.WARNING,
|
167
|
+
)
|
168
|
+
for p in changed[:3] if changed else []:
|
169
|
+
PrettyOutput.print(f" 变更: {p}", OutputType.WARNING)
|
170
|
+
for p in deleted[:3] if deleted else []:
|
171
|
+
PrettyOutput.print(f" 删除: {p}", OutputType.WARNING)
|
172
|
+
# 询问用户
|
173
|
+
if get_yes_no(
|
174
|
+
"检测到索引变更,是否现在更新索引后再开始检索?", default=True
|
175
|
+
):
|
176
|
+
retriever.update_index_for_changes(changed, deleted)
|
177
|
+
else:
|
178
|
+
PrettyOutput.print(
|
179
|
+
"已跳过索引更新,将直接使用当前索引进行检索。", OutputType.INFO
|
180
|
+
)
|
181
|
+
except Exception as e:
|
182
|
+
PrettyOutput.print(f"检索前索引检查失败:{e}", OutputType.WARNING)
|
183
|
+
|
148
184
|
def add_documents(self, documents: List[Document]):
|
149
185
|
"""
|
150
186
|
将文档添加到向量知识库。
|
@@ -190,6 +226,8 @@ class JarvisRAGPipeline:
|
|
190
226
|
返回:
|
191
227
|
由LLM生成的答案。
|
192
228
|
"""
|
229
|
+
# 0. 检测索引变更并可选更新(在重写query之前)
|
230
|
+
self._pre_search_update_index_if_needed()
|
193
231
|
# 1. 将原始查询重写为多个查询
|
194
232
|
rewritten_queries = self._get_query_rewriter().rewrite(query_text)
|
195
233
|
|
@@ -259,6 +297,8 @@ class JarvisRAGPipeline:
|
|
259
297
|
返回:
|
260
298
|
检索到的文档列表。
|
261
299
|
"""
|
300
|
+
# 0. 检测索引变更并可选更新(在重写query之前)
|
301
|
+
self._pre_search_update_index_if_needed()
|
262
302
|
# 1. 重写查询
|
263
303
|
rewritten_queries = self._get_query_rewriter().rewrite(query_text)
|
264
304
|
|
jarvis/jarvis_rag/retriever.py
CHANGED
@@ -211,6 +211,105 @@ class ChromaRetriever:
|
|
211
211
|
OutputType.INFO,
|
212
212
|
)
|
213
213
|
|
214
|
+
def detect_index_changes(self) -> Dict[str, List[str]]:
|
215
|
+
"""
|
216
|
+
公共方法:检测索引变更(变更与删除)。
|
217
|
+
返回:
|
218
|
+
{'changed': List[str], 'deleted': List[str]}
|
219
|
+
"""
|
220
|
+
return self._detect_changed_or_deleted()
|
221
|
+
|
222
|
+
def _remove_sources_from_manifest(self, sources: List[str]) -> None:
|
223
|
+
"""从manifest中移除指定源文件记录并保存。"""
|
224
|
+
if not sources:
|
225
|
+
return
|
226
|
+
manifest = self._load_manifest()
|
227
|
+
removed = 0
|
228
|
+
for src in set(sources):
|
229
|
+
if src in manifest:
|
230
|
+
manifest.pop(src, None)
|
231
|
+
removed += 1
|
232
|
+
if removed > 0:
|
233
|
+
self._save_manifest(manifest)
|
234
|
+
PrettyOutput.print(
|
235
|
+
f"已从索引清单中移除 {removed} 个已删除的源文件记录。", OutputType.INFO
|
236
|
+
)
|
237
|
+
|
238
|
+
def update_index_for_changes(self, changed: List[str], deleted: List[str]) -> None:
|
239
|
+
"""
|
240
|
+
公共方法:根据变更与删除列表更新索引。
|
241
|
+
- 对 deleted: 从向量库按 metadata.source 删除
|
242
|
+
- 对 changed: 先删除旧条目,再从源文件重建并添加
|
243
|
+
- 最后:从集合重建BM25索引,更新manifest
|
244
|
+
"""
|
245
|
+
changed = list(
|
246
|
+
dict.fromkeys([p for p in (changed or []) if isinstance(p, str)])
|
247
|
+
)
|
248
|
+
deleted = list(
|
249
|
+
dict.fromkeys([p for p in (deleted or []) if isinstance(p, str)])
|
250
|
+
)
|
251
|
+
|
252
|
+
if not changed and not deleted:
|
253
|
+
return
|
254
|
+
|
255
|
+
# 先处理删除
|
256
|
+
for src in deleted:
|
257
|
+
try:
|
258
|
+
self.collection.delete(where={"source": src}) # type: ignore[arg-type]
|
259
|
+
except Exception as e:
|
260
|
+
PrettyOutput.print(f"删除源 '{src}' 时出错: {e}", OutputType.WARNING)
|
261
|
+
|
262
|
+
# 再处理变更(重建)
|
263
|
+
docs_to_add: List[Document] = []
|
264
|
+
for src in changed:
|
265
|
+
try:
|
266
|
+
# 删除旧条目
|
267
|
+
try:
|
268
|
+
self.collection.delete(where={"source": src}) # type: ignore[arg-type]
|
269
|
+
except Exception:
|
270
|
+
pass
|
271
|
+
# 读取源文件内容(作为单文档载入,由 add_documents 进行拆分与嵌入)
|
272
|
+
with open(src, "r", encoding="utf-8", errors="ignore") as f:
|
273
|
+
content = f.read()
|
274
|
+
docs_to_add.append(
|
275
|
+
Document(page_content=content, metadata={"source": src})
|
276
|
+
)
|
277
|
+
except Exception as e:
|
278
|
+
PrettyOutput.print(
|
279
|
+
f"重建源 '{src}' 内容时出错: {e}", OutputType.WARNING
|
280
|
+
)
|
281
|
+
|
282
|
+
if docs_to_add:
|
283
|
+
try:
|
284
|
+
# 复用现有拆分与嵌入逻辑
|
285
|
+
self.add_documents(docs_to_add)
|
286
|
+
except Exception as e:
|
287
|
+
PrettyOutput.print(f"添加变更文档到索引时出错: {e}", OutputType.ERROR)
|
288
|
+
|
289
|
+
# 重建BM25索引,确保删除后的语料被清理
|
290
|
+
try:
|
291
|
+
all_docs_in_collection = self.collection.get()
|
292
|
+
all_documents = all_docs_in_collection.get("documents") or []
|
293
|
+
self.bm25_corpus = [str(text).split() for text in all_documents if text]
|
294
|
+
self.bm25_index = BM25Okapi(self.bm25_corpus) if self.bm25_corpus else None
|
295
|
+
self._save_bm25_index()
|
296
|
+
except Exception as e:
|
297
|
+
PrettyOutput.print(f"重建BM25索引失败: {e}", OutputType.WARNING)
|
298
|
+
|
299
|
+
# 更新manifest:变更文件更新状态;删除文件从清单中移除
|
300
|
+
try:
|
301
|
+
if changed:
|
302
|
+
self._update_manifest_with_sources(changed)
|
303
|
+
if deleted:
|
304
|
+
self._remove_sources_from_manifest(deleted)
|
305
|
+
except Exception as e:
|
306
|
+
PrettyOutput.print(f"更新索引清单时出错: {e}", OutputType.WARNING)
|
307
|
+
|
308
|
+
PrettyOutput.print(
|
309
|
+
f"索引已更新:变更 {len(changed)} 个,删除 {len(deleted)} 个。",
|
310
|
+
OutputType.SUCCESS,
|
311
|
+
)
|
312
|
+
|
214
313
|
def add_documents(
|
215
314
|
self, documents: List[Document], chunk_size=1000, chunk_overlap=100
|
216
315
|
):
|
jarvis/jarvis_tools/edit_file.py
CHANGED
@@ -31,7 +31,6 @@ class FileSearchReplaceTool:
|
|
31
31
|
- reason: 修改原因描述
|
32
32
|
- SEARCH: 需要查找的原始代码(必须包含足够上下文)
|
33
33
|
- REPLACE: 替换后的新代码
|
34
|
-
3. 工具会自动选择最适合的编辑模式
|
35
34
|
|
36
35
|
## 核心原则
|
37
36
|
1. **精准修改**: 只修改必要的代码部分,保持其他部分不变
|
@@ -132,106 +131,33 @@ class FileSearchReplaceTool:
|
|
132
131
|
file_path = os.path.abspath(file_info["path"])
|
133
132
|
changes = file_info["changes"]
|
134
133
|
|
135
|
-
# 创建已处理文件变量,用于失败时回滚
|
136
|
-
original_content = None
|
137
|
-
processed = False
|
138
|
-
file_success = True
|
139
|
-
|
140
134
|
try:
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
135
|
+
success, result = EditFileHandler._fast_edit(file_path, changes)
|
136
|
+
if success:
|
137
|
+
stdout_message = f"文件 {file_path} 修改完成"
|
138
|
+
stdout_messages.append(stdout_message)
|
139
|
+
overall_success = True
|
140
|
+
file_results.append(
|
141
|
+
{
|
142
|
+
"file": file_path,
|
143
|
+
"success": True,
|
144
|
+
"stdout": stdout_message,
|
145
|
+
"stderr": "",
|
146
|
+
}
|
153
147
|
)
|
154
|
-
|
155
|
-
|
156
|
-
f"文件 {file_path} 处理失败", OutputType.ERROR
|
157
|
-
)
|
158
|
-
file_results.append(
|
159
|
-
{
|
160
|
-
"file": file_path,
|
161
|
-
"success": False,
|
162
|
-
"stdout": "",
|
163
|
-
"stderr": temp_content,
|
164
|
-
}
|
165
|
-
)
|
166
|
-
continue
|
167
|
-
|
168
|
-
# 只有当所有替换操作都成功时,才写回文件
|
169
|
-
if success and (
|
170
|
-
temp_content != original_content or not file_exists
|
171
|
-
):
|
172
|
-
# 确保目录存在
|
173
|
-
os.makedirs(
|
174
|
-
os.path.dirname(os.path.abspath(file_path)), exist_ok=True
|
175
|
-
)
|
176
|
-
|
177
|
-
with open(file_path, "w", encoding="utf-8") as f:
|
178
|
-
f.write(temp_content)
|
179
|
-
|
180
|
-
processed = True
|
181
|
-
|
182
|
-
action = "创建并写入" if not file_exists else "成功修改"
|
183
|
-
stdout_message = f"文件 {file_path} {action} 完成"
|
184
|
-
stdout_messages.append(stdout_message)
|
185
|
-
|
186
|
-
overall_success = True
|
187
|
-
|
188
|
-
file_results.append(
|
189
|
-
{
|
190
|
-
"file": file_path,
|
191
|
-
"success": True,
|
192
|
-
"stdout": stdout_message,
|
193
|
-
"stderr": "",
|
194
|
-
}
|
195
|
-
)
|
196
|
-
|
197
|
-
except Exception as e:
|
198
|
-
stderr_message = f"处理文件 {file_path} 时出错: {str(e)}"
|
199
|
-
stderr_messages.append(stderr_message)
|
200
|
-
PrettyOutput.print(stderr_message, OutputType.WARNING)
|
201
|
-
file_success = False
|
148
|
+
else:
|
149
|
+
PrettyOutput.print(f"文件 {file_path} 处理失败", OutputType.ERROR)
|
202
150
|
file_results.append(
|
203
151
|
{
|
204
152
|
"file": file_path,
|
205
153
|
"success": False,
|
206
154
|
"stdout": "",
|
207
|
-
"stderr":
|
155
|
+
"stderr": result,
|
208
156
|
}
|
209
157
|
)
|
210
|
-
|
211
158
|
except Exception as e:
|
212
159
|
error_msg = f"文件搜索替换操作失败: {str(e)}"
|
213
160
|
PrettyOutput.print(error_msg, OutputType.WARNING)
|
214
|
-
|
215
|
-
# 如果有已修改的文件,尝试回滚
|
216
|
-
if processed:
|
217
|
-
rollback_message = "操作失败,正在回滚修改..."
|
218
|
-
stderr_messages.append(rollback_message)
|
219
|
-
PrettyOutput.print(rollback_message, OutputType.WARNING)
|
220
|
-
|
221
|
-
try:
|
222
|
-
if original_content is None:
|
223
|
-
# 如果是新创建的文件,则删除
|
224
|
-
if os.path.exists(file_path):
|
225
|
-
os.remove(file_path)
|
226
|
-
stderr_messages.append(f"已删除新创建的文件: {file_path}")
|
227
|
-
else:
|
228
|
-
# 如果是修改的文件,则恢复原内容
|
229
|
-
with open(file_path, "w", encoding="utf-8") as f:
|
230
|
-
f.write(original_content)
|
231
|
-
stderr_messages.append(f"已回滚文件: {file_path}")
|
232
|
-
except:
|
233
|
-
stderr_messages.append(f"回滚文件失败: {file_path}")
|
234
|
-
|
235
161
|
file_results.append(
|
236
162
|
{
|
237
163
|
"file": file_path,
|
jarvis/jarvis_tools/registry.py
CHANGED
@@ -172,10 +172,14 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
172
172
|
|
173
173
|
def handle(self, response: str, agent_: Any) -> Tuple[bool, Any]:
|
174
174
|
try:
|
175
|
-
tool_call, err_msg = self._extract_tool_calls(response)
|
175
|
+
tool_call, err_msg, auto_completed = self._extract_tool_calls(response)
|
176
176
|
if err_msg:
|
177
177
|
return False, err_msg
|
178
|
-
|
178
|
+
result = self.handle_tool_calls(tool_call, agent_)
|
179
|
+
if auto_completed:
|
180
|
+
# 如果自动补全了结束标签,在结果中添加说明信息
|
181
|
+
result = f"检测到工具调用缺少结束标签,已自动补全{ct('TOOL_CALL')}。请确保后续工具调用包含完整的开始和结束标签。\n\n{result}"
|
182
|
+
return False, result
|
179
183
|
except Exception as e:
|
180
184
|
PrettyOutput.print(f"工具调用处理失败: {str(e)}", OutputType.ERROR)
|
181
185
|
from jarvis.jarvis_agent import Agent
|
@@ -609,16 +613,19 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
609
613
|
)
|
610
614
|
|
611
615
|
@staticmethod
|
612
|
-
def _extract_tool_calls(
|
616
|
+
def _extract_tool_calls(
|
617
|
+
content: str,
|
618
|
+
) -> Tuple[Dict[str, Dict[str, Any]], str, bool]:
|
613
619
|
"""从内容中提取工具调用。
|
614
620
|
|
615
621
|
参数:
|
616
622
|
content: 包含工具调用的内容
|
617
623
|
|
618
624
|
返回:
|
619
|
-
Tuple[Dict[str, Dict[str, Any]], str]:
|
625
|
+
Tuple[Dict[str, Dict[str, Any]], str, bool]:
|
620
626
|
- 第一个元素是提取的工具调用字典
|
621
627
|
- 第二个元素是错误消息字符串(成功时为"")
|
628
|
+
- 第三个元素是是否自动补全了结束标签
|
622
629
|
|
623
630
|
异常:
|
624
631
|
Exception: 如果工具调用缺少必要字段
|
@@ -627,6 +634,7 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
627
634
|
data = re.findall(
|
628
635
|
ot("TOOL_CALL") + r"(.*?)" + ct("TOOL_CALL"), content, re.DOTALL
|
629
636
|
)
|
637
|
+
auto_completed = False
|
630
638
|
if not data:
|
631
639
|
# can_handle 确保 ot("TOOL_CALL") 在内容中。
|
632
640
|
# 如果数据为空,则表示 ct("TOOL_CALL") 可能丢失。
|
@@ -648,6 +656,7 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
648
656
|
# Ask user for confirmation
|
649
657
|
|
650
658
|
data = temp_data
|
659
|
+
auto_completed = True
|
651
660
|
except (yaml.YAMLError, EOFError, KeyboardInterrupt):
|
652
661
|
# Even after fixing, it's not valid YAML, or user cancelled.
|
653
662
|
# Fall through to the original error.
|
@@ -657,6 +666,7 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
657
666
|
return (
|
658
667
|
{},
|
659
668
|
f"只有{ot('TOOL_CALL')}标签,未找到{ct('TOOL_CALL')}标签,调用格式错误,请检查工具调用格式。\n{tool_call_help}",
|
669
|
+
False,
|
660
670
|
)
|
661
671
|
ret = []
|
662
672
|
for item in data:
|
@@ -669,6 +679,7 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
669
679
|
{e}
|
670
680
|
|
671
681
|
{tool_call_help}""",
|
682
|
+
False,
|
672
683
|
)
|
673
684
|
|
674
685
|
if "name" in msg and "arguments" in msg and "want" in msg:
|
@@ -679,10 +690,11 @@ class ToolRegistry(OutputHandlerProtocol):
|
|
679
690
|
f"""工具调用格式错误,请检查工具调用格式(缺少name、arguments、want字段)。
|
680
691
|
|
681
692
|
{tool_call_help}""",
|
693
|
+
False,
|
682
694
|
)
|
683
695
|
if len(ret) > 1:
|
684
|
-
return {}, "检测到多个工具调用,请一次只处理一个工具调用。"
|
685
|
-
return ret[0] if ret else {}, ""
|
696
|
+
return {}, "检测到多个工具调用,请一次只处理一个工具调用。", False
|
697
|
+
return ret[0] if ret else {}, "", auto_completed
|
686
698
|
|
687
699
|
def register_tool(
|
688
700
|
self,
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -29,6 +29,9 @@ from jarvis.jarvis_utils.globals import get_in_chat, get_interrupt, set_interrup
|
|
29
29
|
from jarvis.jarvis_utils.input import user_confirm
|
30
30
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
31
31
|
|
32
|
+
# 向后兼容:导出 get_yes_no 供外部模块引用
|
33
|
+
get_yes_no = user_confirm
|
34
|
+
|
32
35
|
g_config_file = None
|
33
36
|
|
34
37
|
COMMAND_MAPPING = {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=d-XQQYWC2fZQq61hVFWvQFkyK2wabUSG4ml0M6WdOtA,74
|
2
2
|
jarvis/jarvis_agent/__init__.py,sha256=Tahx-vDms17nh0dPIf4BbuyyAzvG6AgEXY28mH0_Nks,34592
|
3
3
|
jarvis/jarvis_agent/agent_manager.py,sha256=YzpMiF0H2-eyk2kn2o24Bkj3bXsQx7Pv2vfD4gWepo0,2893
|
4
4
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
|
@@ -21,7 +21,7 @@ jarvis/jarvis_agent/task_manager.py,sha256=7OpLHLwBmxRFN37CCoVOPCUxjyo3dtE3sJ5oj
|
|
21
21
|
jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
|
22
22
|
jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
|
23
23
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
24
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=kPKx7GlQGL_YadYvv9Vk_rt_D6tUTTKLWpNhr-gvd_g,31575
|
25
25
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
26
26
|
jarvis/jarvis_code_analysis/code_review.py,sha256=8Ai5UdptEYem7Hj-VXIk4zXS6ySuFXRzl0GIc6ZKeLc,35798
|
27
27
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
@@ -76,9 +76,9 @@ jarvis/jarvis_rag/cli.py,sha256=9TOFchODRnMWcXxFZKgnSE_yNLUfZQ_V3yjQQxEnUZI,1705
|
|
76
76
|
jarvis/jarvis_rag/embedding_manager.py,sha256=Rd8q9V8oiXOgeccPskwsFoxMk8u2wZD3eb_1ieYu8y4,3704
|
77
77
|
jarvis/jarvis_rag/llm_interface.py,sha256=INosZrt4d5Dvc3ePI3up2QOeyraC_p8L3w9j8BjdIj8,4580
|
78
78
|
jarvis/jarvis_rag/query_rewriter.py,sha256=LGAWZ8kwH_dpquuYqc4QWC7IXmHX3SsnPSYMWOn-nDE,4072
|
79
|
-
jarvis/jarvis_rag/rag_pipeline.py,sha256=
|
79
|
+
jarvis/jarvis_rag/rag_pipeline.py,sha256=VkVTtYLL6dW12FSrZGJcWglcWqZMpZWELWO6aW-i9RU,12839
|
80
80
|
jarvis/jarvis_rag/reranker.py,sha256=Uzn4n1bNj4kWyQu9-z-jK_5dAU6drn5jEugML-kFHg8,1885
|
81
|
-
jarvis/jarvis_rag/retriever.py,sha256=
|
81
|
+
jarvis/jarvis_rag/retriever.py,sha256=kBHd3O6rXxc09AuuZlAQgKrxvx0RrB_IX6_3Ryf_aVw,18328
|
82
82
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
83
|
jarvis/jarvis_smart_shell/main.py,sha256=J5O58K5KvUvB_ghbT5XwIi5QGXD3DiBlGDs0wYYvy-w,15197
|
84
84
|
jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
|
@@ -90,14 +90,14 @@ jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
90
90
|
jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
|
91
91
|
jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
|
92
92
|
jarvis/jarvis_tools/clear_memory.py,sha256=_GlwqlCAsoHeB24Y1CnjLdMawRTc6cq55AA8Yi5AZg4,8249
|
93
|
-
jarvis/jarvis_tools/edit_file.py,sha256=
|
93
|
+
jarvis/jarvis_tools/edit_file.py,sha256=BUz0kfv44kqfNDr3tZKS-7Cn5DDhYl8xhHO7X8x7HQI,7086
|
94
94
|
jarvis/jarvis_tools/execute_script.py,sha256=kASNTShHVGlHm7pZZxUeyEZHzHAYiZ-87AzrYVyORMw,6231
|
95
95
|
jarvis/jarvis_tools/file_analyzer.py,sha256=uwmcPvRjuAzMznCy5ZqilkQY9dyL6suydMP_zL1ulk8,3914
|
96
96
|
jarvis/jarvis_tools/generate_new_tool.py,sha256=OCHkBOCQflgMZXRP4vgX3blnJOUq-_QkcBFRQFj3sj0,7894
|
97
97
|
jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
|
98
98
|
jarvis/jarvis_tools/read_code.py,sha256=qeQZ_emyPI5RTFx4HSgLBtWSwh8V5chqMjxu2uKzmfY,6100
|
99
99
|
jarvis/jarvis_tools/read_webpage.py,sha256=YTmoalY8y-jdQuoj9IL6ZjXPOevUj2P_9arJngPhbUY,5317
|
100
|
-
jarvis/jarvis_tools/registry.py,sha256=
|
100
|
+
jarvis/jarvis_tools/registry.py,sha256=G3xgZ5ECTzAhA0hJlWrB84Shyhn18U9ijlwCn5XsUow,31874
|
101
101
|
jarvis/jarvis_tools/retrieve_memory.py,sha256=hQ3s4IgBHtmUPzuWFl5Pc2FLEuT2gdi4l4NlUoO9pQM,8640
|
102
102
|
jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
|
103
103
|
jarvis/jarvis_tools/save_memory.py,sha256=QKj6iYZL2XxPX0NnU9HqvoDOpJZ38mJmatDmHLK2r74,7012
|
@@ -120,10 +120,10 @@ jarvis/jarvis_utils/input.py,sha256=IQxjlWnOuMSaQFqyOpobmtfM-UQa1IKd0vU_Mz2DQy4,
|
|
120
120
|
jarvis/jarvis_utils/methodology.py,sha256=fMo8bwd-Iam1yQL8LkPy1gwG4L2uLOTzZHbc0707gho,12662
|
121
121
|
jarvis/jarvis_utils/output.py,sha256=svCHLuXHe3Ta_qfoT5DxO80nyYyMfBFIKgziQS__Nmg,13632
|
122
122
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
123
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
124
|
-
jarvis_ai_assistant-0.3.
|
125
|
-
jarvis_ai_assistant-0.3.
|
126
|
-
jarvis_ai_assistant-0.3.
|
127
|
-
jarvis_ai_assistant-0.3.
|
128
|
-
jarvis_ai_assistant-0.3.
|
129
|
-
jarvis_ai_assistant-0.3.
|
123
|
+
jarvis/jarvis_utils/utils.py,sha256=TuuwdsTkIyEWsbIILyKCGsEmEgDOfkg235sZscScNJk,61562
|
124
|
+
jarvis_ai_assistant-0.3.23.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
125
|
+
jarvis_ai_assistant-0.3.23.dist-info/METADATA,sha256=Y_xzK5pwQB03TgzEUp7mNJJFQR-Ygo0trvHZsmBbryw,18513
|
126
|
+
jarvis_ai_assistant-0.3.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
127
|
+
jarvis_ai_assistant-0.3.23.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
|
128
|
+
jarvis_ai_assistant-0.3.23.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
129
|
+
jarvis_ai_assistant-0.3.23.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.3.21.dist-info → jarvis_ai_assistant-0.3.23.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|