janito 3.2.0__py3-none-any.whl → 3.4.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 (160) hide show
  1. janito/README.md +0 -3
  2. janito/cli/chat_mode/bindings.py +0 -26
  3. janito/cli/chat_mode/session.py +1 -12
  4. janito/cli/chat_mode/shell/commands/security/allowed_sites.py +33 -47
  5. janito/cli/cli_commands/list_plugins.py +43 -52
  6. janito/cli/core/getters.py +0 -3
  7. janito/cli/core/model_guesser.py +24 -40
  8. janito/cli/main_cli.py +12 -9
  9. janito/cli/prompt_core.py +9 -20
  10. janito/drivers/openai/driver.py +0 -1
  11. janito/drivers/zai/driver.py +0 -1
  12. janito/hello.txt +0 -0
  13. janito/i18n/it.py +46 -46
  14. janito/llm/agent.py +16 -32
  15. janito/llm/auth_utils.py +5 -14
  16. janito/llm/driver.py +0 -8
  17. janito/plugins/__init__.py +12 -31
  18. janito/plugins/auto_loader.py +11 -12
  19. janito/plugins/auto_loader_fixed.py +11 -12
  20. janito/{plugin_system → plugins}/base.py +2 -5
  21. janito/plugins/builtin.py +1 -15
  22. janito/plugins/core_adapter.py +11 -89
  23. janito/plugins/core_loader.py +120 -0
  24. janito/plugins/core_loader_fixed.py +125 -0
  25. janito/plugins/discovery.py +5 -5
  26. janito/plugins/discovery_core.py +9 -14
  27. janito/plugins/manager.py +1 -1
  28. janito/providers/__init__.py +0 -1
  29. janito/tools/__init__.py +7 -31
  30. janito/tools/adapters/__init__.py +1 -6
  31. janito/tools/adapters/local/__init__.py +70 -7
  32. janito/{plugins/tools → tools/adapters/local}/ask_user.py +3 -3
  33. janito/{plugins/tools → tools/adapters/local}/create_file.py +6 -6
  34. janito/{plugins/tools → tools/adapters/local}/fetch_url.py +3 -3
  35. janito/{plugins/tools → tools/adapters/local}/replace_text_in_file.py +4 -4
  36. janito/{plugins/tools → tools/adapters/local}/show_image.py +6 -15
  37. janito/{plugins/core/imagedisplay/tools → tools/adapters/local}/show_image_grid.py +5 -13
  38. janito/tools/function_adapter.py +65 -0
  39. janito/tools/loop_protection_decorator.py +117 -114
  40. {janito-3.2.0.dist-info → janito-3.4.0.dist-info}/METADATA +2 -1
  41. {janito-3.2.0.dist-info → janito-3.4.0.dist-info}/RECORD +85 -156
  42. janito/cli/cli_commands/check_tools.py +0 -212
  43. janito/llm/cancellation_manager.py +0 -63
  44. janito/llm/enter_cancellation.py +0 -107
  45. janito/plugin_system/__init__.py +0 -10
  46. janito/plugin_system/core_loader.py +0 -217
  47. janito/plugin_system/core_loader_fixed.py +0 -225
  48. janito/plugins/core/__init__.py +0 -7
  49. janito/plugins/core/codeanalyzer/__init__.py +0 -43
  50. janito/plugins/core/filemanager/__init__.py +0 -124
  51. janito/plugins/core/filemanager/tools/create_file.py +0 -87
  52. janito/plugins/core/filemanager/tools/replace_text_in_file.py +0 -270
  53. janito/plugins/core/imagedisplay/__init__.py +0 -14
  54. janito/plugins/core/imagedisplay/plugin.py +0 -51
  55. janito/plugins/core/imagedisplay/tools/__init__.py +0 -1
  56. janito/plugins/core/imagedisplay/tools/show_image.py +0 -83
  57. janito/plugins/core/system/__init__.py +0 -23
  58. janito/plugins/dev/__init__.py +0 -7
  59. janito/plugins/dev/pythondev/__init__.py +0 -37
  60. janito/plugins/dev/visualization/__init__.py +0 -23
  61. janito/plugins/example_plugin.py +0 -108
  62. janito/plugins/tools/__init__.py +0 -10
  63. janito/plugins/tools/copy_file.py +0 -87
  64. janito/plugins/tools/core_tools_plugin.py +0 -87
  65. janito/plugins/tools/create_directory.py +0 -70
  66. janito/plugins/tools/decorators.py +0 -19
  67. janito/plugins/tools/delete_text_in_file.py +0 -134
  68. janito/plugins/tools/find_files.py +0 -143
  69. janito/plugins/tools/get_file_outline/__init__.py +0 -7
  70. janito/plugins/tools/get_file_outline/core.py +0 -122
  71. janito/plugins/tools/get_file_outline/java_outline.py +0 -47
  72. janito/plugins/tools/get_file_outline/markdown_outline.py +0 -14
  73. janito/plugins/tools/get_file_outline/python_outline.py +0 -303
  74. janito/plugins/tools/get_file_outline/search_outline.py +0 -36
  75. janito/plugins/tools/move_file.py +0 -131
  76. janito/plugins/tools/open_html_in_browser.py +0 -51
  77. janito/plugins/tools/open_url.py +0 -37
  78. janito/plugins/tools/python_code_run.py +0 -172
  79. janito/plugins/tools/python_command_run.py +0 -171
  80. janito/plugins/tools/python_file_run.py +0 -172
  81. janito/plugins/tools/read_chart.py +0 -259
  82. janito/plugins/tools/read_files.py +0 -58
  83. janito/plugins/tools/remove_directory.py +0 -55
  84. janito/plugins/tools/remove_file.py +0 -58
  85. janito/plugins/tools/run_bash_command.py +0 -183
  86. janito/plugins/tools/run_powershell_command.py +0 -218
  87. janito/plugins/tools/search_text/__init__.py +0 -7
  88. janito/plugins/tools/search_text/core.py +0 -205
  89. janito/plugins/tools/search_text/match_lines.py +0 -67
  90. janito/plugins/tools/search_text/pattern_utils.py +0 -73
  91. janito/plugins/tools/search_text/traverse_directory.py +0 -145
  92. janito/plugins/tools/show_image_grid.py +0 -85
  93. janito/plugins/tools/validate_file_syntax/__init__.py +0 -7
  94. janito/plugins/tools/validate_file_syntax/core.py +0 -114
  95. janito/plugins/tools/validate_file_syntax/css_validator.py +0 -35
  96. janito/plugins/tools/validate_file_syntax/html_validator.py +0 -100
  97. janito/plugins/tools/validate_file_syntax/jinja2_validator.py +0 -50
  98. janito/plugins/tools/validate_file_syntax/js_validator.py +0 -27
  99. janito/plugins/tools/validate_file_syntax/json_validator.py +0 -6
  100. janito/plugins/tools/validate_file_syntax/markdown_validator.py +0 -109
  101. janito/plugins/tools/validate_file_syntax/ps1_validator.py +0 -32
  102. janito/plugins/tools/validate_file_syntax/python_validator.py +0 -5
  103. janito/plugins/tools/validate_file_syntax/xml_validator.py +0 -11
  104. janito/plugins/tools/validate_file_syntax/yaml_validator.py +0 -6
  105. janito/plugins/tools/view_file.py +0 -172
  106. janito/plugins/ui/__init__.py +0 -7
  107. janito/plugins/ui/userinterface/__init__.py +0 -16
  108. janito/plugins/ui/userinterface/tools/ask_user.py +0 -110
  109. janito/plugins/web/__init__.py +0 -7
  110. janito/plugins/web/webtools/__init__.py +0 -33
  111. janito/plugins/web/webtools/tools/fetch_url.py +0 -458
  112. janito/providers/together/__init__.py +0 -1
  113. janito/providers/together/model_info.py +0 -69
  114. janito/providers/together/provider.py +0 -108
  115. janito/tools/cli_initializer.py +0 -88
  116. janito/tools/initialize.py +0 -70
  117. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/copy_file.py +0 -0
  118. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/create_directory.py +0 -0
  119. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/delete_text_in_file.py +0 -0
  120. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/find_files.py +0 -0
  121. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/get_file_outline/__init__.py +0 -0
  122. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/get_file_outline/core.py +0 -0
  123. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/get_file_outline/java_outline.py +0 -0
  124. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/get_file_outline/markdown_outline.py +0 -0
  125. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/get_file_outline/python_outline.py +0 -0
  126. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/get_file_outline/search_outline.py +0 -0
  127. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/move_file.py +0 -0
  128. /janito/{plugins/web/webtools/tools → tools/adapters/local}/open_html_in_browser.py +0 -0
  129. /janito/{plugins/web/webtools/tools → tools/adapters/local}/open_url.py +0 -0
  130. /janito/{plugins/dev/pythondev/tools → tools/adapters/local}/python_code_run.py +0 -0
  131. /janito/{plugins/dev/pythondev/tools → tools/adapters/local}/python_command_run.py +0 -0
  132. /janito/{plugins/dev/pythondev/tools → tools/adapters/local}/python_file_run.py +0 -0
  133. /janito/{plugins/dev/visualization/tools → tools/adapters/local}/read_chart.py +0 -0
  134. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/read_files.py +0 -0
  135. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/remove_directory.py +0 -0
  136. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/remove_file.py +0 -0
  137. /janito/{plugins/core/system/tools → tools/adapters/local}/run_bash_command.py +0 -0
  138. /janito/{plugins/core/system/tools → tools/adapters/local}/run_powershell_command.py +0 -0
  139. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/search_text/__init__.py +0 -0
  140. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/search_text/core.py +0 -0
  141. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/search_text/match_lines.py +0 -0
  142. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/search_text/pattern_utils.py +0 -0
  143. /janito/{plugins/core/codeanalyzer/tools → tools/adapters/local}/search_text/traverse_directory.py +0 -0
  144. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/__init__.py +0 -0
  145. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/core.py +0 -0
  146. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/css_validator.py +0 -0
  147. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/html_validator.py +0 -0
  148. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/jinja2_validator.py +0 -0
  149. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/js_validator.py +0 -0
  150. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/json_validator.py +0 -0
  151. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/markdown_validator.py +0 -0
  152. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/ps1_validator.py +0 -0
  153. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/python_validator.py +0 -0
  154. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/xml_validator.py +0 -0
  155. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/validate_file_syntax/yaml_validator.py +0 -0
  156. /janito/{plugins/core/filemanager/tools → tools/adapters/local}/view_file.py +0 -0
  157. {janito-3.2.0.dist-info → janito-3.4.0.dist-info}/WHEEL +0 -0
  158. {janito-3.2.0.dist-info → janito-3.4.0.dist-info}/entry_points.txt +0 -0
  159. {janito-3.2.0.dist-info → janito-3.4.0.dist-info}/licenses/LICENSE +0 -0
  160. {janito-3.2.0.dist-info → janito-3.4.0.dist-info}/top_level.txt +0 -0
@@ -1,140 +1,143 @@
1
1
  import functools
2
2
  import time
3
3
  import threading
4
- from typing import Any, Tuple
4
+ from typing import Callable, Any
5
+ from janito.tools.loop_protection import LoopProtection
6
+ from janito.tools.tool_use_tracker import normalize_path
7
+
5
8
 
6
9
  # Global tracking for decorator-based loop protection
7
10
  _decorator_call_tracker = {}
8
11
  _decorator_call_tracker_lock = threading.Lock()
9
12
 
10
13
 
11
- def _normalize_key_value(key_field: str, key_value: Any) -> Any:
12
- """Normalize key values, especially paths, so different representations map to the same key."""
13
- if key_value is None:
14
- return None
15
-
16
- try:
17
- if isinstance(key_field, str) and "path" in key_field.lower():
18
- from janito.tools.tool_use_tracker import (
19
- normalize_path as _norm, # reuse existing normalization
20
- )
21
-
22
- if isinstance(key_value, str):
23
- return _norm(key_value)
24
- if isinstance(key_value, (list, tuple)):
25
- return tuple(_norm(v) if isinstance(v, str) else v for v in key_value)
26
- except Exception:
27
- # Best-effort normalization – fall back to original value
28
- pass
29
-
30
- return key_value
31
-
32
-
33
- def _get_param_value(func, args, kwargs, key_field: str):
34
- """Extract the watched parameter value from args/kwargs using function signature."""
35
- if key_field in kwargs:
36
- return kwargs[key_field]
37
-
38
- # Handle positional arguments by mapping to parameter names
39
- if len(args) > 1: # args[0] is self
40
- import inspect
41
-
42
- try:
43
- sig = inspect.signature(func)
44
- param_names = list(sig.parameters.keys())
45
- if key_field in param_names:
46
- idx = param_names.index(key_field)
47
- if idx < len(args):
48
- return args[idx]
49
- except Exception:
50
- return None
51
-
52
- return None
53
-
54
-
55
- def _determine_operation_name(func, args, kwargs, key_field: str) -> str:
56
- """Build the operation name for rate limiting, optionally including a normalized key value."""
57
- if key_field:
58
- raw_value = _get_param_value(func, args, kwargs, key_field)
59
- if raw_value is not None:
60
- norm_value = _normalize_key_value(key_field, raw_value)
61
- return f"{func.__name__}_{norm_value}"
62
- return func.__name__
63
-
64
-
65
- def _check_and_record(
66
- op_name: str,
67
- current_time: float,
68
- time_window: float,
69
- max_calls: int,
70
- tool_instance: Any,
71
- ) -> Tuple[bool, str]:
72
- """Check loop limits for op_name and record the call. Returns (exceeded, message)."""
73
- with _decorator_call_tracker_lock:
74
- # Clean old timestamps
75
- if op_name in _decorator_call_tracker:
76
- _decorator_call_tracker[op_name] = [
77
- ts
78
- for ts in _decorator_call_tracker[op_name]
79
- if current_time - ts <= time_window
80
- ]
81
-
82
- # Check limit
83
- if (
84
- op_name in _decorator_call_tracker
85
- and len(_decorator_call_tracker[op_name]) >= max_calls
86
- ):
87
- if all(
88
- current_time - ts <= time_window
89
- for ts in _decorator_call_tracker[op_name]
90
- ):
91
- msg = (
92
- f"Loop protection: Too many {op_name} operations in a short time period "
93
- f"({max_calls} calls in {time_window}s). Please try a different approach or wait before retrying."
94
- )
95
- if hasattr(tool_instance, "report_error"):
96
- try:
97
- tool_instance.report_error(msg)
98
- except Exception:
99
- pass
100
- return True, msg
101
-
102
- # Record this call
103
- if op_name not in _decorator_call_tracker:
104
- _decorator_call_tracker[op_name] = []
105
- _decorator_call_tracker[op_name].append(current_time)
106
-
107
- return False, ""
108
-
109
-
110
14
  def protect_against_loops(
111
15
  max_calls: int = 5, time_window: float = 10.0, key_field: str = None
112
16
  ):
113
17
  """
114
18
  Decorator that adds loop protection to tool run methods.
115
19
 
116
- Tracks calls within a sliding time window and prevents excessive repeated operations.
117
- When key_field is provided, the limit is applied per unique normalized value of that parameter
118
- (e.g., per-path protection for file tools).
20
+ This decorator monitors tool executions and prevents excessive calls within
21
+ a configurable time window. It helps prevent infinite loops or excessive
22
+ resource consumption when tools are called repeatedly.
23
+
24
+ When the configured limits are exceeded, the decorator raises a RuntimeError
25
+ with a descriptive message. This exception will propagate up the call stack
26
+ unless caught by a try/except block in the calling code.
27
+
28
+ The decorator works by:
29
+ 1. Tracking the number of calls to the decorated function
30
+ 2. Checking if the calls exceed the configured limits
31
+ 3. Raising a RuntimeError if a potential loop is detected
32
+ 4. Allowing the method to proceed normally if the operation is safe
33
+
34
+ Args:
35
+ max_calls (int): Maximum number of calls allowed within the time window.
36
+ Defaults to 5 calls.
37
+ time_window (float): Time window in seconds for detecting excessive calls.
38
+ Defaults to 10.0 seconds.
39
+ key_field (str, optional): The parameter name to use for key matching instead of function name.
40
+ If provided, the decorator will track calls based on the value of this
41
+ parameter rather than the function name. Useful for tools that operate
42
+ on specific files or resources.
43
+
44
+ Example:
45
+ >>> @protect_against_loops(max_calls=3, time_window=5.0)
46
+ >>> def run(self, path: str) -> str:
47
+ >>> # Implementation here
48
+ >>> pass
49
+
50
+ >>> @protect_against_loops(max_calls=10, time_window=30.0)
51
+ >>> def run(self, file_paths: list) -> str:
52
+ >>> # Implementation here
53
+ >>> pass
54
+
55
+ >>> @protect_against_loops(max_calls=5, time_window=10.0, key_field='path')
56
+ >>> def run(self, path: str) -> str:
57
+ >>> # This will track calls per unique path value
58
+ >>> pass
59
+
60
+ Note:
61
+ When loop protection is triggered, a RuntimeError will be raised with a
62
+ descriptive message. This exception will propagate up the call stack
63
+ unless caught by a try/except block in the calling code.
119
64
  """
120
65
 
121
66
  def decorator(func):
122
67
  @functools.wraps(func)
123
68
  def wrapper(*args, **kwargs):
124
- # Methods should always have self; if not, execute directly.
69
+ # Get the tool instance (self)
125
70
  if not args:
71
+ # This shouldn't happen in normal usage as methods need self
126
72
  return func(*args, **kwargs)
127
73
 
128
- op_name = _determine_operation_name(func, args, kwargs, key_field)
129
- exceeded, msg = _check_and_record(
130
- op_name=op_name,
131
- current_time=time.time(),
132
- time_window=time_window,
133
- max_calls=max_calls,
134
- tool_instance=args[0],
135
- )
136
- if exceeded:
137
- return msg
74
+ # Determine the operation key
75
+ if key_field:
76
+ # Use the key_field parameter value as the operation key
77
+ key_value = None
78
+ if key_field in kwargs:
79
+ key_value = kwargs[key_field]
80
+ elif len(args) > 1:
81
+ # Handle positional arguments - need to map parameter names
82
+ import inspect
83
+
84
+ try:
85
+ sig = inspect.signature(func)
86
+ param_names = list(sig.parameters.keys())
87
+ if key_field in param_names:
88
+ field_index = param_names.index(key_field)
89
+ if field_index < len(args):
90
+ key_value = args[field_index]
91
+ except (ValueError, TypeError):
92
+ pass
93
+
94
+ if key_value is not None:
95
+ op_name = f"{func.__name__}_{key_value}"
96
+ else:
97
+ op_name = func.__name__
98
+ else:
99
+ # Use the function name as the operation name
100
+ op_name = func.__name__
101
+
102
+ # Check call limits
103
+ current_time = time.time()
104
+
105
+ with _decorator_call_tracker_lock:
106
+ # Clean up old entries outside the time window
107
+ if op_name in _decorator_call_tracker:
108
+ _decorator_call_tracker[op_name] = [
109
+ timestamp
110
+ for timestamp in _decorator_call_tracker[op_name]
111
+ if current_time - timestamp <= time_window
112
+ ]
113
+
114
+ # Check if we're exceeding the limit
115
+ if op_name in _decorator_call_tracker:
116
+ if len(_decorator_call_tracker[op_name]) >= max_calls:
117
+ # Check if all recent calls are within the time window
118
+ if all(
119
+ current_time - timestamp <= time_window
120
+ for timestamp in _decorator_call_tracker[op_name]
121
+ ):
122
+ # Return loop protection message as string instead of raising exception
123
+ error_msg = f"Loop protection: Too many {op_name} operations in a short time period ({max_calls} calls in {time_window}s). Please try a different approach or wait before retrying."
124
+
125
+ # Try to report the error through the tool's reporting mechanism
126
+ tool_instance = args[0] if args else None
127
+ if hasattr(tool_instance, "report_error"):
128
+ try:
129
+ tool_instance.report_error(error_msg)
130
+ except Exception:
131
+ pass # If reporting fails, we still return the message
132
+
133
+ return error_msg
134
+
135
+ # Record this call
136
+ if op_name not in _decorator_call_tracker:
137
+ _decorator_call_tracker[op_name] = []
138
+ _decorator_call_tracker[op_name].append(current_time)
139
+
140
+ # Proceed with the original function
138
141
  return func(*args, **kwargs)
139
142
 
140
143
  return wrapper
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.2.0
3
+ Version: 3.4.0
4
4
  Summary: A new Python package called janito.
5
5
  Author-email: João Pinto <janito@ikignosis.org>
6
6
  Project-URL: Homepage, https://github.com/ikignosis/janito
@@ -30,6 +30,7 @@ Requires-Dist: black; extra == "dev"
30
30
  Requires-Dist: questionary>=2.0.1; extra == "dev"
31
31
  Requires-Dist: setuptools_scm>=8.0; extra == "dev"
32
32
  Provides-Extra: coder
33
+ Requires-Dist: janito-coder; extra == "coder"
33
34
  Dynamic: license-file
34
35
 
35
36
  # nctl
@@ -1,4 +1,4 @@
1
- janito/README.md,sha256=Wrt6pMVT9UaXsFpoE3m9hgn28OAHWhkZ_vwWTNcSH8Q,4947
1
+ janito/README.md,sha256=Kd4GcEYIt04520J2AIMCZbp1enAGRzlLswCfyi1g5AY,4737
2
2
  janito/__init__.py,sha256=a0pFui3A_AfWJiUfg93yE-Vf4868bqG3y9yg2fkTIuY,244
3
3
  janito/__main__.py,sha256=lPQ8kAyYfyeS1KopmJ8EVY5g1YswlIqCS615mM_B_rM,70
4
4
  janito/_version.py,sha256=PtAVr2K9fOS5sv6aXzmcb7UaR5NLGMFOofL7Ndjh75o,2344
@@ -11,6 +11,7 @@ janito/exceptions.py,sha256=5YoffZeZDh2BEdPfhYG6JExvIqOoX7V7TjzrJqzoklw,1786
11
11
  janito/formatting.py,sha256=SMvOmL6bst3KGcI7OLa5D4DE127fQYuHZS3oY8OPsn8,2031
12
12
  janito/formatting_token.py,sha256=UefBF8Nn3BU8bJNQRrJWB3i3zXEwkRRZMPGuAOJaDYI,2440
13
13
  janito/gitignore_utils.py,sha256=P3iF9fMWAomqULq2xsoqHtI9uNIFSPcagljrxZshmLw,4110
14
+ janito/hello.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
15
  janito/mkdocs.yml,sha256=hceV1mnCuj5Eo42jJQHSAhqHC4emiMExgnISiiwqSow,925
15
16
  janito/perf_singleton.py,sha256=g1h0Sdf4ydzegeEpJlMhQt4H0GQZ2hryXrdYOTL-b30,113
16
17
  janito/performance_collector.py,sha256=RYu4av16Trj3RljJZ8-2Gbn1KlGdJUosrcVFYtwviNI,6285
@@ -29,18 +30,18 @@ janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
29
30
  janito/cli/config.py,sha256=HkZ14701HzIqrvaNyDcDhGlVHfpX_uHlLp2rHmhRm_k,872
30
31
  janito/cli/console.py,sha256=gJolqzWL7jEPLxeuH-CwBDRFpXt976KdZOEAB2tdBDs,64
31
32
  janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
32
- janito/cli/main_cli.py,sha256=_OOQqeLiqvmYeB_928Av920Gk43rbXecMIOTL6JeT0Y,16674
33
- janito/cli/prompt_core.py,sha256=GSpq0_J-PS455SPkF-nCe9WtOQqseR08DWN7XhGIJXA,12044
33
+ janito/cli/main_cli.py,sha256=FXpoybaEbDRlK5-oMOMlcdM7TpVfnOdr6-mOkgJHeTo,16648
34
+ janito/cli/prompt_core.py,sha256=F68J4Xl6jZMYFN4oBBYZFj15Jp-HTYoLub4bw2XpNRU,11648
34
35
  janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
35
36
  janito/cli/prompt_setup.py,sha256=s48gvNfZhKjsEhf4EzL1tKIGm4wDidPMDvlM6TAPYes,2116
36
37
  janito/cli/rich_terminal_reporter.py,sha256=Hitf5U13gncad4GPVAcDMfdSwlfzQzOn9KdeX4TjTWU,6806
37
38
  janito/cli/utils.py,sha256=plCQiDKIf3V8mFhhX5H9-MF2W86i-xRdWf8Xi117Z0w,677
38
39
  janito/cli/verbose_output.py,sha256=wY_B4of5e8Vv7w1fRwOZzNGU2JqbMdcFnGjtEr4hLus,7686
39
- janito/cli/chat_mode/bindings.py,sha256=vyaT5k454dSqxXPFWW0bOCHwBDCpTuxhcAu0AsDO-Gg,2013
40
+ janito/cli/chat_mode/bindings.py,sha256=odjc5_-YW1t2FRhBUNRNoBMoQIg5sMz3ktV7xG0ADFU,975
40
41
  janito/cli/chat_mode/chat_entry.py,sha256=RFdPd23jsA2DMHRacpjAdwI_1dFBaWrtnwyQEgb2fHA,475
41
42
  janito/cli/chat_mode/prompt_style.py,sha256=vsqQ9xxmrYjj1pWuVe9CayQf39fo2EIXrkKPkflSVn4,805
42
43
  janito/cli/chat_mode/script_runner.py,sha256=WFTFVWzg_VQrD2Ujj02XWjscfGgHwmjBeRxaEjWw9ps,6505
43
- janito/cli/chat_mode/session.py,sha256=QYJ2wpA3IlB756ooFXTSkUVa5mOWgllAkONG3Dgqm8I,19002
44
+ janito/cli/chat_mode/session.py,sha256=1mCET4V9u1FGEMnr8HJGOc6X8lhTNkhAYlZ3cvIvefw,18540
44
45
  janito/cli/chat_mode/toolbar.py,sha256=SzdWAJdcY1g2rTPZCPL6G5X8jO6ZQYjwko2-nw54_nU,3397
45
46
  janito/cli/chat_mode/shell/autocomplete.py,sha256=lE68MaVaodbA2VfUM0_YLqQVLBJAE_BJsd5cMtwuD-g,793
46
47
  janito/cli/chat_mode/shell/commands.bak.zip,sha256=I7GFjXg2ORT5NzFpicH1vQ3kchhduQsZinzqo0xO8wU,74238
@@ -73,16 +74,15 @@ janito/cli/chat_mode/shell/commands/utility.py,sha256=K982P-UwgPLzpEvSuSBGwiQ3zC
73
74
  janito/cli/chat_mode/shell/commands/verbose.py,sha256=HDTe0NhdcjBuhh-eJSW8iLPDeeBO95K5iSDAMAljxa4,953
74
75
  janito/cli/chat_mode/shell/commands/write.py,sha256=NHPj2xe8icUBcpxALIoZZ1zAsX6bhBFqBhnQPqq7fHs,2341
75
76
  janito/cli/chat_mode/shell/commands/security/__init__.py,sha256=od-vkuI7LqmUqz2Q42YToWauRM6IPHGeNj14867yIgM,50
76
- janito/cli/chat_mode/shell/commands/security/allowed_sites.py,sha256=pmyQnLD7Do_CaIITDlZ9Md7PqSpQAhRdnnVMMdQVFGk,3679
77
+ janito/cli/chat_mode/shell/commands/security/allowed_sites.py,sha256=K_izmERZlumlTVxiTMvMXbMhADlJBvhyeeM5IGva_X8,3240
77
78
  janito/cli/chat_mode/shell/session/__init__.py,sha256=uTYE_QpZFEn7v9QE5o1LdulpCWa9vmk0OsefbBGWg_c,37
78
79
  janito/cli/chat_mode/shell/session/history.py,sha256=tYav6GgjAZkvWhlI_rfG6OArNqW6Wn2DTv39Hb20QYc,1262
79
80
  janito/cli/chat_mode/shell/session/manager.py,sha256=MwD9reHsRaly0CyRB-S1JJ0wPKz2g8Xdj2VvlU35Hgc,1001
80
- janito/cli/cli_commands/check_tools.py,sha256=cSXcF0szeWzeEK7kpg7P2cZW3sv5R1nxgCb3P7bWpyE,7182
81
81
  janito/cli/cli_commands/enable_disable_plugin.py,sha256=IIEg5Gz2aAW_7BKrMQTXSGF0zWBoBdrcQQMjfQ7yay4,2985
82
82
  janito/cli/cli_commands/list_config.py,sha256=oiQEGaGPjwjG-PrOcakpNMbbqISTsBEs7rkGH3ceQsI,1179
83
83
  janito/cli/cli_commands/list_drivers.py,sha256=r2ENykUcvf_9XYp6LHd3RvLXGXyVUA6oe_Pr0dyv92I,5124
84
84
  janito/cli/cli_commands/list_models.py,sha256=QF3Wa7OhNcJFKeBxaw0C_rDfsvJFNb-siz5uorajBvo,1595
85
- janito/cli/cli_commands/list_plugins.py,sha256=s9lZYhy8UANMj7j6c-l-nP4kJIfM_VYsGEyc3hptJ6c,8075
85
+ janito/cli/cli_commands/list_plugins.py,sha256=Lv-M6EAFiqnj0tl9Bq23s162t--81AIs2EqZxhi81lQ,7996
86
86
  janito/cli/cli_commands/list_profiles.py,sha256=O4k6U9iCEeNH3lM-NP_XX_E9W0h__hheLSn23241dkA,3538
87
87
  janito/cli/cli_commands/list_providers.py,sha256=oilrBjNL5mot1nz45XQQY6oeiSxoNvphhQYspNcEJpw,391
88
88
  janito/cli/cli_commands/list_providers_region.py,sha256=qrMj_gtgEMty8UH0P_O5SgWCVJ9ZKxGUp_GdsE4_EH4,2548
@@ -95,8 +95,8 @@ janito/cli/cli_commands/show_config.py,sha256=ammzVEqJQCAdWFRrhI1zjjmzgTCH2l38RE
95
95
  janito/cli/cli_commands/show_system_prompt.py,sha256=WQclY_bmJrHbIBRU1qx1WV4VyooyXVx_XQyX_4Rb1hs,6335
96
96
  janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
97
97
  janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
98
- janito/cli/core/getters.py,sha256=53umV7aab6WrmcCle8WqU2aYnww7a7IiqtM1YZN0YvE,3016
99
- janito/cli/core/model_guesser.py,sha256=557c0FckGIVmPYCgp2hBNsjsmHAiORtoxvLTKnOk8kg,2082
98
+ janito/cli/core/getters.py,sha256=opmcSz86J-I95Klsh0c4y6lsYvNakrvRqvuA0o5ARWI,2869
99
+ janito/cli/core/model_guesser.py,sha256=V7LBkIllSp_tP9-2B1gcl5b4b-La7mrOvE3AZQQm8lk,1716
100
100
  janito/cli/core/runner.py,sha256=gi8xke6re9AoHHNCivV50i0eUAliw8QTUdXyqMkMplM,9044
101
101
  janito/cli/core/setters.py,sha256=zjSUxy6iUzcrmEunFk7dA90KqbMaq2O7LTGP8wn2HxA,5378
102
102
  janito/cli/core/unsetters.py,sha256=FEw9gCt0vRvoCt0kRSNfVB2tzi_TqppJIx2nHPP59-k,2012
@@ -108,156 +108,43 @@ janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJ
108
108
  janito/drivers/azure_openai/driver.py,sha256=L2rQOl1d0BHaDChHLtZszAeuWNoyYIgwuYuahE1qJps,4152
109
109
  janito/drivers/cerebras/__init__.py,sha256=wXWxPTy4KH5Esw8ml9h-TeApi6XXujNFY2Q4jKVdcAY,26
110
110
  janito/drivers/openai/README.md,sha256=bgPdaYX0pyotCoJ9t3cJbYM-teQ_YM1DAFEKLCMP32Q,666
111
- janito/drivers/openai/driver.py,sha256=06vkhNXE0CWcmFx5qBO1sGOVapAq0wiG0v5xL6YO8Kk,19627
111
+ janito/drivers/openai/driver.py,sha256=NbR_1Btr7QpJjNzJ3CxJa1-Kfw17lImZFU9fyKDLSRo,19567
112
112
  janito/drivers/zai/__init__.py,sha256=rleES3ZJEslJ8M02TdTPyxHKXxA4-e2fDJa6yjuzY8s,22
113
- janito/drivers/zai/driver.py,sha256=NK36IxMJ_rSR04bh96mqDX3dcGPySqd1KL0d194xtfw,18919
113
+ janito/drivers/zai/driver.py,sha256=uOR7VFEMjd7Dw_zSFO1SN5SgBCIG8b4CEzRMIUXBgUQ,18859
114
114
  janito/event_bus/__init__.py,sha256=VG6GOhKMBh0O_92D-zW8a3YitJPKDajGgPiFezTXlNE,77
115
115
  janito/event_bus/bus.py,sha256=LokZbAdwcWhWOyKSp7H3Ism57x4EZhxlRPjl3NE4UKU,2847
116
116
  janito/event_bus/event.py,sha256=MtgcBPD7cvCuubiLIyo-BWcsNSO-941HLk6bScHTJtQ,427
117
117
  janito/event_bus/handler.py,sha256=RhBtT1E48VEM2-k8u3HYsESw7VX5qAgiB8ZTJeKXhHc,1322
118
118
  janito/event_bus/queue_bus.py,sha256=l4phun3pxXxi8ZlIq8ChYaiYDVO1PZeXoOzyi3vyu20,1558
119
119
  janito/i18n/__init__.py,sha256=6zCIu6pSQpoMJvIRK9oOD3pkzbNeJik3lFDXse0X6ag,994
120
- janito/i18n/it.py,sha256=57xW4YE1kkMz8oNO5fBqK_YllWkHT97asaThDsGsBdM,4097
120
+ janito/i18n/it.py,sha256=jpWyCrwoZXxHaLEbmYL2B1ouOa854ecdCfpXq4mqroc,4052
121
121
  janito/i18n/messages.py,sha256=fBuwOTFoygyHPkYphm6Y0r1iE8497Z4iryVAmPhMEkg,1851
122
122
  janito/i18n/pt.py,sha256=NlTgpDSftUfFG7FGbs7TK54vQlJVMyaZDHGcWjelwMc,4168
123
123
  janito/llm/README.md,sha256=6GRqCu_a9va5HCB1YqNqbshyWKFyAGlnXugrjom-xj8,1213
124
124
  janito/llm/__init__.py,sha256=dpyVH51qVRCw-PDyAFLAxq0zd4jl5MDcuV6Cri0D-dQ,134
125
- janito/llm/agent.py,sha256=R3jzva-Er5W1TmHXHf9APxYB51H0z1vxOF6jVda7m7U,21940
125
+ janito/llm/agent.py,sha256=T0JfeMoOudTWsHwWCcaocrHyq9k0TvkL4_YePlXvZfo,21269
126
126
  janito/llm/auth.py,sha256=8Dl_orUEPhn2X6XjkO2Nr-j1HFT2YDxk1qJl9hSFI88,2286
127
- janito/llm/auth_utils.py,sha256=mcPWT2p2kGMhvR9QsHqk84utDejPJh3uyjrDOJ0dKYA,1068
128
- janito/llm/cancellation_manager.py,sha256=u-hzuuVjQmLV15YPp3cZdF8KmyQLoLv8P5ZTvgYWr7o,2194
129
- janito/llm/driver.py,sha256=iVCYGUE5bqa_MTF6p_l2VUl_2y_-IOStNeC0IWfkA3I,10394
127
+ janito/llm/auth_utils.py,sha256=7GH7bIScKhVWJW6ugcDrJLcYRamj5dl_l8N1rrvR4Ws,663
128
+ janito/llm/driver.py,sha256=stiicPe_MXTuWW4q6MSwK7PCj8UZcA_30pGACu6xYUQ,10039
130
129
  janito/llm/driver_config.py,sha256=OW0ae49EfgKDqaThuDjZBiaN78voNzwiZ6szERMqJos,1406
131
130
  janito/llm/driver_config_builder.py,sha256=BvWGx7vaBR5NyvPY1XNAP3lAgo1uf-T25CSsIo2kkCU,1401
132
131
  janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,389
133
- janito/llm/enter_cancellation.py,sha256=sE6yadsFGnKDQVBKenv1sF96wIcAP2LqymiUFJBlijU,3312
134
132
  janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
135
133
  janito/llm/model.py,sha256=EioBkdgn8hJ0iQaKN-0KbXlsrk3YKmwR9IbvoEbdVTE,1159
136
134
  janito/llm/provider.py,sha256=3FbhQPrWBSEoIdIi-5DWIh0DD_CM570EFf1NcuGyGko,7961
137
- janito/plugin_system/__init__.py,sha256=HoTBUooSTEsp_1FaBn-5BmzZX_p_982e4T_fCOeUlD0,290
138
- janito/plugin_system/base.py,sha256=Z0PSIj7R-hAKOeCSXC2JyBqm4rlsJoZSqkqxLe-juks,4346
139
- janito/plugin_system/core_loader.py,sha256=3zhKPWWSFlThzaRTLjGDPI_DVNRafMP5LZ5r7ei6Jo0,6843
140
- janito/plugin_system/core_loader_fixed.py,sha256=3JZnEkM4i0x4k3SJhomtVevmNl4uWhozhVyh6rcMtvE,7159
141
- janito/plugins/__init__.py,sha256=q-z28oV-0BaagZ43f__qeg13R9oA7kK7XnVEUHNRZbs,910
142
- janito/plugins/auto_loader.py,sha256=-uVDTKQToGCw1nqwAxrt4IDvgP3z3pvZoC5EXFWNm_k,2288
143
- janito/plugins/auto_loader_fixed.py,sha256=3JnGDp1enombEHsR8spRDpVrD6tSPdudysWvhyuk5Ec,2304
144
- janito/plugins/builtin.py,sha256=kbIOVmqucJKyISC5kWcgda_6IhHGA6yWoxUghc1Qtk0,3409
135
+ janito/plugins/__init__.py,sha256=6tTpUDNJJCRqlGK6RBd40wP_xEowuZZh0FRGeQ5lQQA,400
136
+ janito/plugins/auto_loader.py,sha256=8DRpPZtAUtP-et4Lzaam93MH4s_sqQXXKI8Ly5-GQf8,2329
137
+ janito/plugins/auto_loader_fixed.py,sha256=11pL7J0bX3XOOevQa10_oUtNbH-CXkpKhxOl69Bmzro,2335
138
+ janito/plugins/base.py,sha256=4sQdTOogtDgmLWgA3q1Z8h8s-JySRkk9nSAmg0mHoNM,4285
139
+ janito/plugins/builtin.py,sha256=rAdOz5cekFfsTfXJd5-2AXW4Nh81JoBMONqj1skiTR8,2985
145
140
  janito/plugins/config.py,sha256=ex5f1XsKPEgIO4DgJCohPzMKAQoUdx1OdSVU0FlSr5o,2331
146
- janito/plugins/core_adapter.py,sha256=tFi9VYvb15n3yUGDF7ihALbjL7pz_PDeeEgu_3JFqTQ,4430
147
- janito/plugins/discovery.py,sha256=IGQAFPzzzZjlpMzPNdChD7ZJrCYN8QmvXPsvLBOSSjY,10120
148
- janito/plugins/discovery_core.py,sha256=3pL8kinyFuz1owqIpZDYYIvj3RrJVJHulUa36Aqsc6g,1617
149
- janito/plugins/example_plugin.py,sha256=1B0PYOSFsb2ya2VCwHr1pMJC9ivUJ7t9TtQkc8lkaGU,3136
150
- janito/plugins/manager.py,sha256=R1B-2sUD5YFLOTnp4Pfx1wZ-3Hzff--PqaOJHfllc5g,8155
151
- janito/plugins/core/__init__.py,sha256=74-nOHG97Jo7cSm_sOLwYYhS0maB1kgKdB69-bmi03k,144
152
- janito/plugins/core/codeanalyzer/__init__.py,sha256=meDla5uyJATX7zYSrmRyjjBFjSK53R_lU3Z6iiy_lxM,1056
153
- janito/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
154
- janito/plugins/core/codeanalyzer/tools/get_file_outline/core.py,sha256=25k6a8PaDYxAfxnEAvZvOWg2BgUcgKU_BkzJmZKUMEA,4611
155
- janito/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
156
- janito/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
157
- janito/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
158
- janito/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py,sha256=bski24TpnJVf3L0TNzkx3HfvaXwttQl4EVkwk2POQOw,1348
159
- janito/plugins/core/codeanalyzer/tools/search_text/__init__.py,sha256=FEYpF5tTtf0fiAyRGIGSn-kV-MJDkhdFIbus16mYW8Y,34
160
- janito/plugins/core/codeanalyzer/tools/search_text/core.py,sha256=Qoid7FESJGVIsFm5oasgv9vZDy0aSzqeJPBWAF2_Edo,7877
161
- janito/plugins/core/codeanalyzer/tools/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
162
- janito/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
163
- janito/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
164
- janito/plugins/core/filemanager/__init__.py,sha256=waUhGQ2OL59Ooes4cQOOlQdBsFQSIffevJkcZq_kaCQ,3241
165
- janito/plugins/core/filemanager/tools/copy_file.py,sha256=SBJm19Ipe5dqRE1Mxl6JSrn4bNmfObVnDr5b1mcEu6c,3682
166
- janito/plugins/core/filemanager/tools/create_directory.py,sha256=LxwqQEsnOrEphCIoaMRRx9P9bu0MzidP3Fc5q6letxc,2584
167
- janito/plugins/core/filemanager/tools/create_file.py,sha256=MDMTt3ocp1Ejo3vo7K5Ht2cMPObXiQTr5OTtLv9qOuw,3821
168
- janito/plugins/core/filemanager/tools/delete_text_in_file.py,sha256=uEeedRxXAR7_CqUc_qhbEdM0OzRi_pgnP-iDjs2Zvjk,5087
169
- janito/plugins/core/filemanager/tools/find_files.py,sha256=Zbag3aP34vc7ffJh8bOqAwXj3KiZhV--uzTVHtNb-fI,6250
170
- janito/plugins/core/filemanager/tools/move_file.py,sha256=LMGm8bn3NNyIPJG4vrlO09smXQcgzA09EwoooZxkIA8,4695
171
- janito/plugins/core/filemanager/tools/read_files.py,sha256=LzlNrQEadYF8dF97Wm8AHde2nuqbMkN5vVskQLhvFdA,2329
172
- janito/plugins/core/filemanager/tools/remove_directory.py,sha256=DEhHdmwJRl5Yp9eEukIIooMrpATCtXcv5HmaDRn8vH8,1913
173
- janito/plugins/core/filemanager/tools/remove_file.py,sha256=Imra4jGkBfAd6pnUAmbUsjN0exj2vzZWuNRXq_GOMsI,2093
174
- janito/plugins/core/filemanager/tools/replace_text_in_file.py,sha256=Y6mbPuoTpsFXKrSp51s0rz7Hhz1WHkG1sY4pZ3RoZsU,10790
175
- janito/plugins/core/filemanager/tools/view_file.py,sha256=cBKcbwbfH-UMyvQ7PmYTgsshcFmorjWtyH1kaYi7oNY,7379
176
- janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
177
- janito/plugins/core/filemanager/tools/validate_file_syntax/core.py,sha256=oYCpk_kyCbseKG_xX5xQjW91bPSpzzl18TPm7mMpwPI,3714
178
- janito/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
179
- janito/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
180
- janito/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py,sha256=lfM0SsKsFygiEp1IuLNr5jdS7XJyjCLOPw2yo9vl-pY,1763
181
- janito/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
182
- janito/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
183
- janito/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
184
- janito/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
185
- janito/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
186
- janito/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
187
- janito/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
188
- janito/plugins/core/imagedisplay/__init__.py,sha256=9RxTfPaWGIk3Z2Md4Fh1tHmbn_QRXUUtKUBDUzip8xk,458
189
- janito/plugins/core/imagedisplay/plugin.py,sha256=kq32hgqAKRodyu7Dd-4fO3Lj5NLFW5LFug6kGDa2n2k,1748
190
- janito/plugins/core/imagedisplay/tools/__init__.py,sha256=z4xyfhiLUYaHBzus1AxaAWDYncPaPBqVtNipy7y9m88,38
191
- janito/plugins/core/imagedisplay/tools/show_image.py,sha256=NpQTCMfBZ4NM6DpMe0lTJYH4NHkBCruUR11E4SdLCUw,3095
192
- janito/plugins/core/imagedisplay/tools/show_image_grid.py,sha256=ZsTbDCBr38xYXbbAJBgRKTLuAOw-_C8799LwHA-1yYQ,3078
193
- janito/plugins/core/system/__init__.py,sha256=tuaUFus8jTljReloESjdYFWXIEfSEYDct59I-4gZAyc,584
194
- janito/plugins/core/system/tools/run_bash_command.py,sha256=7fABqAeAu7WJwzzwHmT54_m5OSwPMcgpQ74lQhPG7TA,7955
195
- janito/plugins/core/system/tools/run_powershell_command.py,sha256=uQSJVQe40wSGbesyvZxDmIKJthAbDJFaxXm1dEN3gBs,9313
196
- janito/plugins/dev/__init__.py,sha256=V7wIaP_LMGBtg6ldz5fmiWf0eL-lSz4vcFgZjKcHAZo,136
197
- janito/plugins/dev/pythondev/__init__.py,sha256=qAO8Ub1lwBAMcfIt6oX0clTTB2msjIIJNHBRZczhHy8,991
198
- janito/plugins/dev/pythondev/tools/python_code_run.py,sha256=HdDuiRb7Fd7WC6bFS292XnSI1EYhn9XKlh8Hs_4Cz8E,6981
199
- janito/plugins/dev/pythondev/tools/python_command_run.py,sha256=BT9emL3PsNGupkENNfUymPECiQEAm9tBhniCaOuatj0,6935
200
- janito/plugins/dev/pythondev/tools/python_file_run.py,sha256=p0iOoxByCoKqW7QqfxTdHbPbRzEd_KWyZqnzrSb1qLQ,6859
201
- janito/plugins/dev/visualization/__init__.py,sha256=2zJuePRWKBzuC1_XHg3cguh-JGh4GcvkdENUV3xplz4,547
202
- janito/plugins/dev/visualization/tools/read_chart.py,sha256=qQebp_MEE_x2AL_pl85uA58A4lbhLQsyGl7wiG_Cjhc,10411
203
- janito/plugins/tools/__init__.py,sha256=vNqUVWA0guwAYuPgdmiDsjmgibj9siP0e61pfTHZ8-8,271
204
- janito/plugins/tools/ask_user.py,sha256=7Wgl_9XEPWty3qTG_xcQdwJWypXRorMv3WYM_AZDrBY,4050
205
- janito/plugins/tools/copy_file.py,sha256=A0LxkN9b4eDBD7Ww_4LO412kldbx-DlrUELUB-27jOk,3672
206
- janito/plugins/tools/core_tools_plugin.py,sha256=QgRE3KcbF-KgRR5y-ADYeuTTLDlenxuKM-68wliVfbs,2683
207
- janito/plugins/tools/create_directory.py,sha256=f8fccqwRR3xj_IJ7KZacsxBo2k754bLgVyAefC4jsnI,2574
208
- janito/plugins/tools/create_file.py,sha256=8yv1Mkxsg9KCE7o8B2e0fQdvqMcmBHohRV2z5AQ8fIs,6417
209
- janito/plugins/tools/decorators.py,sha256=BRAjjo4NF4_JxwPPVrrF2wtzsJXuZJkwv_QhZgPFMS4,382
210
- janito/plugins/tools/delete_text_in_file.py,sha256=nZb-QuJopA3NDfOW3BEsG6Aj9EaMlfpuEYiG9aGp4z4,5070
211
- janito/plugins/tools/fetch_url.py,sha256=hqtllaqx5rgZ-5wAih6-R1tvX5sIFUHy3DTP68JImQM,18202
212
- janito/plugins/tools/find_files.py,sha256=S4CLC-WmifyEIO7B1Mk52TAEpy4fIFr9GW9QVQeEE4E,6240
213
- janito/plugins/tools/move_file.py,sha256=IgBTH2V3z83K3HT0cHWxAag-E5FoUTKS5nJa-_akvvs,4685
214
- janito/plugins/tools/open_html_in_browser.py,sha256=82ONg0OSo_8puznWbrgaiZSyBK_G-TejYgsDQM8a2KU,2091
215
- janito/plugins/tools/open_url.py,sha256=X-fdPCTkJ5WBkNDAjV_XVUh3MDEuDGcv-5PbvfC8y68,1542
216
- janito/plugins/tools/python_code_run.py,sha256=mepw0_VsP-iE1uN6QoxfiRKp6jEkFLWNiGjRwUi0rDk,6971
217
- janito/plugins/tools/python_command_run.py,sha256=SxmamLHqmv6JX0VtOzM_JM2NXqHi3TM0g0duNtC8Hr4,6925
218
- janito/plugins/tools/python_file_run.py,sha256=y6oj636Ue0c5ybylDu4l7n-heLhegMGn1CP_B0_hc-M,6849
219
- janito/plugins/tools/read_chart.py,sha256=8KT-Zzfpdp68QN6Pl8enDLPrKRBY2lhcKsJ8scS6i3o,10401
220
- janito/plugins/tools/read_files.py,sha256=7RVj4qescT__VHe1k_VdnpHKHY5YeG0fqPiNIopd3Is,2319
221
- janito/plugins/tools/remove_directory.py,sha256=jmY0pSrOJVQqR-_P7OuZijovAKkNB5cDk8BAAKVvvLI,1903
222
- janito/plugins/tools/remove_file.py,sha256=tWjCx96O2cFW3XIpx8U5W2JUzbfsoXY5zn8k3jr4AIA,2083
223
- janito/plugins/tools/replace_text_in_file.py,sha256=F7RvMdA0EM9xDtM7lB_0DrMjDeYa8exn73_15SQ0iug,10949
224
- janito/plugins/tools/run_bash_command.py,sha256=r-zjfDmw7z2H08cNqKHxXov1_KvfmjPeL5IEg4ZDTxQ,7945
225
- janito/plugins/tools/run_powershell_command.py,sha256=3CWvSr9IkCX6yJ3P_cP80QYUZg30m5TREAPOpzzqYrM,9303
226
- janito/plugins/tools/show_image.py,sha256=v-vEP5LG2-YjrcoWTfgXQ8jSlXfslXjWVV6Uaq7N4IA,3052
227
- janito/plugins/tools/show_image_grid.py,sha256=eS9PGcGrIqazX1fBSu39N3RaQlFoeIdVc75z2ruhWeI,3118
228
- janito/plugins/tools/view_file.py,sha256=SlTfdKyEnaqhDnPc7gpBC51JWIkdc3WvYsTq3amEN4g,7369
229
- janito/plugins/tools/get_file_outline/__init__.py,sha256=po2B4UWf4qvw3yisWkiW1VeeFl1SGvm4xhs1kNbNyCc,110
230
- janito/plugins/tools/get_file_outline/core.py,sha256=KHZwnRdgRzyEJe0IjKzjxs8TQBJdU7xYTDWnqQgZVhM,4590
231
- janito/plugins/tools/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
232
- janito/plugins/tools/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
233
- janito/plugins/tools/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
234
- janito/plugins/tools/get_file_outline/search_outline.py,sha256=bski24TpnJVf3L0TNzkx3HfvaXwttQl4EVkwk2POQOw,1348
235
- janito/plugins/tools/search_text/__init__.py,sha256=pZo-65KTw9y0oFBCBXEyxACbS10QvAXa21icXuRyh34,101
236
- janito/plugins/tools/search_text/core.py,sha256=bjXWCkGEkCnX-q60N3prU_EYiN5i8Sw_7ArTvq18pco,7856
237
- janito/plugins/tools/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
238
- janito/plugins/tools/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
239
- janito/plugins/tools/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
240
- janito/plugins/tools/validate_file_syntax/__init__.py,sha256=1Fp7sHG_ndTJi9xbUzpFSp9TSW-DpwN2n_psZM8mXmw,128
241
- janito/plugins/tools/validate_file_syntax/core.py,sha256=E8g67nRv5x_PomKm8IlUdQlYyjC3l3IdSTBlODKPn6Y,3705
242
- janito/plugins/tools/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
243
- janito/plugins/tools/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
244
- janito/plugins/tools/validate_file_syntax/jinja2_validator.py,sha256=lfM0SsKsFygiEp1IuLNr5jdS7XJyjCLOPw2yo9vl-pY,1763
245
- janito/plugins/tools/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
246
- janito/plugins/tools/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
247
- janito/plugins/tools/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
248
- janito/plugins/tools/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
249
- janito/plugins/tools/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
250
- janito/plugins/tools/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
251
- janito/plugins/tools/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
252
- janito/plugins/ui/__init__.py,sha256=V3bXCQO9YyWc6oiPKyXRP6YqJT_LT9330b3uukSzJ_8,122
253
- janito/plugins/ui/userinterface/__init__.py,sha256=kmno20y5PuZvv_eqDWPKEcN6Zo_vlyt-WZv-4A5e8UI,352
254
- janito/plugins/ui/userinterface/tools/ask_user.py,sha256=4xY8SUndw_OYAPzeIRxugmihxxn7Y-b2v9xYT_LGdkY,3941
255
- janito/plugins/web/__init__.py,sha256=gVPBgz06iQgBUlqHJt3TpWQErkbH_Cx_6BX6XVSYtcY,118
256
- janito/plugins/web/webtools/__init__.py,sha256=vGFtbZvV2DnooPmw4B8hHd0UgpVfNugLs8uK0sI9N2w,847
257
- janito/plugins/web/webtools/tools/fetch_url.py,sha256=VjB89FjLNrqLmOVL6wm1RHyixB3n-RViC0DJjW33iRM,17804
258
- janito/plugins/web/webtools/tools/open_html_in_browser.py,sha256=XqICIwVx5vEE77gHkaNAC-bAeEEy0DBmDksATiL-sRY,2101
259
- janito/plugins/web/webtools/tools/open_url.py,sha256=V3Sv7iLynUreLjVl5-bl-XFH_LzpTeBrS8-cvzp_7rM,1552
260
- janito/providers/__init__.py,sha256=LZcyllhmGyOXQ8duQA2Qbg0fSrahog5ATNZppNOxFK0,571
141
+ janito/plugins/core_adapter.py,sha256=zOhRMLIsqPb5r-8-pJGucEiWEB1_M5btW6TmsAm-mdE,1877
142
+ janito/plugins/core_loader.py,sha256=VcIwuKUaR2bvRZIFEiUHaS8YulTOKrYtvO_VhKHRpGI,3576
143
+ janito/plugins/core_loader_fixed.py,sha256=ZjBOU-aQCMnRXxQfFSI5caUR_IqaI0HdqOJSt-G-Lkc,3909
144
+ janito/plugins/discovery.py,sha256=JKaoROD4Ci-k8HN1hns130mXq28ZZhQsWfTBSJoOqYc,10106
145
+ janito/plugins/discovery_core.py,sha256=O5OccNWNyrSXGeeTk5xSG0qbsjNsajclNNCiHljFRpI,1613
146
+ janito/plugins/manager.py,sha256=OyqGiZubcPgogs2u_rIV2cs_r4HNPwFZH9U25Z9g5cI,8135
147
+ janito/providers/__init__.py,sha256=EvOFeiqucAY9tgCosJ81p0QA6wQwMT1cR3EeIGrhSQQ,528
261
148
  janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF2BVJo,5998
262
149
  janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
263
150
  janito/providers/alibaba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -290,9 +177,6 @@ janito/providers/openai/__init__.py,sha256=f0m16-sIqScjL9Mp4A0CQBZx6H3PTEy0cnE08
290
177
  janito/providers/openai/model_info.py,sha256=VTkq3xcx2vk0tXlFVHQxKeFzl-DL1T1J2elVOEwCdHI,4265
291
178
  janito/providers/openai/provider.py,sha256=PPr_qmSe5GyysnZCxhjeUVhE2LWKjKOSRel-8aaxq_U,4761
292
179
  janito/providers/openai/schema_generator.py,sha256=hTqeLcPTR8jeKn5DUUpo7b-EZ-V-g1WwXiX7MbHnFzE,2234
293
- janito/providers/together/__init__.py,sha256=8JguGMgLW_QUJ-G6VIypp_Uq6avi3LGwKWpEiyGRWOU,33
294
- janito/providers/together/model_info.py,sha256=4EsluZgPfZW68Uc9o5vDnUmo-hQAGIs5eTDWuR24kPg,2407
295
- janito/providers/together/provider.py,sha256=BiM8p8rlqPem_PHdOyXq08J3LZFrAKtP7PDqDSToLdI,3847
296
180
  janito/providers/zai/__init__.py,sha256=qtIr9_QBFaXG8xB6cRDGhS7se6ir11CWseI9azLMRBo,24
297
181
  janito/providers/zai/model_info.py,sha256=ldwD8enpxXv1G-YsDw4YJn31YsVueQ4vj5HgoYvnPxo,1183
298
182
  janito/providers/zai/provider.py,sha256=aKqDTdcwWk-FT70wTbTrTzlWx2NwRWkLoB64upiliU8,5066
@@ -303,14 +187,13 @@ janito/regions/geo_utils.py,sha256=nLJ2x0tx1xMNI0_cMEiji-X8denynsaPYmXR9gGg8uk,5
303
187
  janito/regions/provider_regions.py,sha256=QJdbsdgjg-WcTRqPLGtm3pHJAm2o0-Y9MgE_vNzENEk,4619
304
188
  janito/tools/DOCSTRING_STANDARD.txt,sha256=VLPwNgjxRVD_xZSSVvUZ4H-4bBwM-VKh_RyfzYQsYSs,1735
305
189
  janito/tools/README.md,sha256=5HkLpF5k4PENJER7SlDPRXj0yo9mpHvAHW4uuzhq4ak,115
306
- janito/tools/__init__.py,sha256=PoMIw_JgsEGP5SO77mqsZFl0Z-p2W2WnyHaaAKSnirk,1961
190
+ janito/tools/__init__.py,sha256=W1B39PztC2UF7PS2WyLH6el32MFOETMlN1-LurOROCg,1171
307
191
  janito/tools/base.py,sha256=R38A9xWYh3JRYZMDSom2d1taNDy9J7HpLbZo9X2wH_o,316
308
- janito/tools/cli_initializer.py,sha256=KJbUL6_iAsaeBZl_AVrdtczSZRQBJ9RPZufHJVKwAtU,2632
309
192
  janito/tools/disabled_tools.py,sha256=Tx__16wtMWZ9z34cYLdH1gukwot5MCL-9kLjd5MPX6Y,2110
310
- janito/tools/initialize.py,sha256=BSwzCPCmis2n4q5W3tWBEr4MgVS4tAwBjfKoNM4CefI,2002
193
+ janito/tools/function_adapter.py,sha256=A_-5pA5Y3v0TAYMA-vq3A-Cawg75kH5XWcUEkNHSOoI,2267
311
194
  janito/tools/inspect_registry.py,sha256=Jo7PrMPRKLuR-j_mBAk9PBcTzeJf1eQrS1ChGofgQk0,538
312
195
  janito/tools/loop_protection.py,sha256=WQ2Cqt459vXvrO0T1EqkEHynHlRkPzfaC83RSmXzjkM,4718
313
- janito/tools/loop_protection_decorator.py,sha256=ZCccrg24B_titDeOhaEORPq8wnRyLf1bdb8YEHK25lo,4957
196
+ janito/tools/loop_protection_decorator.py,sha256=R1j2ouscKbVcDm2wlxRZ6zQuKExgj633ijeDq4j0oO0,6457
314
197
  janito/tools/outline_file.bak.zip,sha256=EeI2cBXCwTdWVgJDNiroxKeYlkjwo6NLKeXz3J-2iZI,15607
315
198
  janito/tools/path_security.py,sha256=40b0hV0X3449Dht93A04Q3c9AYSsBQsBFy2BjzM83lA,8214
316
199
  janito/tools/path_utils.py,sha256=Rg5GE4kiu7rky6I2KTtivW6wPXzc9Qmq0_lOjwkPYlI,832
@@ -324,12 +207,58 @@ janito/tools/tool_utils.py,sha256=alPm9DvtXSw_zPRKvP5GjbebPRf_nfvmWk2TNlL5Cws,12
324
207
  janito/tools/tools_adapter.py,sha256=F1Wkji222dY53HMaZWf3vqVas1Bimm3UXERKvxF54Ew,21687
325
208
  janito/tools/tools_schema.py,sha256=rGrKrmpPNR07VXHAJ_haGBRRO-YGLOF51BlYRep9AAQ,4415
326
209
  janito/tools/url_whitelist.py,sha256=0CPLkHTp5HgnwgjxwgXnJmwPeZQ30q4j3YjW59hiUUE,4295
327
- janito/tools/adapters/__init__.py,sha256=H25uYM2ETMLKpKPPEPAu9-AFjxkKfSyfx3pnoXSQlVA,255
328
- janito/tools/adapters/local/__init__.py,sha256=1DVnka4iEQp8Xrs7rJVVx45fPpuVahjTFmuJhv-gN8s,249
210
+ janito/tools/adapters/__init__.py,sha256=XKixOKtUJs1R-rGwGDXSLVLg5-Kp090gvWbsseWT4LI,92
211
+ janito/tools/adapters/local/__init__.py,sha256=I6LtLnDTyApZrSlKcihSQqZv3gADVX781Mcj46LH7ac,2362
329
212
  janito/tools/adapters/local/adapter.py,sha256=u4nLHTaYdwZXMi1J8lsKvlG6rOmdq9xjey_3zeyCG4k,8707
330
- janito-3.2.0.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
331
- janito-3.2.0.dist-info/METADATA,sha256=FgU9kTrodtpQrm-Ky5X_IArx59u80QV--sW2HHTmw1M,2265
332
- janito-3.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
333
- janito-3.2.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
334
- janito-3.2.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
335
- janito-3.2.0.dist-info/RECORD,,
213
+ janito/tools/adapters/local/ask_user.py,sha256=-shjMRKrRe7HNHM2w_6YAl7eEgl8QXaIV6LKrUDEBxU,4060
214
+ janito/tools/adapters/local/copy_file.py,sha256=SBJm19Ipe5dqRE1Mxl6JSrn4bNmfObVnDr5b1mcEu6c,3682
215
+ janito/tools/adapters/local/create_directory.py,sha256=LxwqQEsnOrEphCIoaMRRx9P9bu0MzidP3Fc5q6letxc,2584
216
+ janito/tools/adapters/local/create_file.py,sha256=fLTVnMpDnHzzIVK3nS0DtawBT-I18Is-qa0Hg8y6TXY,6385
217
+ janito/tools/adapters/local/delete_text_in_file.py,sha256=uEeedRxXAR7_CqUc_qhbEdM0OzRi_pgnP-iDjs2Zvjk,5087
218
+ janito/tools/adapters/local/fetch_url.py,sha256=QjoOZj06PjsU8uFjJ6O8Fy-WUvS4GhSaHAJQx2rAzoE,18212
219
+ janito/tools/adapters/local/find_files.py,sha256=Zbag3aP34vc7ffJh8bOqAwXj3KiZhV--uzTVHtNb-fI,6250
220
+ janito/tools/adapters/local/move_file.py,sha256=LMGm8bn3NNyIPJG4vrlO09smXQcgzA09EwoooZxkIA8,4695
221
+ janito/tools/adapters/local/open_html_in_browser.py,sha256=XqICIwVx5vEE77gHkaNAC-bAeEEy0DBmDksATiL-sRY,2101
222
+ janito/tools/adapters/local/open_url.py,sha256=V3Sv7iLynUreLjVl5-bl-XFH_LzpTeBrS8-cvzp_7rM,1552
223
+ janito/tools/adapters/local/python_code_run.py,sha256=HdDuiRb7Fd7WC6bFS292XnSI1EYhn9XKlh8Hs_4Cz8E,6981
224
+ janito/tools/adapters/local/python_command_run.py,sha256=BT9emL3PsNGupkENNfUymPECiQEAm9tBhniCaOuatj0,6935
225
+ janito/tools/adapters/local/python_file_run.py,sha256=p0iOoxByCoKqW7QqfxTdHbPbRzEd_KWyZqnzrSb1qLQ,6859
226
+ janito/tools/adapters/local/read_chart.py,sha256=qQebp_MEE_x2AL_pl85uA58A4lbhLQsyGl7wiG_Cjhc,10411
227
+ janito/tools/adapters/local/read_files.py,sha256=LzlNrQEadYF8dF97Wm8AHde2nuqbMkN5vVskQLhvFdA,2329
228
+ janito/tools/adapters/local/remove_directory.py,sha256=DEhHdmwJRl5Yp9eEukIIooMrpATCtXcv5HmaDRn8vH8,1913
229
+ janito/tools/adapters/local/remove_file.py,sha256=Imra4jGkBfAd6pnUAmbUsjN0exj2vzZWuNRXq_GOMsI,2093
230
+ janito/tools/adapters/local/replace_text_in_file.py,sha256=zJIDecviF2YRpWxbvhtka4Iaje-QYhcaqQX1PxWolzE,10966
231
+ janito/tools/adapters/local/run_bash_command.py,sha256=7fABqAeAu7WJwzzwHmT54_m5OSwPMcgpQ74lQhPG7TA,7955
232
+ janito/tools/adapters/local/run_powershell_command.py,sha256=uQSJVQe40wSGbesyvZxDmIKJthAbDJFaxXm1dEN3gBs,9313
233
+ janito/tools/adapters/local/show_image.py,sha256=OkdiIkaRhjqPMSF5QFcqjLK-fN1oljo_YQM9TH2ZK_A,2932
234
+ janito/tools/adapters/local/show_image_grid.py,sha256=w_U04_K0qmCcX8ac6KUcs-UsnfCb-qsXT3-kasr17dM,3000
235
+ janito/tools/adapters/local/view_file.py,sha256=cBKcbwbfH-UMyvQ7PmYTgsshcFmorjWtyH1kaYi7oNY,7379
236
+ janito/tools/adapters/local/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
237
+ janito/tools/adapters/local/get_file_outline/core.py,sha256=25k6a8PaDYxAfxnEAvZvOWg2BgUcgKU_BkzJmZKUMEA,4611
238
+ janito/tools/adapters/local/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
239
+ janito/tools/adapters/local/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
240
+ janito/tools/adapters/local/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
241
+ janito/tools/adapters/local/get_file_outline/search_outline.py,sha256=bski24TpnJVf3L0TNzkx3HfvaXwttQl4EVkwk2POQOw,1348
242
+ janito/tools/adapters/local/search_text/__init__.py,sha256=FEYpF5tTtf0fiAyRGIGSn-kV-MJDkhdFIbus16mYW8Y,34
243
+ janito/tools/adapters/local/search_text/core.py,sha256=Qoid7FESJGVIsFm5oasgv9vZDy0aSzqeJPBWAF2_Edo,7877
244
+ janito/tools/adapters/local/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
245
+ janito/tools/adapters/local/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
246
+ janito/tools/adapters/local/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
247
+ janito/tools/adapters/local/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
248
+ janito/tools/adapters/local/validate_file_syntax/core.py,sha256=oYCpk_kyCbseKG_xX5xQjW91bPSpzzl18TPm7mMpwPI,3714
249
+ janito/tools/adapters/local/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
250
+ janito/tools/adapters/local/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
251
+ janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py,sha256=lfM0SsKsFygiEp1IuLNr5jdS7XJyjCLOPw2yo9vl-pY,1763
252
+ janito/tools/adapters/local/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
253
+ janito/tools/adapters/local/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
254
+ janito/tools/adapters/local/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
255
+ janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
256
+ janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
257
+ janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
258
+ janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
259
+ janito-3.4.0.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
260
+ janito-3.4.0.dist-info/METADATA,sha256=OhAg58LlZWZXOProIjAs9ZcYVSRL8MTOVzv24lZKVpg,2312
261
+ janito-3.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
262
+ janito-3.4.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
263
+ janito-3.4.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
264
+ janito-3.4.0.dist-info/RECORD,,