janito 1.8.1__py3-none-any.whl → 1.9.0__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/agent/config_defaults.py +23 -0
- janito/agent/config_utils.py +0 -9
- janito/agent/conversation.py +31 -9
- janito/agent/conversation_api.py +32 -2
- janito/agent/conversation_history.py +53 -0
- janito/agent/conversation_tool_calls.py +11 -8
- janito/agent/openai_client.py +11 -3
- janito/agent/openai_schema_generator.py +9 -6
- janito/agent/providers.py +77 -0
- janito/agent/rich_message_handler.py +1 -1
- janito/agent/templates/profiles/system_prompt_template_base.txt.j2 +8 -8
- janito/agent/tool_executor.py +18 -10
- janito/agent/tool_use_tracker.py +16 -0
- janito/agent/tools/__init__.py +7 -9
- janito/agent/tools/create_directory.py +7 -6
- janito/agent/tools/create_file.py +29 -54
- janito/agent/tools/delete_text_in_file.py +97 -0
- janito/agent/tools/fetch_url.py +11 -3
- janito/agent/tools/find_files.py +37 -25
- janito/agent/tools/get_file_outline/__init__.py +1 -0
- janito/agent/tools/{outline_file/__init__.py → get_file_outline/core.py} +12 -15
- janito/agent/tools/get_file_outline/python_outline.py +134 -0
- janito/agent/tools/{search_outline.py → get_file_outline/search_outline.py} +9 -0
- janito/agent/tools/get_lines.py +15 -11
- janito/agent/tools/move_file.py +10 -11
- janito/agent/tools/remove_directory.py +2 -2
- janito/agent/tools/remove_file.py +11 -13
- janito/agent/tools/replace_file.py +62 -0
- janito/agent/tools/replace_text_in_file.py +3 -3
- janito/agent/tools/run_bash_command.py +3 -7
- janito/agent/tools/run_powershell_command.py +39 -28
- janito/agent/tools/run_python_command.py +3 -5
- janito/agent/tools/search_text.py +10 -14
- janito/agent/tools/validate_file_syntax/__init__.py +1 -0
- janito/agent/tools/validate_file_syntax/core.py +92 -0
- janito/agent/tools/validate_file_syntax/css_validator.py +35 -0
- janito/agent/tools/validate_file_syntax/html_validator.py +77 -0
- janito/agent/tools/validate_file_syntax/js_validator.py +27 -0
- janito/agent/tools/validate_file_syntax/json_validator.py +6 -0
- janito/agent/tools/validate_file_syntax/markdown_validator.py +66 -0
- janito/agent/tools/validate_file_syntax/ps1_validator.py +32 -0
- janito/agent/tools/validate_file_syntax/python_validator.py +5 -0
- janito/agent/tools/validate_file_syntax/xml_validator.py +11 -0
- janito/agent/tools/validate_file_syntax/yaml_validator.py +6 -0
- janito/agent/tools_utils/__init__.py +1 -0
- janito/agent/tools_utils/dir_walk_utils.py +23 -0
- janito/agent/{tools/outline_file → tools_utils}/formatting.py +5 -2
- janito/agent/{tools → tools_utils}/gitignore_utils.py +0 -3
- janito/agent/tools_utils/utils.py +30 -0
- janito/cli/_livereload_log_utils.py +13 -0
- janito/cli/arg_parser.py +45 -3
- janito/cli/{runner/cli_main.py → cli_main.py} +119 -19
- janito/cli/livereload_starter.py +60 -0
- janito/cli/main.py +110 -21
- janito/cli/one_shot.py +66 -0
- janito/cli/termweb_starter.py +2 -2
- janito/livereload/app.py +25 -0
- janito/rich_utils.py +0 -22
- janito/{cli_chat_shell → shell}/commands/__init__.py +18 -11
- janito/{cli_chat_shell → shell}/commands/config.py +4 -4
- janito/shell/commands/conversation_restart.py +72 -0
- janito/shell/commands/edit.py +21 -0
- janito/shell/commands/history_view.py +18 -0
- janito/shell/commands/livelogs.py +40 -0
- janito/{cli_chat_shell → shell}/commands/prompt.py +10 -6
- janito/shell/commands/session.py +32 -0
- janito/{cli_chat_shell → shell}/commands/session_control.py +2 -7
- janito/{cli_chat_shell → shell}/commands/sum.py +6 -6
- janito/{cli_chat_shell → shell}/commands/termweb_log.py +10 -10
- janito/shell/commands/tools.py +23 -0
- janito/{cli_chat_shell → shell}/commands/utility.py +5 -4
- janito/{cli_chat_shell → shell}/commands/verbose.py +1 -1
- janito/shell/commands.py +40 -0
- janito/shell/main.py +321 -0
- janito/{cli_chat_shell/shell_command_completer.py → shell/prompt/completer.py} +1 -1
- janito/{cli_chat_shell/chat_ui.py → shell/prompt/session_setup.py} +19 -5
- janito/{cli_chat_shell/session_manager.py → shell/session/manager.py} +53 -3
- janito/{cli_chat_shell/ui.py → shell/ui/interactive.py} +23 -15
- janito/termweb/app.py +3 -3
- janito/termweb/static/editor.css +146 -0
- janito/termweb/static/editor.css.bak +27 -0
- janito/termweb/static/editor.html +15 -213
- janito/termweb/static/editor.html.bak +16 -215
- janito/termweb/static/editor.js +209 -0
- janito/termweb/static/editor.js.bak +227 -0
- janito/termweb/static/index.html +2 -3
- janito/termweb/static/index.html.bak +2 -3
- janito/termweb/static/termweb.css.bak +33 -84
- janito/termweb/static/termweb.js +15 -34
- janito/termweb/static/termweb.js.bak +18 -36
- {janito-1.8.1.dist-info → janito-1.9.0.dist-info}/METADATA +2 -1
- janito-1.9.0.dist-info/RECORD +151 -0
- {janito-1.8.1.dist-info → janito-1.9.0.dist-info}/WHEEL +1 -1
- janito/agent/tools/dir_walk_utils.py +0 -16
- janito/agent/tools/memory.py +0 -48
- janito/agent/tools/outline_file/python_outline.py +0 -71
- janito/agent/tools/present_choices_test.py +0 -18
- janito/agent/tools/rich_live.py +0 -44
- janito/agent/tools/tools_utils.py +0 -56
- janito/agent/tools/utils.py +0 -33
- janito/agent/tools/validate_file_syntax.py +0 -163
- janito/cli_chat_shell/chat_loop.py +0 -163
- janito/cli_chat_shell/chat_state.py +0 -38
- janito/cli_chat_shell/commands/history_start.py +0 -37
- janito/cli_chat_shell/commands/session.py +0 -48
- janito-1.8.1.dist-info/RECORD +0 -127
- /janito/agent/tools/{outline_file → get_file_outline}/markdown_outline.py +0 -0
- /janito/cli/{runner/_termweb_log_utils.py → _termweb_log_utils.py} +0 -0
- /janito/cli/{runner/config.py → config_runner.py} +0 -0
- /janito/cli/{runner/formatting.py → formatting_runner.py} +0 -0
- /janito/{cli/runner → shell}/__init__.py +0 -0
- /janito/{cli_chat_shell → shell}/commands/lang.py +0 -0
- /janito/{cli_chat_shell → shell/prompt}/load_prompt.py +0 -0
- /janito/{cli_chat_shell/config_shell.py → shell/session/config.py} +0 -0
- /janito/{cli_chat_shell/__init__.py → shell/session/history.py} +0 -0
- {janito-1.8.1.dist-info → janito-1.9.0.dist-info}/entry_points.txt +0 -0
- {janito-1.8.1.dist-info → janito-1.9.0.dist-info}/licenses/LICENSE +0 -0
- {janito-1.8.1.dist-info → janito-1.9.0.dist-info}/top_level.txt +0 -0
janito/termweb/static/index.html
CHANGED
@@ -24,11 +24,10 @@
|
|
24
24
|
<img src="/static/termicon.svg" alt="TermWeb Logo" class="header-logo">
|
25
25
|
<span class="header-title">TermWeb</span>
|
26
26
|
<span class="header-subtitle">Explorador de Projetos com IA</span>
|
27
|
-
<button class="theme-switcher" id="theme-switcher"
|
27
|
+
<button class="theme-switcher" id="theme-switcher" title="Alternate tema"><span id="theme-icon">🌙</span></button>
|
28
28
|
</div>
|
29
29
|
<div class="toolbar" id="explorer-toolbar">
|
30
|
-
|
31
|
-
<button id="view-icons" class="view-toggle" title="Visualização em Ícones">■ Icons</button>
|
30
|
+
|
32
31
|
</div>
|
33
32
|
<div class="main">
|
34
33
|
<div id="explorer-main"></div>
|
@@ -24,11 +24,10 @@
|
|
24
24
|
<img src="/static/termicon.svg" alt="TermWeb Logo" class="header-logo">
|
25
25
|
<span class="header-title">TermWeb</span>
|
26
26
|
<span class="header-subtitle">Explorador de Projetos com IA</span>
|
27
|
-
<button class="theme-switcher" id="theme-switcher"
|
27
|
+
<button class="theme-switcher" id="theme-switcher" title="Alternar tema"><span id="theme-icon">🌙</span></button>
|
28
28
|
</div>
|
29
29
|
<div class="toolbar" id="explorer-toolbar">
|
30
|
-
|
31
|
-
<button id="view-icons" class="view-toggle" title="Visualização em Ícones">■ Icons</button>
|
30
|
+
|
32
31
|
</div>
|
33
32
|
<div class="main">
|
34
33
|
<div id="explorer-main"></div>
|
@@ -81,30 +81,48 @@ body.light-theme .header {
|
|
81
81
|
.main {
|
82
82
|
flex: 1 1 auto;
|
83
83
|
display: flex;
|
84
|
-
flex-direction:
|
85
|
-
|
86
|
-
|
87
|
-
min-height:
|
88
|
-
padding: 0;
|
84
|
+
flex-direction: row;
|
85
|
+
gap: 2em;
|
86
|
+
padding: 2em;
|
87
|
+
min-height: 60vh;
|
89
88
|
background: transparent;
|
90
89
|
}
|
90
|
+
#explorer-main, #explorer-preview {
|
91
|
+
background: #22262b;
|
92
|
+
border-radius: 1.1em;
|
93
|
+
box-shadow: 0 4px 24px #0004;
|
94
|
+
border: 1px solid #1a73e8;
|
95
|
+
padding: 1.5em 1.2em;
|
96
|
+
min-height: 40vh;
|
97
|
+
overflow: auto;
|
98
|
+
}
|
99
|
+
#explorer-main {
|
100
|
+
margin-right: 0.5em;
|
101
|
+
}
|
102
|
+
#explorer-preview {
|
103
|
+
margin-left: 0.5em;
|
104
|
+
display: flex;
|
105
|
+
flex-direction: column;
|
106
|
+
flex: 1 1 0;
|
107
|
+
min-width: 0;
|
108
|
+
}
|
91
109
|
|
92
|
-
|
110
|
+
/* --- CodeMirror Integration for Preview --- */
|
111
|
+
#explorer-codemirror-preview {
|
93
112
|
flex: 1 1 auto;
|
113
|
+
min-height: 0;
|
114
|
+
min-width: 0;
|
94
115
|
display: flex;
|
95
116
|
flex-direction: column;
|
96
|
-
height: 100%;
|
97
|
-
min-height: 0;
|
98
117
|
}
|
99
|
-
|
100
118
|
.CodeMirror {
|
101
119
|
flex: 1 1 auto;
|
102
|
-
height:
|
120
|
+
height: 60vh !important;
|
103
121
|
min-height: 0;
|
104
122
|
font-size: 1.1em;
|
105
123
|
background: #23272b;
|
106
124
|
color: #f8f8f2;
|
107
|
-
border-radius: 0;
|
125
|
+
border-radius: 0.5em;
|
108
126
|
border: none;
|
109
127
|
transition: background 0.2s, color 0.2s;
|
110
128
|
}
|
@@ -198,81 +216,9 @@ body.light-theme .explorer-link, body.light-theme .explorer-link:visited {
|
|
198
216
|
color: #42a5f5;
|
199
217
|
}
|
200
218
|
body.light-theme .explorer-link:hover {
|
201
|
-
color: #
|
202
|
-
}
|
203
|
-
|
204
|
-
/* Error and status messages */
|
205
|
-
.error {
|
206
|
-
color: #ff5252;
|
207
|
-
background: #2d2d2d;
|
208
|
-
padding: 0.5em 1em;
|
209
|
-
border-radius: 4px;
|
210
|
-
margin: 1em 0;
|
211
|
-
}
|
212
|
-
body.light-theme .error {
|
213
|
-
color: #b71c1c;
|
214
|
-
background: #fff3f3;
|
215
|
-
}
|
216
|
-
|
217
|
-
/* Spinner for loading */
|
218
|
-
.spinner {
|
219
|
-
border: 4px solid #f3f3f3;
|
220
|
-
border-top: 4px solid #1976d2;
|
221
|
-
border-radius: 50%;
|
222
|
-
width: 24px;
|
223
|
-
height: 24px;
|
224
|
-
animation: spin 1s linear infinite;
|
225
|
-
display: inline-block;
|
226
|
-
}
|
227
|
-
@keyframes spin {
|
228
|
-
0% { transform: rotate(0deg); }
|
229
|
-
100% { transform: rotate(360deg); }
|
219
|
+
color: #1565c0;
|
230
220
|
}
|
231
221
|
|
232
|
-
/* --- Enhanced Toolbar & Panes --- */
|
233
|
-
.toolbar {
|
234
|
-
display: flex;
|
235
|
-
justify-content: flex-end;
|
236
|
-
align-items: center;
|
237
|
-
gap: 0.7em;
|
238
|
-
background: #23272b;
|
239
|
-
border-bottom: 1px solid #1a73e8;
|
240
|
-
padding: 0.7em 2em;
|
241
|
-
margin-bottom: 0.5em;
|
242
|
-
box-shadow: 0 2px 8px #0002;
|
243
|
-
}
|
244
|
-
.view-toggle {
|
245
|
-
background: #23272b;
|
246
|
-
color: #90caf9;
|
247
|
-
border: 1px solid #1a73e8;
|
248
|
-
border-radius: 0.5em;
|
249
|
-
padding: 0.5em 1.2em;
|
250
|
-
font-size: 1.1em;
|
251
|
-
cursor: pointer;
|
252
|
-
transition: background 0.15s, color 0.15s, box-shadow 0.15s;
|
253
|
-
margin-left: 0.2em;
|
254
|
-
}
|
255
|
-
.view-toggle.active, .view-toggle:hover {
|
256
|
-
background: #1a73e8;
|
257
|
-
color: #fff;
|
258
|
-
box-shadow: 0 2px 8px #1976d255;
|
259
|
-
}
|
260
|
-
|
261
|
-
#explorer-main, #explorer-preview {
|
262
|
-
background: #22262b;
|
263
|
-
border-radius: 1.1em;
|
264
|
-
box-shadow: 0 4px 24px #0004;
|
265
|
-
border: 1px solid #1a73e8;
|
266
|
-
padding: 1.5em 1.2em;
|
267
|
-
min-height: 40vh;
|
268
|
-
overflow: auto;
|
269
|
-
}
|
270
|
-
#explorer-main {
|
271
|
-
margin-right: 0.5em;
|
272
|
-
}
|
273
|
-
#explorer-preview {
|
274
|
-
margin-left: 0.5em;
|
275
|
-
}
|
276
222
|
@media (max-width: 900px) {
|
277
223
|
.main {
|
278
224
|
flex-direction: column;
|
@@ -283,4 +229,7 @@ body.light-theme .error {
|
|
283
229
|
min-height: 20vh;
|
284
230
|
padding: 1em 0.7em;
|
285
231
|
}
|
232
|
+
#explorer-preview {
|
233
|
+
margin-left: 0;
|
234
|
+
}
|
286
235
|
}
|
janito/termweb/static/termweb.js
CHANGED
@@ -16,8 +16,6 @@ function getPaiPath(path) {
|
|
16
16
|
function setExplorerView(view) {
|
17
17
|
explorerView = view;
|
18
18
|
localStorage.setItem('explorerView', view);
|
19
|
-
document.getElementById('view-list').classList.toggle('active', view === 'list');
|
20
|
-
document.getElementById('view-icons').classList.toggle('active', view === 'icons');
|
21
19
|
}
|
22
20
|
|
23
21
|
function normalizeExplorerPath(path) {
|
@@ -63,22 +61,8 @@ function renderExplorer(path, pushUrl=true) {
|
|
63
61
|
}
|
64
62
|
}
|
65
63
|
html += '</ul>';
|
66
|
-
} else {
|
67
|
-
html += `<div class='explorer-icons'>`;
|
68
|
-
if (data.path !== '.') {
|
69
|
-
const parent = getPaiPath(data.path);
|
70
|
-
html += `<div class='explorer-icon'><a href='#' data-path='${parent}' class='explorer-link' title='Pai'>(..)</a></div>`;
|
71
|
-
}
|
72
|
-
for (const entry of data.entries) {
|
73
|
-
const entryPath = data.path === '.' ? entry.name : data.path + '/' + entry.name;
|
74
|
-
if (entry.is_dir) {
|
75
|
-
html += `<div class='explorer-icon'><a href='#' data-path='${entryPath}' class='explorer-link' title='${entry.name}'>📁<br>${entry.name}</a></div>`;
|
76
|
-
} else {
|
77
|
-
html += `<div class='explorer-icon'><a href='#' data-path='${entryPath}' class='explorer-link file-link' title='${entry.name}'>📄<br>${entry.name}</a></div>`;
|
78
|
-
}
|
79
|
-
}
|
80
|
-
html += '</div>';
|
81
64
|
}
|
65
|
+
|
82
66
|
main.innerHTML = html;
|
83
67
|
// Clear preview panel when changing directories
|
84
68
|
const preview = document.getElementById('explorer-preview');
|
@@ -131,7 +115,7 @@ window.renderCodePreview = function(container, content, mode) {
|
|
131
115
|
var textarea = document.createElement('textarea');
|
132
116
|
textarea.value = (typeof content === 'string') ? content : '';
|
133
117
|
container.appendChild(textarea);
|
134
|
-
if (window.CodeMirror
|
118
|
+
if (window.CodeMirror) {
|
135
119
|
var editor = CodeMirror.fromTextArea(textarea, {
|
136
120
|
lineNumbers: true,
|
137
121
|
mode: mode || 'python',
|
@@ -140,7 +124,7 @@ window.renderCodePreview = function(container, content, mode) {
|
|
140
124
|
indentUnit: 4,
|
141
125
|
tabSize: 4,
|
142
126
|
});
|
143
|
-
editor.setSize('100%', '
|
127
|
+
editor.setSize('100%', '60vh');
|
144
128
|
return editor;
|
145
129
|
} else {
|
146
130
|
container.innerHTML = '<pre>' + (content ? String(content) : '') + '</pre>';
|
@@ -148,7 +132,7 @@ window.renderCodePreview = function(container, content, mode) {
|
|
148
132
|
} catch (e) {
|
149
133
|
container.innerHTML = '<pre>' + (content ? String(content) : '') + '</pre>';
|
150
134
|
}
|
151
|
-
}
|
135
|
+
};
|
152
136
|
|
153
137
|
// Theme switcher logic
|
154
138
|
function setTheme(dark) {
|
@@ -156,31 +140,28 @@ function setTheme(dark) {
|
|
156
140
|
document.body.classList.add('dark-theme');
|
157
141
|
document.body.classList.remove('light-theme');
|
158
142
|
localStorage.setItem('theme', 'dark');
|
159
|
-
document.getElementById('theme-
|
143
|
+
var themeIcon = document.getElementById('theme-icon');
|
144
|
+
if (themeIcon) themeIcon.textContent = '🌙'; // Moon for dark theme
|
160
145
|
} else {
|
161
146
|
document.body.classList.remove('dark-theme');
|
162
147
|
document.body.classList.add('light-theme');
|
163
148
|
localStorage.setItem('theme', 'light');
|
164
|
-
document.getElementById('theme-
|
149
|
+
var themeIcon = document.getElementById('theme-icon');
|
150
|
+
if (themeIcon) themeIcon.textContent = '☀️'; // Sun for light theme
|
165
151
|
}
|
166
152
|
}
|
167
153
|
document.addEventListener('DOMContentLoaded', function() {
|
168
154
|
// Initial theme
|
169
155
|
var theme = localStorage.getItem('theme') || 'dark';
|
170
156
|
setTheme(theme === 'dark');
|
171
|
-
document.getElementById('theme-switcher')
|
172
|
-
|
173
|
-
|
157
|
+
var themeSwitcher = document.getElementById('theme-switcher');
|
158
|
+
if (themeSwitcher) {
|
159
|
+
themeSwitcher.onclick = function() {
|
160
|
+
setTheme(document.body.classList.contains('light-theme'));
|
161
|
+
};
|
162
|
+
}
|
163
|
+
setExplorerView('list'); // Always use list view
|
174
164
|
renderExplorer('.')
|
175
|
-
setExplorerView(localStorage.getItem('explorerView') || 'list');
|
176
|
-
document.getElementById('view-list').onclick = function() {
|
177
|
-
setExplorerView('list');
|
178
|
-
renderExplorer('.')
|
179
|
-
};
|
180
|
-
document.getElementById('view-icons').onclick = function() {
|
181
|
-
setExplorerView('icons');
|
182
|
-
renderExplorer('.')
|
183
|
-
};
|
184
165
|
});
|
185
166
|
|
186
167
|
window.renderExplorer = renderExplorer;
|
@@ -16,8 +16,7 @@ function getPaiPath(path) {
|
|
16
16
|
function setExplorerView(view) {
|
17
17
|
explorerView = view;
|
18
18
|
localStorage.setItem('explorerView', view);
|
19
|
-
|
20
|
-
document.getElementById('view-icons').classList.toggle('active', view === 'icons');
|
19
|
+
|
21
20
|
}
|
22
21
|
|
23
22
|
function normalizeExplorerPath(path) {
|
@@ -52,33 +51,19 @@ function renderExplorer(path, pushUrl=true) {
|
|
52
51
|
html += `<ul class='explorer-list'>`;
|
53
52
|
if (data.path !== '.') {
|
54
53
|
const parent = getPaiPath(data.path);
|
55
|
-
html += `<li><a href='#' data-path='${parent}' class='explorer-link'><span class='explorer-entry'><span class='explorer-icon'
|
54
|
+
html += `<li><a href='#' data-path='${parent}' class='explorer-link'><span class='explorer-entry'><span class='explorer-icon'>⬆️</span><span class='explorer-name'>(.. parent)</span></span></a></li>`;
|
56
55
|
}
|
57
56
|
for (const entry of data.entries) {
|
58
57
|
const entryPath = data.path === '.' ? entry.name : data.path + '/' + entry.name;
|
59
58
|
if (entry.is_dir) {
|
60
|
-
html += `<li><a href='#' data-path='${entryPath}' class='explorer-link'><span class='explorer-entry'><span class='explorer-icon'
|
59
|
+
html += `<li><a href='#' data-path='${entryPath}' class='explorer-link'><span class='explorer-entry'><span class='explorer-icon'>📁</span><span class='explorer-name'>${entry.name}</span></span></a></li>`;
|
61
60
|
} else {
|
62
|
-
html += `<li><a href='#' data-path='${entryPath}' class='explorer-link file-link'><span class='explorer-entry'><span class='explorer-icon'
|
61
|
+
html += `<li><a href='#' data-path='${entryPath}' class='explorer-link file-link'><span class='explorer-entry'><span class='explorer-icon'>📄</span><span class='explorer-name'>${entry.name}</span></span></a></li>`;
|
63
62
|
}
|
64
63
|
}
|
65
64
|
html += '</ul>';
|
66
|
-
} else {
|
67
|
-
html += `<div class='explorer-icons'>`;
|
68
|
-
if (data.path !== '.') {
|
69
|
-
const parent = getPaiPath(data.path);
|
70
|
-
html += `<div class='explorer-icon'><a href='#' data-path='${parent}' class='explorer-link' title='Pai'>(..)</a></div>`;
|
71
|
-
}
|
72
|
-
for (const entry of data.entries) {
|
73
|
-
const entryPath = data.path === '.' ? entry.name : data.path + '/' + entry.name;
|
74
|
-
if (entry.is_dir) {
|
75
|
-
html += `<div class='explorer-icon'><a href='#' data-path='${entryPath}' class='explorer-link' title='${entry.name}'>\ud83d\udcc1<br>${entry.name}</a></div>`;
|
76
|
-
} else {
|
77
|
-
html += `<div class='explorer-icon'><a href='#' data-path='${entryPath}' class='explorer-link file-link' title='${entry.name}'>\ud83d\udcc4<br>${entry.name}</a></div>`;
|
78
|
-
}
|
79
|
-
}
|
80
|
-
html += '</div>';
|
81
65
|
}
|
66
|
+
|
82
67
|
main.innerHTML = html;
|
83
68
|
// Clear preview panel when changing directories
|
84
69
|
const preview = document.getElementById('explorer-preview');
|
@@ -131,7 +116,7 @@ window.renderCodePreview = function(container, content, mode) {
|
|
131
116
|
var textarea = document.createElement('textarea');
|
132
117
|
textarea.value = (typeof content === 'string') ? content : '';
|
133
118
|
container.appendChild(textarea);
|
134
|
-
if (window.CodeMirror
|
119
|
+
if (window.CodeMirror) {
|
135
120
|
var editor = CodeMirror.fromTextArea(textarea, {
|
136
121
|
lineNumbers: true,
|
137
122
|
mode: mode || 'python',
|
@@ -140,7 +125,7 @@ window.renderCodePreview = function(container, content, mode) {
|
|
140
125
|
indentUnit: 4,
|
141
126
|
tabSize: 4,
|
142
127
|
});
|
143
|
-
editor.setSize('100%', '
|
128
|
+
editor.setSize('100%', '60vh');
|
144
129
|
return editor;
|
145
130
|
} else {
|
146
131
|
container.innerHTML = '<pre>' + (content ? String(content) : '') + '</pre>';
|
@@ -156,31 +141,28 @@ function setTheme(dark) {
|
|
156
141
|
document.body.classList.add('dark-theme');
|
157
142
|
document.body.classList.remove('light-theme');
|
158
143
|
localStorage.setItem('theme', 'dark');
|
159
|
-
document.getElementById('theme-
|
144
|
+
var themeIcon = document.getElementById('theme-icon');
|
145
|
+
if (themeIcon) themeIcon.textContent = '🌙'; // Moon for dark theme
|
160
146
|
} else {
|
161
147
|
document.body.classList.remove('dark-theme');
|
162
148
|
document.body.classList.add('light-theme');
|
163
149
|
localStorage.setItem('theme', 'light');
|
164
|
-
document.getElementById('theme-
|
150
|
+
var themeIcon = document.getElementById('theme-icon');
|
151
|
+
if (themeIcon) themeIcon.textContent = '☀️'; // Sun for light theme
|
165
152
|
}
|
166
153
|
}
|
167
154
|
document.addEventListener('DOMContentLoaded', function() {
|
168
155
|
// Initial theme
|
169
156
|
var theme = localStorage.getItem('theme') || 'dark';
|
170
157
|
setTheme(theme === 'dark');
|
171
|
-
document.getElementById('theme-switcher')
|
172
|
-
|
173
|
-
|
158
|
+
var themeSwitcher = document.getElementById('theme-switcher');
|
159
|
+
if (themeSwitcher) {
|
160
|
+
themeSwitcher.onclick = function() {
|
161
|
+
setTheme(document.body.classList.contains('light-theme'));
|
162
|
+
};
|
163
|
+
}
|
164
|
+
setExplorerView('list'); // Always use list view
|
174
165
|
renderExplorer('.')
|
175
|
-
setExplorerView(localStorage.getItem('explorerView') || 'list');
|
176
|
-
document.getElementById('view-list').onclick = function() {
|
177
|
-
setExplorerView('list');
|
178
|
-
renderExplorer('.')
|
179
|
-
};
|
180
|
-
document.getElementById('view-icons').onclick = function() {
|
181
|
-
setExplorerView('icons');
|
182
|
-
renderExplorer('.')
|
183
|
-
};
|
184
166
|
});
|
185
167
|
|
186
168
|
window.renderExplorer = renderExplorer;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: janito
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.9.0
|
4
4
|
Summary: Natural Language Coding Agent,
|
5
5
|
Author-email: João Pinto <joao.pinto@gmail.com>
|
6
6
|
License-Expression: MIT
|
@@ -22,6 +22,7 @@ Requires-Dist: prompt_toolkit
|
|
22
22
|
Requires-Dist: requests
|
23
23
|
Requires-Dist: rich
|
24
24
|
Requires-Dist: toml
|
25
|
+
Requires-Dist: lxml
|
25
26
|
Provides-Extra: docs
|
26
27
|
Requires-Dist: mkdocs>=1.5.3; extra == "docs"
|
27
28
|
Requires-Dist: mkdocs-material>=9.4.8; extra == "docs"
|
@@ -0,0 +1,151 @@
|
|
1
|
+
janito/__init__.py,sha256=l2eVHfMNFg4kPmiXtGSDPYsmLE4H8f13ozPPxATkS5s,23
|
2
|
+
janito/__main__.py,sha256=KKIoPBE9xPcb54PRYO2UOt0ti04iAwLeJlg8YY36vew,76
|
3
|
+
janito/rich_utils.py,sha256=T_DxBFwv4ZYP1qpZn-vzWRB2SzH46j0M6Upqf_bf6Pc,531
|
4
|
+
janito/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
+
janito/agent/config.py,sha256=SMpyt9k1LhLn8DimhHcaOFmyk_iexEPnOREM1tWcMow,4616
|
6
|
+
janito/agent/config_defaults.py,sha256=nzlOPZ2xllzcXLdFt5hSkjVKg6hT5NVkHiGEqj8WKvg,1324
|
7
|
+
janito/agent/config_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
+
janito/agent/content_handler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
|
+
janito/agent/conversation.py,sha256=Re6RrA7wlr30hq4HvYlEMHU8H8PaXfZIyvtvg-CAeck,8105
|
10
|
+
janito/agent/conversation_api.py,sha256=fLs2LQg1NAajXM2Q_ikTojYlVwyhhQYvEg-s3ZpfWpI,9369
|
11
|
+
janito/agent/conversation_exceptions.py,sha256=Aw7PRLb3eUfyDOGynKds5F48dgjyiOrTCEcWSprYC58,381
|
12
|
+
janito/agent/conversation_history.py,sha256=hV2zzlYrbOsCaMEiu39grE1TK8MQ7Lsq5dtIb_3Y--4,1929
|
13
|
+
janito/agent/conversation_tool_calls.py,sha256=wz9FFtwNXgnyJQbcLzZfHfCPkiLfItE2vJ1JqjpKucA,1553
|
14
|
+
janito/agent/conversation_ui.py,sha256=y4f0IoJQoWGrFMB3yi7uIwXokuTjhFtJGK_R7zcTv3w,397
|
15
|
+
janito/agent/event.py,sha256=1jcua88NT-T4jA0mGIyIF1LvqXKu2GDT8NMjlelWmCI,517
|
16
|
+
janito/agent/event_dispatcher.py,sha256=eFNDfGY8o63yNLFdMe82LqfmDyGWjrAw9CpyUAcLJAM,856
|
17
|
+
janito/agent/event_handler_protocol.py,sha256=uIIf9u82BWm8pha4sZxydeEwgbxDoiWVSyplBPI0knE,130
|
18
|
+
janito/agent/event_system.py,sha256=QxPSQ2XeTyiWV6ejcmS8kTqTBrs7fLHRVXdhyeVHpas,608
|
19
|
+
janito/agent/message_handler.py,sha256=oZJ2u0C7OewHiHwlJslT2o3RPlvY2HhPXPoRcSsBv4M,856
|
20
|
+
janito/agent/message_handler_protocol.py,sha256=E8PLl9ucNvPK_xmhLEkV-vhQzfO_P_BMvzpqDvUkcVY,150
|
21
|
+
janito/agent/openai_client.py,sha256=5l45zgMK3lC5k7xS83hKC6jUEyZIjgsY7VwKWmxGaDY,4996
|
22
|
+
janito/agent/openai_schema_generator.py,sha256=cquQLJYBIKaiA6ErDo-JRRF2mYl0kAu3bZzL6xcFHLQ,5925
|
23
|
+
janito/agent/platform_discovery.py,sha256=yp6KTvc-_u22Dr8-J4cdjVMUS8HkCf343aeSGRu2wek,2712
|
24
|
+
janito/agent/profile_manager.py,sha256=B-bwo1ZhtD2DaVPAfn0bNv1_inoduZhKGd694Pfy5GM,3231
|
25
|
+
janito/agent/providers.py,sha256=fiLrYHR_rqUs6mlKXv_QMbOwzSrf3GqoabBVV4JXA9U,2199
|
26
|
+
janito/agent/queued_message_handler.py,sha256=sjsZneGWkqvfuJNac9QERdHasp9lWZvNcow8dul7tVU,1844
|
27
|
+
janito/agent/rich_live.py,sha256=NKWU89hRakiJ-0N6FPg40bYREOxQizqicbDv9eUfsKs,927
|
28
|
+
janito/agent/rich_message_handler.py,sha256=HOm6-xUq7UrrGkE7UlDGtUPXz4BS6LZJuFv2Io1qZFs,2408
|
29
|
+
janito/agent/runtime_config.py,sha256=xSx0-RD-WVA9niSCEmEn2ZPLFbQfRhPwwGIa8tid_v8,901
|
30
|
+
janito/agent/test_handler_protocols.py,sha256=4o1IitFDUN1fdw48oQCRizKWahahumdmEZ4URHrlmiY,1404
|
31
|
+
janito/agent/tool_base.py,sha256=rf88iEX_uZ7MwkeDl4gGMtHeESg0dlFKUo2Jr_ZqDTY,1900
|
32
|
+
janito/agent/tool_executor.py,sha256=FuWpE4itUxtOS6n0JflCJePrBtXjed06R7haxZVIxmE,4677
|
33
|
+
janito/agent/tool_registry.py,sha256=FlZ8YEoHdk2n7t8vZ26bVbu-fi4UeSE_yu2mZq8pusU,1594
|
34
|
+
janito/agent/tool_use_tracker.py,sha256=QdzDieMJvmBk60Yd5NTyob0QE-9lSVraDjROw5jz-E4,2096
|
35
|
+
janito/agent/templates/profiles/system_prompt_template_base.txt.j2,sha256=Z_Nu6tsJIJ01QF7RgUP6oYZOF0Gl5xRpMpPeaRtwr7k,913
|
36
|
+
janito/agent/templates/profiles/system_prompt_template_base_pt.txt.j2,sha256=FX8piXbR9XNOEKkOSMt4ieZ2wn5fzQlffeQFf8d7gIc,723
|
37
|
+
janito/agent/tests/__init__.py,sha256=QuXHKEzUJ_DooaKqenv_tKuNH-HabuIVZhvW5JNaeIc,52
|
38
|
+
janito/agent/tools/__init__.py,sha256=EC8IPYi3VML4kH78CujL3b-bKBJp0mG5BslL4HNqDnw,1098
|
39
|
+
janito/agent/tools/ask_user.py,sha256=DL-jBU-njSjwhNSbgi23RZCrRBt5beDgZq_PG4yzbWM,3217
|
40
|
+
janito/agent/tools/create_directory.py,sha256=KFI2v3H3Mq_O2wN7jrOaIXiiZg7baJPanLoCNoLVJWM,2504
|
41
|
+
janito/agent/tools/create_file.py,sha256=On8vIPbbbCOTw_xL1vJ_anQbIpPisouoKuUM-i6e53k,2225
|
42
|
+
janito/agent/tools/delete_text_in_file.py,sha256=WIUDPgaaPK2Dk1WzKTPdfyckcoA6p51cwAf0SMiJj8c,3494
|
43
|
+
janito/agent/tools/fetch_url.py,sha256=KQI9w71N5KI6ThBeSlLqNRdLL9WCxYDdIMTwYTa9wrI,2371
|
44
|
+
janito/agent/tools/find_files.py,sha256=N467bqpx3j0VDUxc3wQGlK786vRYj-sQ3tQ7yXgkqj0,4137
|
45
|
+
janito/agent/tools/get_lines.py,sha256=LhH8tQexESRIuAWWkBypq0yUkW6J2njcjWlYx4M1brI,5099
|
46
|
+
janito/agent/tools/move_file.py,sha256=1EYe55JT-osFTXDzeCYHtEV7-i0cjPcc7tASzcOJyjI,4336
|
47
|
+
janito/agent/tools/present_choices.py,sha256=e7SpOs3RIUXL6zi6PoeFc64akTVVuiQe2yLrm0rKpNs,2327
|
48
|
+
janito/agent/tools/remove_directory.py,sha256=xXVqkaseRcjXSO3FwciJaf6WKaV00fkgHb-VC1ECaW4,2409
|
49
|
+
janito/agent/tools/remove_file.py,sha256=rm74sNFbP9Ikc6R5G-y2x--Cdm_Xhs037jZKR-L9Q78,2294
|
50
|
+
janito/agent/tools/replace_file.py,sha256=fxnrNeHNudexYL_Ko_CzrERGGKDAoC9pTUCgUEE8QPg,2840
|
51
|
+
janito/agent/tools/replace_text_in_file.py,sha256=E-efxMYKZMgrf2Gb38qRdJnd4AvfoOBguVKVZtQd_CY,9451
|
52
|
+
janito/agent/tools/run_bash_command.py,sha256=4tpHwJmBekVBb75vSnT6R8vlpxp8LD_FHhzmq6TxbV0,7474
|
53
|
+
janito/agent/tools/run_powershell_command.py,sha256=geqse-o2fZrc8u5Rr6fFH-9HNKL3V389GStcmUe4dXU,8230
|
54
|
+
janito/agent/tools/run_python_command.py,sha256=ti7yfjvRC8ZjvOucXp7ixeKgT4pY8i10uDeAjl3_1DY,6991
|
55
|
+
janito/agent/tools/search_text.py,sha256=eqvlZkdXHt5TQrSn8IDnZfgnnQF2asF9diSU2AeLuVo,9298
|
56
|
+
janito/agent/tools/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
|
57
|
+
janito/agent/tools/get_file_outline/core.py,sha256=crpumYww-2JXYGjWNO13sWy3rzWWlJjcUDjpdxWs4Jw,3235
|
58
|
+
janito/agent/tools/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
|
59
|
+
janito/agent/tools/get_file_outline/python_outline.py,sha256=P_GDB3ElMZtrLc5D3pQIueIA_7MxoOiyUbdcQXClyWo,4998
|
60
|
+
janito/agent/tools/get_file_outline/search_outline.py,sha256=l6yk1BJLpYRLbM2u4igvxMXeAmOXmyThT_Q-5Pj_B0o,987
|
61
|
+
janito/agent/tools/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
|
62
|
+
janito/agent/tools/validate_file_syntax/core.py,sha256=tXcXWyQUQKOMwESOt3uSVC93FK4Qc3obJzwAQiyIS2M,3162
|
63
|
+
janito/agent/tools/validate_file_syntax/css_validator.py,sha256=tRnCzNkpiYKQ_X9yvPeDPqZvc59He2T-2CbXmCs8Hjw,1371
|
64
|
+
janito/agent/tools/validate_file_syntax/html_validator.py,sha256=X1sS0-ZJn1d0hlfN-sIPHjCLME_o1PIs_G_YsswNqiA,2739
|
65
|
+
janito/agent/tools/validate_file_syntax/js_validator.py,sha256=oVkGxK9wBbZ3cFqwrV_aF76FDQwKPDvbXxXn1tL4We0,1018
|
66
|
+
janito/agent/tools/validate_file_syntax/json_validator.py,sha256=jfft16AjPqo4opIlv36Yc1QhpwiYVlMOyfeAJuhRZ8U,170
|
67
|
+
janito/agent/tools/validate_file_syntax/markdown_validator.py,sha256=CJBG9ERfXy0Liy2FtbkdnkQS1yNq1hxzMlL8UJx4T6E,2863
|
68
|
+
janito/agent/tools/validate_file_syntax/ps1_validator.py,sha256=DQbsIIC3oaFkbeK7BMjZcIzy-zkPHX1JbhMMS3q_rmc,1172
|
69
|
+
janito/agent/tools/validate_file_syntax/python_validator.py,sha256=SN9eNgk9Uormr_kfyan9hCZClZ1LB5guObOzbZRyo6c,150
|
70
|
+
janito/agent/tools/validate_file_syntax/xml_validator.py,sha256=nDHMnrSdjAyQhbSIJZcDuqEkeiJmjvTALlKdtn_Ny0k,304
|
71
|
+
janito/agent/tools/validate_file_syntax/yaml_validator.py,sha256=zDg0F-7y9WDU5ur75tBEicIreQjZ8pXjc_FYyTUuXmo,175
|
72
|
+
janito/agent/tools_utils/__init__.py,sha256=tMniEJ8rcFeiztKqidRe-sCRJh02gMw_s1OjcQB1Rg4,28
|
73
|
+
janito/agent/tools_utils/dir_walk_utils.py,sha256=0r86VlWt_7TL0MtKpYR_G3KTESMl5seRT0fsY61CSVo,1081
|
74
|
+
janito/agent/tools_utils/formatting.py,sha256=p781lIQ1tqGMQgOlo5KyddPmurqoromrsNVdxKKJQDY,1132
|
75
|
+
janito/agent/tools_utils/gitignore_utils.py,sha256=vVcUqd5XGNp3BMMAxiGTzbaDPfjemHpbIVZrKMllo4Q,1340
|
76
|
+
janito/agent/tools_utils/utils.py,sha256=nVFOqaclfs18z4XB2rvr0JlwPa-RH1H-eSs8ejdXR5k,966
|
77
|
+
janito/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
|
+
janito/cli/_livereload_log_utils.py,sha256=BGhf1VT3dVR2ZhyTnZeTFg4I8Zj2tAn2UslME-ouxXA,482
|
79
|
+
janito/cli/_print_config.py,sha256=C_27QdwzhqorzeJflBFK0f46zTUtqqmdYe3EBurjOOE,3574
|
80
|
+
janito/cli/_termweb_log_utils.py,sha256=QpH40uxPhksrJHWqthW4cR7BhcSSYakpza_qTeFGABs,722
|
81
|
+
janito/cli/_utils.py,sha256=tRAUMDWKczd81ZvKYkwpsHWSeLzQoVlOoQ-lOw9Iujw,291
|
82
|
+
janito/cli/arg_parser.py,sha256=uQLDOr-m4azb1xQ9_HEXNPRR6qolx2l6jLrl30Gjcrw,8271
|
83
|
+
janito/cli/cli_main.py,sha256=SCCxKC9WIBb4qNqsSsfxW3KiyO8WiDLGIZgUFFCaDck,11265
|
84
|
+
janito/cli/config_commands.py,sha256=vfU7XciVMRNR5kDvn6tnCo1PLvSEXg0Y0PzLcDEFI9w,8539
|
85
|
+
janito/cli/config_runner.py,sha256=Nzam25C8P55dFlT_f6IlEj2ZvFwS63AAbnkIWe3oNsg,1702
|
86
|
+
janito/cli/formatting_runner.py,sha256=k0mtHoglqR8fKcebSK81iWTT_EL-gDl7eNfjlFZRY6g,287
|
87
|
+
janito/cli/livereload_starter.py,sha256=JivN7PRG9_dCEEOobXETQcJ7Ro9ELczg8AUbI8LHFPI,2285
|
88
|
+
janito/cli/logging_setup.py,sha256=_KLF69xqq1xLPIfkXxy0EIewO-Ef2eYoxNVjqjsC0vc,1361
|
89
|
+
janito/cli/main.py,sha256=wjmvbF2DdjMs8thZQQi80RSey62PObK2BNNOqtW2Ltc,8874
|
90
|
+
janito/cli/one_shot.py,sha256=Iqaj3DlcrqjUzwqqOKpKmsMIbLfNvqRvFIqHy4t7nIc,2696
|
91
|
+
janito/cli/termweb_starter.py,sha256=lN_MXGr_Glr82kS983caPyCXdKmhwzcEERmpCrfgcDA,2797
|
92
|
+
janito/i18n/__init__.py,sha256=7HYvwOTTf51pVm4adU79rl1FCtAjgOy6GzeShfYCdQY,970
|
93
|
+
janito/i18n/messages.py,sha256=fBuwOTFoygyHPkYphm6Y0r1iE8497Z4iryVAmPhMEkg,1851
|
94
|
+
janito/i18n/pt.py,sha256=52-ENCIrPW4A1tXFRT28xA8TwuUFoihs6ezJj-m3-Y4,4260
|
95
|
+
janito/livereload/app.py,sha256=oJTKDN5vpix26d1MA5iQz9mPLDu4VaHisAW8wtOUEhY,666
|
96
|
+
janito/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
97
|
+
janito/shell/commands.py,sha256=gqMKLvb6MrESPx51O28OP5I9hDZuBkRMaom3hT_ACqA,1586
|
98
|
+
janito/shell/main.py,sha256=hzsoflpMRVP6CXaw5YdKeh7JGeWR_OsJ88SoKgVz5R4,12551
|
99
|
+
janito/shell/commands/__init__.py,sha256=XGnXf6w_JZqpREJG3YN_UI9Zfc2uKK0Z_K9JMJ8gmfg,2002
|
100
|
+
janito/shell/commands/config.py,sha256=UTNbyNOLpIqlAle_JpCiffP7h5IOk7wxih-10_ok62w,959
|
101
|
+
janito/shell/commands/conversation_restart.py,sha256=IGCNO7Br9iHj1JH327B-R4Ps73g4qJOq2IvCZvJY-T0,2752
|
102
|
+
janito/shell/commands/edit.py,sha256=6o7T1FM18S2bGPadE61rvO3feWxGa5dfDFqtI4BwX9w,720
|
103
|
+
janito/shell/commands/history_view.py,sha256=m_-Olds5BI3gAdjZmx0i4kDBaMpLgmNBHVIIGDd6zq4,812
|
104
|
+
janito/shell/commands/lang.py,sha256=cG_gX61LUgzv_Bxk-UPTTNF1JQFfcUVaYBnPovUylNw,521
|
105
|
+
janito/shell/commands/livelogs.py,sha256=7lM7RRcsyisZz26Tk00_BYSkd9gvDuco_8z31xr49Ug,1753
|
106
|
+
janito/shell/commands/prompt.py,sha256=HW3z_JuJT6Zc5Yx8wJHDh4n2PZphu4ONTIMabVRTFnk,1949
|
107
|
+
janito/shell/commands/session.py,sha256=AHWC8eDrV5jta9Ak77FXu57qQvxEQC_8hVCICbkglRQ,1192
|
108
|
+
janito/shell/commands/session_control.py,sha256=nWxrc6OEX0ih872EwSEtodYhzBNPUC7rMr-ghmDw7ns,1249
|
109
|
+
janito/shell/commands/sum.py,sha256=WB89_NY34GrulqzKJchR5ovXmyJSYX7LP3sdaOgCT_E,1884
|
110
|
+
janito/shell/commands/termweb_log.py,sha256=jaVDefd2Sz-xBxGPcJqvsTRIpeynmVdi8vR2rP_nwCY,3321
|
111
|
+
janito/shell/commands/tools.py,sha256=_cnxXdu-xNkElcUnAv_lSrh3l9AKX5mH0E4HR1hZCU4,917
|
112
|
+
janito/shell/commands/utility.py,sha256=mfxv1J-VCzL4V2pAKMxQo1Rk8ZbyTFJ1PNh9hmqRVn0,1232
|
113
|
+
janito/shell/commands/verbose.py,sha256=vNtWCfpKxRY2t3Pzcz7FC1A9kZxMD26-zHSpE1JhuHc,1008
|
114
|
+
janito/shell/prompt/completer.py,sha256=6gNu0DNNSbUUVgjk8Y0hWwJwk-jbN8Lm6Y4u0mRu930,755
|
115
|
+
janito/shell/prompt/load_prompt.py,sha256=gHedc5TtaFBKiGgwRM_u9nVnBuLHDTSa8VPlPOtoMEA,2125
|
116
|
+
janito/shell/prompt/session_setup.py,sha256=ry4TqiXYyw3JmZfGRGIpvAgNMXGeWltCwz56NoiBqSY,1531
|
117
|
+
janito/shell/session/config.py,sha256=sG04S_z27wI7nXKMaVDcwDpBCuo6Cvd4uhutUQesJKo,3807
|
118
|
+
janito/shell/session/history.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
119
|
+
janito/shell/session/manager.py,sha256=E8TNBhiXHCbdNhhvzhUp4Zr_S3tdWagh1veDprwFTHY,3919
|
120
|
+
janito/shell/ui/interactive.py,sha256=XhR1vEZlLG8LijsZJqZCqvRoZVqruXHny3z-911XO6Q,7669
|
121
|
+
janito/termweb/app.py,sha256=co4a7cw6pC2P79dMZaNxjPJrP_B9suTGRIWTgqK5ccw,3322
|
122
|
+
janito/termweb/static/editor.css,sha256=rPSbQIVBCBnLlFJOQjHBOy2wWZkdbPDt4z8dWEBB83s,2870
|
123
|
+
janito/termweb/static/editor.css.bak,sha256=KPjMz7YwryaxOUmyHJNAlOv96KYtcMLj0zfYkUuc9Vs,924
|
124
|
+
janito/termweb/static/editor.html,sha256=XZpNejyIyzc1JVHnLGzc7dfUZO0ID_hX__rHpach9HU,2377
|
125
|
+
janito/termweb/static/editor.html.bak,sha256=X7t-EBYzv5RorkdM_kc0JerD6lXoNes4_ZIF8aFFfzs,2245
|
126
|
+
janito/termweb/static/editor.js,sha256=5FdYuQiWbmn3WUmHoUqkx_FAk6MVr8NXsglWeNl0re0,8331
|
127
|
+
janito/termweb/static/editor.js.bak,sha256=orBXq043dheUYwZP7HSnhkaIlR6cvGCBsoOroK-JaIg,8841
|
128
|
+
janito/termweb/static/explorer.html.bak,sha256=PM1fcbaQJm545WT94mVEekUNW3jduBAHOz6rwJBR1FA,2568
|
129
|
+
janito/termweb/static/favicon.ico,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
130
|
+
janito/termweb/static/favicon.ico.bak,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
|
+
janito/termweb/static/index.html,sha256=lwF9j4C0wL56rBEU3f0s3HzdSGOWxf64LbQhBUh5fxU,2934
|
132
|
+
janito/termweb/static/index.html.bak,sha256=PBEA-FxIhIYOGkyGKzefn7tsk8UxDIhSNtVkqPplQbs,2933
|
133
|
+
janito/termweb/static/index.html.bak.bak,sha256=dsKoC2lE0oJCGUUDTWcnIQE3s5Uoqd12WoTkWEwbH_c,6626
|
134
|
+
janito/termweb/static/landing.html.bak,sha256=JGwIcATj0B8MhHXLoXg2clypqsKJwi54NtW-rRDUsMs,1403
|
135
|
+
janito/termweb/static/termicon.svg,sha256=vc2Z3q-ADVK3pLzE3wnw_qpR6vDguWKEdH_pWObPjbw,229
|
136
|
+
janito/termweb/static/termweb.css,sha256=9AxhC2R8CzS82NHg9bk0GD-kxKt_NeRSRFGgTyi-3zI,4870
|
137
|
+
janito/termweb/static/termweb.css.bak,sha256=9AxhC2R8CzS82NHg9bk0GD-kxKt_NeRSRFGgTyi-3zI,4870
|
138
|
+
janito/termweb/static/termweb.js,sha256=hVzFd4gGMPEPvJEicQsXQpePp9mTjKVB_tS29xfWPhs,7720
|
139
|
+
janito/termweb/static/termweb.js.bak,sha256=G1UQJqtWMZOoPFMiSm4MRo-Pm1OqX1oMZ_Jcm4bsDq8,7721
|
140
|
+
janito/termweb/static/termweb.js.bak.bak,sha256=SQeqc9YwdreCmFJ7LtCYlHOjRHi8rsoW_fZ3x5WroWQ,7692
|
141
|
+
janito/termweb/static/termweb_quickopen.js,sha256=HNT85JjWAvjI5ROwukOU-oI4ZVVjCO6yg5IT115pdXI,5379
|
142
|
+
janito/termweb/static/termweb_quickopen.js.bak,sha256=sk_zbEw6HJt1iZSAYlaW0qAhq0to-KcBsOKx0AZqkKA,4814
|
143
|
+
janito/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
144
|
+
janito/web/__main__.py,sha256=5Ck6okOZmxKYkQ-ir4mxXDH7XWMNR-9szgsm0UyQLE0,734
|
145
|
+
janito/web/app.py,sha256=NarccXYgeYEMvws1lQSGZtArrzJIvw94LSNR0rW9Dq4,7331
|
146
|
+
janito-1.9.0.dist-info/licenses/LICENSE,sha256=sHBqv0bvtrb29H7WRR-Z603YHm9pLtJIo3nHU_9cmgE,1091
|
147
|
+
janito-1.9.0.dist-info/METADATA,sha256=Cxe4t_iI7poul_W8JwJX2ErMvdWZfQat18eD2Onphtw,12640
|
148
|
+
janito-1.9.0.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
|
149
|
+
janito-1.9.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
|
150
|
+
janito-1.9.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
|
151
|
+
janito-1.9.0.dist-info/RECORD,,
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
from janito.agent.tools.gitignore_utils import filter_ignored
|
3
|
-
|
4
|
-
|
5
|
-
def walk_dir_with_gitignore(root_dir, max_depth=0):
|
6
|
-
"""
|
7
|
-
Walks the directory tree starting at root_dir, yielding (root, dirs, files) tuples,
|
8
|
-
with .gitignore rules applied. If max_depth > 0, limits recursion to that depth.
|
9
|
-
"""
|
10
|
-
for root, dirs, files in os.walk(root_dir):
|
11
|
-
rel_path = os.path.relpath(root, root_dir)
|
12
|
-
depth = 0 if rel_path == "." else rel_path.count(os.sep) + 1
|
13
|
-
if max_depth > 0 and depth > max_depth:
|
14
|
-
continue
|
15
|
-
dirs, files = filter_ignored(root, dirs, files)
|
16
|
-
yield root, dirs, files
|
janito/agent/tools/memory.py
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
from janito.agent.tool_base import ToolBase
|
2
|
-
from janito.agent.tool_registry import register_tool
|
3
|
-
from janito.i18n import tr
|
4
|
-
|
5
|
-
|
6
|
-
@register_tool(name="memory")
|
7
|
-
class MemoryTool(ToolBase):
|
8
|
-
"""
|
9
|
-
Simple in-memory key-value store for demonstration purposes.
|
10
|
-
"""
|
11
|
-
|
12
|
-
def __init__(self):
|
13
|
-
super().__init__()
|
14
|
-
self.memory = {}
|
15
|
-
|
16
|
-
def run(self, action: str, key: str, value: str = None) -> str:
|
17
|
-
if action == "set":
|
18
|
-
self.report_info(tr("ℹ️ Storing value for key: '{key}' ...", key=key))
|
19
|
-
self.memory[key] = value
|
20
|
-
msg = tr("Value stored for key: '{key}'.", key=key)
|
21
|
-
self.report_success(msg)
|
22
|
-
return msg
|
23
|
-
elif action == "get":
|
24
|
-
self.report_info(tr("ℹ️ Retrieving value for key: '{key}' ...", key=key))
|
25
|
-
if key in self.memory:
|
26
|
-
msg = tr(
|
27
|
-
"Value for key '{key}': {value}", key=key, value=self.memory[key]
|
28
|
-
)
|
29
|
-
self.report_success(msg)
|
30
|
-
return msg
|
31
|
-
else:
|
32
|
-
msg = tr("Key '{key}' not found.", key=key)
|
33
|
-
self.report_warning(msg)
|
34
|
-
return msg
|
35
|
-
elif action == "delete":
|
36
|
-
if key in self.memory:
|
37
|
-
del self.memory[key]
|
38
|
-
msg = tr("Key '{key}' deleted.", key=key)
|
39
|
-
self.report_success(msg)
|
40
|
-
return msg
|
41
|
-
else:
|
42
|
-
msg = tr("Key '{key}' not found.", key=key)
|
43
|
-
self.report_error(msg)
|
44
|
-
return msg
|
45
|
-
else:
|
46
|
-
msg = tr("Unknown action: {action}", action=action)
|
47
|
-
self.report_error(msg)
|
48
|
-
return msg
|