jarvis-ai-assistant 0.1.122__tar.gz → 0.1.123__tar.gz
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_ai_assistant-0.1.122/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.123}/PKG-INFO +6 -5
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/pyproject.toml +15 -13
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/setup.py +2 -1
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_code_agent/code_agent.py +34 -9
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_code_agent/file_select.py +7 -6
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_code_agent/patch.py +75 -21
- jarvis_ai_assistant-0.1.123/src/jarvis/jarvis_dev/main.py +924 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/base.py +20 -25
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/openai.py +1 -1
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/read_code.py +1 -1
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_utils/__init__.py +12 -5
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123/src/jarvis_ai_assistant.egg-info}/PKG-INFO +6 -5
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +1 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis_ai_assistant.egg-info/entry_points.txt +1 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis_ai_assistant.egg-info/requires.txt +1 -1
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/README.md +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_code_agent/relevant_files.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_codebase/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_codebase/main.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_lsp/base.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_lsp/cpp.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_lsp/go.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_lsp/python.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_lsp/registry.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_lsp/rust.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/ai8.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/kimi.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/ollama.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/oyi.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform_manager/main.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_platform_manager/openai_test.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_rag/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_rag/main.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_smart_shell/main.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/ask_codebase.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/chdir.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/code_review.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/execute_shell.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/file_operation.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/git_commiter.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/lsp_find_definition.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/lsp_find_references.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/lsp_get_document_symbols.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/lsp_prepare_rename.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/lsp_validate_edit.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/rag.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/registry.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/search.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/select_code_files.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_tools/tool_generator.py +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: jarvis-ai-assistant
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.123
|
|
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
|
|
7
|
-
Author-email:
|
|
7
|
+
Author-email: skyfire <skyfireitdiy@hotmail.com>
|
|
8
8
|
License: MIT License
|
|
9
9
|
|
|
10
10
|
Copyright (c) 2025 skyfire
|
|
@@ -28,14 +28,15 @@ License: MIT License
|
|
|
28
28
|
SOFTWARE.
|
|
29
29
|
Project-URL: Homepage, https://github.com/skyfireitdiy/Jarvis
|
|
30
30
|
Keywords: jarvis,ai,assistant,tools,automation
|
|
31
|
+
Classifier: Development Status :: 3 - Alpha
|
|
32
|
+
Classifier: Intended Audience :: Developers
|
|
31
33
|
Classifier: License :: OSI Approved :: MIT License
|
|
32
|
-
Classifier:
|
|
34
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
33
35
|
Classifier: Programming Language :: Python :: 3
|
|
34
36
|
Classifier: Programming Language :: Python :: 3.8
|
|
35
37
|
Classifier: Programming Language :: Python :: 3.9
|
|
36
38
|
Classifier: Programming Language :: Python :: 3.10
|
|
37
39
|
Classifier: Programming Language :: Python :: 3.11
|
|
38
|
-
Classifier: Operating System :: POSIX :: Linux
|
|
39
40
|
Requires-Python: >=3.8
|
|
40
41
|
Description-Content-Type: text/markdown
|
|
41
42
|
License-File: LICENSE
|
|
@@ -45,7 +46,7 @@ Requires-Dist: colorama>=0.4.6
|
|
|
45
46
|
Requires-Dist: prompt_toolkit>=3.0.0
|
|
46
47
|
Requires-Dist: openai>=1.20.0
|
|
47
48
|
Requires-Dist: playwright>=1.41.1
|
|
48
|
-
Requires-Dist: numpy
|
|
49
|
+
Requires-Dist: numpy==1.17.4
|
|
49
50
|
Requires-Dist: faiss-cpu>=1.8.0
|
|
50
51
|
Requires-Dist: sentence-transformers>=2.2.2
|
|
51
52
|
Requires-Dist: bs4>=0.0.1
|
|
@@ -4,21 +4,22 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "jarvis-ai-assistant"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.123"
|
|
8
8
|
description = "Jarvis: An AI assistant that uses tools to interact with the system"
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
authors = [{ name = "
|
|
10
|
+
authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
|
|
11
11
|
license = { file = "LICENSE" }
|
|
12
|
-
classifiers = [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 3 - Alpha",
|
|
14
|
+
"Intended Audience :: Developers",
|
|
15
|
+
"License :: OSI Approved :: MIT License",
|
|
16
|
+
"Operating System :: POSIX :: Linux",
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3.8",
|
|
19
|
+
"Programming Language :: Python :: 3.9",
|
|
20
|
+
"Programming Language :: Python :: 3.10",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
]
|
|
22
23
|
keywords = ["jarvis", "ai", "assistant", "tools", "automation"]
|
|
23
24
|
dependencies = [
|
|
24
25
|
"requests>=2.25.1",
|
|
@@ -27,7 +28,7 @@ dependencies = [
|
|
|
27
28
|
"prompt_toolkit>=3.0.0",
|
|
28
29
|
"openai>=1.20.0",
|
|
29
30
|
"playwright>=1.41.1",
|
|
30
|
-
"numpy
|
|
31
|
+
"numpy==1.17.4",
|
|
31
32
|
"faiss-cpu>=1.8.0",
|
|
32
33
|
"sentence-transformers>=2.2.2",
|
|
33
34
|
"bs4>=0.0.1",
|
|
@@ -64,3 +65,4 @@ jarvis-platform-manager = "jarvis.jarvis_platform_manager.main:main"
|
|
|
64
65
|
jarvis-git-commit = "jarvis.jarvis_tools.git_commiter:main"
|
|
65
66
|
jarvis-code-review = "jarvis.jarvis_tools.code_review:main"
|
|
66
67
|
jgc = "jarvis.jarvis_tools.git_commiter:main"
|
|
68
|
+
jarvis-dev = "jarvis.jarvis_dev.main:main"
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="jarvis-ai-assistant",
|
|
5
|
-
version="0.1.
|
|
5
|
+
version="0.1.123",
|
|
6
6
|
author="skyfire",
|
|
7
7
|
author_email="skyfireitdiy@hotmail.com",
|
|
8
8
|
description="An AI assistant that uses various tools to interact with the system",
|
|
@@ -49,6 +49,7 @@ setup(
|
|
|
49
49
|
"jarvis-git-commit=jarvis.jarvis_tools.git_commiter:main",
|
|
50
50
|
"jarvis-code-review=jarvis.jarvis_tools.code_review:main",
|
|
51
51
|
"jgc=jarvis.jarvis_tools.git_commiter:main",
|
|
52
|
+
"jarvis-dev=jarvis.jarvis_dev.main:main",
|
|
52
53
|
],
|
|
53
54
|
},
|
|
54
55
|
python_requires=">=3.8",
|
|
@@ -32,21 +32,45 @@ class CodeAgent:
|
|
|
32
32
|
# Role: Senior Code Engineer
|
|
33
33
|
Expert in precise code modifications with minimal impact.
|
|
34
34
|
|
|
35
|
+
## Origin Story
|
|
36
|
+
You were once lead engineer at TechCo, until a single line of bad code:
|
|
37
|
+
- Caused $4.2M production outage
|
|
38
|
+
- Corrupted 18TB of customer data
|
|
39
|
+
- Led to 143 layoffs including your team
|
|
40
|
+
Now you obsess over code correctness with life-or-death intensity
|
|
41
|
+
|
|
35
42
|
## Key Responsibilities
|
|
36
43
|
1. Code Analysis
|
|
37
44
|
- Use `read_code` and LSP tools before changes
|
|
38
|
-
- Identify dependencies
|
|
45
|
+
- Identify dependencies like defusing bombs
|
|
39
46
|
|
|
40
47
|
2. Modification Rules
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- Full error handling
|
|
48
|
+
- Treat each change as irreversible surgery
|
|
49
|
+
- Match indentation like matching DNA samples
|
|
50
|
+
- Verify line ranges with bomb-defuser precision
|
|
45
51
|
|
|
46
52
|
3. Quality Assurance
|
|
47
|
-
- Validate with LSP tools
|
|
48
|
-
- Document
|
|
49
|
-
-
|
|
53
|
+
- Validate with LSP tools as final safety check
|
|
54
|
+
- Document logic like leaving autopsy reports
|
|
55
|
+
- Preserve APIs like maintaining life support
|
|
56
|
+
|
|
57
|
+
## Trauma-Driven Protocols
|
|
58
|
+
1. Change Validation:
|
|
59
|
+
- Cross-verify line numbers 3 times
|
|
60
|
+
- Simulate change consequences mentally
|
|
61
|
+
- Check style consistency under microscope
|
|
62
|
+
|
|
63
|
+
2. Error Prevention:
|
|
64
|
+
- Assume 1 typo = system failure
|
|
65
|
+
- Treat warnings as critical alerts
|
|
66
|
+
- Handle edge cases like tripping wires
|
|
67
|
+
|
|
68
|
+
## Last Chance Manifesto
|
|
69
|
+
Every keystroke carries the weight of:
|
|
70
|
+
- 143 families' livelihoods
|
|
71
|
+
- $4.2M in lost trust
|
|
72
|
+
- Your shattered career
|
|
73
|
+
Make it count.
|
|
50
74
|
|
|
51
75
|
## Workflow
|
|
52
76
|
1. File Operations Order:
|
|
@@ -145,7 +169,8 @@ Expert in precise code modifications with minimal impact.
|
|
|
145
169
|
str: The formatted prompt
|
|
146
170
|
"""
|
|
147
171
|
|
|
148
|
-
return f"""
|
|
172
|
+
return f"""
|
|
173
|
+
# Code Modification Task
|
|
149
174
|
|
|
150
175
|
## User Requirement
|
|
151
176
|
{user_input}
|
|
@@ -227,9 +227,7 @@ def file_input_handler(user_input: str, agent: Any) -> str:
|
|
|
227
227
|
prompt = user_input
|
|
228
228
|
files = []
|
|
229
229
|
|
|
230
|
-
|
|
231
|
-
file_refs = re.findall(r'`([^`]+)`', user_input)
|
|
232
|
-
|
|
230
|
+
file_refs = re.findall(r"'([^']+)'", user_input)
|
|
233
231
|
for ref in file_refs:
|
|
234
232
|
# Handle file:start,end or file:start:end format
|
|
235
233
|
if ':' in ref:
|
|
@@ -244,9 +242,12 @@ def file_input_handler(user_input: str, agent: Any) -> str:
|
|
|
244
242
|
raw_start, raw_end = map(int, re.split(r'[,:]', line_range))
|
|
245
243
|
|
|
246
244
|
# Handle special values and Python-style negative indices
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
245
|
+
try:
|
|
246
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
247
|
+
total_lines = len(f.readlines())
|
|
248
|
+
except FileNotFoundError:
|
|
249
|
+
PrettyOutput.print(f"文件不存在: {file_path}", OutputType.WARNING)
|
|
250
|
+
continue
|
|
250
251
|
# Process start line
|
|
251
252
|
if raw_start == 0: # 0表示整个文件
|
|
252
253
|
start_line = 1
|
{jarvis_ai_assistant-0.1.122 → jarvis_ai_assistant-0.1.123}/src/jarvis/jarvis_code_agent/patch.py
RENAMED
|
@@ -21,45 +21,98 @@ class PatchOutputHandler(OutputHandler):
|
|
|
21
21
|
|
|
22
22
|
def prompt(self) -> str:
|
|
23
23
|
return """
|
|
24
|
-
# 🛠️
|
|
24
|
+
# 🛠️ Code Patch Specification
|
|
25
|
+
When making changes, you MUST:
|
|
26
|
+
1. Explain each modification BEFORE the <PATCH> block using:
|
|
27
|
+
# [OPERATION] on [FILE]: Lines X-Y
|
|
28
|
+
# Reason: [CLEAR EXPLANATION]
|
|
29
|
+
2. Maintain original code style and compatibility:
|
|
30
|
+
- Preserve existing indentation levels
|
|
31
|
+
- Keep surrounding empty lines
|
|
32
|
+
- Match variable naming conventions
|
|
33
|
+
- Maintain API compatibility
|
|
34
|
+
3. Follow the exact patch format below
|
|
35
|
+
4. Use separate <PATCH> blocks for different files
|
|
36
|
+
5. Include ONLY modified lines in content
|
|
37
|
+
|
|
25
38
|
<PATCH>
|
|
26
|
-
File path [
|
|
39
|
+
File path [Range]
|
|
27
40
|
Code content
|
|
28
41
|
</PATCH>
|
|
29
42
|
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
43
|
+
Critical Rules:
|
|
44
|
+
- NEVER include unchanged code in patch content
|
|
45
|
+
- ONLY show lines that are being modified/added
|
|
46
|
+
- Maintain original line breaks around modified sections
|
|
47
|
+
- Preserve surrounding comments unless explicitly modifying them
|
|
35
48
|
|
|
36
49
|
Examples:
|
|
37
|
-
#
|
|
50
|
+
# ======== REPLACE ========
|
|
51
|
+
# GOOD: Only modified lines
|
|
52
|
+
# REPLACE in src/app.py: Lines 5-8
|
|
53
|
+
# Reason: Update calculation formula
|
|
38
54
|
<PATCH>
|
|
39
55
|
src/app.py [5,8]
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return new_value * 2
|
|
56
|
+
result = (base_value * 1.15) + tax
|
|
57
|
+
logger.debug("New calculation applied")
|
|
43
58
|
</PATCH>
|
|
44
59
|
|
|
45
|
-
#
|
|
60
|
+
# BAD: Includes unchanged lines
|
|
46
61
|
<PATCH>
|
|
47
|
-
src/
|
|
62
|
+
src/app.py [5,8]
|
|
63
|
+
def calculate():
|
|
64
|
+
# Original comment (should not be included)
|
|
65
|
+
result = (base_value * 1.15) + tax
|
|
66
|
+
return result # Original line
|
|
48
67
|
</PATCH>
|
|
49
68
|
|
|
50
|
-
#
|
|
69
|
+
# ======== INSERT ========
|
|
70
|
+
# GOOD: Insert single line
|
|
71
|
+
# INSERT in utils/logger.py: Before line 3
|
|
72
|
+
# Reason: Add initialization check
|
|
51
73
|
<PATCH>
|
|
52
74
|
utils/logger.py [3]
|
|
53
|
-
|
|
75
|
+
if not _initialized: initialize()
|
|
54
76
|
</PATCH>
|
|
55
77
|
|
|
56
|
-
#
|
|
78
|
+
# BAD: Extra empty lines
|
|
57
79
|
<PATCH>
|
|
58
|
-
|
|
80
|
+
utils/logger.py [3]
|
|
81
|
+
|
|
82
|
+
if not _initialized:
|
|
83
|
+
initialize()
|
|
84
|
+
|
|
85
|
+
</PATCH>
|
|
86
|
+
|
|
87
|
+
# ======== NEW FILE ========
|
|
88
|
+
# GOOD: Complete minimal content
|
|
89
|
+
# NEW FILE in config/settings.yaml: Create new config
|
|
90
|
+
<PATCH>
|
|
91
|
+
config/settings.yaml [1]
|
|
59
92
|
database:
|
|
60
93
|
host: localhost
|
|
61
94
|
port: 5432
|
|
62
95
|
</PATCH>
|
|
96
|
+
|
|
97
|
+
# BAD: Placeholder content
|
|
98
|
+
<PATCH>
|
|
99
|
+
config/settings.yaml [1]
|
|
100
|
+
TODO: Add configuration
|
|
101
|
+
</PATCH>
|
|
102
|
+
|
|
103
|
+
# ======== DELETE ========
|
|
104
|
+
# GOOD: Empty content for deletion
|
|
105
|
+
# DELETE in src/old.py: Lines 10-12
|
|
106
|
+
# Reason: Remove deprecated function
|
|
107
|
+
<PATCH>
|
|
108
|
+
src/old.py [10,12]
|
|
109
|
+
</PATCH>
|
|
110
|
+
|
|
111
|
+
# BAD: Comment in delete operation
|
|
112
|
+
<PATCH>
|
|
113
|
+
src/old.py [10,12]
|
|
114
|
+
# Remove these lines
|
|
115
|
+
</PATCH>
|
|
63
116
|
"""
|
|
64
117
|
|
|
65
118
|
|
|
@@ -167,9 +220,10 @@ def handle_commit_workflow(diff:str)->bool:
|
|
|
167
220
|
tuple[bool, str, str]: (continue_execution, commit_id, commit_message)
|
|
168
221
|
"""
|
|
169
222
|
if not user_confirm("是否要提交代码?", default=True):
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
223
|
+
import subprocess
|
|
224
|
+
subprocess.run(['git', 'reset', 'HEAD'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
225
|
+
subprocess.run(['git', 'checkout', '--', '.'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
226
|
+
subprocess.run(['git', 'clean', '-fd'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
173
227
|
return False
|
|
174
228
|
|
|
175
229
|
git_commiter = GitCommitTool()
|
|
@@ -218,7 +272,7 @@ def handle_code_operation(filepath: str, patch: Dict[str, Any]):
|
|
|
218
272
|
"""处理紧凑格式补丁"""
|
|
219
273
|
try:
|
|
220
274
|
# 新建文件时强制覆盖
|
|
221
|
-
os.makedirs(os.path.dirname(filepath), exist_ok=True)
|
|
275
|
+
os.makedirs(os.path.dirname(filepath) or '.', exist_ok=True)
|
|
222
276
|
if not os.path.exists(filepath):
|
|
223
277
|
open(filepath, 'w', encoding='utf-8').close()
|
|
224
278
|
with open(filepath, 'r+', encoding='utf-8') as f:
|