janito 2.7.0__py3-none-any.whl → 2.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.
Files changed (121) hide show
  1. janito/__init__.py +0 -1
  2. janito/__main__.py +0 -1
  3. janito/_version.py +0 -3
  4. janito/agent/setup_agent.py +77 -10
  5. janito/agent/templates/profiles/{system_prompt_template_plain_software_developer.txt.j2 → system_prompt_template_Developer_with_Python_Tools.txt.j2} +5 -1
  6. janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +3 -12
  7. janito/cli/__init__.py +0 -1
  8. janito/cli/chat_mode/bindings.py +1 -1
  9. janito/cli/chat_mode/chat_entry.py +0 -2
  10. janito/cli/chat_mode/prompt_style.py +0 -3
  11. janito/cli/chat_mode/script_runner.py +9 -5
  12. janito/cli/chat_mode/session.py +100 -37
  13. janito/cli/chat_mode/session_profile_select.py +61 -52
  14. janito/cli/chat_mode/shell/commands/__init__.py +1 -5
  15. janito/cli/chat_mode/shell/commands/_priv_check.py +1 -0
  16. janito/cli/chat_mode/shell/commands/_priv_status.py +13 -0
  17. janito/cli/chat_mode/shell/commands/bang.py +10 -3
  18. janito/cli/chat_mode/shell/commands/conversation_restart.py +24 -7
  19. janito/cli/chat_mode/shell/commands/execute.py +22 -7
  20. janito/cli/chat_mode/shell/commands/help.py +4 -1
  21. janito/cli/chat_mode/shell/commands/model.py +13 -5
  22. janito/cli/chat_mode/shell/commands/privileges.py +21 -0
  23. janito/cli/chat_mode/shell/commands/prompt.py +0 -2
  24. janito/cli/chat_mode/shell/commands/read.py +22 -5
  25. janito/cli/chat_mode/shell/commands/tools.py +15 -4
  26. janito/cli/chat_mode/shell/commands/write.py +22 -5
  27. janito/cli/chat_mode/shell/input_history.py +3 -1
  28. janito/cli/chat_mode/shell/session/manager.py +0 -2
  29. janito/cli/chat_mode/toolbar.py +25 -19
  30. janito/cli/cli_commands/list_config.py +31 -0
  31. janito/cli/cli_commands/list_models.py +1 -1
  32. janito/cli/cli_commands/list_profiles.py +79 -0
  33. janito/cli/cli_commands/list_providers.py +1 -0
  34. janito/cli/cli_commands/list_tools.py +35 -7
  35. janito/cli/cli_commands/model_utils.py +5 -3
  36. janito/cli/cli_commands/show_config.py +16 -11
  37. janito/cli/cli_commands/show_system_prompt.py +23 -9
  38. janito/cli/config.py +0 -13
  39. janito/cli/core/getters.py +16 -1
  40. janito/cli/core/runner.py +25 -8
  41. janito/cli/core/setters.py +13 -76
  42. janito/cli/main_cli.py +60 -27
  43. janito/cli/prompt_core.py +19 -18
  44. janito/cli/prompt_setup.py +6 -3
  45. janito/cli/rich_terminal_reporter.py +19 -5
  46. janito/cli/single_shot_mode/handler.py +14 -5
  47. janito/cli/verbose_output.py +5 -1
  48. janito/config.py +1 -0
  49. janito/config_manager.py +15 -2
  50. janito/drivers/azure_openai/driver.py +27 -30
  51. janito/drivers/openai/driver.py +53 -36
  52. janito/formatting_token.py +12 -4
  53. janito/llm/agent.py +15 -6
  54. janito/llm/driver.py +1 -0
  55. janito/llm/provider.py +1 -1
  56. janito/provider_registry.py +31 -70
  57. janito/providers/__init__.py +1 -0
  58. janito/providers/anthropic/model_info.py +0 -1
  59. janito/providers/anthropic/provider.py +9 -14
  60. janito/providers/azure_openai/provider.py +10 -5
  61. janito/providers/deepseek/provider.py +5 -4
  62. janito/providers/google/model_info.py +4 -2
  63. janito/providers/google/provider.py +11 -5
  64. janito/providers/groq/__init__.py +1 -0
  65. janito/providers/groq/model_info.py +45 -0
  66. janito/providers/groq/provider.py +76 -0
  67. janito/providers/moonshotai/provider.py +11 -4
  68. janito/providers/openai/model_info.py +0 -1
  69. janito/providers/openai/provider.py +6 -7
  70. janito/tools/__init__.py +2 -0
  71. janito/tools/adapters/local/__init__.py +2 -1
  72. janito/tools/adapters/local/adapter.py +21 -4
  73. janito/tools/adapters/local/ask_user.py +1 -0
  74. janito/tools/adapters/local/copy_file.py +1 -0
  75. janito/tools/adapters/local/create_directory.py +1 -0
  76. janito/tools/adapters/local/create_file.py +1 -0
  77. janito/tools/adapters/local/delete_text_in_file.py +2 -1
  78. janito/tools/adapters/local/fetch_url.py +1 -0
  79. janito/tools/adapters/local/find_files.py +7 -6
  80. janito/tools/adapters/local/get_file_outline/core.py +1 -0
  81. janito/tools/adapters/local/get_file_outline/java_outline.py +22 -15
  82. janito/tools/adapters/local/get_file_outline/search_outline.py +1 -0
  83. janito/tools/adapters/local/move_file.py +1 -0
  84. janito/tools/adapters/local/open_html_in_browser.py +15 -5
  85. janito/tools/adapters/local/open_url.py +1 -0
  86. janito/tools/adapters/local/python_code_run.py +1 -0
  87. janito/tools/adapters/local/python_command_run.py +1 -0
  88. janito/tools/adapters/local/python_file_run.py +1 -0
  89. janito/tools/adapters/local/read_files.py +19 -4
  90. janito/tools/adapters/local/remove_directory.py +1 -0
  91. janito/tools/adapters/local/remove_file.py +1 -0
  92. janito/tools/adapters/local/replace_text_in_file.py +4 -3
  93. janito/tools/adapters/local/run_bash_command.py +1 -0
  94. janito/tools/adapters/local/run_powershell_command.py +1 -0
  95. janito/tools/adapters/local/search_text/core.py +18 -17
  96. janito/tools/adapters/local/search_text/match_lines.py +5 -5
  97. janito/tools/adapters/local/search_text/pattern_utils.py +1 -1
  98. janito/tools/adapters/local/search_text/traverse_directory.py +7 -7
  99. janito/tools/adapters/local/validate_file_syntax/core.py +1 -1
  100. janito/tools/adapters/local/validate_file_syntax/html_validator.py +8 -1
  101. janito/tools/disabled_tools.py +68 -0
  102. janito/tools/path_security.py +18 -11
  103. janito/tools/permissions.py +6 -0
  104. janito/tools/permissions_parse.py +4 -3
  105. janito/tools/tool_base.py +11 -5
  106. janito/tools/tool_use_tracker.py +1 -4
  107. janito/tools/tool_utils.py +1 -1
  108. janito/tools/tools_adapter.py +57 -25
  109. {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/METADATA +11 -19
  110. janito-2.9.0.dist-info/RECORD +205 -0
  111. janito/cli/chat_mode/shell/commands/livelogs.py +0 -49
  112. janito/drivers/mistralai/driver.py +0 -41
  113. janito/providers/mistralai/model_info.py +0 -37
  114. janito/providers/mistralai/provider.py +0 -72
  115. janito/providers/provider_static_info.py +0 -21
  116. janito-2.7.0.dist-info/RECORD +0 -202
  117. /janito/agent/templates/profiles/{system_prompt_template_assistant.txt.j2 → system_prompt_template_model_conversation_without_tools_or_context.txt.j2} +0 -0
  118. {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/WHEEL +0 -0
  119. {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/entry_points.txt +0 -0
  120. {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/licenses/LICENSE +0 -0
  121. {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/top_level.txt +0 -0
janito/tools/tool_base.py CHANGED
@@ -4,8 +4,10 @@ from janito.event_bus.bus import event_bus as default_event_bus
4
4
 
5
5
  from collections import namedtuple
6
6
 
7
- class ToolPermissions(namedtuple('ToolPermissions', ['read', 'write', 'execute'])):
7
+
8
+ class ToolPermissions(namedtuple("ToolPermissions", ["read", "write", "execute"])):
8
9
  __slots__ = ()
10
+
9
11
  def __new__(cls, read=False, write=False, execute=False):
10
12
  return super().__new__(cls, read, write, execute)
11
13
 
@@ -18,11 +20,16 @@ class ToolBase:
18
20
  Base class for all tools in the janito project.
19
21
  Extend this class to implement specific tool functionality.
20
22
  """
21
- permissions: 'ToolPermissions' = None # Required: must be set by subclasses
23
+
24
+ permissions: "ToolPermissions" = None # Required: must be set by subclasses
22
25
 
23
26
  def __init__(self, name=None, event_bus=None):
24
- if self.permissions is None or not isinstance(self.permissions, ToolPermissions):
25
- raise ValueError(f"Tool '{self.__class__.__name__}' must define a 'permissions' attribute of type ToolPermissions.")
27
+ if self.permissions is None or not isinstance(
28
+ self.permissions, ToolPermissions
29
+ ):
30
+ raise ValueError(
31
+ f"Tool '{self.__class__.__name__}' must define a 'permissions' attribute of type ToolPermissions."
32
+ )
26
33
  self.name = name or self.__class__.__name__
27
34
  self._event_bus = event_bus or default_event_bus
28
35
 
@@ -48,7 +55,6 @@ class ToolBase:
48
55
  )
49
56
  )
50
57
 
51
-
52
58
  def report_error(self, message: str, context: dict = None):
53
59
  self._event_bus.publish(
54
60
  ReportEvent(
@@ -50,10 +50,7 @@ class ToolUseTracker:
50
50
  for entry in self._history:
51
51
  if entry["tool"] == "view_file":
52
52
  params = entry["params"]
53
- if (
54
- "path" in params
55
- and normalize_path(params["path"]) == norm_path
56
- ):
53
+ if "path" in params and normalize_path(params["path"]) == norm_path:
57
54
  # If both from_line and to_line are None, full file was read
58
55
  if (
59
56
  params.get("from_line") is None
@@ -20,7 +20,7 @@ def display_path(path):
20
20
  Returns:
21
21
  str: Display path, as an ANSI hyperlink.
22
22
  """
23
-
23
+
24
24
  port = 8088
25
25
  if os.path.isabs(path):
26
26
  cwd = os.path.abspath(os.getcwd())
@@ -3,6 +3,7 @@ from janito.tools.tool_events import ToolCallStarted, ToolCallFinished, ToolCall
3
3
  from janito.exceptions import ToolCallException
4
4
  from janito.tools.tool_base import ToolPermissions
5
5
 
6
+
6
7
  class ToolsAdapterBase:
7
8
  """
8
9
  Composable entry point for tools management and provisioning in LLM pipelines.
@@ -11,9 +12,7 @@ class ToolsAdapterBase:
11
12
  After refactor, also responsible for tool execution.
12
13
  """
13
14
 
14
- def __init__(
15
- self, tools=None, event_bus=None
16
- ):
15
+ def __init__(self, tools=None, event_bus=None):
17
16
  self._tools = tools or []
18
17
  self._event_bus = event_bus # event bus can be set on all adapters
19
18
  self.verbose_tools = False
@@ -32,31 +31,43 @@ class ToolsAdapterBase:
32
31
  def is_tool_allowed(self, tool):
33
32
  """Check if a tool is allowed based on current global AllowedPermissionsState."""
34
33
  from janito.tools.permissions import get_global_allowed_permissions
34
+
35
35
  allowed_permissions = get_global_allowed_permissions()
36
36
  perms = tool.permissions # permissions are mandatory and type-checked
37
37
  # If all permissions are False, block all tools
38
- if not (allowed_permissions.read or allowed_permissions.write or allowed_permissions.execute):
38
+ if not (
39
+ allowed_permissions.read
40
+ or allowed_permissions.write
41
+ or allowed_permissions.execute
42
+ ):
39
43
  return False
40
- for perm in ['read', 'write', 'execute']:
44
+ for perm in ["read", "write", "execute"]:
41
45
  if getattr(perms, perm) and not getattr(allowed_permissions, perm):
42
46
  return False
43
47
  return True
44
48
 
45
49
  def get_tools(self):
46
- """Return the list of enabled tools managed by this provider, filtered by allowed permissions."""
47
- tools = [tool for tool in self._tools if self.is_tool_allowed(tool)]
50
+ """Return the list of enabled tools managed by this provider, filtered by allowed permissions and disabled tools."""
51
+ from janito.tools.disabled_tools import is_tool_disabled
52
+
53
+ tools = [
54
+ tool
55
+ for tool in self._tools
56
+ if self.is_tool_allowed(tool)
57
+ and not is_tool_disabled(getattr(tool, "tool_name", str(tool)))
58
+ ]
48
59
  return tools
49
60
 
50
61
  def set_allowed_permissions(self, allowed_permissions):
51
62
  """Set the allowed permissions at runtime. This now updates the global AllowedPermissionsState only."""
52
63
  from janito.tools.permissions import set_global_allowed_permissions
64
+
53
65
  set_global_allowed_permissions(allowed_permissions)
54
66
 
55
67
  def add_tool(self, tool):
56
68
  self._tools.append(tool)
57
69
 
58
- def clear_tools(self):
59
- self._tools = []
70
+
60
71
 
61
72
  def _validate_arguments_against_schema(self, arguments: dict, schema: dict):
62
73
  properties = schema.get("properties", {})
@@ -134,15 +145,14 @@ class ToolsAdapterBase:
134
145
  if not accepts_kwargs:
135
146
  unexpected = [k for k in arguments.keys() if k not in params]
136
147
  if unexpected:
137
- return (
138
- "Unexpected argument(s): " + ", ".join(sorted(unexpected))
139
- )
148
+ return "Unexpected argument(s): " + ", ".join(sorted(unexpected))
140
149
 
141
150
  # Check for missing required arguments (ignoring *args / **kwargs / self)
142
151
  required_params = [
143
152
  name
144
153
  for name, p in params.items()
145
- if p.kind in (
154
+ if p.kind
155
+ in (
146
156
  inspect.Parameter.POSITIONAL_OR_KEYWORD,
147
157
  inspect.Parameter.KEYWORD_ONLY,
148
158
  )
@@ -163,45 +173,63 @@ class ToolsAdapterBase:
163
173
  self._ensure_tool_exists(tool, tool_name, request_id, arguments)
164
174
  func = self._get_tool_callable(tool)
165
175
 
166
- validation_error = self._validate_tool_arguments(tool, func, arguments, tool_name, request_id)
176
+ validation_error = self._validate_tool_arguments(
177
+ tool, func, arguments, tool_name, request_id
178
+ )
167
179
  if validation_error:
168
180
  return validation_error
169
181
 
170
182
  # --- SECURITY: Path restriction enforcement ---
171
- if not getattr(self, 'unrestricted_paths', False):
172
- workdir = getattr(self, 'workdir', None)
183
+ if not getattr(self, "unrestricted_paths", False):
184
+ workdir = getattr(self, "workdir", None)
173
185
  # Ensure workdir is always set; default to current working directory.
174
186
  if not workdir:
175
187
  import os
188
+
176
189
  workdir = os.getcwd()
177
- from janito.tools.path_security import validate_paths_in_arguments, PathSecurityError
178
- schema = getattr(tool, 'schema', None)
190
+ from janito.tools.path_security import (
191
+ validate_paths_in_arguments,
192
+ PathSecurityError,
193
+ )
194
+
195
+ schema = getattr(tool, "schema", None)
179
196
  try:
180
197
  validate_paths_in_arguments(arguments, workdir, schema=schema)
181
198
  except PathSecurityError as sec_err:
182
199
  # Publish both a ToolCallError and a user-facing ReportEvent for path security errors
183
- self._publish_tool_call_error(tool_name, request_id, str(sec_err), arguments)
200
+ self._publish_tool_call_error(
201
+ tool_name, request_id, str(sec_err), arguments
202
+ )
184
203
  if self._event_bus:
185
- from janito.report_events import ReportEvent, ReportSubtype, ReportAction
204
+ from janito.report_events import (
205
+ ReportEvent,
206
+ ReportSubtype,
207
+ ReportAction,
208
+ )
209
+
186
210
  self._event_bus.publish(
187
211
  ReportEvent(
188
212
  subtype=ReportSubtype.ERROR,
189
213
  message=f"[SECURITY] Path access denied: {sec_err}",
190
214
  action=ReportAction.EXECUTE,
191
215
  tool=tool_name,
192
- context={"arguments": arguments, "request_id": request_id}
216
+ context={"arguments": arguments, "request_id": request_id},
193
217
  )
194
218
  )
195
219
  return f"Security error: {sec_err}"
196
220
  # --- END SECURITY ---
197
221
 
198
222
  self._publish_tool_call_started(tool_name, request_id, arguments)
199
- self._print_verbose(f"[tools-adapter] Executing tool: {tool_name} with arguments: {arguments}")
223
+ self._print_verbose(
224
+ f"[tools-adapter] Executing tool: {tool_name} with arguments: {arguments}"
225
+ )
200
226
  try:
201
227
  result = self.execute(tool, **(arguments or {}), **kwargs)
202
228
  except Exception as e:
203
229
  self._handle_execution_error(tool_name, request_id, e, arguments)
204
- self._print_verbose(f"[tools-adapter] Tool execution finished: {tool_name} -> {result}")
230
+ self._print_verbose(
231
+ f"[tools-adapter] Tool execution finished: {tool_name} -> {result}"
232
+ )
205
233
  self._publish_tool_call_finished(tool_name, request_id, result)
206
234
  return result
207
235
 
@@ -212,9 +240,13 @@ class ToolsAdapterBase:
212
240
  return sig_error
213
241
  schema = getattr(tool, "schema", None)
214
242
  if schema and arguments is not None:
215
- validation_error = self._validate_arguments_against_schema(arguments, schema)
243
+ validation_error = self._validate_arguments_against_schema(
244
+ arguments, schema
245
+ )
216
246
  if validation_error:
217
- self._publish_tool_call_error(tool_name, request_id, validation_error, arguments)
247
+ self._publish_tool_call_error(
248
+ tool_name, request_id, validation_error, arguments
249
+ )
218
250
  return validation_error
219
251
  return None
220
252
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.7.0
3
+ Version: 2.9.0
4
4
  Summary: A new Python package called janito.
5
- Author-email: João Pinto <lamego.pinto@gmail.com>
6
- Project-URL: Homepage, https://github.com/janito-dev/janito
5
+ Author-email: João Pinto <janito@ikignosis.org>
6
+ Project-URL: Homepage, https://github.com/ikignosis/janito
7
7
  Requires-Python: >=3.7
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
@@ -18,6 +18,7 @@ Requires-Dist: lxml>=5.4.0
18
18
  Requires-Dist: requests>=2.32.4
19
19
  Requires-Dist: bs4>=0.0.2
20
20
  Requires-Dist: questionary>=2.0.1
21
+ Requires-Dist: openai>=1.68.0
21
22
  Provides-Extra: dev
22
23
  Requires-Dist: pytest; extra == "dev"
23
24
  Requires-Dist: pre-commit; extra == "dev"
@@ -29,7 +30,7 @@ Requires-Dist: questionary>=2.0.1; extra == "dev"
29
30
  Requires-Dist: setuptools_scm>=8.0; extra == "dev"
30
31
  Dynamic: license-file
31
32
 
32
- # Janito
33
+ # Janito, control you context
33
34
 
34
35
  [![PyPI version](https://badge.fury.io/py/janito.svg)](https://badge.fury.io/py/janito)
35
36
 
@@ -38,7 +39,7 @@ Janito is a command-line interface (CLI) tool for managing and interacting with
38
39
  ## Features
39
40
 
40
41
  - 🔑 Manage API keys and provider configurations
41
- - 🤖 Interact with multiple LLM providers (OpenAI, Google Gemini, Mistral, DeepSeek, and more)
42
+ - 🤖 Interact with multiple LLM providers (OpenAI, Google Gemini, DeepSeek, and more)
42
43
  - 🛠️ List and use a variety of registered tools
43
44
  - 📝 Submit prompts and receive responses directly from the CLI
44
45
  - 📋 List available models for each provider
@@ -60,7 +61,7 @@ Janito is a command-line interface (CLI) tool for managing and interacting with
60
61
  Janito is a Python package. Since this is a development version, you can install it directly from GitHub:
61
62
 
62
63
  ```bash
63
- pip install git+https://github.com/janito-dev/janito.git
64
+ pip install git+git@github.com:ikignosis/janito.git
64
65
  ```
65
66
 
66
67
  ### First launch and quick setup
@@ -107,7 +108,7 @@ janito -set provider=PROVIDER
107
108
 
108
109
  ## Usage
109
110
 
110
- After installation, use the `janito` command in your terminal.
111
+ After installation, use the `janito` command in your terminal with the syntax: `janito [options] [prompt]`
111
112
 
112
113
  Janito supports both general-purpose and specialized assistance through the use of **profiles**. Profiles allow you to select a specific system prompt template and behavior for the agent, enabling workflows tailored to different roles or tasks (e.g., developer, writer, data analyst), or to use Janito as a generic AI assistant.
113
114
 
@@ -202,14 +203,7 @@ janito -r -w -x "Run this code: print('Hello, world!')"
202
203
  janito -p google -m gemini-2.5-flash "Your prompt here"
203
204
  ```
204
205
 
205
- - **Set Provider-Specific Config (for the selected provider)**
206
- ```bash
207
- # syntax: janito --set PROVIDER.KEY=VALUE
208
- # example: set the default model for openai provider
209
- janito --set openai.model=gpt-4o
210
206
 
211
- ```
212
- > **Note:** Use `--set PROVIDER.key=value` for provider-specific settings (e.g., `openai.max_tokens`, `openai.base_url`).
213
207
 
214
208
  - **Enable Event Logging**
215
209
  ```bash
@@ -235,7 +229,7 @@ janito -r -w -x "Run this code: print('Hello, world!')"
235
229
  | `-v`, `--verbose` | Print extra information before answering |
236
230
  | `-R`, `--raw` | Print raw JSON response from API |
237
231
  | `-e`, `--event-log` | Log events to console as they occur |
238
- | `"user_prompt"` | Prompt to submit for the non interactive mode (e.g. `janito "What is the capital of France?"`) |
232
+ | `prompt` | Prompt to submit for the non interactive mode (e.g. `janito "What is the capital of France?"`) |
239
233
 
240
234
  ### 🧩 Extended Chat Mode Commands
241
235
  Once inside the interactive chat mode, you can use these slash commands:
@@ -265,8 +259,6 @@ Once inside the interactive chat mode, you can use these slash commands:
265
259
  | `/tools` | List available tools |
266
260
  | `/-status` | Show status of server |
267
261
  | `/-logs` | Show last lines of logs |
268
- | `/livelogs` | Show live updates from server log file |
269
- | `/edit <filename>` | Open file in browser-based editor |
270
262
  | `/write [on\|off]` | Enable or disable write tool permissions |
271
263
  | `/read [on\|off]` | Enable or disable read tool permissions |
272
264
  | `/execute [on\|off]` | Enable or disable execute tool permissions |
@@ -315,7 +307,7 @@ For more information, see the documentation in the `docs/` directory or run `jan
315
307
 
316
308
  ## 📖 Detailed Documentation
317
309
 
318
- Full and up-to-date documentation is available at: https://janito-dev.github.io/janito/
310
+ Full and up-to-date documentation is available at: https://ikignosis.github.io/janito/
319
311
 
320
312
  ---
321
313
 
@@ -396,7 +388,7 @@ janito -p deepseek --list-models
396
388
  ## Ask Me Anything
397
389
 
398
390
  <div align="center">
399
- <a href="https://github.com/janito-dev/janito" title="Ask Me Anything">
391
+ <a href="git@github.com:ikignosis/janito.git" title="Ask Me Anything">
400
392
  <img width="250" src="docs/imgs/ama.png" alt="Ask Me Anything">
401
393
  </a>
402
394
  </div
@@ -0,0 +1,205 @@
1
+ janito/__init__.py,sha256=a0pFui3A_AfWJiUfg93yE-Vf4868bqG3y9yg2fkTIuY,244
2
+ janito/__main__.py,sha256=lPQ8kAyYfyeS1KopmJ8EVY5g1YswlIqCS615mM_B_rM,70
3
+ janito/_version.py,sha256=PtAVr2K9fOS5sv6aXzmcb7UaR5NLGMFOofL7Ndjh75o,2344
4
+ janito/config.py,sha256=DXuC74NEywKvpTkOSrrxJGvHdL_tvXEf27pkedV3XZA,313
5
+ janito/config_manager.py,sha256=KoA_jmJzCv33jzXGSab0x6JyWL0cExoqnltES9oT-JU,5433
6
+ janito/conversation_history.py,sha256=GqqEJElTVONzOMRe-9g25WCMcDi0PF7DOnqGWLTrY_8,897
7
+ janito/dir_walk_utils.py,sha256=ON9EyVH7Aaik8WtCH5z8DQis9ycdoNVkjNvU16HH498,1193
8
+ janito/driver_events.py,sha256=51ab7KW_W6fVZVeO0ez-HJFY4NbTI327ZlEmEsEkxQc,3405
9
+ janito/exceptions.py,sha256=l4AepRdWwAuLp5fUygrBBgO9rpwgfV6JvY1afOdq2pw,913
10
+ janito/formatting.py,sha256=SMvOmL6bst3KGcI7OLa5D4DE127fQYuHZS3oY8OPsn8,2031
11
+ janito/formatting_token.py,sha256=9Pz0svhV0pyNuGRXSmVkGDaQC8N-koTkf50AJR_gtSo,2217
12
+ janito/gitignore_utils.py,sha256=P3iF9fMWAomqULq2xsoqHtI9uNIFSPcagljrxZshmLw,4110
13
+ janito/perf_singleton.py,sha256=g1h0Sdf4ydzegeEpJlMhQt4H0GQZ2hryXrdYOTL-b30,113
14
+ janito/performance_collector.py,sha256=RYu4av16Trj3RljJZ8-2Gbn1KlGdJUosrcVFYtwviNI,6285
15
+ janito/platform_discovery.py,sha256=JN3kC7hkxdvuj-AyrJTlbbDJjtNHke3fdlZDqGi_uz0,4621
16
+ janito/provider_config.py,sha256=acn2FEgWsEIyi2AxZiuCLoP2rXDd-nXcP5VB4CZHaeE,3189
17
+ janito/provider_registry.py,sha256=n5fXiMoC1ye968-LLT_1VRt-iNIVDyKiDJkkn_EyfQQ,6049
18
+ janito/report_events.py,sha256=q4OR_jTZNfcqaQF_fzTjgqo6_VlUIxSGWfhpT4nJWcw,938
19
+ janito/shell.bak.zip,sha256=hznHbmgfkAkjuQDJ3w73XPQh05yrtUZQxLmtGbanbYU,22
20
+ janito/utils.py,sha256=eXSsMgM69YyzahgCNrJQLcEbB8ssLI1MQqaa20ONxbE,376
21
+ janito/agent/setup_agent.py,sha256=XiES3D7mhAEZZ05Otoceo2TJ2Z12H5mDp-5_wJzJqAU,11664
22
+ janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2,sha256=28TITVITH4RTdOwPpNZFSygm6OSpFb_Jr4mHprrLBhc,2584
23
+ janito/agent/templates/profiles/system_prompt_template_developer.txt.j2,sha256=zj0ZA17iYt-6c0usgjUw_cLKnb5qDuixpxS9et5ECyw,2272
24
+ janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2,sha256=dTV9aF8ji2r9dzi-l4b9r95kHrbKmjvnRxk5cVpopN4,28
25
+ janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
26
+ janito/cli/config.py,sha256=HkZ14701HzIqrvaNyDcDhGlVHfpX_uHlLp2rHmhRm_k,872
27
+ janito/cli/console.py,sha256=gJolqzWL7jEPLxeuH-CwBDRFpXt976KdZOEAB2tdBDs,64
28
+ janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
29
+ janito/cli/main_cli.py,sha256=Z6eruiCAQh7Lp451XkYC-Rnq9q1zLkmyyd5ZC2KaOik,14181
30
+ janito/cli/prompt_core.py,sha256=F68J4Xl6jZMYFN4oBBYZFj15Jp-HTYoLub4bw2XpNRU,11648
31
+ janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
32
+ janito/cli/prompt_setup.py,sha256=1s5yccFaWMgDkUjkvnTYGEWJAFPJ6hIiqwbrLfzWxMI,2038
33
+ janito/cli/rich_terminal_reporter.py,sha256=_-eRzrxM-lCD31KjElCroSVx1vbBcG2Lo8gDVE0v9Yc,6785
34
+ janito/cli/utils.py,sha256=plCQiDKIf3V8mFhhX5H9-MF2W86i-xRdWf8Xi117Z0w,677
35
+ janito/cli/verbose_output.py,sha256=wY_B4of5e8Vv7w1fRwOZzNGU2JqbMdcFnGjtEr4hLus,7686
36
+ janito/cli/chat_mode/bindings.py,sha256=odjc5_-YW1t2FRhBUNRNoBMoQIg5sMz3ktV7xG0ADFU,975
37
+ janito/cli/chat_mode/chat_entry.py,sha256=RFdPd23jsA2DMHRacpjAdwI_1dFBaWrtnwyQEgb2fHA,475
38
+ janito/cli/chat_mode/prompt_style.py,sha256=vsqQ9xxmrYjj1pWuVe9CayQf39fo2EIXrkKPkflSVn4,805
39
+ janito/cli/chat_mode/script_runner.py,sha256=NzWHXNcf-jZZb096iFJJL2pi3kVb1beLSHHzqE5Sv2g,6500
40
+ janito/cli/chat_mode/session.py,sha256=cqc4Ug3yGA8rR6vFRe5v6U4recqD0tzqgwcf2ASaPgs,12891
41
+ janito/cli/chat_mode/session_profile_select.py,sha256=CJ2g3VbPGWfBNrNkYYX57oIJZJ-hIZBNGB-zcdjC9vk,5379
42
+ janito/cli/chat_mode/toolbar.py,sha256=bJ9jPaTInp2gB3yjSVJp8mpNEFiOslzNhVaiqpXJhKc,3025
43
+ janito/cli/chat_mode/shell/autocomplete.py,sha256=lE68MaVaodbA2VfUM0_YLqQVLBJAE_BJsd5cMtwuD-g,793
44
+ janito/cli/chat_mode/shell/commands.bak.zip,sha256=I7GFjXg2ORT5NzFpicH1vQ3kchhduQsZinzqo0xO8wU,74238
45
+ janito/cli/chat_mode/shell/input_history.py,sha256=9620dKYSpXfGhdd2msbuqnkNW3Drv0dZ0eisWBaGKbg,2586
46
+ janito/cli/chat_mode/shell/session.bak.zip,sha256=m1GyO3Wy4G4D9sVgRO6ZDyC0VjclsmnEJsiQoer4LzI,5789
47
+ janito/cli/chat_mode/shell/commands/__init__.py,sha256=Ux4h86ewY9yR9xjaK6Zt2vOws3uCjMBmnMhOHLWS1BE,2302
48
+ janito/cli/chat_mode/shell/commands/_priv_check.py,sha256=OBPRMZlFlLSJSfbXrLqRCqD3ISKqR0QNzBJpa7g30Ro,206
49
+ janito/cli/chat_mode/shell/commands/_priv_status.py,sha256=WgCEK38Hllz3Bz4TgVgODdmo0BDaBey5t0uMyA3125k,478
50
+ janito/cli/chat_mode/shell/commands/bang.py,sha256=qVCUM8ZnGE1J3yG1hjYYw7upY4PR6bhNNYfJa-NfnI4,1860
51
+ janito/cli/chat_mode/shell/commands/base.py,sha256=I6-SVOcRd7q4PpoutLdrbhbqeUpJic2oyPhOSMgMihA,288
52
+ janito/cli/chat_mode/shell/commands/clear.py,sha256=wYEHGYcAohUoCJlbEhiXKfDbJvuzAVK4e9uirskIllw,422
53
+ janito/cli/chat_mode/shell/commands/conversation_restart.py,sha256=idPjWQ4Caps2vMOZ_tgTFOHr2U-cnf6Jqtt8wdyilGc,3848
54
+ janito/cli/chat_mode/shell/commands/execute.py,sha256=7I8uqSyRpIgOzx1mt1Pewdy6pJ2L1Yd3xnODe5d5hfs,2486
55
+ janito/cli/chat_mode/shell/commands/help.py,sha256=q-MVZ8dnK-uQmBfE1mevK9WkgdzxOE3FwFM50nB6YaI,981
56
+ janito/cli/chat_mode/shell/commands/history_view.py,sha256=9dyxYpDHjT77LEIikjBQA03Ep3P2AmKXUwUnVsG0OQc,3584
57
+ janito/cli/chat_mode/shell/commands/lang.py,sha256=uIelDs3gPYDZ9X9gw7iDMmiwefT7TiBo32420pq2tW8,837
58
+ janito/cli/chat_mode/shell/commands/model.py,sha256=DrtQuqbac5VCpzBikpdu9vVgFVm_K9FYIjUOqmUztD4,1518
59
+ janito/cli/chat_mode/shell/commands/multi.py,sha256=HAAk0fAO3n8KFta3I4hT_scOAlz4SxWDyaNBUJBQ4nc,1985
60
+ janito/cli/chat_mode/shell/commands/privileges.py,sha256=pkTnteM8nURTaw2JzVIxLxADcBwOLW5cfu4tiTMvfvA,1121
61
+ janito/cli/chat_mode/shell/commands/prompt.py,sha256=6mj1oUO6bodyED19-_tJVO0x-l3REzYjKhp8OKFFWy4,1790
62
+ janito/cli/chat_mode/shell/commands/read.py,sha256=3uKHkaIl6d4euS8rKGcYqUwVjvzVSwDjJgQTmt8nysw,2299
63
+ janito/cli/chat_mode/shell/commands/role.py,sha256=4Mt3okuNwOjqHbNhOFawcWB9KCLkpTDuLoDJFeXr3-E,1079
64
+ janito/cli/chat_mode/shell/commands/session.py,sha256=9wsw5U24-KJgTT70KAwnGuS8MVPyvpxCJfAt_Io76O0,1574
65
+ janito/cli/chat_mode/shell/commands/session_control.py,sha256=tmMGJ8IvWoBwSIJu7T6GPnFYFrmXWIG2Gr9tTni4y3U,1307
66
+ janito/cli/chat_mode/shell/commands/tools.py,sha256=8BWgqB0j5sp7mYupxoAjYvLWjb_wODOfCk-I8yNfk-U,3473
67
+ janito/cli/chat_mode/shell/commands/utility.py,sha256=K982P-UwgPLzpEvSuSBGwiQ3zC34S_6T2ork_djweQw,847
68
+ janito/cli/chat_mode/shell/commands/verbose.py,sha256=HDTe0NhdcjBuhh-eJSW8iLPDeeBO95K5iSDAMAljxa4,953
69
+ janito/cli/chat_mode/shell/commands/write.py,sha256=bpvJzHY7wlpgsB-cpslzfQQl7h6n-NLqj2gFCuJfjVk,2309
70
+ janito/cli/chat_mode/shell/session/__init__.py,sha256=uTYE_QpZFEn7v9QE5o1LdulpCWa9vmk0OsefbBGWg_c,37
71
+ janito/cli/chat_mode/shell/session/history.py,sha256=tYav6GgjAZkvWhlI_rfG6OArNqW6Wn2DTv39Hb20QYc,1262
72
+ janito/cli/chat_mode/shell/session/manager.py,sha256=MwD9reHsRaly0CyRB-S1JJ0wPKz2g8Xdj2VvlU35Hgc,1001
73
+ janito/cli/cli_commands/list_config.py,sha256=oiQEGaGPjwjG-PrOcakpNMbbqISTsBEs7rkGH3ceQsI,1179
74
+ janito/cli/cli_commands/list_models.py,sha256=_rqHz89GsNLcH0GGkFqPue7ah4ZbN9YHm0lEP30Aa-A,1111
75
+ janito/cli/cli_commands/list_profiles.py,sha256=9-HV2EbtP2AdubbMoakjbu7Oq4Ss9UDyO7Eb6CC52wI,2681
76
+ janito/cli/cli_commands/list_providers.py,sha256=v8OQ8ULnuzNuvgkeKqGXGj69eOiavAlPGhzfR0zavhg,185
77
+ janito/cli/cli_commands/list_tools.py,sha256=JFRdlhPeA3BzhJ2PkjIt3u137IJoNc-vYSjUuPlaOXw,3593
78
+ janito/cli/cli_commands/model_selection.py,sha256=ANWtwC5glZkGMdaNtARDbEG3QmuBUcDLVxzzC5jeBNo,1643
79
+ janito/cli/cli_commands/model_utils.py,sha256=U0j2FTpcIBc4eAc40MXz5tyAK3m8lkakpOS2l2bGh4A,2868
80
+ janito/cli/cli_commands/set_api_key.py,sha256=iPtWPhS5VeyIlwVX43TGg7OYUwXCcGzugvwoa3KB8A8,605
81
+ janito/cli/cli_commands/show_config.py,sha256=eYMcuvU-d7mvvuctbQacZFERqcKHEnxaRRjasyj-_lE,2004
82
+ janito/cli/cli_commands/show_system_prompt.py,sha256=9ZJGW7lIGJ9LX2JZiWVEm4AbaD0qEQO7LF89jPgk52I,5232
83
+ janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
84
+ janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
85
+ janito/cli/core/getters.py,sha256=AO34OBhh3f1Sx2mWVYQIvH-4fcmXG7b2471XdKNZdYs,1856
86
+ janito/cli/core/runner.py,sha256=C7eePvhzIYHgsP95WGwltIhM_T4Kzyo14M7n12RevPQ,7693
87
+ janito/cli/core/setters.py,sha256=PD3aT1y1q8XWQVtRNfrU0dtlW4JGdn6BMJyP7FCQWhc,4623
88
+ janito/cli/core/unsetters.py,sha256=FEw9gCt0vRvoCt0kRSNfVB2tzi_TqppJIx2nHPP59-k,2012
89
+ janito/cli/single_shot_mode/__init__.py,sha256=Ct99pKe9tINzVW6oedZJfzfZQKWpXz-weSSCn0hrwHY,115
90
+ janito/cli/single_shot_mode/handler.py,sha256=U70X7c9MHbmj1vQlTI-Ao2JvRprpLbPh9wL5gAMbEhs,3790
91
+ janito/drivers/dashscope.bak.zip,sha256=9Pv4Xyciju8jO1lEMFVgYXexoZkxmDO3Ig6vw3ODfL8,4936
92
+ janito/drivers/driver_registry.py,sha256=sbij7R71JJqJVeMfmaU-FKsEuZVO8oEn6Qp8020hdZw,773
93
+ janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJTR5tJp8wcM,13352
94
+ janito/drivers/azure_openai/driver.py,sha256=rxeyCElyc4XVCTl2q-tI78Oy0q5lwtQUnwBqw7vft5g,3593
95
+ janito/drivers/openai/README.md,sha256=bgPdaYX0pyotCoJ9t3cJbYM-teQ_YM1DAFEKLCMP32Q,666
96
+ janito/drivers/openai/driver.py,sha256=gNFmJqFl3mlbir-Qh0S0nZjD2sG4UTUpj92wPdcC5Kc,18439
97
+ janito/event_bus/__init__.py,sha256=VG6GOhKMBh0O_92D-zW8a3YitJPKDajGgPiFezTXlNE,77
98
+ janito/event_bus/bus.py,sha256=LokZbAdwcWhWOyKSp7H3Ism57x4EZhxlRPjl3NE4UKU,2847
99
+ janito/event_bus/event.py,sha256=MtgcBPD7cvCuubiLIyo-BWcsNSO-941HLk6bScHTJtQ,427
100
+ janito/event_bus/handler.py,sha256=RhBtT1E48VEM2-k8u3HYsESw7VX5qAgiB8ZTJeKXhHc,1322
101
+ janito/event_bus/queue_bus.py,sha256=l4phun3pxXxi8ZlIq8ChYaiYDVO1PZeXoOzyi3vyu20,1558
102
+ janito/i18n/__init__.py,sha256=6zCIu6pSQpoMJvIRK9oOD3pkzbNeJik3lFDXse0X6ag,994
103
+ janito/i18n/messages.py,sha256=fBuwOTFoygyHPkYphm6Y0r1iE8497Z4iryVAmPhMEkg,1851
104
+ janito/i18n/pt.py,sha256=NlTgpDSftUfFG7FGbs7TK54vQlJVMyaZDHGcWjelwMc,4168
105
+ janito/llm/README.md,sha256=6GRqCu_a9va5HCB1YqNqbshyWKFyAGlnXugrjom-xj8,1213
106
+ janito/llm/__init__.py,sha256=dpyVH51qVRCw-PDyAFLAxq0zd4jl5MDcuV6Cri0D-dQ,134
107
+ janito/llm/agent.py,sha256=JE59p1YSnB-KnCI8kHIcqcxTY30MlMVZ_RzzDM4KiD4,20735
108
+ janito/llm/auth.py,sha256=8Dl_orUEPhn2X6XjkO2Nr-j1HFT2YDxk1qJl9hSFI88,2286
109
+ janito/llm/driver.py,sha256=stiicPe_MXTuWW4q6MSwK7PCj8UZcA_30pGACu6xYUQ,10039
110
+ janito/llm/driver_config.py,sha256=OW0ae49EfgKDqaThuDjZBiaN78voNzwiZ6szERMqJos,1406
111
+ janito/llm/driver_config_builder.py,sha256=BvWGx7vaBR5NyvPY1XNAP3lAgo1uf-T25CSsIo2kkCU,1401
112
+ janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,389
113
+ janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
114
+ janito/llm/model.py,sha256=42hjcffZDTuzjAJoVhDcDqwIXm6rUmmi5UwTOYopf5w,1131
115
+ janito/llm/provider.py,sha256=3FbhQPrWBSEoIdIi-5DWIh0DD_CM570EFf1NcuGyGko,7961
116
+ janito/providers/__init__.py,sha256=S6AvFABVrFOfFFj_sqNnQcbgS6IVdiRWzBg-rhnhjOY,366
117
+ janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF2BVJo,5998
118
+ janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
119
+ janito/providers/anthropic/model_info.py,sha256=m6pBh0Ia8_xC1KZ7ke_4HeHIFw7nWjnYVItnRpkCSWc,1206
120
+ janito/providers/anthropic/provider.py,sha256=nTsZw0IwAZbgixBNXuD7EYXdI6uYQh7wsTGxE-3R-yE,2850
121
+ janito/providers/azure_openai/model_info.py,sha256=TMSqEpQROIIYUGAyulYJ5xGhj7CbLoaKL_JXeLbXaG0,689
122
+ janito/providers/azure_openai/provider.py,sha256=CL9CE2cpkJYjvoZAK9TmpSbS-OOlmDbCiSyjw1NF9Ic,5228
123
+ janito/providers/deepseek/__init__.py,sha256=4sISEpq4bJO29vxFK9cfnO-SRUmKoD7oSdeCvz0hVno,36
124
+ janito/providers/deepseek/model_info.py,sha256=tAlFRtWiyNF_MKZ1gy5_-VNlvqoIwAinv6bAv9dNFsc,465
125
+ janito/providers/deepseek/provider.py,sha256=ATDyYJJJl-KkOTlhgZ6EEGMKCvj0LTu4GwB_GtUeXN0,3922
126
+ janito/providers/google/__init__.py,sha256=hE3OGJvLEhvNLhIK_XmCGIdrIj8MKlyGgdOLJ4mdess,38
127
+ janito/providers/google/model_info.py,sha256=AakTmzvWm1GPvFzGAq6-PeE_Dpq7BmAAqmh3L8N5KKo,1126
128
+ janito/providers/google/provider.py,sha256=2sJzqmkjttGOXB38W2SYhiRIPCHesdajZUKdX4O_yhk,3424
129
+ janito/providers/groq/__init__.py,sha256=O0vi5p13DGcDEM3SUQmYB5_g7-UcqT-d0OrrPIsaeD4,36
130
+ janito/providers/groq/model_info.py,sha256=QBgI4-keoW63sgX8MDhnFN9FHz3F3Oo3gE7XXNkamoM,1612
131
+ janito/providers/groq/provider.py,sha256=8xUMY_ytSauT5RX3yovS2sDtHX1rkqNwHAEClTaJ7Ls,2697
132
+ janito/providers/moonshotai/__init__.py,sha256=nThTAtynq4O2Iidm95daKOCKXi5APRJYtRK2Wr3SDpM,31
133
+ janito/providers/moonshotai/model_info.py,sha256=p5_q73Z5YnFbh9-_pXuHrug2DW-7G5Y_9U52dhsS11Q,396
134
+ janito/providers/moonshotai/provider.py,sha256=iY7qYXbJesd7cMQx89kuUFAhII0x2oSwc56JlSOF56A,3643
135
+ janito/providers/openai/__init__.py,sha256=f0m16-sIqScjL9Mp4A0CQBZx6H3PTEy0cnE08jeaB5U,38
136
+ janito/providers/openai/model_info.py,sha256=cz08O26Ychm-aP3T8guJRqpR96Im9Cwtgl2iMgM7tJs,3384
137
+ janito/providers/openai/provider.py,sha256=aX8F17YRyzkZFAqUONFIP4lRVe9VlEoIneSW_gPBGdY,4809
138
+ janito/providers/openai/schema_generator.py,sha256=hTqeLcPTR8jeKn5DUUpo7b-EZ-V-g1WwXiX7MbHnFzE,2234
139
+ janito/tools/DOCSTRING_STANDARD.txt,sha256=VLPwNgjxRVD_xZSSVvUZ4H-4bBwM-VKh_RyfzYQsYSs,1735
140
+ janito/tools/README.md,sha256=5HkLpF5k4PENJER7SlDPRXj0yo9mpHvAHW4uuzhq4ak,115
141
+ janito/tools/__init__.py,sha256=W1B39PztC2UF7PS2WyLH6el32MFOETMlN1-LurOROCg,1171
142
+ janito/tools/disabled_tools.py,sha256=Tx__16wtMWZ9z34cYLdH1gukwot5MCL-9kLjd5MPX6Y,2110
143
+ janito/tools/inspect_registry.py,sha256=Jo7PrMPRKLuR-j_mBAk9PBcTzeJf1eQrS1ChGofgQk0,538
144
+ janito/tools/outline_file.bak.zip,sha256=EeI2cBXCwTdWVgJDNiroxKeYlkjwo6NLKeXz3J-2iZI,15607
145
+ janito/tools/path_security.py,sha256=dCE8pPCtMElVm1jatpYmXkc8lK9CHCK_4K0JIhqn1f4,7584
146
+ janito/tools/permissions.py,sha256=_viTVXyetZC01HjI2s5c3klIJ8-RkWB1ShdOaV__loY,1508
147
+ janito/tools/permissions_parse.py,sha256=LHadt0bWglm9Q2BbbVVbKePg4oa7QLeRQ-ChQZsE_dI,384
148
+ janito/tools/tool_base.py,sha256=TSrXDknqIqOtY3xzuvtsxZ3qwbvmGzUruBiqVzzICfc,3689
149
+ janito/tools/tool_events.py,sha256=czRtC2TYakAySBZvfHS_Q6_NY_7_krxzAzAL1ggRFWA,1527
150
+ janito/tools/tool_run_exception.py,sha256=43yWgTaGBGEtRteo6FvTrane6fEVGo9FU1uOdjMRWJE,525
151
+ janito/tools/tool_use_tracker.py,sha256=IaEmA22D6RuL1xMUCScOMGv0crLPwEJVGmj49cydIaM,2662
152
+ janito/tools/tool_utils.py,sha256=alPm9DvtXSw_zPRKvP5GjbebPRf_nfvmWk2TNlL5Cws,1219
153
+ janito/tools/tools_adapter.py,sha256=wLtsdiyRFNDp5xFWN_h5yN4b-eFfYP6rEVQa_JNbFVA,14108
154
+ janito/tools/tools_schema.py,sha256=rGrKrmpPNR07VXHAJ_haGBRRO-YGLOF51BlYRep9AAQ,4415
155
+ janito/tools/adapters/__init__.py,sha256=XKixOKtUJs1R-rGwGDXSLVLg5-Kp090gvWbsseWT4LI,92
156
+ janito/tools/adapters/local/__init__.py,sha256=_nxMg2uPX18DHNtyHR6SDwYMZvDLpy6gyaCt-75unao,2172
157
+ janito/tools/adapters/local/adapter.py,sha256=A5pVq3KglDbUFAqhOqPlMeJ2wyPGJFhn0GV4gy4gfFI,7289
158
+ janito/tools/adapters/local/ask_user.py,sha256=x7CwmLgjB6PSd1YgkohPBGkvhLkpK3Jb09bkn-iFTSY,3600
159
+ janito/tools/adapters/local/copy_file.py,sha256=MSa0VtbIXFGz00q-nW2KdtzER0icm6Y1w7MKKE6A6us,3582
160
+ janito/tools/adapters/local/create_directory.py,sha256=cmSbNUsqsY8wZ2RsX-g2c9FZkkTIM5jIvFyKKqvZKxM,2565
161
+ janito/tools/adapters/local/create_file.py,sha256=fDdLzKchyGMx6o2L6k-_KYxDofcktdrXcV7lKuiZMMo,3458
162
+ janito/tools/adapters/local/delete_text_in_file.py,sha256=uEeedRxXAR7_CqUc_qhbEdM0OzRi_pgnP-iDjs2Zvjk,5087
163
+ janito/tools/adapters/local/fetch_url.py,sha256=CLSgd56IDHtjOClQ2Frrp-cMI-fSt1Ngc1WK5oMOHrI,3869
164
+ janito/tools/adapters/local/find_files.py,sha256=sRdvWZ58ximset-dcwtmDj1E32kruGC6kTGjTlSZtb0,6023
165
+ janito/tools/adapters/local/move_file.py,sha256=PBVp_gcmNxOLJeJsAtENg40SUG-lP7ijWE4sOG72jDk,4620
166
+ janito/tools/adapters/local/open_html_in_browser.py,sha256=T3h3XUPgyGdXbiO-Ei-R2lSnAhUqKn_erAKr4YxAq7c,1950
167
+ janito/tools/adapters/local/open_url.py,sha256=WHOJ2TaUVye2iUnrcdu93A_xKBx2lYcK0LUhZ0WvIsE,1402
168
+ janito/tools/adapters/local/python_code_run.py,sha256=UrQ_rv_qVjY1vNdpACDAma5eFbAj_WhvgQjghRpv9hg,6681
169
+ janito/tools/adapters/local/python_command_run.py,sha256=M-TxoGND45zKSMrYPjD6juSo0UhfsilXEBiyQdzQkiI,6621
170
+ janito/tools/adapters/local/python_file_run.py,sha256=OsHc9rpyGWUjLE7Zin9Gl7YOLf9QVe8NoXXcdTkpJyE,6466
171
+ janito/tools/adapters/local/read_files.py,sha256=lz17lK5R1NlmCfLdikhFKGzBC4b2TedyIKrM-aM9m5c,2094
172
+ janito/tools/adapters/local/remove_directory.py,sha256=g1wkHcWNgtv3mfuZ4GfvqtKU3th-Du_058FMcNmc1TA,1830
173
+ janito/tools/adapters/local/remove_file.py,sha256=cSs7EIhEqblnLmwjUKrUq2M8axyT2oTXJqZs5waOAFw,2090
174
+ janito/tools/adapters/local/replace_text_in_file.py,sha256=zFGWORuaw50ZlEFf3q_s7K25Tt0QXu8yOXDeodY6kcE,10791
175
+ janito/tools/adapters/local/run_bash_command.py,sha256=iiOz2oBiPcyYG6ySOIS8zOuQ9XpYv6DiUwGiPKciADw,7623
176
+ janito/tools/adapters/local/run_powershell_command.py,sha256=wTfIvWo5F3nVuDiNNHv2YzTlra5vQQMz2XYqreFiBVc,9260
177
+ janito/tools/adapters/local/view_file.py,sha256=-6Li0SegDUcUdH9jAulunQZj-Bm4A2MhSVbmtBFXtXQ,7137
178
+ janito/tools/adapters/local/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
179
+ janito/tools/adapters/local/get_file_outline/core.py,sha256=L_fS39v5ufLc9BK02tWMiH0nWQcXPAmbmwBNv1s_IhU,4373
180
+ janito/tools/adapters/local/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
181
+ janito/tools/adapters/local/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
182
+ janito/tools/adapters/local/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
183
+ janito/tools/adapters/local/get_file_outline/search_outline.py,sha256=D2-42n2dON3QHKCJUsIrEBbJ8IrbwMmxpMGjr8Ik--Y,1197
184
+ janito/tools/adapters/local/search_text/__init__.py,sha256=FEYpF5tTtf0fiAyRGIGSn-kV-MJDkhdFIbus16mYW8Y,34
185
+ janito/tools/adapters/local/search_text/core.py,sha256=925y-xI25TZcN-AG7AONNnS1fLOxVio01sxSLKborNc,7655
186
+ janito/tools/adapters/local/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
187
+ janito/tools/adapters/local/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
188
+ janito/tools/adapters/local/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
189
+ janito/tools/adapters/local/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
190
+ janito/tools/adapters/local/validate_file_syntax/core.py,sha256=VuFtqJiQoS1lTF2zI-Z3PpVMKdCj-LqVcoZtji0V-L0,3322
191
+ janito/tools/adapters/local/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
192
+ janito/tools/adapters/local/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
193
+ janito/tools/adapters/local/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
194
+ janito/tools/adapters/local/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
195
+ janito/tools/adapters/local/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
196
+ janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
197
+ janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
198
+ janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
199
+ janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
200
+ janito-2.9.0.dist-info/licenses/LICENSE,sha256=GSAKapQH5ZIGWlpQTA7v5YrfECyaxaohUb1vJX-qepw,1090
201
+ janito-2.9.0.dist-info/METADATA,sha256=u1ZcMKG_dSEnYOZNHJ1FpjBq6KrN2Jwhg0E58Sqh8MQ,16364
202
+ janito-2.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
203
+ janito-2.9.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
204
+ janito-2.9.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
205
+ janito-2.9.0.dist-info/RECORD,,
@@ -1,49 +0,0 @@
1
- from janito.cli.console import shared_console
2
- from janito.cli.chat_mode.shell.commands.base import ShellCmdHandler
3
-
4
-
5
- class LivelogsShellHandler(ShellCmdHandler):
6
- help_text = "Show the last lines of livereload logs. Usage: /livelogs [lines]"
7
-
8
- def run(self):
9
- lines_arg = self.after_cmd_line.strip()
10
- lines = 20
11
- if lines_arg and lines_arg.isdigit():
12
- lines = int(lines_arg)
13
- stdout_path = self.shell_state.termweb_stdout_path if self.shell_state else None
14
- stderr_path = (
15
- self.shell_state.livereload_stderr_path if self.shell_state else None
16
- )
17
- if not stdout_path and not stderr_path:
18
- shared_console.print(
19
- "[yellow][livereload] No livereload log files found for this session.[/yellow]"
20
- )
21
- return
22
- stdout_lines = []
23
- stderr_lines = []
24
- if stdout_path:
25
- try:
26
- with open(stdout_path, encoding="utf-8") as f:
27
- stdout_lines = f.readlines()[-lines:]
28
- if stdout_lines:
29
- shared_console.print(
30
- f"[yellow][livereload][stdout] Tail of {stdout_path}:\n"
31
- + "".join(stdout_lines)
32
- )
33
- except Exception as e:
34
- shared_console.print(f"[red][livereload][stdout] Error: {e}[/red]")
35
- if stderr_path:
36
- try:
37
- with open(stderr_path, encoding="utf-8") as f:
38
- stderr_lines = f.readlines()[-lines:]
39
- if stderr_lines:
40
- shared_console.print(
41
- f"[red][livereload][stderr] Tail of {stderr_path}:\n"
42
- + "".join(stderr_lines)
43
- )
44
- except Exception as e:
45
- shared_console.print(f"[red][livereload][stderr] Error: {e}[/red]")
46
- if (not stdout_path or not stdout_lines) and (
47
- not stderr_path or not stderr_lines
48
- ):
49
- shared_console.print("[livereload] No output or errors captured in logs.")
@@ -1,41 +0,0 @@
1
- import time
2
- import uuid
3
- import traceback
4
- import json
5
- from typing import Optional, List, Dict, Any, Union
6
- from janito.llm.driver import LLMDriver
7
- from janito.driver_events import (
8
- GenerationStarted,
9
- GenerationFinished,
10
- RequestStarted,
11
- RequestFinished,
12
- ResponseReceived,
13
- )
14
- from janito.providers.openai.schema_generator import generate_tool_schemas
15
- from janito.tools.adapters.local.adapter import LocalToolsAdapter
16
- from janito.llm.message_parts import TextMessagePart, FunctionCallMessagePart
17
- from janito.llm.driver_config import LLMDriverConfig
18
-
19
- # Safe import of mistralai SDK
20
- try:
21
- from mistralai import Mistral
22
-
23
- DRIVER_AVAILABLE = True
24
- DRIVER_UNAVAILABLE_REASON = None
25
- except ImportError:
26
- DRIVER_AVAILABLE = False
27
- DRIVER_UNAVAILABLE_REASON = "Missing dependency: mistralai (pip install mistralai)"
28
-
29
-
30
- class MistralAIModelDriver(LLMDriver):
31
- available = False
32
- unavailable_reason = "MistralAIModelDriver is not implemented yet."
33
-
34
- @classmethod
35
- def is_available(cls):
36
- return cls.available
37
-
38
- name = "mistralai"
39
-
40
- def __init__(self, tools_adapter=None):
41
- raise ImportError(self.unavailable_reason)