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.
- janito/__init__.py +0 -1
- janito/__main__.py +0 -1
- janito/_version.py +0 -3
- janito/agent/setup_agent.py +77 -10
- janito/agent/templates/profiles/{system_prompt_template_plain_software_developer.txt.j2 → system_prompt_template_Developer_with_Python_Tools.txt.j2} +5 -1
- janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +3 -12
- janito/cli/__init__.py +0 -1
- janito/cli/chat_mode/bindings.py +1 -1
- janito/cli/chat_mode/chat_entry.py +0 -2
- janito/cli/chat_mode/prompt_style.py +0 -3
- janito/cli/chat_mode/script_runner.py +9 -5
- janito/cli/chat_mode/session.py +100 -37
- janito/cli/chat_mode/session_profile_select.py +61 -52
- janito/cli/chat_mode/shell/commands/__init__.py +1 -5
- janito/cli/chat_mode/shell/commands/_priv_check.py +1 -0
- janito/cli/chat_mode/shell/commands/_priv_status.py +13 -0
- janito/cli/chat_mode/shell/commands/bang.py +10 -3
- janito/cli/chat_mode/shell/commands/conversation_restart.py +24 -7
- janito/cli/chat_mode/shell/commands/execute.py +22 -7
- janito/cli/chat_mode/shell/commands/help.py +4 -1
- janito/cli/chat_mode/shell/commands/model.py +13 -5
- janito/cli/chat_mode/shell/commands/privileges.py +21 -0
- janito/cli/chat_mode/shell/commands/prompt.py +0 -2
- janito/cli/chat_mode/shell/commands/read.py +22 -5
- janito/cli/chat_mode/shell/commands/tools.py +15 -4
- janito/cli/chat_mode/shell/commands/write.py +22 -5
- janito/cli/chat_mode/shell/input_history.py +3 -1
- janito/cli/chat_mode/shell/session/manager.py +0 -2
- janito/cli/chat_mode/toolbar.py +25 -19
- janito/cli/cli_commands/list_config.py +31 -0
- janito/cli/cli_commands/list_models.py +1 -1
- janito/cli/cli_commands/list_profiles.py +79 -0
- janito/cli/cli_commands/list_providers.py +1 -0
- janito/cli/cli_commands/list_tools.py +35 -7
- janito/cli/cli_commands/model_utils.py +5 -3
- janito/cli/cli_commands/show_config.py +16 -11
- janito/cli/cli_commands/show_system_prompt.py +23 -9
- janito/cli/config.py +0 -13
- janito/cli/core/getters.py +16 -1
- janito/cli/core/runner.py +25 -8
- janito/cli/core/setters.py +13 -76
- janito/cli/main_cli.py +60 -27
- janito/cli/prompt_core.py +19 -18
- janito/cli/prompt_setup.py +6 -3
- janito/cli/rich_terminal_reporter.py +19 -5
- janito/cli/single_shot_mode/handler.py +14 -5
- janito/cli/verbose_output.py +5 -1
- janito/config.py +1 -0
- janito/config_manager.py +15 -2
- janito/drivers/azure_openai/driver.py +27 -30
- janito/drivers/openai/driver.py +53 -36
- janito/formatting_token.py +12 -4
- janito/llm/agent.py +15 -6
- janito/llm/driver.py +1 -0
- janito/llm/provider.py +1 -1
- janito/provider_registry.py +31 -70
- janito/providers/__init__.py +1 -0
- janito/providers/anthropic/model_info.py +0 -1
- janito/providers/anthropic/provider.py +9 -14
- janito/providers/azure_openai/provider.py +10 -5
- janito/providers/deepseek/provider.py +5 -4
- janito/providers/google/model_info.py +4 -2
- janito/providers/google/provider.py +11 -5
- janito/providers/groq/__init__.py +1 -0
- janito/providers/groq/model_info.py +45 -0
- janito/providers/groq/provider.py +76 -0
- janito/providers/moonshotai/provider.py +11 -4
- janito/providers/openai/model_info.py +0 -1
- janito/providers/openai/provider.py +6 -7
- janito/tools/__init__.py +2 -0
- janito/tools/adapters/local/__init__.py +2 -1
- janito/tools/adapters/local/adapter.py +21 -4
- janito/tools/adapters/local/ask_user.py +1 -0
- janito/tools/adapters/local/copy_file.py +1 -0
- janito/tools/adapters/local/create_directory.py +1 -0
- janito/tools/adapters/local/create_file.py +1 -0
- janito/tools/adapters/local/delete_text_in_file.py +2 -1
- janito/tools/adapters/local/fetch_url.py +1 -0
- janito/tools/adapters/local/find_files.py +7 -6
- janito/tools/adapters/local/get_file_outline/core.py +1 -0
- janito/tools/adapters/local/get_file_outline/java_outline.py +22 -15
- janito/tools/adapters/local/get_file_outline/search_outline.py +1 -0
- janito/tools/adapters/local/move_file.py +1 -0
- janito/tools/adapters/local/open_html_in_browser.py +15 -5
- janito/tools/adapters/local/open_url.py +1 -0
- janito/tools/adapters/local/python_code_run.py +1 -0
- janito/tools/adapters/local/python_command_run.py +1 -0
- janito/tools/adapters/local/python_file_run.py +1 -0
- janito/tools/adapters/local/read_files.py +19 -4
- janito/tools/adapters/local/remove_directory.py +1 -0
- janito/tools/adapters/local/remove_file.py +1 -0
- janito/tools/adapters/local/replace_text_in_file.py +4 -3
- janito/tools/adapters/local/run_bash_command.py +1 -0
- janito/tools/adapters/local/run_powershell_command.py +1 -0
- janito/tools/adapters/local/search_text/core.py +18 -17
- janito/tools/adapters/local/search_text/match_lines.py +5 -5
- janito/tools/adapters/local/search_text/pattern_utils.py +1 -1
- janito/tools/adapters/local/search_text/traverse_directory.py +7 -7
- janito/tools/adapters/local/validate_file_syntax/core.py +1 -1
- janito/tools/adapters/local/validate_file_syntax/html_validator.py +8 -1
- janito/tools/disabled_tools.py +68 -0
- janito/tools/path_security.py +18 -11
- janito/tools/permissions.py +6 -0
- janito/tools/permissions_parse.py +4 -3
- janito/tools/tool_base.py +11 -5
- janito/tools/tool_use_tracker.py +1 -4
- janito/tools/tool_utils.py +1 -1
- janito/tools/tools_adapter.py +57 -25
- {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/METADATA +11 -19
- janito-2.9.0.dist-info/RECORD +205 -0
- janito/cli/chat_mode/shell/commands/livelogs.py +0 -49
- janito/drivers/mistralai/driver.py +0 -41
- janito/providers/mistralai/model_info.py +0 -37
- janito/providers/mistralai/provider.py +0 -72
- janito/providers/provider_static_info.py +0 -21
- janito-2.7.0.dist-info/RECORD +0 -202
- /janito/agent/templates/profiles/{system_prompt_template_assistant.txt.j2 → system_prompt_template_model_conversation_without_tools_or_context.txt.j2} +0 -0
- {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/WHEEL +0 -0
- {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/entry_points.txt +0 -0
- {janito-2.7.0.dist-info → janito-2.9.0.dist-info}/licenses/LICENSE +0 -0
- {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
|
-
|
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
|
-
|
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(
|
25
|
-
|
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(
|
janito/tools/tool_use_tracker.py
CHANGED
@@ -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
|
janito/tools/tool_utils.py
CHANGED
janito/tools/tools_adapter.py
CHANGED
@@ -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 (
|
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 [
|
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
|
-
|
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
|
-
|
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
|
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(
|
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,
|
172
|
-
workdir = getattr(self,
|
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
|
178
|
-
|
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(
|
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
|
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(
|
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(
|
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(
|
243
|
+
validation_error = self._validate_arguments_against_schema(
|
244
|
+
arguments, schema
|
245
|
+
)
|
216
246
|
if validation_error:
|
217
|
-
self._publish_tool_call_error(
|
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.
|
3
|
+
Version: 2.9.0
|
4
4
|
Summary: A new Python package called janito.
|
5
|
-
Author-email: João Pinto <
|
6
|
-
Project-URL: Homepage, https://github.com/
|
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
|
[](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,
|
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+
|
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
|
-
| `
|
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://
|
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="
|
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)
|