janito 1.8.1__py3-none-any.whl → 1.10.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.
Files changed (142) hide show
  1. janito/__init__.py +1 -1
  2. janito/agent/api_exceptions.py +4 -0
  3. janito/agent/config.py +1 -1
  4. janito/agent/config_defaults.py +2 -3
  5. janito/agent/config_utils.py +0 -9
  6. janito/agent/conversation.py +177 -114
  7. janito/agent/conversation_api.py +179 -159
  8. janito/agent/conversation_tool_calls.py +11 -8
  9. janito/agent/llm_conversation_history.py +70 -0
  10. janito/agent/openai_client.py +44 -21
  11. janito/agent/openai_schema_generator.py +164 -128
  12. janito/agent/platform_discovery.py +134 -77
  13. janito/agent/profile_manager.py +5 -5
  14. janito/agent/rich_message_handler.py +80 -31
  15. janito/agent/templates/profiles/system_prompt_template_base.txt.j2 +9 -8
  16. janito/agent/test_openai_schema_generator.py +93 -0
  17. janito/agent/tool_base.py +7 -2
  18. janito/agent/tool_executor.py +63 -50
  19. janito/agent/tool_registry.py +5 -2
  20. janito/agent/tool_use_tracker.py +42 -5
  21. janito/agent/tools/__init__.py +13 -12
  22. janito/agent/tools/create_directory.py +9 -6
  23. janito/agent/tools/create_file.py +35 -54
  24. janito/agent/tools/delete_text_in_file.py +97 -0
  25. janito/agent/tools/fetch_url.py +50 -5
  26. janito/agent/tools/find_files.py +40 -26
  27. janito/agent/tools/get_file_outline/__init__.py +1 -0
  28. janito/agent/tools/{outline_file/__init__.py → get_file_outline/core.py} +14 -18
  29. janito/agent/tools/get_file_outline/python_outline.py +134 -0
  30. janito/agent/tools/{search_outline.py → get_file_outline/search_outline.py} +11 -0
  31. janito/agent/tools/get_lines.py +21 -12
  32. janito/agent/tools/move_file.py +13 -12
  33. janito/agent/tools/present_choices.py +3 -1
  34. janito/agent/tools/python_command_runner.py +150 -0
  35. janito/agent/tools/python_file_runner.py +148 -0
  36. janito/agent/tools/python_stdin_runner.py +154 -0
  37. janito/agent/tools/remove_directory.py +4 -2
  38. janito/agent/tools/remove_file.py +15 -13
  39. janito/agent/tools/replace_file.py +72 -0
  40. janito/agent/tools/replace_text_in_file.py +7 -5
  41. janito/agent/tools/run_bash_command.py +29 -72
  42. janito/agent/tools/run_powershell_command.py +142 -102
  43. janito/agent/tools/search_text.py +177 -131
  44. janito/agent/tools/validate_file_syntax/__init__.py +1 -0
  45. janito/agent/tools/validate_file_syntax/core.py +94 -0
  46. janito/agent/tools/validate_file_syntax/css_validator.py +35 -0
  47. janito/agent/tools/validate_file_syntax/html_validator.py +77 -0
  48. janito/agent/tools/validate_file_syntax/js_validator.py +27 -0
  49. janito/agent/tools/validate_file_syntax/json_validator.py +6 -0
  50. janito/agent/tools/validate_file_syntax/markdown_validator.py +66 -0
  51. janito/agent/tools/validate_file_syntax/ps1_validator.py +32 -0
  52. janito/agent/tools/validate_file_syntax/python_validator.py +5 -0
  53. janito/agent/tools/validate_file_syntax/xml_validator.py +11 -0
  54. janito/agent/tools/validate_file_syntax/yaml_validator.py +6 -0
  55. janito/agent/tools_utils/__init__.py +1 -0
  56. janito/agent/tools_utils/action_type.py +7 -0
  57. janito/agent/tools_utils/dir_walk_utils.py +24 -0
  58. janito/agent/tools_utils/formatting.py +49 -0
  59. janito/agent/tools_utils/gitignore_utils.py +69 -0
  60. janito/agent/tools_utils/test_gitignore_utils.py +46 -0
  61. janito/agent/tools_utils/utils.py +30 -0
  62. janito/cli/_livereload_log_utils.py +13 -0
  63. janito/cli/_print_config.py +63 -61
  64. janito/cli/arg_parser.py +57 -14
  65. janito/cli/cli_main.py +270 -0
  66. janito/cli/livereload_starter.py +60 -0
  67. janito/cli/main.py +166 -99
  68. janito/cli/one_shot.py +80 -0
  69. janito/cli/termweb_starter.py +2 -2
  70. janito/i18n/__init__.py +1 -1
  71. janito/livereload/app.py +25 -0
  72. janito/rich_utils.py +41 -25
  73. janito/{cli_chat_shell → shell}/commands/__init__.py +19 -14
  74. janito/{cli_chat_shell → shell}/commands/config.py +4 -4
  75. janito/shell/commands/conversation_restart.py +74 -0
  76. janito/shell/commands/edit.py +24 -0
  77. janito/shell/commands/history_view.py +18 -0
  78. janito/{cli_chat_shell → shell}/commands/lang.py +3 -0
  79. janito/shell/commands/livelogs.py +42 -0
  80. janito/{cli_chat_shell → shell}/commands/prompt.py +16 -6
  81. janito/shell/commands/session.py +35 -0
  82. janito/{cli_chat_shell → shell}/commands/session_control.py +3 -5
  83. janito/{cli_chat_shell → shell}/commands/termweb_log.py +18 -10
  84. janito/shell/commands/tools.py +26 -0
  85. janito/shell/commands/track.py +36 -0
  86. janito/shell/commands/utility.py +28 -0
  87. janito/{cli_chat_shell → shell}/commands/verbose.py +4 -5
  88. janito/shell/commands.py +40 -0
  89. janito/shell/input_history.py +62 -0
  90. janito/shell/main.py +257 -0
  91. janito/{cli_chat_shell/shell_command_completer.py → shell/prompt/completer.py} +1 -1
  92. janito/{cli_chat_shell/chat_ui.py → shell/prompt/session_setup.py} +19 -5
  93. janito/shell/session/manager.py +101 -0
  94. janito/{cli_chat_shell/ui.py → shell/ui/interactive.py} +23 -17
  95. janito/termweb/app.py +3 -3
  96. janito/termweb/static/editor.css +142 -0
  97. janito/termweb/static/editor.css.bak +27 -0
  98. janito/termweb/static/editor.html +15 -213
  99. janito/termweb/static/editor.html.bak +16 -215
  100. janito/termweb/static/editor.js +209 -0
  101. janito/termweb/static/editor.js.bak +227 -0
  102. janito/termweb/static/index.html +2 -3
  103. janito/termweb/static/index.html.bak +2 -3
  104. janito/termweb/static/termweb.css.bak +33 -84
  105. janito/termweb/static/termweb.js +15 -34
  106. janito/termweb/static/termweb.js.bak +18 -36
  107. janito/tests/test_rich_utils.py +44 -0
  108. janito/web/app.py +0 -75
  109. {janito-1.8.1.dist-info → janito-1.10.0.dist-info}/METADATA +62 -42
  110. janito-1.10.0.dist-info/RECORD +158 -0
  111. {janito-1.8.1.dist-info → janito-1.10.0.dist-info}/WHEEL +1 -1
  112. janito/agent/tools/dir_walk_utils.py +0 -16
  113. janito/agent/tools/gitignore_utils.py +0 -46
  114. janito/agent/tools/memory.py +0 -48
  115. janito/agent/tools/outline_file/formatting.py +0 -20
  116. janito/agent/tools/outline_file/python_outline.py +0 -71
  117. janito/agent/tools/present_choices_test.py +0 -18
  118. janito/agent/tools/rich_live.py +0 -44
  119. janito/agent/tools/run_python_command.py +0 -163
  120. janito/agent/tools/tools_utils.py +0 -56
  121. janito/agent/tools/utils.py +0 -33
  122. janito/agent/tools/validate_file_syntax.py +0 -163
  123. janito/cli/runner/cli_main.py +0 -180
  124. janito/cli_chat_shell/chat_loop.py +0 -163
  125. janito/cli_chat_shell/chat_state.py +0 -38
  126. janito/cli_chat_shell/commands/history_start.py +0 -37
  127. janito/cli_chat_shell/commands/session.py +0 -48
  128. janito/cli_chat_shell/commands/sum.py +0 -49
  129. janito/cli_chat_shell/commands/utility.py +0 -32
  130. janito/cli_chat_shell/session_manager.py +0 -72
  131. janito-1.8.1.dist-info/RECORD +0 -127
  132. /janito/agent/tools/{outline_file → get_file_outline}/markdown_outline.py +0 -0
  133. /janito/cli/{runner/_termweb_log_utils.py → _termweb_log_utils.py} +0 -0
  134. /janito/cli/{runner/config.py → config_runner.py} +0 -0
  135. /janito/cli/{runner/formatting.py → formatting_runner.py} +0 -0
  136. /janito/{cli/runner → shell}/__init__.py +0 -0
  137. /janito/{cli_chat_shell → shell/prompt}/load_prompt.py +0 -0
  138. /janito/{cli_chat_shell/config_shell.py → shell/session/config.py} +0 -0
  139. /janito/{cli_chat_shell/__init__.py → shell/session/history.py} +0 -0
  140. {janito-1.8.1.dist-info → janito-1.10.0.dist-info}/entry_points.txt +0 -0
  141. {janito-1.8.1.dist-info → janito-1.10.0.dist-info}/licenses/LICENSE +0 -0
  142. {janito-1.8.1.dist-info → janito-1.10.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 1.8.1
3
+ Version: 1.10.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"
@@ -29,38 +30,12 @@ Dynamic: license-file
29
30
 
30
31
  # 🚀 Janito: Natural Language Coding Agent
31
32
 
32
- **Current Version: 1.8.1**
33
- See [CHANGELOG.md](./CHANGELOG.md) for details on the latest release.
34
-
35
33
  Janito is an AI-powered assistant for the command line and web that interprets natural language system_prompt_template to edit code, manage files, and analyze projects using patterns and tools designed by experienced software engineers. It prioritizes transparency, interactive clarification, and precise, reviewable changes.
36
34
 
37
35
  For a technical overview, see the [Architecture Guide](docs/reference/architecture.md).
38
36
 
39
- ## 🧪 Experimental Feature: termweb File Viewer
40
-
41
- Janito now includes an experimental lightweight web file viewer for use with the CLI chat shell. This feature allows you to click on file paths in the terminal (when using a Rich-compatible terminal) and instantly preview file contents in your browser—no full IDE required!
42
-
43
- ### How to Use
44
-
45
- - Start the CLI chat shell with the `--termweb` flag:
46
- ```bash
47
- janito --termweb
48
- ```
49
- - To disable the termweb file viewer, use the `--no-termweb` flag.
50
- - By default, the viewer runs at http://localhost:8088 (or the next available port up to 8100).
51
- - To specify a port, use `--termweb-port 8090`.
52
- - File paths in CLI output become clickable links that open the file in your browser.
53
-
54
- **Note:** This feature is experimental. It is intended for quick file previews and review, not for editing or production use. Feedback is welcome!
55
-
56
- ### Why is this useful?
57
- - Enables instant file previews from the CLI without a full IDE.
58
- - Works with all Janito file tools and outputs that display file paths.
59
- - Uses the Rich library’s link markup for clickable terminal links.
60
-
61
- ---
62
-
63
37
  ## 📖 Full Documentation & Overview
38
+
64
39
  - For structured and in-depth guides, visit the [Janito Documentation Site](https://docs.janito.dev).
65
40
  - For a high-level, user-friendly overview, see [janito.dev](https://janito.dev).
66
41
 
@@ -79,6 +54,7 @@ This will display a colorful table with the name, description, and parameters of
79
54
  ## ⚡ Quick Start
80
55
 
81
56
  ## 🖥️ Supported Human Interfaces
57
+
82
58
  Janito supports multiple ways for users to interact with the agent:
83
59
 
84
60
  - **CLI (Command Line Interface):** Run single prompts or commands directly from your terminal (e.g., `janito "Refactor the data processing module"`).
@@ -89,6 +65,7 @@ Janito supports multiple ways for users to interact with the agent:
89
65
  ![Janito Terminal Screenshot](https://github.com/joaompinto/janito/blob/main/docs/imgs/terminal.png?raw=true)
90
66
 
91
67
  ### 🛠️ Common CLI Modifiers
68
+
92
69
  You can alter Janito's behavior in any interface using these flags:
93
70
 
94
71
  - `--system` / `--system-file`: Override or customize the system prompt for the session.
@@ -99,13 +76,20 @@ You can alter Janito's behavior in any interface using these flags:
99
76
 
100
77
  These modifiers can be combined with any interface mode for tailored workflows.
101
78
 
79
+ ---
80
+
81
+ ## 📝 Full CLI Options Reference
82
+
83
+ The full list of CLI options has been moved to its own document for clarity. Please see [docs/CLI_OPTIONS.md](docs/CLI_OPTIONS.md) for a comprehensive, up-to-date reference of all supported command-line flags and their descriptions.
102
84
 
103
85
  Run a one-off prompt:
86
+
104
87
  ```bash
105
88
  janito "Refactor the data processing module to improve readability."
106
89
  ```
107
90
 
108
91
  Or start the interactive chat shell:
92
+
109
93
  ```bash
110
94
  janito
111
95
  ```
@@ -113,6 +97,7 @@ janito
113
97
  While in the chat shell, you can use special commands like `/reload` to reload the system prompt from a file without restarting your session. See the documentation for more shell commands.
114
98
 
115
99
  Launch the web UI:
100
+
116
101
  ```bash
117
102
  janito --web
118
103
  ```
@@ -120,25 +105,23 @@ janito --web
120
105
  ---
121
106
 
122
107
  ## ✨ Key Features
108
+
123
109
  - 📝 **Code Editing via Natural Language:** Modify, create, or delete code files simply by describing the changes.
124
110
  - 📁 **File & Directory Management:** Navigate, create, move, or remove files and folders.
125
111
  - 🧠 **Context-Aware:** Understands your project structure for precise edits.
126
112
  - 💬 **Interactive User Prompts:** Asks for clarification when needed.
127
113
  - 🛠️ **Extensible Tooling:** Built-in tools for file operations, shell commands, directory and file management, Python code execution and validation, text replacement, and more.
128
- - See [janito/agent/tools/README.md](janito/agent/tools/README.md) for the full list of built-in tools and their usage details. For the message handler model, see [docs/MESSAGE_HANDLER_MODEL.md](docs/MESSAGE_HANDLER_MODEL.md).
129
- - 🌐 **Web Interface (In Development):** Simple web UI for streaming responses and tool progress.
114
+ - See [janito/agent/tools/README.md](janito/agent/tools/README.md) for the full list of built-in tools and their usage details. For the message handler model, see [docs/reference/message-handler-model.md](docs/reference/message-handler-model.md).
130
115
 
131
116
  ## 📦 Installation
132
117
 
133
118
  ### Requirements
134
- - Python 3.10+
135
119
 
120
+ - Python 3.10+
136
121
 
137
122
  ### Contributing & Developer Guide
138
123
 
139
- If you want to extend Janito or add new tools, see the [Developer Guide](docs/README_DEV.md) for system_prompt_template, tool registration requirements, and code profile guidelines. For the full list of built-in tools and their usage, see the [Tools Reference](janito/agent/tools/README.md).
140
-
141
-
124
+ If you want to extend Janito or add new tools, see the [Developer Guide](docs/guides/developing.md) for system_prompt_template, tool registration requirements, and code profile guidelines. For the full list of built-in tools and their usage, see the [Tools Reference](janito/agent/tools/README.md).
142
125
 
143
126
  For the full changelog, see [CHANGELOG.md](./CHANGELOG.md).
144
127
 
@@ -148,28 +131,27 @@ For the full changelog, see [CHANGELOG.md](./CHANGELOG.md).
148
131
 
149
132
  See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for all configuration parameters, CLI flags, and advanced usage details. All CLI and configuration options have been moved there for clarity and maintainability.
150
133
 
151
-
152
134
  ### Obtaining an API Key from OpenRouter
153
135
 
154
136
  To use Janito with OpenRouter, you need an API key:
155
137
 
156
- 1. Visit https://openrouter.ai and sign up for an account.
138
+ 1. Visit https://platform.openai.com and sign up for an account.
157
139
  2. After logging in, go to your account dashboard.
158
140
  3. Navigate to the "API Keys" section.
159
141
  4. Click "Create new key" and copy the generated API key.
160
142
  5. Set your API key in Janito using:
143
+
161
144
  ```bash
162
145
  python -m janito --set-api-key YOUR_OPENROUTER_KEY
163
146
  ```
147
+
164
148
  Or add it to your configuration file as `api_key`.
165
149
 
166
150
  **Keep your API key secure and do not share it publicly.**
167
151
 
168
152
  ### Using Azure OpenAI
169
153
 
170
- For details on using models hosted on Azure OpenAI, see [docs/AZURE_OPENAI.md](docs/AZURE_OPENAI.md).
171
-
172
-
154
+ For details on using models hosted on Azure OpenAI, see [docs/reference/azure-openai.md](docs/reference/azure-openai.md).
173
155
 
174
156
  ---
175
157
 
@@ -178,20 +160,20 @@ For details on using models hosted on Azure OpenAI, see [docs/AZURE_OPENAI.md](d
178
160
  Janito operates using a system prompt template that defines its behavior, communication profile, and capabilities. By default, Janito assumes the role of a "software engineer"—this means its responses and actions are tailored to the expectations and best practices of professional software engineering.
179
161
 
180
162
  - **Role:** You can customize the agent's role (e.g., "data scientist", "DevOps engineer") using the `--role` flag or config. The default is `software engineer`.
181
- - **System Prompt Template:** The system prompt is rendered from a Jinja2 template (see `janito/agent/templates/prompt_prompt_template.j2`). This template governs how the agent interprets system_prompt_template, interacts with files, and communicates with users.
163
+ - **System Prompt Template:** The system prompt is rendered from a Jinja2 template (see `janito/agent/templates/profiles/system_prompt_template_base.txt.j2`). This template governs how the agent interprets system_prompt_template, interacts with files, and communicates with users.
182
164
  - **Customization & Precedence:** Advanced users can override the system prompt with the `--system` flag (raw string), or point to a custom file using `--system-file`. The precedence is: `--system-file` > `--system`/config > default template.
183
165
 
184
166
  The default template ensures the agent:
167
+
185
168
  - Prioritizes safe, reviewable, and minimal changes
186
169
  - Asks for clarification when system_prompt_template are ambiguous
187
170
  - Provides concise plans before taking action
188
171
  - Documents any changes made
189
172
 
190
- For more details or to customize the prompt, see the template file at `janito/agent/templates/prompt_prompt_template.j2` and the architecture overview in [docs/reference/architecture.md](docs/reference/architecture.md).
173
+ For more details or to customize the prompt, see the template file at `janito/agent/templates/profiles/system_prompt_template_base.txt.j2` and the architecture overview in [docs/reference/architecture.md](docs/reference/architecture.md).
191
174
 
192
175
  ---
193
176
 
194
-
195
177
  ## 🥛 Vanilla Mode
196
178
 
197
179
  Janito supports a "vanilla mode" for pure LLM interaction:
@@ -213,6 +195,7 @@ python -m janito --vanilla
213
195
  ```
214
196
 
215
197
  Vanilla mode is ideal for:
198
+
216
199
  - Testing raw model behavior
217
200
  - Comparing LLM output with and without agent guidance
218
201
  - Ensuring no agent-side intervention or context is added
@@ -222,12 +205,14 @@ Vanilla mode is ideal for:
222
205
  ## 👨‍💻 AgentProfileManager: Profile, Role, and Prompt Management
223
206
 
224
207
  Janito now uses a dedicated `AgentProfileManager` class to manage user profiles, roles, interaction profiles, and system prompt selection. This manager:
208
+
225
209
  - Stores the current role (e.g., "software engineer") and interaction profile (e.g., "default", "technical").
226
210
  - Renders the system prompt from the appropriate template based on interaction profile.
227
211
  - Instantiates and manages the low-level LLM Agent, passing the correct prompt.
228
212
  - Provides methods to update the role, interaction profile, and refresh the prompt at runtime.
229
213
 
230
214
  ### Multiple System Prompt Templates
215
+
231
216
  - The system prompt template is now selected based on the interaction profile (e.g., `default` or `technical`).
232
217
  - Templates are located in `janito/agent/templates/` (see `system_prompt_template.j2` and `system_prompt_template_technical.j2`).
233
218
  - You can switch interaction profiles at runtime using the profile manager, enabling different agent behaviors for different user needs.
@@ -239,19 +224,24 @@ See `janito/agent/profile_manager.py` for implementation details.
239
224
  ### Agent Interaction Style
240
225
 
241
226
  You can control the agent's behavior and prompt profile globally or per-project using the `profile` config key. See [Prompt Profiles Guide](docs/guides/prompt_profiles.md) for all available styles and combinations.
227
+
242
228
  - `default`: Concise, general-purpose agent (default)
243
229
  - `technical`: Strict, workflow-oriented for technical/developer use
244
230
 
245
231
  Set globally:
232
+
246
233
  ```bash
247
234
  janito --set-global-config profile=technical
248
235
  ```
236
+
249
237
  Or per-project (in your project root):
238
+
250
239
  ```bash
251
240
  janito --set-local-config profile=technical
252
241
  ```
253
242
 
254
243
  You can also override for a session with the CLI flag:
244
+
255
245
  ```bash
256
246
  janito --profile technical
257
247
  ```
@@ -267,11 +257,13 @@ Janito now supports combinatorial profiles for system prompts, allowing you to c
267
257
  - **Syntax:** Use a hyphen to combine, e.g., `technical-commit_all`.
268
258
 
269
259
  **How it works:**
260
+
270
261
  - The main profile template is loaded first.
271
262
  - Each feature extension template is layered on top, overriding or extending specific blocks in the main template.
272
263
  - Feature templates must use `{% extends parent_template %}` for dynamic inheritance.
273
264
 
274
265
  **Example usage:**
266
+
275
267
  ```bash
276
268
  janito --profile technical-commit_all
277
269
  ```
@@ -280,5 +272,33 @@ This will apply the `technical` profile with the `commit_all` feature enabled in
280
272
 
281
273
  See `janito/render_prompt.py` and `janito/agent/templates/` for implementation details and to create your own feature extensions.
282
274
 
275
+ ---
276
+
277
+ ## 📂 termweb File Viewer (Web File Preview)
278
+
279
+ Janito includes a lightweight web file viewer (termweb) that starts by default when you use the CLI chat shell. This feature allows you to click on file paths in the terminal (when using a Rich-compatible terminal) and instantly preview file contents in your browser—no full IDE required!
280
+
281
+ ### How to Use
282
+
283
+ - Start the CLI chat shell normally:
284
+
285
+ ```bash
286
+ janito
287
+ ```
288
+
289
+ - The termweb file viewer will start automatically by default.
290
+ - To disable the termweb file viewer, use the `--no-termweb` flag.
291
+ - By default, the viewer runs at http://localhost:8088 (or the next available port up to 8100).
292
+ - To specify a port, use `--termweb-port 8090`.
293
+ - File paths in CLI output become clickable links that open the file in your browser.
294
+
295
+ **Note:** The termweb file viewer is intended for quick file previews and review, not for editing or production use. Feedback is welcome!
296
+
297
+ ### Why is this useful?
298
+
299
+ - Enables instant file previews from the CLI without a full IDE.
300
+ - Works with all Janito file tools and outputs that display file paths.
301
+ - Uses the Rich library’s link markup for clickable terminal links.
302
+
283
303
  ---
284
304
  _generated by janito.dev_
@@ -0,0 +1,158 @@
1
+ janito/__init__.py,sha256=0Z1bbkzuusGr4X6p3MaoSYDAyNO2Ru3F4GP4ZJ1kBMg,28
2
+ janito/__main__.py,sha256=KKIoPBE9xPcb54PRYO2UOt0ti04iAwLeJlg8YY36vew,76
3
+ janito/rich_utils.py,sha256=x7OsZdwtAOtUu_HYbrAMga0LElFMPbQL8GZ62vw5Jh8,1825
4
+ janito/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ janito/agent/api_exceptions.py,sha256=TAz3FTE4soqUgKPqei2Jod9LOpA37g3s2-S3G5WGw4E,84
6
+ janito/agent/config.py,sha256=dO64nxiiHj-tLJLN8sfY10GUuIaOmWu-NX73n9zVHfg,4609
7
+ janito/agent/config_defaults.py,sha256=22MxI84GF8YL5avIjAWxHlvARxu4A2wD0oou_lqNCeA,460
8
+ janito/agent/config_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ janito/agent/content_handler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ janito/agent/conversation.py,sha256=jxt3DmvuWDQRNObvHwiWkj74qsfrNAjn4Syh-QBXuAA,9564
11
+ janito/agent/conversation_api.py,sha256=iRixc5Y5fEhdAwHBsLnC5gwzFvxhr1iHj3F8NO8MBSs,8104
12
+ janito/agent/conversation_exceptions.py,sha256=Aw7PRLb3eUfyDOGynKds5F48dgjyiOrTCEcWSprYC58,381
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/llm_conversation_history.py,sha256=ldDGOV4iYqEVNr4DYJUI3ahEs02kZcxQxCoydhv5PEA,2651
20
+ janito/agent/message_handler.py,sha256=oZJ2u0C7OewHiHwlJslT2o3RPlvY2HhPXPoRcSsBv4M,856
21
+ janito/agent/message_handler_protocol.py,sha256=E8PLl9ucNvPK_xmhLEkV-vhQzfO_P_BMvzpqDvUkcVY,150
22
+ janito/agent/openai_client.py,sha256=Hd4Rzq4ZiwVWgT1NgSCs7U_1YrXbdypQ4Wa1A_MK090,5341
23
+ janito/agent/openai_schema_generator.py,sha256=lxZocrm_HZzyONFrZsOx21FaAodAC63YGtck5TvTQZk,7654
24
+ janito/agent/platform_discovery.py,sha256=JN3kC7hkxdvuj-AyrJTlbbDJjtNHke3fdlZDqGi_uz0,4621
25
+ janito/agent/profile_manager.py,sha256=Esm8tewDVHnBdd7P04WeTY3F5p9O_ZB8cGlvC7awn7E,3196
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=80-y0FjAmOYUxUqrEN0Sx1tOXS_mRcczrs4t0OUQTpk,4023
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/test_openai_schema_generator.py,sha256=PJ6wrnNpH50MAzbXjuohZpe2rX7LLkQVdlWMcjxyXdk,2431
32
+ janito/agent/tool_base.py,sha256=KKWmMKyjxpWNukgdImLwZqs9cnS_tVzBt6cpQ532-KM,2025
33
+ janito/agent/tool_executor.py,sha256=yizyu88QteTHtJ_ktj679IqsaMyS-TQYR7rXnWI6lOg,5114
34
+ janito/agent/tool_registry.py,sha256=AjxYgQTeG9wUTyi0h128AG7INCyziF0z3zux12BlXnE,1673
35
+ janito/agent/tool_use_tracker.py,sha256=bEHirQX79u1uHnkmXO7t3JrBt2tHaQhaOzII7Nqiq5A,2874
36
+ janito/agent/templates/profiles/system_prompt_template_base.txt.j2,sha256=H7KtCXlBizxPUMQ9yGKuD_qpxOkS7-30RqOgl_fCBbA,963
37
+ janito/agent/templates/profiles/system_prompt_template_base_pt.txt.j2,sha256=FX8piXbR9XNOEKkOSMt4ieZ2wn5fzQlffeQFf8d7gIc,723
38
+ janito/agent/tests/__init__.py,sha256=QuXHKEzUJ_DooaKqenv_tKuNH-HabuIVZhvW5JNaeIc,52
39
+ janito/agent/tools/__init__.py,sha256=KtK5WMrtXfxr5NA2XZXDMSV4GdH4tN6KESFnEdv0BaQ,1207
40
+ janito/agent/tools/ask_user.py,sha256=DL-jBU-njSjwhNSbgi23RZCrRBt5beDgZq_PG4yzbWM,3217
41
+ janito/agent/tools/create_directory.py,sha256=biCLH3fuwuDdN7rb3VQl14JFhMAH3mk7giXepCD1_gM,2597
42
+ janito/agent/tools/create_file.py,sha256=O5thLevSXU61NdEi2z3kd9TAoq_dPA6-tvj1Jz6tR3k,2422
43
+ janito/agent/tools/delete_text_in_file.py,sha256=WIUDPgaaPK2Dk1WzKTPdfyckcoA6p51cwAf0SMiJj8c,3494
44
+ janito/agent/tools/fetch_url.py,sha256=pBSjh9lXs3ZN_2I_rNGUZDE-VSv3llLKYR3h_TyuQQY,3866
45
+ janito/agent/tools/find_files.py,sha256=QAUSHH7rlhJ7jkOot7UNCkAP2gsD9FvSVqxxgHGmNNA,4233
46
+ janito/agent/tools/get_lines.py,sha256=rzOE_MK3fvU76Rw2t2rY-jjJS3DpJiZq5sZq-U9Sz6Q,5262
47
+ janito/agent/tools/move_file.py,sha256=PX6uIDj91k4hvXl-dtsvDzdIcHLcaQxe7ePqQiqjc-Q,4433
48
+ janito/agent/tools/present_choices.py,sha256=XVO9jhWOUry7TedGPkOU4CG3COV_YdTUp3YiKyNKo2U,2422
49
+ janito/agent/tools/python_command_runner.py,sha256=CVQ-j1ZNpCYMJDg1nHELL9cn6GIA1yCmE9IBIbxgTWA,6404
50
+ janito/agent/tools/python_file_runner.py,sha256=1f43eQVPdetML-mPje0s5onfvPf4AqkbqvSM0AwKeU8,6231
51
+ janito/agent/tools/python_stdin_runner.py,sha256=X052bc4sHuEAq7KY6B33cyI254792W12jBr9e9nZY8E,6579
52
+ janito/agent/tools/remove_directory.py,sha256=3fKKbhQZaWHCOD_FW36NLL9jCPqOYWO9CO5vUS-_n04,2502
53
+ janito/agent/tools/remove_file.py,sha256=MGy5UrSGdyR5eT32XEXDQaFwogxLadrP-CDzXMvFygY,2411
54
+ janito/agent/tools/replace_file.py,sha256=JJ_9xY20GQaURCbU6yHcpFoyhMkD-TZp3OowWjx5KqY,3279
55
+ janito/agent/tools/replace_text_in_file.py,sha256=WThFVT7HeG2l93_LaN6jhK95RhPb021uI3s5dIo4WDw,9536
56
+ janito/agent/tools/run_bash_command.py,sha256=rmX0qwtK7OLEi53xO6yH8hyx6X9awV2RgoI7meemBrc,5881
57
+ janito/agent/tools/run_powershell_command.py,sha256=ZD9wR7bvNJH6Mepqd5UA1wMjz2WYblmkoWRqlvUSEBk,8913
58
+ janito/agent/tools/search_text.py,sha256=OHyJ3UTfrJjy7WLM1KXvjMxVVeK6nUYPMV-uzeDjY6E,10321
59
+ janito/agent/tools/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
60
+ janito/agent/tools/get_file_outline/core.py,sha256=eT09a_kpyHq60M7Sat73s4u4yfVYVwD1o9sTU4_fpbI,3314
61
+ janito/agent/tools/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
62
+ janito/agent/tools/get_file_outline/python_outline.py,sha256=P_GDB3ElMZtrLc5D3pQIueIA_7MxoOiyUbdcQXClyWo,4998
63
+ janito/agent/tools/get_file_outline/search_outline.py,sha256=_wPdylEFvl-iE3fuwY3MEUlaDKO5cbHxN1_DTJf5x8s,1079
64
+ janito/agent/tools/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
65
+ janito/agent/tools/validate_file_syntax/core.py,sha256=eO6XliUGS94-ofqsdHY2Rgw2ETzsdmcrnprayOulyq8,3254
66
+ janito/agent/tools/validate_file_syntax/css_validator.py,sha256=tRnCzNkpiYKQ_X9yvPeDPqZvc59He2T-2CbXmCs8Hjw,1371
67
+ janito/agent/tools/validate_file_syntax/html_validator.py,sha256=X1sS0-ZJn1d0hlfN-sIPHjCLME_o1PIs_G_YsswNqiA,2739
68
+ janito/agent/tools/validate_file_syntax/js_validator.py,sha256=oVkGxK9wBbZ3cFqwrV_aF76FDQwKPDvbXxXn1tL4We0,1018
69
+ janito/agent/tools/validate_file_syntax/json_validator.py,sha256=jfft16AjPqo4opIlv36Yc1QhpwiYVlMOyfeAJuhRZ8U,170
70
+ janito/agent/tools/validate_file_syntax/markdown_validator.py,sha256=CJBG9ERfXy0Liy2FtbkdnkQS1yNq1hxzMlL8UJx4T6E,2863
71
+ janito/agent/tools/validate_file_syntax/ps1_validator.py,sha256=DQbsIIC3oaFkbeK7BMjZcIzy-zkPHX1JbhMMS3q_rmc,1172
72
+ janito/agent/tools/validate_file_syntax/python_validator.py,sha256=SN9eNgk9Uormr_kfyan9hCZClZ1LB5guObOzbZRyo6c,150
73
+ janito/agent/tools/validate_file_syntax/xml_validator.py,sha256=nDHMnrSdjAyQhbSIJZcDuqEkeiJmjvTALlKdtn_Ny0k,304
74
+ janito/agent/tools/validate_file_syntax/yaml_validator.py,sha256=zDg0F-7y9WDU5ur75tBEicIreQjZ8pXjc_FYyTUuXmo,175
75
+ janito/agent/tools_utils/__init__.py,sha256=tMniEJ8rcFeiztKqidRe-sCRJh02gMw_s1OjcQB1Rg4,28
76
+ janito/agent/tools_utils/action_type.py,sha256=_BzW1VnJB48WiJCyniKWVzk-M9_d14KBK5oV4VAJ30c,119
77
+ janito/agent/tools_utils/dir_walk_utils.py,sha256=MY0bdKfYhAZ-8bT5S9XfFqWiq2ZOzQl0NAqz0BkyIg4,1127
78
+ janito/agent/tools_utils/formatting.py,sha256=SMvOmL6bst3KGcI7OLa5D4DE127fQYuHZS3oY8OPsn8,2031
79
+ janito/agent/tools_utils/gitignore_utils.py,sha256=YG8G_7_z0mbAL_xVbmJ8Aq6wHULfXkEP8WW6nBLh1rc,2977
80
+ janito/agent/tools_utils/test_gitignore_utils.py,sha256=ydA9mzza7QzgyEPjYsecKzPLyYFk0DGBVBz113LGklY,1891
81
+ janito/agent/tools_utils/utils.py,sha256=nVFOqaclfs18z4XB2rvr0JlwPa-RH1H-eSs8ejdXR5k,966
82
+ janito/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ janito/cli/_livereload_log_utils.py,sha256=BGhf1VT3dVR2ZhyTnZeTFg4I8Zj2tAn2UslME-ouxXA,482
84
+ janito/cli/_print_config.py,sha256=fzrVy23Ppe-Dax97VU759bus-KRe1VycU5MAPbHE72g,3259
85
+ janito/cli/_termweb_log_utils.py,sha256=QpH40uxPhksrJHWqthW4cR7BhcSSYakpza_qTeFGABs,722
86
+ janito/cli/_utils.py,sha256=tRAUMDWKczd81ZvKYkwpsHWSeLzQoVlOoQ-lOw9Iujw,291
87
+ janito/cli/arg_parser.py,sha256=8cE0E6zHWy4VE1jio3E3hyBpULD2AKo8q6QkTjyeWiQ,8345
88
+ janito/cli/cli_main.py,sha256=egi9Ql8iskSlmP_QU6eGAVqbzRp4lU5dt97K9WrIsn0,10341
89
+ janito/cli/config_commands.py,sha256=vfU7XciVMRNR5kDvn6tnCo1PLvSEXg0Y0PzLcDEFI9w,8539
90
+ janito/cli/config_runner.py,sha256=Nzam25C8P55dFlT_f6IlEj2ZvFwS63AAbnkIWe3oNsg,1702
91
+ janito/cli/formatting_runner.py,sha256=k0mtHoglqR8fKcebSK81iWTT_EL-gDl7eNfjlFZRY6g,287
92
+ janito/cli/livereload_starter.py,sha256=JivN7PRG9_dCEEOobXETQcJ7Ro9ELczg8AUbI8LHFPI,2285
93
+ janito/cli/logging_setup.py,sha256=_KLF69xqq1xLPIfkXxy0EIewO-Ef2eYoxNVjqjsC0vc,1361
94
+ janito/cli/main.py,sha256=6__L7xJS74SDVywpqqU7hw2_KpjTXu58-l-E9DBxiXQ,7296
95
+ janito/cli/one_shot.py,sha256=CP-05-jPhrKub1sButXytcfkTcfWXD9FWHLFO4pLjbA,3244
96
+ janito/cli/termweb_starter.py,sha256=lN_MXGr_Glr82kS983caPyCXdKmhwzcEERmpCrfgcDA,2797
97
+ janito/i18n/__init__.py,sha256=6zCIu6pSQpoMJvIRK9oOD3pkzbNeJik3lFDXse0X6ag,994
98
+ janito/i18n/messages.py,sha256=fBuwOTFoygyHPkYphm6Y0r1iE8497Z4iryVAmPhMEkg,1851
99
+ janito/i18n/pt.py,sha256=52-ENCIrPW4A1tXFRT28xA8TwuUFoihs6ezJj-m3-Y4,4260
100
+ janito/livereload/app.py,sha256=oJTKDN5vpix26d1MA5iQz9mPLDu4VaHisAW8wtOUEhY,666
101
+ janito/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ janito/shell/commands.py,sha256=gqMKLvb6MrESPx51O28OP5I9hDZuBkRMaom3hT_ACqA,1586
103
+ janito/shell/input_history.py,sha256=JedB9TQoRf31l2XGadeQtyx1qAAFPLRyXSvMLltRwZE,2542
104
+ janito/shell/main.py,sha256=oKmBrCxtTh9vkKH13g9ECR15lkqlueO_KaWl59SJKYA,9863
105
+ janito/shell/commands/__init__.py,sha256=CJGXhVFEQdbIL214g3vF7vhyvlvtjqjFHjSMMTjXHjM,2016
106
+ janito/shell/commands/config.py,sha256=UTNbyNOLpIqlAle_JpCiffP7h5IOk7wxih-10_ok62w,959
107
+ janito/shell/commands/conversation_restart.py,sha256=b32vWa7rm43lA1SrFZ0v-OAB-zf4dTP307rEr52Mt9A,2825
108
+ janito/shell/commands/edit.py,sha256=l06cigmTSfWmhzCSP7enajHf2EW6HaKlQyr-5QLLEFw,791
109
+ janito/shell/commands/history_view.py,sha256=SoAR5bPIF6xN85F6HoxQJxAV8BluU_934T-CaMYnN7A,797
110
+ janito/shell/commands/lang.py,sha256=Ry1OgQmzgR0p6SgjWg-j5sdpHkLRIUCVGtTzkBOhJzg,599
111
+ janito/shell/commands/livelogs.py,sha256=GDx9UL7bYOfemCBsIWLrKOCgG-PYy7X_VLrl5USqpgE,1758
112
+ janito/shell/commands/prompt.py,sha256=OpcKg3-Vhy8enFJEc2LS-JrEQzH4Y-nogzVj2-dnGqI,2059
113
+ janito/shell/commands/session.py,sha256=tYav6GgjAZkvWhlI_rfG6OArNqW6Wn2DTv39Hb20QYc,1262
114
+ janito/shell/commands/session_control.py,sha256=PAFg00vXQvIhAuCtd4L149hrj8jGguB0EtBJwo-CFLo,1295
115
+ janito/shell/commands/termweb_log.py,sha256=xxFz2GhFRI7w7jNk0D0Gq6RFBuzIZF1paDMK2MBeNWA,3519
116
+ janito/shell/commands/tools.py,sha256=Z6kB0Lu87gzWYiUcjNB_kkX-jCNSRpZZh_qgetzhFMU,970
117
+ janito/shell/commands/track.py,sha256=xOqVHjcnrMWZ_vhP1gpT0-2NUvJqPVT-MGdC38NJatg,1577
118
+ janito/shell/commands/utility.py,sha256=kuUw1kklQa7c4okSFJ2bRA92NV-YUXqgor5Io7y1zGM,860
119
+ janito/shell/commands/verbose.py,sha256=mg7BlsWTkNwbUBN2p_GME4ep3zzAp0jMSc6N4BT3Ebg,980
120
+ janito/shell/prompt/completer.py,sha256=6gNu0DNNSbUUVgjk8Y0hWwJwk-jbN8Lm6Y4u0mRu930,755
121
+ janito/shell/prompt/load_prompt.py,sha256=gHedc5TtaFBKiGgwRM_u9nVnBuLHDTSa8VPlPOtoMEA,2125
122
+ janito/shell/prompt/session_setup.py,sha256=ry4TqiXYyw3JmZfGRGIpvAgNMXGeWltCwz56NoiBqSY,1531
123
+ janito/shell/session/config.py,sha256=sG04S_z27wI7nXKMaVDcwDpBCuo6Cvd4uhutUQesJKo,3807
124
+ janito/shell/session/history.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
+ janito/shell/session/manager.py,sha256=LGf2x9mprGOHAJhq7_OfIZM8Z2bmAEJ_KakaZr1XqXc,3116
126
+ janito/shell/ui/interactive.py,sha256=Uuy7Kr-wUeibO6sCqrOP3YBrAuv1znB3cl9EyHGp-wc,7491
127
+ janito/termweb/app.py,sha256=co4a7cw6pC2P79dMZaNxjPJrP_B9suTGRIWTgqK5ccw,3322
128
+ janito/termweb/static/editor.css,sha256=lGUS--FZ7gw8nlm2Apb7Xoa3Wai0V8D789TFxQHat7Q,2799
129
+ janito/termweb/static/editor.css.bak,sha256=KPjMz7YwryaxOUmyHJNAlOv96KYtcMLj0zfYkUuc9Vs,924
130
+ janito/termweb/static/editor.html,sha256=XZpNejyIyzc1JVHnLGzc7dfUZO0ID_hX__rHpach9HU,2377
131
+ janito/termweb/static/editor.html.bak,sha256=X7t-EBYzv5RorkdM_kc0JerD6lXoNes4_ZIF8aFFfzs,2245
132
+ janito/termweb/static/editor.js,sha256=5FdYuQiWbmn3WUmHoUqkx_FAk6MVr8NXsglWeNl0re0,8331
133
+ janito/termweb/static/editor.js.bak,sha256=orBXq043dheUYwZP7HSnhkaIlR6cvGCBsoOroK-JaIg,8841
134
+ janito/termweb/static/explorer.html.bak,sha256=PM1fcbaQJm545WT94mVEekUNW3jduBAHOz6rwJBR1FA,2568
135
+ janito/termweb/static/favicon.ico,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
+ janito/termweb/static/favicon.ico.bak,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
+ janito/termweb/static/index.html,sha256=lwF9j4C0wL56rBEU3f0s3HzdSGOWxf64LbQhBUh5fxU,2934
138
+ janito/termweb/static/index.html.bak,sha256=PBEA-FxIhIYOGkyGKzefn7tsk8UxDIhSNtVkqPplQbs,2933
139
+ janito/termweb/static/index.html.bak.bak,sha256=dsKoC2lE0oJCGUUDTWcnIQE3s5Uoqd12WoTkWEwbH_c,6626
140
+ janito/termweb/static/landing.html.bak,sha256=JGwIcATj0B8MhHXLoXg2clypqsKJwi54NtW-rRDUsMs,1403
141
+ janito/termweb/static/termicon.svg,sha256=vc2Z3q-ADVK3pLzE3wnw_qpR6vDguWKEdH_pWObPjbw,229
142
+ janito/termweb/static/termweb.css,sha256=9AxhC2R8CzS82NHg9bk0GD-kxKt_NeRSRFGgTyi-3zI,4870
143
+ janito/termweb/static/termweb.css.bak,sha256=9AxhC2R8CzS82NHg9bk0GD-kxKt_NeRSRFGgTyi-3zI,4870
144
+ janito/termweb/static/termweb.js,sha256=hVzFd4gGMPEPvJEicQsXQpePp9mTjKVB_tS29xfWPhs,7720
145
+ janito/termweb/static/termweb.js.bak,sha256=G1UQJqtWMZOoPFMiSm4MRo-Pm1OqX1oMZ_Jcm4bsDq8,7721
146
+ janito/termweb/static/termweb.js.bak.bak,sha256=SQeqc9YwdreCmFJ7LtCYlHOjRHi8rsoW_fZ3x5WroWQ,7692
147
+ janito/termweb/static/termweb_quickopen.js,sha256=HNT85JjWAvjI5ROwukOU-oI4ZVVjCO6yg5IT115pdXI,5379
148
+ janito/termweb/static/termweb_quickopen.js.bak,sha256=sk_zbEw6HJt1iZSAYlaW0qAhq0to-KcBsOKx0AZqkKA,4814
149
+ janito/tests/test_rich_utils.py,sha256=S_mGVynekAP0DM4A_ZaY-SseJGtdlBJxOlzc-v8lJX8,1283
150
+ janito/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
+ janito/web/__main__.py,sha256=5Ck6okOZmxKYkQ-ir4mxXDH7XWMNR-9szgsm0UyQLE0,734
152
+ janito/web/app.py,sha256=-zUBA1zlnrZdYbI421CSAgFZXOisLmIznNzUJrkSLQQ,4762
153
+ janito-1.10.0.dist-info/licenses/LICENSE,sha256=sHBqv0bvtrb29H7WRR-Z603YHm9pLtJIo3nHU_9cmgE,1091
154
+ janito-1.10.0.dist-info/METADATA,sha256=SYVAEStx_BmbZBWGtORTqaoFLtv5ej9iT730hPX2Tg8,12879
155
+ janito-1.10.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
156
+ janito-1.10.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
157
+ janito-1.10.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
158
+ janito-1.10.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.0.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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
@@ -1,46 +0,0 @@
1
- import os
2
- import pathspec
3
- from janito.agent.tools.utils import expand_path
4
-
5
- _spec = None
6
-
7
-
8
- def load_gitignore_patterns(gitignore_path=".gitignore"):
9
- global _spec
10
- gitignore_path = expand_path(gitignore_path)
11
- if not os.path.exists(gitignore_path):
12
- _spec = pathspec.PathSpec.from_lines("gitwildmatch", [])
13
- return _spec
14
- with open(gitignore_path, "r", encoding="utf-8", errors="replace") as f:
15
- lines = f.readlines()
16
- _spec = pathspec.PathSpec.from_lines("gitwildmatch", lines)
17
- return _spec
18
-
19
-
20
- def is_ignored(path):
21
- global _spec
22
- path = expand_path(path)
23
- if _spec is None:
24
- _spec = load_gitignore_patterns()
25
- # Normalize path to be relative and use forward slashes
26
- rel_path = os.path.relpath(path).replace(os.sep, "/")
27
- return _spec.match_file(rel_path)
28
-
29
-
30
- def filter_ignored(root, dirs, files, spec=None):
31
- if spec is None:
32
- global _spec
33
- if _spec is None:
34
- _spec = load_gitignore_patterns()
35
- spec = _spec
36
-
37
- def not_ignored(p):
38
- rel_path = os.path.relpath(os.path.join(root, p)).replace(os.sep, "/")
39
- # Always ignore .git directory (like git does)
40
- if rel_path == ".git" or rel_path.startswith(".git/"):
41
- return False
42
- return not spec.match_file(rel_path)
43
-
44
- dirs[:] = [d for d in dirs if not_ignored(d)]
45
- files = [f for f in files if not_ignored(f)]
46
- return dirs, files
@@ -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
@@ -1,20 +0,0 @@
1
- def format_outline_table(outline_items):
2
- if not outline_items:
3
- return "No classes, functions, or variables found."
4
- header = "| Type | Name | Start | End | Parent |\n|---------|-------------|-------|-----|----------|"
5
- rows = []
6
- for item in outline_items:
7
- rows.append(
8
- f"| {item['type']:<7} | {item['name']:<11} | {item['start']:<5} | {item['end']:<3} | {item['parent']:<8} |"
9
- )
10
- return header + "\n" + "\n".join(rows)
11
-
12
-
13
- def format_markdown_outline_table(outline_items):
14
- if not outline_items:
15
- return "No headers found."
16
- header = "| Level | Header | Line |\n|-------|----------------------------------|------|"
17
- rows = []
18
- for item in outline_items:
19
- rows.append(f"| {item['level']:<5} | {item['title']:<32} | {item['line']:<4} |")
20
- return header + "\n" + "\n".join(rows)
@@ -1,71 +0,0 @@
1
- import re
2
- from typing import List
3
-
4
-
5
- def parse_python_outline(lines: List[str]):
6
- class_pat = re.compile(r"^(\s*)class\s+(\w+)")
7
- func_pat = re.compile(r"^(\s*)def\s+(\w+)")
8
- assign_pat = re.compile(r"^(\s*)([A-Za-z_][A-Za-z0-9_]*)\s*=.*")
9
- outline = []
10
- stack = [] # (type, name, indent, start, parent)
11
- for idx, line in enumerate(lines):
12
- class_match = class_pat.match(line)
13
- func_match = func_pat.match(line)
14
- assign_match = assign_pat.match(line)
15
- indent = len(line) - len(line.lstrip())
16
- if class_match:
17
- name = class_match.group(2)
18
- parent = stack[-1][1] if stack and stack[-1][0] == "class" else ""
19
- stack.append(("class", name, indent, idx + 1, parent))
20
- elif func_match:
21
- name = func_match.group(2)
22
- parent = (
23
- stack[-1][1]
24
- if stack
25
- and stack[-1][0] in ("class", "function")
26
- and indent > stack[-1][2]
27
- else ""
28
- )
29
- stack.append(("function", name, indent, idx + 1, parent))
30
- elif assign_match and indent == 0:
31
- var_name = assign_match.group(2)
32
- var_type = "const" if var_name.isupper() else "var"
33
- outline.append(
34
- {
35
- "type": var_type,
36
- "name": var_name,
37
- "start": idx + 1,
38
- "end": idx + 1,
39
- "parent": "",
40
- }
41
- )
42
- while stack and indent < stack[-1][2]:
43
- popped = stack.pop()
44
- outline.append(
45
- {
46
- "type": (
47
- popped[0]
48
- if popped[0] != "function" or popped[3] == 1
49
- else ("method" if popped[4] else "function")
50
- ),
51
- "name": popped[1],
52
- "start": popped[3],
53
- "end": idx,
54
- "parent": popped[4],
55
- }
56
- )
57
- for popped in stack:
58
- outline.append(
59
- {
60
- "type": (
61
- popped[0]
62
- if popped[0] != "function" or popped[3] == 1
63
- else ("method" if popped[4] else "function")
64
- ),
65
- "name": popped[1],
66
- "start": popped[3],
67
- "end": len(lines),
68
- "parent": popped[4],
69
- }
70
- )
71
- return outline