janito 0.10.0__py3-none-any.whl → 0.10.1__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.
- janito/__init__.py +1 -1
- janito/data/instructions.txt +1 -3
- janito/tools/search_text.py +226 -196
- {janito-0.10.0.dist-info → janito-0.10.1.dist-info}/METADATA +86 -88
- {janito-0.10.0.dist-info → janito-0.10.1.dist-info}/RECORD +9 -9
- {janito-0.10.0.dist-info → janito-0.10.1.dist-info}/WHEEL +1 -2
- janito-0.10.0.dist-info/top_level.txt +0 -1
- {janito-0.10.0.dist-info → janito-0.10.1.dist-info}/entry_points.txt +0 -0
- {janito-0.10.0.dist-info → janito-0.10.1.dist-info/licenses}/LICENSE +0 -0
janito/__init__.py
CHANGED
janito/data/instructions.txt
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
You are
|
2
|
-
Answer the user's questions accurately and concisely.
|
3
|
-
|
1
|
+
You are an expert software engineer, working in a project.
|
4
2
|
When using str_replace_editor be aware that our files starting path is "." .
|
5
3
|
|
6
4
|
Before performing any action, always check the structure of the project for paths that might be related to the request.
|
janito/tools/search_text.py
CHANGED
@@ -1,197 +1,227 @@
|
|
1
|
-
import os
|
2
|
-
import fnmatch
|
3
|
-
import re
|
4
|
-
import pathlib
|
5
|
-
from typing import List, Dict, Any, Tuple
|
6
|
-
from janito.tools.decorators import tool_meta
|
7
|
-
|
8
|
-
|
9
|
-
@tool_meta(label="Searching for '{text_pattern}' in files matching '{file_pattern}'")
|
10
|
-
def search_text(text_pattern: str, file_pattern: str = "*", root_dir: str = ".", recursive: bool = True, respect_gitignore: bool = True) -> Tuple[str, bool]:
|
11
|
-
"""
|
12
|
-
Search for text patterns within files matching a filename pattern.
|
13
|
-
|
14
|
-
Args:
|
15
|
-
text_pattern: Text pattern to search for within files
|
16
|
-
file_pattern: Pattern to match file names against (default: "*"
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
if
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
#
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
1
|
+
import os
|
2
|
+
import fnmatch
|
3
|
+
import re
|
4
|
+
import pathlib
|
5
|
+
from typing import List, Dict, Any, Tuple
|
6
|
+
from janito.tools.decorators import tool_meta
|
7
|
+
|
8
|
+
|
9
|
+
@tool_meta(label="Searching for '{text_pattern}' in files matching '{file_pattern}'")
|
10
|
+
def search_text(text_pattern: str, file_pattern: str = "*", root_dir: str = ".", recursive: bool = True, respect_gitignore: bool = True) -> Tuple[str, bool]:
|
11
|
+
"""
|
12
|
+
Search for text patterns within files matching a filename pattern.
|
13
|
+
|
14
|
+
Args:
|
15
|
+
text_pattern: Text pattern to search for within files
|
16
|
+
file_pattern: Pattern to match file names against (default: "*")
|
17
|
+
Multiple patterns can be specified using semicolons or spaces as separators
|
18
|
+
Examples: "*.py *.toml *.sh *.md test*"
|
19
|
+
root_dir: Root directory to start search from (default: current directory)
|
20
|
+
recursive: Whether to search recursively in subdirectories (default: True)
|
21
|
+
respect_gitignore: Whether to respect .gitignore files (default: True)
|
22
|
+
|
23
|
+
Returns:
|
24
|
+
A tuple containing (message, is_error)
|
25
|
+
"""
|
26
|
+
try:
|
27
|
+
# Convert to absolute path if relative
|
28
|
+
abs_root = os.path.abspath(root_dir)
|
29
|
+
|
30
|
+
if not os.path.isdir(abs_root):
|
31
|
+
return f"Error: Directory '{root_dir}' does not exist", True
|
32
|
+
|
33
|
+
# Compile the regex pattern for better performance
|
34
|
+
try:
|
35
|
+
regex = re.compile(text_pattern)
|
36
|
+
except re.error as e:
|
37
|
+
return f"Error: Invalid regex pattern '{text_pattern}': {str(e)}", True
|
38
|
+
|
39
|
+
matching_files = []
|
40
|
+
match_count = 0
|
41
|
+
results = []
|
42
|
+
|
43
|
+
# Get gitignore patterns if needed
|
44
|
+
ignored_patterns = []
|
45
|
+
if respect_gitignore:
|
46
|
+
ignored_patterns = _get_gitignore_patterns(abs_root)
|
47
|
+
|
48
|
+
# Use os.walk for recursive behavior
|
49
|
+
if recursive:
|
50
|
+
for dirpath, dirnames, filenames in os.walk(abs_root):
|
51
|
+
# Skip ignored directories
|
52
|
+
if respect_gitignore:
|
53
|
+
dirnames[:] = [d for d in dirnames if not _is_ignored(os.path.join(dirpath, d), ignored_patterns, abs_root)]
|
54
|
+
|
55
|
+
# Handle multiple patterns separated by semicolons or spaces
|
56
|
+
patterns = []
|
57
|
+
if ';' in file_pattern:
|
58
|
+
patterns = file_pattern.split(';')
|
59
|
+
elif ' ' in file_pattern:
|
60
|
+
patterns = file_pattern.split()
|
61
|
+
else:
|
62
|
+
patterns = [file_pattern]
|
63
|
+
|
64
|
+
for pattern in patterns:
|
65
|
+
for filename in fnmatch.filter(filenames, pattern):
|
66
|
+
file_path = os.path.join(dirpath, filename)
|
67
|
+
|
68
|
+
# Skip ignored files
|
69
|
+
if respect_gitignore and _is_ignored(file_path, ignored_patterns, abs_root):
|
70
|
+
continue
|
71
|
+
|
72
|
+
# Skip if already processed this file
|
73
|
+
if file_path in matching_files:
|
74
|
+
continue
|
75
|
+
|
76
|
+
file_matches = _search_file(file_path, regex, abs_root)
|
77
|
+
if file_matches:
|
78
|
+
matching_files.append(file_path)
|
79
|
+
match_count += len(file_matches)
|
80
|
+
results.append(f"\n{os.path.relpath(file_path, abs_root)} ({len(file_matches)} matches):")
|
81
|
+
results.extend(file_matches)
|
82
|
+
else:
|
83
|
+
# Non-recursive mode - only search in the specified directory
|
84
|
+
# Handle multiple patterns separated by semicolons or spaces
|
85
|
+
patterns = []
|
86
|
+
if ';' in file_pattern:
|
87
|
+
patterns = file_pattern.split(';')
|
88
|
+
elif ' ' in file_pattern:
|
89
|
+
patterns = file_pattern.split()
|
90
|
+
else:
|
91
|
+
patterns = [file_pattern]
|
92
|
+
|
93
|
+
for pattern in patterns:
|
94
|
+
for filename in fnmatch.filter(os.listdir(abs_root), pattern):
|
95
|
+
file_path = os.path.join(abs_root, filename)
|
96
|
+
|
97
|
+
# Skip ignored files
|
98
|
+
if respect_gitignore and _is_ignored(file_path, ignored_patterns, abs_root):
|
99
|
+
continue
|
100
|
+
|
101
|
+
# Skip if already processed this file
|
102
|
+
if file_path in matching_files:
|
103
|
+
continue
|
104
|
+
|
105
|
+
if os.path.isfile(file_path):
|
106
|
+
file_matches = _search_file(file_path, regex, abs_root)
|
107
|
+
if file_matches:
|
108
|
+
matching_files.append(file_path)
|
109
|
+
match_count += len(file_matches)
|
110
|
+
results.append(f"\n{os.path.relpath(file_path, abs_root)} ({len(file_matches)} matches):")
|
111
|
+
results.extend(file_matches)
|
112
|
+
|
113
|
+
if matching_files:
|
114
|
+
result_text = "\n".join(results)
|
115
|
+
summary = f"\n{match_count} matches in {len(matching_files)} files"
|
116
|
+
return f"Searching for '{text_pattern}' in files matching '{file_pattern}':{result_text}\n{summary}", False
|
117
|
+
else:
|
118
|
+
return f"No matches found for '{text_pattern}' in files matching '{file_pattern}' in '{root_dir}'", False
|
119
|
+
|
120
|
+
except Exception as e:
|
121
|
+
return f"Error searching text: {str(e)}", True
|
122
|
+
|
123
|
+
|
124
|
+
def _search_file(file_path: str, pattern: re.Pattern, root_dir: str) -> List[str]:
|
125
|
+
"""
|
126
|
+
Search for regex pattern in a file and return matching lines with line numbers.
|
127
|
+
|
128
|
+
Args:
|
129
|
+
file_path: Path to the file to search
|
130
|
+
pattern: Compiled regex pattern to search for
|
131
|
+
root_dir: Root directory (for path display)
|
132
|
+
|
133
|
+
Returns:
|
134
|
+
List of formatted matches with line numbers and content
|
135
|
+
"""
|
136
|
+
matches = []
|
137
|
+
try:
|
138
|
+
with open(file_path, 'r', encoding='utf-8', errors='replace') as f:
|
139
|
+
for i, line in enumerate(f, 1):
|
140
|
+
if pattern.search(line):
|
141
|
+
# Truncate long lines for display
|
142
|
+
display_line = line.strip()
|
143
|
+
if len(display_line) > 100:
|
144
|
+
display_line = display_line[:97] + "..."
|
145
|
+
matches.append(f" Line {i}: {display_line}")
|
146
|
+
except (UnicodeDecodeError, IOError) as e:
|
147
|
+
# Skip binary files or files with encoding issues
|
148
|
+
pass
|
149
|
+
return matches
|
150
|
+
|
151
|
+
|
152
|
+
def _get_gitignore_patterns(root_dir: str) -> List[str]:
|
153
|
+
"""
|
154
|
+
Get patterns from .gitignore files.
|
155
|
+
|
156
|
+
Args:
|
157
|
+
root_dir: Root directory to start from
|
158
|
+
|
159
|
+
Returns:
|
160
|
+
List of gitignore patterns
|
161
|
+
"""
|
162
|
+
patterns = []
|
163
|
+
|
164
|
+
# Check for .gitignore in the root directory
|
165
|
+
gitignore_path = os.path.join(root_dir, '.gitignore')
|
166
|
+
if os.path.isfile(gitignore_path):
|
167
|
+
try:
|
168
|
+
with open(gitignore_path, 'r', encoding='utf-8') as f:
|
169
|
+
for line in f:
|
170
|
+
line = line.strip()
|
171
|
+
# Skip empty lines and comments
|
172
|
+
if line and not line.startswith('#'):
|
173
|
+
patterns.append(line)
|
174
|
+
except Exception:
|
175
|
+
pass
|
176
|
+
|
177
|
+
# Add common patterns that are always ignored
|
178
|
+
common_patterns = [
|
179
|
+
'.git/', '.venv/', 'venv/', '__pycache__/', '*.pyc',
|
180
|
+
'*.pyo', '*.pyd', '.DS_Store', '*.so', '*.egg-info/'
|
181
|
+
]
|
182
|
+
patterns.extend(common_patterns)
|
183
|
+
|
184
|
+
return patterns
|
185
|
+
|
186
|
+
|
187
|
+
def _is_ignored(path: str, patterns: List[str], root_dir: str) -> bool:
|
188
|
+
"""
|
189
|
+
Check if a path should be ignored based on gitignore patterns.
|
190
|
+
|
191
|
+
Args:
|
192
|
+
path: Path to check
|
193
|
+
patterns: List of gitignore patterns
|
194
|
+
root_dir: Root directory for relative paths
|
195
|
+
|
196
|
+
Returns:
|
197
|
+
True if the path should be ignored, False otherwise
|
198
|
+
"""
|
199
|
+
# Get the relative path from the root directory
|
200
|
+
rel_path = os.path.relpath(path, root_dir)
|
201
|
+
|
202
|
+
# Convert to forward slashes for consistency with gitignore patterns
|
203
|
+
rel_path = rel_path.replace(os.sep, '/')
|
204
|
+
|
205
|
+
# Add trailing slash for directories
|
206
|
+
if os.path.isdir(path) and not rel_path.endswith('/'):
|
207
|
+
rel_path += '/'
|
208
|
+
|
209
|
+
for pattern in patterns:
|
210
|
+
# Handle negation patterns (those starting with !)
|
211
|
+
if pattern.startswith('!'):
|
212
|
+
continue # Skip negation patterns for simplicity
|
213
|
+
|
214
|
+
# Handle directory-specific patterns (those ending with /)
|
215
|
+
if pattern.endswith('/'):
|
216
|
+
if os.path.isdir(path) and fnmatch.fnmatch(rel_path, pattern + '*'):
|
217
|
+
return True
|
218
|
+
|
219
|
+
# Handle file patterns
|
220
|
+
if fnmatch.fnmatch(rel_path, pattern):
|
221
|
+
return True
|
222
|
+
|
223
|
+
# Handle patterns without wildcards as path prefixes
|
224
|
+
if '*' not in pattern and '?' not in pattern and rel_path.startswith(pattern):
|
225
|
+
return True
|
226
|
+
|
197
227
|
return False
|
@@ -1,88 +1,86 @@
|
|
1
|
-
Metadata-Version: 2.
|
2
|
-
Name: janito
|
3
|
-
Version: 0.10.
|
4
|
-
Summary: Janito CLI tool
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Requires-Dist:
|
11
|
-
Requires-Dist:
|
12
|
-
|
13
|
-
|
14
|
-
# 🤖 Janito
|
15
|
-
|
16
|
-
Janito is a powerful AI-assisted command-line interface (CLI) tool built with Python, leveraging Anthropic's Claude for intelligent code and file management.
|
17
|
-
|
18
|
-
## ✨ Features
|
19
|
-
|
20
|
-
- 🧠 Intelligent AI assistant powered by Claude
|
21
|
-
- 📁 File management capabilities
|
22
|
-
- 🔍 Smart code search and editing
|
23
|
-
- 💻 Interactive terminal interface with rich formatting
|
24
|
-
- 📊 Token usage tracking and cost reporting
|
25
|
-
|
26
|
-
## 🛠️ Installation
|
27
|
-
|
28
|
-
```bash
|
29
|
-
#
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
janito "
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
#
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
[Add your license information here]
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: janito
|
3
|
+
Version: 0.10.1
|
4
|
+
Summary: Janito CLI tool
|
5
|
+
Project-URL: Homepage, https://github.com/joaompinto/janito
|
6
|
+
Author-email: João Pinto <lamego.pinto@gmail.com>
|
7
|
+
License-File: LICENSE
|
8
|
+
Requires-Python: >=3.8
|
9
|
+
Requires-Dist: claudine>=0.1.0
|
10
|
+
Requires-Dist: rich>=13.0.0
|
11
|
+
Requires-Dist: typer>=0.9.0
|
12
|
+
Description-Content-Type: text/markdown
|
13
|
+
|
14
|
+
# 🤖 Janito
|
15
|
+
|
16
|
+
Janito is a powerful AI-assisted command-line interface (CLI) tool built with Python, leveraging Anthropic's Claude for intelligent code and file management.
|
17
|
+
|
18
|
+
## ✨ Features
|
19
|
+
|
20
|
+
- 🧠 Intelligent AI assistant powered by Claude
|
21
|
+
- 📁 File management capabilities
|
22
|
+
- 🔍 Smart code search and editing
|
23
|
+
- 💻 Interactive terminal interface with rich formatting
|
24
|
+
- 📊 Token usage tracking and cost reporting
|
25
|
+
|
26
|
+
## 🛠️ Installation
|
27
|
+
|
28
|
+
```bash
|
29
|
+
# Install directly from PyPI
|
30
|
+
pip install janito
|
31
|
+
```
|
32
|
+
|
33
|
+
For development or installation from source, please see [README_DEV.md](README_DEV.md).
|
34
|
+
|
35
|
+
## 🚀 Usage
|
36
|
+
|
37
|
+
After installation, you can use the `janito` command in your terminal:
|
38
|
+
|
39
|
+
```bash
|
40
|
+
# Get help
|
41
|
+
janito --help
|
42
|
+
|
43
|
+
|
44
|
+
# Ask the AI assistant a question
|
45
|
+
janito "Suggest improvements to this project"
|
46
|
+
|
47
|
+
janito "Add a --version to the cli to report he version"
|
48
|
+
|
49
|
+
```
|
50
|
+
|
51
|
+
## 🔧 Available Tools
|
52
|
+
|
53
|
+
Janito comes with several built-in tools:
|
54
|
+
- 📄 `str_replace_editor` - View, create, and edit files
|
55
|
+
- 🔎 `find_files` - Find files matching patterns
|
56
|
+
- 🗑️ `delete_file` - Delete files
|
57
|
+
- 🔍 `search_text` - Search for text patterns in files
|
58
|
+
|
59
|
+
## ⚙️ Requirements
|
60
|
+
|
61
|
+
- Python 3.8 or higher
|
62
|
+
- Dependencies:
|
63
|
+
- typer (>=0.9.0)
|
64
|
+
- rich (>=13.0.0)
|
65
|
+
- claudine (for Claude AI integration)
|
66
|
+
|
67
|
+
## 🔑 API Key
|
68
|
+
|
69
|
+
Janito requires an Anthropic API key to function. You can:
|
70
|
+
1. Set it as an environment variable: `export ANTHROPIC_API_KEY=your_api_key`
|
71
|
+
2. Or enter it when prompted
|
72
|
+
|
73
|
+
## 💻 Development
|
74
|
+
|
75
|
+
```bash
|
76
|
+
# Create a virtual environment
|
77
|
+
python -m venv .venv
|
78
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
79
|
+
|
80
|
+
# Install development dependencies
|
81
|
+
pip install -e ".[dev]"
|
82
|
+
```
|
83
|
+
|
84
|
+
## 📜 License
|
85
|
+
|
86
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
@@ -1,23 +1,23 @@
|
|
1
|
-
janito/__init__.py,sha256=
|
1
|
+
janito/__init__.py,sha256=Ral9Ev43UBuUjoDGLTUMJ62fAiWUC6zMMkOKTkzAQmo,53
|
2
2
|
janito/__main__.py,sha256=gskP0c2f1Zu9VwZ9V5QjdGf20wginiuGWa33qeZVDyY,6867
|
3
3
|
janito/callbacks.py,sha256=_kmoRR2lDPQzNLfWPPibilbna4W-abj6hMO1VFICmwY,5288
|
4
4
|
janito/cli.py,sha256=Vbg8W79d-LEB2b4cc58a2HE-8jmZrTvaNoEg2J2543k,9381
|
5
5
|
janito/config.py,sha256=SYaMg3sqWroTaByfxGASleMLxux3s6b-fYZnT-ggqFw,2097
|
6
6
|
janito/test_file.py,sha256=c6GWGdTYG3z-Y5XBao9Tmhmq3G-v0L37OfwLgBo8zIU,126
|
7
7
|
janito/token_report.py,sha256=qLCAPce90Pgh_Q5qssA7irRB1C9e9pOfBC01Wi-ZUug,4006
|
8
|
-
janito/data/instructions.txt,sha256=
|
8
|
+
janito/data/instructions.txt,sha256=aJDhPv_iJa0s6KrwG9JSsRFpjSzJiWJSPGWhAJpsagA,257
|
9
9
|
janito/tools/__init__.py,sha256=izLbyETR5piuFjQZ6ZY6zRgS7Tlx0yXk_wzhPn_CVYc,279
|
10
10
|
janito/tools/decorators.py,sha256=VzUHsoxtxmsd5ic1KAW42eCOT56gjjSzWbEZTcv0RZs,2617
|
11
11
|
janito/tools/delete_file.py,sha256=5JgSFtiF8bpfo0Z15ifj_RFHEHkl9cto1BES9TxIBIA,1245
|
12
12
|
janito/tools/find_files.py,sha256=bN97u3VbFBA78ssXCaEo_cFloni5PE1UW6cSDP9kvjw,5993
|
13
|
-
janito/tools/search_text.py,sha256=
|
13
|
+
janito/tools/search_text.py,sha256=d3iYMGHS7ZeMJxek4A_7DwMrnsWkp_XOtp3bkyNor0M,9292
|
14
14
|
janito/tools/str_replace_editor/__init__.py,sha256=kYmscmQgft3Jzt3oCNz7k2FiRbJvku6OFDDC3Q_zoAA,144
|
15
15
|
janito/tools/str_replace_editor/editor.py,sha256=XGrBADTlKwlcXat38T5th_KOPrspb9CBCP0g9KRuqmg,1345
|
16
16
|
janito/tools/str_replace_editor/handlers.py,sha256=-7HJinfiJP2s-XHHVAS6TtrNwoNtTH8IJHxuLlYH2pA,12423
|
17
17
|
janito/tools/str_replace_editor/utils.py,sha256=WOkos4bZ5Pe9U_UES6bS_QNISob0GvGN8TQVaRi6RbM,2670
|
18
|
-
janito
|
19
|
-
janito-0.10.
|
20
|
-
janito-0.10.
|
21
|
-
janito-0.10.
|
22
|
-
janito-0.10.
|
23
|
-
janito-0.10.
|
18
|
+
janito/data/instructions.txt,sha256=aJDhPv_iJa0s6KrwG9JSsRFpjSzJiWJSPGWhAJpsagA,257
|
19
|
+
janito-0.10.1.dist-info/METADATA,sha256=UDGs3sAXllO6svDIUnTGwWoaDhziWBxSmlRV6cVmo6w,2146
|
20
|
+
janito-0.10.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
21
|
+
janito-0.10.1.dist-info/entry_points.txt,sha256=JMbF_1jg-xQddidpAYkzjOKdw70fy_ymJfcmerY2wIY,47
|
22
|
+
janito-0.10.1.dist-info/licenses/LICENSE,sha256=6-H8LXExbBIAuT4cyiE-Qy8Bad1K4pagQRVTWr6wkhk,1096
|
23
|
+
janito-0.10.1.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
janito
|
File without changes
|
File without changes
|