janito 2.33.0__py3-none-any.whl → 3.0.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 (140) hide show
  1. janito/cli/cli_commands/check_tools.py +212 -0
  2. janito/cli/cli_commands/list_plugins.py +52 -43
  3. janito/cli/core/getters.py +3 -0
  4. janito/cli/main_cli.py +9 -12
  5. janito/drivers/openai/driver.py +1 -0
  6. janito/drivers/zai/driver.py +1 -0
  7. janito/llm/auth_utils.py +14 -5
  8. janito/plugin_system/__init__.py +10 -0
  9. janito/{plugins → plugin_system}/base.py +5 -2
  10. janito/{plugins/core_loader_fixed.py → plugin_system/core_loader.py} +45 -26
  11. janito/plugin_system/core_loader_fixed.py +149 -0
  12. janito/plugins/__init__.py +31 -12
  13. janito/plugins/auto_loader_fixed.py +12 -11
  14. janito/plugins/builtin.py +15 -1
  15. janito/plugins/core/__init__.py +7 -0
  16. janito/plugins/core/codeanalyzer/__init__.py +43 -0
  17. janito/plugins/core/filemanager/__init__.py +124 -0
  18. janito/plugins/core/filemanager/tools/create_file.py +87 -0
  19. janito/plugins/core/filemanager/tools/replace_text_in_file.py +270 -0
  20. janito/plugins/core/imagedisplay/__init__.py +14 -0
  21. janito/plugins/core/imagedisplay/plugin.py +51 -0
  22. janito/plugins/core/imagedisplay/tools/__init__.py +1 -0
  23. janito/plugins/core/imagedisplay/tools/show_image.py +83 -0
  24. janito/{tools/adapters/local → plugins/core/imagedisplay/tools}/show_image_grid.py +13 -5
  25. janito/plugins/core/system/__init__.py +23 -0
  26. janito/plugins/core_adapter.py +11 -9
  27. janito/plugins/dev/__init__.py +7 -0
  28. janito/plugins/dev/pythondev/__init__.py +37 -0
  29. janito/plugins/dev/visualization/__init__.py +23 -0
  30. janito/plugins/discovery.py +5 -5
  31. janito/plugins/example_plugin.py +108 -0
  32. janito/plugins/manager.py +1 -1
  33. janito/plugins/tools/__init__.py +10 -0
  34. janito/{tools/adapters/local → plugins/tools}/ask_user.py +3 -3
  35. janito/plugins/tools/copy_file.py +87 -0
  36. janito/plugins/tools/core_tools_plugin.py +88 -0
  37. janito/plugins/tools/create_directory.py +70 -0
  38. janito/{tools/adapters/local → plugins/tools}/create_file.py +4 -4
  39. janito/plugins/tools/decorators.py +19 -0
  40. janito/plugins/tools/delete_text_in_file.py +134 -0
  41. janito/{tools/adapters/local → plugins/tools}/fetch_url.py +3 -3
  42. janito/plugins/tools/find_files.py +143 -0
  43. janito/plugins/tools/get_file_outline/__init__.py +7 -0
  44. janito/plugins/tools/get_file_outline/core.py +122 -0
  45. janito/plugins/tools/get_file_outline/java_outline.py +47 -0
  46. janito/plugins/tools/get_file_outline/markdown_outline.py +14 -0
  47. janito/plugins/tools/get_file_outline/python_outline.py +303 -0
  48. janito/plugins/tools/get_file_outline/search_outline.py +36 -0
  49. janito/plugins/tools/move_file.py +131 -0
  50. janito/plugins/tools/open_html_in_browser.py +51 -0
  51. janito/plugins/tools/open_url.py +37 -0
  52. janito/plugins/tools/python_code_run.py +172 -0
  53. janito/plugins/tools/python_command_run.py +171 -0
  54. janito/plugins/tools/python_file_run.py +172 -0
  55. janito/plugins/tools/read_chart.py +259 -0
  56. janito/plugins/tools/read_files.py +58 -0
  57. janito/plugins/tools/remove_directory.py +55 -0
  58. janito/plugins/tools/remove_file.py +58 -0
  59. janito/{tools/adapters/local → plugins/tools}/replace_text_in_file.py +4 -4
  60. janito/plugins/tools/run_bash_command.py +183 -0
  61. janito/plugins/tools/run_powershell_command.py +218 -0
  62. janito/plugins/tools/search_text/__init__.py +7 -0
  63. janito/plugins/tools/search_text/core.py +205 -0
  64. janito/plugins/tools/search_text/match_lines.py +67 -0
  65. janito/plugins/tools/search_text/pattern_utils.py +73 -0
  66. janito/plugins/tools/search_text/traverse_directory.py +145 -0
  67. janito/{tools/adapters/local → plugins/tools}/show_image.py +15 -6
  68. janito/plugins/tools/show_image_grid.py +85 -0
  69. janito/plugins/tools/validate_file_syntax/__init__.py +7 -0
  70. janito/plugins/tools/validate_file_syntax/core.py +114 -0
  71. janito/plugins/tools/validate_file_syntax/css_validator.py +35 -0
  72. janito/plugins/tools/validate_file_syntax/html_validator.py +100 -0
  73. janito/plugins/tools/validate_file_syntax/jinja2_validator.py +50 -0
  74. janito/plugins/tools/validate_file_syntax/js_validator.py +27 -0
  75. janito/plugins/tools/validate_file_syntax/json_validator.py +6 -0
  76. janito/plugins/tools/validate_file_syntax/markdown_validator.py +109 -0
  77. janito/plugins/tools/validate_file_syntax/ps1_validator.py +32 -0
  78. janito/plugins/tools/validate_file_syntax/python_validator.py +5 -0
  79. janito/plugins/tools/validate_file_syntax/xml_validator.py +11 -0
  80. janito/plugins/tools/validate_file_syntax/yaml_validator.py +6 -0
  81. janito/plugins/tools/view_file.py +172 -0
  82. janito/plugins/ui/__init__.py +7 -0
  83. janito/plugins/ui/userinterface/__init__.py +16 -0
  84. janito/plugins/ui/userinterface/tools/ask_user.py +110 -0
  85. janito/plugins/web/__init__.py +7 -0
  86. janito/plugins/web/webtools/__init__.py +33 -0
  87. janito/plugins/web/webtools/tools/fetch_url.py +458 -0
  88. janito/tools/__init__.py +31 -7
  89. janito/tools/adapters/__init__.py +6 -1
  90. janito/tools/adapters/local/__init__.py +7 -70
  91. janito/tools/cli_initializer.py +88 -0
  92. janito/tools/function_adapter.py +93 -16
  93. janito/tools/initialize.py +70 -0
  94. {janito-2.33.0.dist-info → janito-3.0.0.dist-info}/METADATA +1 -2
  95. {janito-2.33.0.dist-info → janito-3.0.0.dist-info}/RECORD +139 -71
  96. janito/plugins/core_loader.py +0 -120
  97. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/get_file_outline/__init__.py +0 -0
  98. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/get_file_outline/core.py +0 -0
  99. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/get_file_outline/java_outline.py +0 -0
  100. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/get_file_outline/markdown_outline.py +0 -0
  101. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/get_file_outline/python_outline.py +0 -0
  102. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/get_file_outline/search_outline.py +0 -0
  103. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/search_text/__init__.py +0 -0
  104. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/search_text/core.py +0 -0
  105. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/search_text/match_lines.py +0 -0
  106. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/search_text/pattern_utils.py +0 -0
  107. /janito/{tools/adapters/local → plugins/core/codeanalyzer/tools}/search_text/traverse_directory.py +0 -0
  108. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/copy_file.py +0 -0
  109. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/create_directory.py +0 -0
  110. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/delete_text_in_file.py +0 -0
  111. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/find_files.py +0 -0
  112. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/move_file.py +0 -0
  113. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/read_files.py +0 -0
  114. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/remove_directory.py +0 -0
  115. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/remove_file.py +0 -0
  116. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/__init__.py +0 -0
  117. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/core.py +0 -0
  118. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/css_validator.py +0 -0
  119. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/html_validator.py +0 -0
  120. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/jinja2_validator.py +0 -0
  121. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/js_validator.py +0 -0
  122. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/json_validator.py +0 -0
  123. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/markdown_validator.py +0 -0
  124. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/ps1_validator.py +0 -0
  125. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/python_validator.py +0 -0
  126. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/xml_validator.py +0 -0
  127. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/validate_file_syntax/yaml_validator.py +0 -0
  128. /janito/{tools/adapters/local → plugins/core/filemanager/tools}/view_file.py +0 -0
  129. /janito/{tools/adapters/local → plugins/core/system/tools}/run_bash_command.py +0 -0
  130. /janito/{tools/adapters/local → plugins/core/system/tools}/run_powershell_command.py +0 -0
  131. /janito/{tools/adapters/local → plugins/dev/pythondev/tools}/python_code_run.py +0 -0
  132. /janito/{tools/adapters/local → plugins/dev/pythondev/tools}/python_command_run.py +0 -0
  133. /janito/{tools/adapters/local → plugins/dev/pythondev/tools}/python_file_run.py +0 -0
  134. /janito/{tools/adapters/local → plugins/dev/visualization/tools}/read_chart.py +0 -0
  135. /janito/{tools/adapters/local → plugins/web/webtools/tools}/open_html_in_browser.py +0 -0
  136. /janito/{tools/adapters/local → plugins/web/webtools/tools}/open_url.py +0 -0
  137. {janito-2.33.0.dist-info → janito-3.0.0.dist-info}/WHEEL +0 -0
  138. {janito-2.33.0.dist-info → janito-3.0.0.dist-info}/entry_points.txt +0 -0
  139. {janito-2.33.0.dist-info → janito-3.0.0.dist-info}/licenses/LICENSE +0 -0
  140. {janito-2.33.0.dist-info → janito-3.0.0.dist-info}/top_level.txt +0 -0
@@ -11,55 +11,132 @@ from janito.tools.tool_base import ToolBase, ToolPermissions
11
11
 
12
12
  class FunctionToolAdapter(ToolBase):
13
13
  """Adapter that wraps a function into a ToolBase class."""
14
-
14
+
15
15
  def __init__(self, func, tool_name: str = None, description: str = None):
16
16
  super().__init__()
17
17
  self._func = func
18
- self.tool_name = tool_name or func.__name__
18
+ self.tool_name = tool_name or getattr(func, "tool_name", func.__name__)
19
19
  self._description = description or func.__doc__ or f"Tool: {self.tool_name}"
20
20
  self.permissions = ToolPermissions(read=True, write=True, execute=True)
21
-
22
- def run(self, **kwargs) -> Any:
21
+
22
+ def run(
23
+ self,
24
+ path: str = None,
25
+ content: str = None,
26
+ overwrite: bool = None,
27
+ sources: str = None,
28
+ target: str = None,
29
+ recursive: bool = None,
30
+ from_line: int = None,
31
+ to_line: int = None,
32
+ search_text: str = None,
33
+ replacement_text: str = None,
34
+ use_regex: bool = None,
35
+ case_sensitive: bool = None,
36
+ max_depth: int = None,
37
+ include_gitignored: bool = None,
38
+ timeout: int = None,
39
+ require_confirmation: bool = None,
40
+ data: dict = None,
41
+ title: str = None,
42
+ width: int = None,
43
+ height: int = None,
44
+ query: str = None,
45
+ paths: str = None,
46
+ src_path: str = None,
47
+ dest_path: str = None,
48
+ code: str = None,
49
+ pattern: str = None,
50
+ ) -> str:
23
51
  """Execute the wrapped function."""
24
- return self._func(**kwargs)
25
-
52
+ # Build kwargs from non-None parameters
53
+ import inspect
54
+
55
+ sig = inspect.signature(self._func)
56
+ filtered_kwargs = {}
57
+
58
+ # Map parameter names to their actual values
59
+ param_map = {
60
+ "path": path,
61
+ "content": content,
62
+ "overwrite": overwrite,
63
+ "sources": sources,
64
+ "target": target,
65
+ "recursive": recursive,
66
+ "from_line": from_line,
67
+ "to_line": to_line,
68
+ "search_text": search_text,
69
+ "replacement_text": replacement_text,
70
+ "use_regex": use_regex,
71
+ "case_sensitive": case_sensitive,
72
+ "max_depth": max_depth,
73
+ "include_gitignored": include_gitignored,
74
+ "timeout": timeout,
75
+ "require_confirmation": require_confirmation,
76
+ "data": data,
77
+ "title": title,
78
+ "width": width,
79
+ "height": height,
80
+ "query": query,
81
+ "paths": paths,
82
+ "src_path": src_path,
83
+ "dest_path": dest_path,
84
+ "code": code,
85
+ "pattern": pattern,
86
+ }
87
+
88
+ # Only include parameters that exist in the function signature
89
+ for name, param in sig.parameters.items():
90
+ if name in param_map and param_map[name] is not None:
91
+ filtered_kwargs[name] = param_map[name]
92
+
93
+ result = self._func(**filtered_kwargs)
94
+ return str(result) if result is not None else ""
95
+
26
96
  def get_signature(self) -> Dict[str, Any]:
27
97
  """Get function signature for documentation."""
28
98
  sig = inspect.signature(self._func)
29
99
  type_hints = get_type_hints(self._func)
30
-
100
+
31
101
  params = {}
32
102
  for name, param in sig.parameters.items():
33
103
  param_info = {
34
104
  "type": str(type_hints.get(name, Any)),
35
- "default": param.default if param.default != inspect.Parameter.empty else None,
105
+ "default": (
106
+ param.default if param.default != inspect.Parameter.empty else None
107
+ ),
36
108
  "required": param.default == inspect.Parameter.empty,
37
109
  }
38
110
  params[name] = param_info
39
-
111
+
40
112
  return {
41
113
  "name": self.tool_name,
42
114
  "description": self._description,
43
115
  "parameters": params,
44
- "return_type": str(type_hints.get("return", Any))
116
+ "return_type": str(type_hints.get("return", Any)),
45
117
  }
46
118
 
47
119
 
48
120
  def create_function_tool(func, tool_name: str = None, description: str = None) -> type:
49
121
  """
50
122
  Create a ToolBase class from a function.
51
-
123
+
52
124
  Args:
53
125
  func: The function to wrap
54
126
  tool_name: Optional custom tool name
55
127
  description: Optional custom description
56
-
128
+
57
129
  Returns:
58
130
  A ToolBase subclass that wraps the function
59
131
  """
60
-
132
+ # Resolve tool_name in outer scope
133
+ resolved_tool_name = tool_name or getattr(func, "tool_name", func.__name__)
134
+
61
135
  class DynamicFunctionTool(FunctionToolAdapter):
136
+ permissions = ToolPermissions(read=True, write=True, execute=True)
137
+ tool_name = resolved_tool_name
138
+
62
139
  def __init__(self):
63
- super().__init__(func, tool_name, description)
64
-
65
- return DynamicFunctionTool
140
+ super().__init__(func, DynamicFunctionTool.tool_name, description)
141
+
142
+ return DynamicFunctionTool
@@ -0,0 +1,70 @@
1
+ """
2
+ Initialize janito tools for CLI and programmatic usage.
3
+
4
+ This module provides functions to load core plugins and register their tools
5
+ with the local tools adapter.
6
+ """
7
+
8
+ import sys
9
+ from pathlib import Path
10
+ from typing import List, Optional
11
+
12
+ from janito.plugin_system.core_loader_fixed import load_core_plugin
13
+ from janito.tools.adapters.local.adapter import LocalToolsAdapter
14
+
15
+
16
+ def initialize_tools(adapter: Optional[LocalToolsAdapter] = None) -> LocalToolsAdapter:
17
+ """
18
+ Initialize all janito tools by loading core plugins and registering tools.
19
+
20
+ Args:
21
+ adapter: LocalToolsAdapter instance to register tools with.
22
+ If None, creates a new instance.
23
+
24
+ Returns:
25
+ LocalToolsAdapter with all tools registered.
26
+ """
27
+ if adapter is None:
28
+ adapter = LocalToolsAdapter()
29
+
30
+ # Core plugins to load
31
+ core_plugins = [
32
+ "core.filemanager",
33
+ "core.codeanalyzer",
34
+ "core.system",
35
+ "core.imagedisplay",
36
+ "dev.pythondev",
37
+ "dev.visualization",
38
+ ]
39
+
40
+ loaded_count = 0
41
+ for plugin_name in core_plugins:
42
+ plugin = load_core_plugin(plugin_name)
43
+ if plugin:
44
+ tools = plugin.get_tools()
45
+ for tool_class in tools:
46
+ adapter.register_tool(tool_class)
47
+ loaded_count += 1
48
+
49
+ return adapter
50
+
51
+
52
+ def get_initialized_adapter() -> LocalToolsAdapter:
53
+ """Get a pre-initialized LocalToolsAdapter with all tools registered."""
54
+ return initialize_tools()
55
+
56
+
57
+ def list_available_tools() -> List[str]:
58
+ """Get a list of all available tool names."""
59
+ adapter = get_initialized_adapter()
60
+ return sorted(list(adapter._tools.keys()))
61
+
62
+
63
+ if __name__ == "__main__":
64
+ adapter = initialize_tools()
65
+ tools = sorted(list(adapter._tools.keys()))
66
+
67
+ print(f"Initialized {len(tools)} tools")
68
+ print("Available tools:")
69
+ for tool_name in tools:
70
+ print(f" - {tool_name}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.33.0
3
+ Version: 3.0.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,7 +30,6 @@ 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"
34
33
  Dynamic: license-file
35
34
 
36
35
  # nctl
@@ -29,7 +29,7 @@ janito/cli/__init__.py,sha256=xaPDOrWphBbCR63Xpcx_yfpXSJIlCaaICc4j2qpWqrM,194
29
29
  janito/cli/config.py,sha256=HkZ14701HzIqrvaNyDcDhGlVHfpX_uHlLp2rHmhRm_k,872
30
30
  janito/cli/console.py,sha256=gJolqzWL7jEPLxeuH-CwBDRFpXt976KdZOEAB2tdBDs,64
31
31
  janito/cli/main.py,sha256=s5odou0txf8pzTf1ADk2yV7T5m8B6cejJ81e7iu776U,312
32
- janito/cli/main_cli.py,sha256=FXpoybaEbDRlK5-oMOMlcdM7TpVfnOdr6-mOkgJHeTo,16648
32
+ janito/cli/main_cli.py,sha256=_OOQqeLiqvmYeB_928Av920Gk43rbXecMIOTL6JeT0Y,16674
33
33
  janito/cli/prompt_core.py,sha256=F68J4Xl6jZMYFN4oBBYZFj15Jp-HTYoLub4bw2XpNRU,11648
34
34
  janito/cli/prompt_handler.py,sha256=SnPTlL64noeAMGlI08VBDD5IDD8jlVMIYA4-fS8zVLg,215
35
35
  janito/cli/prompt_setup.py,sha256=s48gvNfZhKjsEhf4EzL1tKIGm4wDidPMDvlM6TAPYes,2116
@@ -77,11 +77,12 @@ janito/cli/chat_mode/shell/commands/security/allowed_sites.py,sha256=K_izmERZlum
77
77
  janito/cli/chat_mode/shell/session/__init__.py,sha256=uTYE_QpZFEn7v9QE5o1LdulpCWa9vmk0OsefbBGWg_c,37
78
78
  janito/cli/chat_mode/shell/session/history.py,sha256=tYav6GgjAZkvWhlI_rfG6OArNqW6Wn2DTv39Hb20QYc,1262
79
79
  janito/cli/chat_mode/shell/session/manager.py,sha256=MwD9reHsRaly0CyRB-S1JJ0wPKz2g8Xdj2VvlU35Hgc,1001
80
+ janito/cli/cli_commands/check_tools.py,sha256=cSXcF0szeWzeEK7kpg7P2cZW3sv5R1nxgCb3P7bWpyE,7182
80
81
  janito/cli/cli_commands/enable_disable_plugin.py,sha256=IIEg5Gz2aAW_7BKrMQTXSGF0zWBoBdrcQQMjfQ7yay4,2985
81
82
  janito/cli/cli_commands/list_config.py,sha256=oiQEGaGPjwjG-PrOcakpNMbbqISTsBEs7rkGH3ceQsI,1179
82
83
  janito/cli/cli_commands/list_drivers.py,sha256=r2ENykUcvf_9XYp6LHd3RvLXGXyVUA6oe_Pr0dyv92I,5124
83
84
  janito/cli/cli_commands/list_models.py,sha256=QF3Wa7OhNcJFKeBxaw0C_rDfsvJFNb-siz5uorajBvo,1595
84
- janito/cli/cli_commands/list_plugins.py,sha256=Lv-M6EAFiqnj0tl9Bq23s162t--81AIs2EqZxhi81lQ,7996
85
+ janito/cli/cli_commands/list_plugins.py,sha256=s9lZYhy8UANMj7j6c-l-nP4kJIfM_VYsGEyc3hptJ6c,8075
85
86
  janito/cli/cli_commands/list_profiles.py,sha256=O4k6U9iCEeNH3lM-NP_XX_E9W0h__hheLSn23241dkA,3538
86
87
  janito/cli/cli_commands/list_providers.py,sha256=oilrBjNL5mot1nz45XQQY6oeiSxoNvphhQYspNcEJpw,391
87
88
  janito/cli/cli_commands/list_providers_region.py,sha256=qrMj_gtgEMty8UH0P_O5SgWCVJ9ZKxGUp_GdsE4_EH4,2548
@@ -94,7 +95,7 @@ janito/cli/cli_commands/show_config.py,sha256=ammzVEqJQCAdWFRrhI1zjjmzgTCH2l38RE
94
95
  janito/cli/cli_commands/show_system_prompt.py,sha256=WQclY_bmJrHbIBRU1qx1WV4VyooyXVx_XQyX_4Rb1hs,6335
95
96
  janito/cli/core/__init__.py,sha256=YH95fhgY9yBX8RgqX9dSrEkl4exjV0T4rbmJ6xUpG-Y,196
96
97
  janito/cli/core/event_logger.py,sha256=1X6lR0Ax7AgF8HlPWFoY5Ystuu7Bh4ooTo78vXzeGB0,2008
97
- janito/cli/core/getters.py,sha256=opmcSz86J-I95Klsh0c4y6lsYvNakrvRqvuA0o5ARWI,2869
98
+ janito/cli/core/getters.py,sha256=53umV7aab6WrmcCle8WqU2aYnww7a7IiqtM1YZN0YvE,3016
98
99
  janito/cli/core/model_guesser.py,sha256=V7LBkIllSp_tP9-2B1gcl5b4b-La7mrOvE3AZQQm8lk,1716
99
100
  janito/cli/core/runner.py,sha256=gi8xke6re9AoHHNCivV50i0eUAliw8QTUdXyqMkMplM,9044
100
101
  janito/cli/core/setters.py,sha256=zjSUxy6iUzcrmEunFk7dA90KqbMaq2O7LTGP8wn2HxA,5378
@@ -107,9 +108,9 @@ janito/drivers/openai_responses.bak.zip,sha256=E43eDCHGa2tCtdjzj_pMnWDdnsOZzj8BJ
107
108
  janito/drivers/azure_openai/driver.py,sha256=L2rQOl1d0BHaDChHLtZszAeuWNoyYIgwuYuahE1qJps,4152
108
109
  janito/drivers/cerebras/__init__.py,sha256=wXWxPTy4KH5Esw8ml9h-TeApi6XXujNFY2Q4jKVdcAY,26
109
110
  janito/drivers/openai/README.md,sha256=bgPdaYX0pyotCoJ9t3cJbYM-teQ_YM1DAFEKLCMP32Q,666
110
- janito/drivers/openai/driver.py,sha256=NbR_1Btr7QpJjNzJ3CxJa1-Kfw17lImZFU9fyKDLSRo,19567
111
+ janito/drivers/openai/driver.py,sha256=06vkhNXE0CWcmFx5qBO1sGOVapAq0wiG0v5xL6YO8Kk,19627
111
112
  janito/drivers/zai/__init__.py,sha256=rleES3ZJEslJ8M02TdTPyxHKXxA4-e2fDJa6yjuzY8s,22
112
- janito/drivers/zai/driver.py,sha256=uOR7VFEMjd7Dw_zSFO1SN5SgBCIG8b4CEzRMIUXBgUQ,18859
113
+ janito/drivers/zai/driver.py,sha256=NK36IxMJ_rSR04bh96mqDX3dcGPySqd1KL0d194xtfw,18919
113
114
  janito/event_bus/__init__.py,sha256=VG6GOhKMBh0O_92D-zW8a3YitJPKDajGgPiFezTXlNE,77
114
115
  janito/event_bus/bus.py,sha256=LokZbAdwcWhWOyKSp7H3Ism57x4EZhxlRPjl3NE4UKU,2847
115
116
  janito/event_bus/event.py,sha256=MtgcBPD7cvCuubiLIyo-BWcsNSO-941HLk6bScHTJtQ,427
@@ -123,7 +124,7 @@ janito/llm/README.md,sha256=6GRqCu_a9va5HCB1YqNqbshyWKFyAGlnXugrjom-xj8,1213
123
124
  janito/llm/__init__.py,sha256=dpyVH51qVRCw-PDyAFLAxq0zd4jl5MDcuV6Cri0D-dQ,134
124
125
  janito/llm/agent.py,sha256=T0JfeMoOudTWsHwWCcaocrHyq9k0TvkL4_YePlXvZfo,21269
125
126
  janito/llm/auth.py,sha256=8Dl_orUEPhn2X6XjkO2Nr-j1HFT2YDxk1qJl9hSFI88,2286
126
- janito/llm/auth_utils.py,sha256=7GH7bIScKhVWJW6ugcDrJLcYRamj5dl_l8N1rrvR4Ws,663
127
+ janito/llm/auth_utils.py,sha256=mcPWT2p2kGMhvR9QsHqk84utDejPJh3uyjrDOJ0dKYA,1068
127
128
  janito/llm/driver.py,sha256=stiicPe_MXTuWW4q6MSwK7PCj8UZcA_30pGACu6xYUQ,10039
128
129
  janito/llm/driver_config.py,sha256=OW0ae49EfgKDqaThuDjZBiaN78voNzwiZ6szERMqJos,1406
129
130
  janito/llm/driver_config_builder.py,sha256=BvWGx7vaBR5NyvPY1XNAP3lAgo1uf-T25CSsIo2kkCU,1401
@@ -131,18 +132,129 @@ janito/llm/driver_input.py,sha256=Zq7IO4KdQPUraeIo6XoOaRy1IdQAyYY15RQw4JU30uA,38
131
132
  janito/llm/message_parts.py,sha256=QY_0kDjaxdoErDgKPRPv1dNkkYJuXIBmHWNLiOEKAH4,1365
132
133
  janito/llm/model.py,sha256=EioBkdgn8hJ0iQaKN-0KbXlsrk3YKmwR9IbvoEbdVTE,1159
133
134
  janito/llm/provider.py,sha256=3FbhQPrWBSEoIdIi-5DWIh0DD_CM570EFf1NcuGyGko,7961
134
- janito/plugins/__init__.py,sha256=6tTpUDNJJCRqlGK6RBd40wP_xEowuZZh0FRGeQ5lQQA,400
135
+ janito/plugin_system/__init__.py,sha256=HoTBUooSTEsp_1FaBn-5BmzZX_p_982e4T_fCOeUlD0,290
136
+ janito/plugin_system/base.py,sha256=Z0PSIj7R-hAKOeCSXC2JyBqm4rlsJoZSqkqxLe-juks,4346
137
+ janito/plugin_system/core_loader.py,sha256=LPOJRQwSqjZ8P2G6sh5lN4enA8hc2An-kO4dgr8e0as,4361
138
+ janito/plugin_system/core_loader_fixed.py,sha256=VQsEIucX-NFjAnimzzAtK1o3Y4R9gq_a9IuxSrhJZxU,4586
139
+ janito/plugins/__init__.py,sha256=q-z28oV-0BaagZ43f__qeg13R9oA7kK7XnVEUHNRZbs,910
135
140
  janito/plugins/auto_loader.py,sha256=8DRpPZtAUtP-et4Lzaam93MH4s_sqQXXKI8Ly5-GQf8,2329
136
- janito/plugins/auto_loader_fixed.py,sha256=11pL7J0bX3XOOevQa10_oUtNbH-CXkpKhxOl69Bmzro,2335
137
- janito/plugins/base.py,sha256=4sQdTOogtDgmLWgA3q1Z8h8s-JySRkk9nSAmg0mHoNM,4285
138
- janito/plugins/builtin.py,sha256=rAdOz5cekFfsTfXJd5-2AXW4Nh81JoBMONqj1skiTR8,2985
141
+ janito/plugins/auto_loader_fixed.py,sha256=3JnGDp1enombEHsR8spRDpVrD6tSPdudysWvhyuk5Ec,2304
142
+ janito/plugins/builtin.py,sha256=kbIOVmqucJKyISC5kWcgda_6IhHGA6yWoxUghc1Qtk0,3409
139
143
  janito/plugins/config.py,sha256=ex5f1XsKPEgIO4DgJCohPzMKAQoUdx1OdSVU0FlSr5o,2331
140
- janito/plugins/core_adapter.py,sha256=zOhRMLIsqPb5r-8-pJGucEiWEB1_M5btW6TmsAm-mdE,1877
141
- janito/plugins/core_loader.py,sha256=VcIwuKUaR2bvRZIFEiUHaS8YulTOKrYtvO_VhKHRpGI,3576
142
- janito/plugins/core_loader_fixed.py,sha256=ZjBOU-aQCMnRXxQfFSI5caUR_IqaI0HdqOJSt-G-Lkc,3909
143
- janito/plugins/discovery.py,sha256=JKaoROD4Ci-k8HN1hns130mXq28ZZhQsWfTBSJoOqYc,10106
144
+ janito/plugins/core_adapter.py,sha256=WfFDb_DzG2gqNYlwlAaXVsh4VjIRZ5VPszhQFg0IXZs,1857
145
+ janito/plugins/discovery.py,sha256=IGQAFPzzzZjlpMzPNdChD7ZJrCYN8QmvXPsvLBOSSjY,10120
144
146
  janito/plugins/discovery_core.py,sha256=O5OccNWNyrSXGeeTk5xSG0qbsjNsajclNNCiHljFRpI,1613
145
- janito/plugins/manager.py,sha256=OyqGiZubcPgogs2u_rIV2cs_r4HNPwFZH9U25Z9g5cI,8135
147
+ janito/plugins/example_plugin.py,sha256=1B0PYOSFsb2ya2VCwHr1pMJC9ivUJ7t9TtQkc8lkaGU,3136
148
+ janito/plugins/manager.py,sha256=R1B-2sUD5YFLOTnp4Pfx1wZ-3Hzff--PqaOJHfllc5g,8155
149
+ janito/plugins/core/__init__.py,sha256=74-nOHG97Jo7cSm_sOLwYYhS0maB1kgKdB69-bmi03k,144
150
+ janito/plugins/core/codeanalyzer/__init__.py,sha256=meDla5uyJATX7zYSrmRyjjBFjSK53R_lU3Z6iiy_lxM,1056
151
+ janito/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
152
+ janito/plugins/core/codeanalyzer/tools/get_file_outline/core.py,sha256=25k6a8PaDYxAfxnEAvZvOWg2BgUcgKU_BkzJmZKUMEA,4611
153
+ janito/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
154
+ janito/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
155
+ janito/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
156
+ janito/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py,sha256=bski24TpnJVf3L0TNzkx3HfvaXwttQl4EVkwk2POQOw,1348
157
+ janito/plugins/core/codeanalyzer/tools/search_text/__init__.py,sha256=FEYpF5tTtf0fiAyRGIGSn-kV-MJDkhdFIbus16mYW8Y,34
158
+ janito/plugins/core/codeanalyzer/tools/search_text/core.py,sha256=Qoid7FESJGVIsFm5oasgv9vZDy0aSzqeJPBWAF2_Edo,7877
159
+ janito/plugins/core/codeanalyzer/tools/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
160
+ janito/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
161
+ janito/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
162
+ janito/plugins/core/filemanager/__init__.py,sha256=waUhGQ2OL59Ooes4cQOOlQdBsFQSIffevJkcZq_kaCQ,3241
163
+ janito/plugins/core/filemanager/tools/copy_file.py,sha256=SBJm19Ipe5dqRE1Mxl6JSrn4bNmfObVnDr5b1mcEu6c,3682
164
+ janito/plugins/core/filemanager/tools/create_directory.py,sha256=LxwqQEsnOrEphCIoaMRRx9P9bu0MzidP3Fc5q6letxc,2584
165
+ janito/plugins/core/filemanager/tools/create_file.py,sha256=nZf8iPScO9_nrvmHwXqOcqpLZkLABTh9uLVNddC4PCk,3760
166
+ janito/plugins/core/filemanager/tools/delete_text_in_file.py,sha256=uEeedRxXAR7_CqUc_qhbEdM0OzRi_pgnP-iDjs2Zvjk,5087
167
+ janito/plugins/core/filemanager/tools/find_files.py,sha256=Zbag3aP34vc7ffJh8bOqAwXj3KiZhV--uzTVHtNb-fI,6250
168
+ janito/plugins/core/filemanager/tools/move_file.py,sha256=LMGm8bn3NNyIPJG4vrlO09smXQcgzA09EwoooZxkIA8,4695
169
+ janito/plugins/core/filemanager/tools/read_files.py,sha256=LzlNrQEadYF8dF97Wm8AHde2nuqbMkN5vVskQLhvFdA,2329
170
+ janito/plugins/core/filemanager/tools/remove_directory.py,sha256=DEhHdmwJRl5Yp9eEukIIooMrpATCtXcv5HmaDRn8vH8,1913
171
+ janito/plugins/core/filemanager/tools/remove_file.py,sha256=Imra4jGkBfAd6pnUAmbUsjN0exj2vzZWuNRXq_GOMsI,2093
172
+ janito/plugins/core/filemanager/tools/replace_text_in_file.py,sha256=Y6mbPuoTpsFXKrSp51s0rz7Hhz1WHkG1sY4pZ3RoZsU,10790
173
+ janito/plugins/core/filemanager/tools/view_file.py,sha256=cBKcbwbfH-UMyvQ7PmYTgsshcFmorjWtyH1kaYi7oNY,7379
174
+ janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
175
+ janito/plugins/core/filemanager/tools/validate_file_syntax/core.py,sha256=oYCpk_kyCbseKG_xX5xQjW91bPSpzzl18TPm7mMpwPI,3714
176
+ janito/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
177
+ janito/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
178
+ janito/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py,sha256=lfM0SsKsFygiEp1IuLNr5jdS7XJyjCLOPw2yo9vl-pY,1763
179
+ janito/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
180
+ janito/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
181
+ janito/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
182
+ janito/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
183
+ janito/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
184
+ janito/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
185
+ janito/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
186
+ janito/plugins/core/imagedisplay/__init__.py,sha256=9RxTfPaWGIk3Z2Md4Fh1tHmbn_QRXUUtKUBDUzip8xk,458
187
+ janito/plugins/core/imagedisplay/plugin.py,sha256=kq32hgqAKRodyu7Dd-4fO3Lj5NLFW5LFug6kGDa2n2k,1748
188
+ janito/plugins/core/imagedisplay/tools/__init__.py,sha256=z4xyfhiLUYaHBzus1AxaAWDYncPaPBqVtNipy7y9m88,38
189
+ janito/plugins/core/imagedisplay/tools/show_image.py,sha256=NpQTCMfBZ4NM6DpMe0lTJYH4NHkBCruUR11E4SdLCUw,3095
190
+ janito/plugins/core/imagedisplay/tools/show_image_grid.py,sha256=ZsTbDCBr38xYXbbAJBgRKTLuAOw-_C8799LwHA-1yYQ,3078
191
+ janito/plugins/core/system/__init__.py,sha256=tuaUFus8jTljReloESjdYFWXIEfSEYDct59I-4gZAyc,584
192
+ janito/plugins/core/system/tools/run_bash_command.py,sha256=7fABqAeAu7WJwzzwHmT54_m5OSwPMcgpQ74lQhPG7TA,7955
193
+ janito/plugins/core/system/tools/run_powershell_command.py,sha256=uQSJVQe40wSGbesyvZxDmIKJthAbDJFaxXm1dEN3gBs,9313
194
+ janito/plugins/dev/__init__.py,sha256=V7wIaP_LMGBtg6ldz5fmiWf0eL-lSz4vcFgZjKcHAZo,136
195
+ janito/plugins/dev/pythondev/__init__.py,sha256=qAO8Ub1lwBAMcfIt6oX0clTTB2msjIIJNHBRZczhHy8,991
196
+ janito/plugins/dev/pythondev/tools/python_code_run.py,sha256=HdDuiRb7Fd7WC6bFS292XnSI1EYhn9XKlh8Hs_4Cz8E,6981
197
+ janito/plugins/dev/pythondev/tools/python_command_run.py,sha256=BT9emL3PsNGupkENNfUymPECiQEAm9tBhniCaOuatj0,6935
198
+ janito/plugins/dev/pythondev/tools/python_file_run.py,sha256=p0iOoxByCoKqW7QqfxTdHbPbRzEd_KWyZqnzrSb1qLQ,6859
199
+ janito/plugins/dev/visualization/__init__.py,sha256=2zJuePRWKBzuC1_XHg3cguh-JGh4GcvkdENUV3xplz4,547
200
+ janito/plugins/dev/visualization/tools/read_chart.py,sha256=qQebp_MEE_x2AL_pl85uA58A4lbhLQsyGl7wiG_Cjhc,10411
201
+ janito/plugins/tools/__init__.py,sha256=vNqUVWA0guwAYuPgdmiDsjmgibj9siP0e61pfTHZ8-8,271
202
+ janito/plugins/tools/ask_user.py,sha256=7Wgl_9XEPWty3qTG_xcQdwJWypXRorMv3WYM_AZDrBY,4050
203
+ janito/plugins/tools/copy_file.py,sha256=A0LxkN9b4eDBD7Ww_4LO412kldbx-DlrUELUB-27jOk,3672
204
+ janito/plugins/tools/core_tools_plugin.py,sha256=J186ZSA0FjZtAmzBwGYSrE7SFmO8lUEOCZ3apDg4RBA,2685
205
+ janito/plugins/tools/create_directory.py,sha256=f8fccqwRR3xj_IJ7KZacsxBo2k754bLgVyAefC4jsnI,2574
206
+ janito/plugins/tools/create_file.py,sha256=UaQbKUFl8LXMfNq1UlMjgdOo8b2LCC5EsgDVyGwk6fE,6368
207
+ janito/plugins/tools/decorators.py,sha256=BRAjjo4NF4_JxwPPVrrF2wtzsJXuZJkwv_QhZgPFMS4,382
208
+ janito/plugins/tools/delete_text_in_file.py,sha256=nZb-QuJopA3NDfOW3BEsG6Aj9EaMlfpuEYiG9aGp4z4,5070
209
+ janito/plugins/tools/fetch_url.py,sha256=hqtllaqx5rgZ-5wAih6-R1tvX5sIFUHy3DTP68JImQM,18202
210
+ janito/plugins/tools/find_files.py,sha256=S4CLC-WmifyEIO7B1Mk52TAEpy4fIFr9GW9QVQeEE4E,6240
211
+ janito/plugins/tools/move_file.py,sha256=IgBTH2V3z83K3HT0cHWxAag-E5FoUTKS5nJa-_akvvs,4685
212
+ janito/plugins/tools/open_html_in_browser.py,sha256=82ONg0OSo_8puznWbrgaiZSyBK_G-TejYgsDQM8a2KU,2091
213
+ janito/plugins/tools/open_url.py,sha256=X-fdPCTkJ5WBkNDAjV_XVUh3MDEuDGcv-5PbvfC8y68,1542
214
+ janito/plugins/tools/python_code_run.py,sha256=mepw0_VsP-iE1uN6QoxfiRKp6jEkFLWNiGjRwUi0rDk,6971
215
+ janito/plugins/tools/python_command_run.py,sha256=SxmamLHqmv6JX0VtOzM_JM2NXqHi3TM0g0duNtC8Hr4,6925
216
+ janito/plugins/tools/python_file_run.py,sha256=y6oj636Ue0c5ybylDu4l7n-heLhegMGn1CP_B0_hc-M,6849
217
+ janito/plugins/tools/read_chart.py,sha256=8KT-Zzfpdp68QN6Pl8enDLPrKRBY2lhcKsJ8scS6i3o,10401
218
+ janito/plugins/tools/read_files.py,sha256=7RVj4qescT__VHe1k_VdnpHKHY5YeG0fqPiNIopd3Is,2319
219
+ janito/plugins/tools/remove_directory.py,sha256=jmY0pSrOJVQqR-_P7OuZijovAKkNB5cDk8BAAKVvvLI,1903
220
+ janito/plugins/tools/remove_file.py,sha256=tWjCx96O2cFW3XIpx8U5W2JUzbfsoXY5zn8k3jr4AIA,2083
221
+ janito/plugins/tools/replace_text_in_file.py,sha256=F7RvMdA0EM9xDtM7lB_0DrMjDeYa8exn73_15SQ0iug,10949
222
+ janito/plugins/tools/run_bash_command.py,sha256=r-zjfDmw7z2H08cNqKHxXov1_KvfmjPeL5IEg4ZDTxQ,7945
223
+ janito/plugins/tools/run_powershell_command.py,sha256=3CWvSr9IkCX6yJ3P_cP80QYUZg30m5TREAPOpzzqYrM,9303
224
+ janito/plugins/tools/show_image.py,sha256=v-vEP5LG2-YjrcoWTfgXQ8jSlXfslXjWVV6Uaq7N4IA,3052
225
+ janito/plugins/tools/show_image_grid.py,sha256=eS9PGcGrIqazX1fBSu39N3RaQlFoeIdVc75z2ruhWeI,3118
226
+ janito/plugins/tools/view_file.py,sha256=SlTfdKyEnaqhDnPc7gpBC51JWIkdc3WvYsTq3amEN4g,7369
227
+ janito/plugins/tools/get_file_outline/__init__.py,sha256=po2B4UWf4qvw3yisWkiW1VeeFl1SGvm4xhs1kNbNyCc,110
228
+ janito/plugins/tools/get_file_outline/core.py,sha256=KHZwnRdgRzyEJe0IjKzjxs8TQBJdU7xYTDWnqQgZVhM,4590
229
+ janito/plugins/tools/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
230
+ janito/plugins/tools/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
231
+ janito/plugins/tools/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
232
+ janito/plugins/tools/get_file_outline/search_outline.py,sha256=bski24TpnJVf3L0TNzkx3HfvaXwttQl4EVkwk2POQOw,1348
233
+ janito/plugins/tools/search_text/__init__.py,sha256=pZo-65KTw9y0oFBCBXEyxACbS10QvAXa21icXuRyh34,101
234
+ janito/plugins/tools/search_text/core.py,sha256=bjXWCkGEkCnX-q60N3prU_EYiN5i8Sw_7ArTvq18pco,7856
235
+ janito/plugins/tools/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
236
+ janito/plugins/tools/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
237
+ janito/plugins/tools/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
238
+ janito/plugins/tools/validate_file_syntax/__init__.py,sha256=1Fp7sHG_ndTJi9xbUzpFSp9TSW-DpwN2n_psZM8mXmw,128
239
+ janito/plugins/tools/validate_file_syntax/core.py,sha256=E8g67nRv5x_PomKm8IlUdQlYyjC3l3IdSTBlODKPn6Y,3705
240
+ janito/plugins/tools/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
241
+ janito/plugins/tools/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
242
+ janito/plugins/tools/validate_file_syntax/jinja2_validator.py,sha256=lfM0SsKsFygiEp1IuLNr5jdS7XJyjCLOPw2yo9vl-pY,1763
243
+ janito/plugins/tools/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
244
+ janito/plugins/tools/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
245
+ janito/plugins/tools/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
246
+ janito/plugins/tools/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
247
+ janito/plugins/tools/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
248
+ janito/plugins/tools/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
249
+ janito/plugins/tools/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
250
+ janito/plugins/ui/__init__.py,sha256=V3bXCQO9YyWc6oiPKyXRP6YqJT_LT9330b3uukSzJ_8,122
251
+ janito/plugins/ui/userinterface/__init__.py,sha256=kmno20y5PuZvv_eqDWPKEcN6Zo_vlyt-WZv-4A5e8UI,352
252
+ janito/plugins/ui/userinterface/tools/ask_user.py,sha256=4xY8SUndw_OYAPzeIRxugmihxxn7Y-b2v9xYT_LGdkY,3941
253
+ janito/plugins/web/__init__.py,sha256=gVPBgz06iQgBUlqHJt3TpWQErkbH_Cx_6BX6XVSYtcY,118
254
+ janito/plugins/web/webtools/__init__.py,sha256=vGFtbZvV2DnooPmw4B8hHd0UgpVfNugLs8uK0sI9N2w,847
255
+ janito/plugins/web/webtools/tools/fetch_url.py,sha256=VjB89FjLNrqLmOVL6wm1RHyixB3n-RViC0DJjW33iRM,17804
256
+ janito/plugins/web/webtools/tools/open_html_in_browser.py,sha256=XqICIwVx5vEE77gHkaNAC-bAeEEy0DBmDksATiL-sRY,2101
257
+ janito/plugins/web/webtools/tools/open_url.py,sha256=V3Sv7iLynUreLjVl5-bl-XFH_LzpTeBrS8-cvzp_7rM,1552
146
258
  janito/providers/__init__.py,sha256=EvOFeiqucAY9tgCosJ81p0QA6wQwMT1cR3EeIGrhSQQ,528
147
259
  janito/providers/dashscope.bak.zip,sha256=BwXxRmZreEivvRtmqbr5BR62IFVlNjAf4y6DrF2BVJo,5998
148
260
  janito/providers/registry.py,sha256=Ygwv9eVrTXOKhv0EKxSWQXO5WMHvajWE2Q_Lc3p7dKo,730
@@ -186,10 +298,12 @@ janito/regions/geo_utils.py,sha256=nLJ2x0tx1xMNI0_cMEiji-X8denynsaPYmXR9gGg8uk,5
186
298
  janito/regions/provider_regions.py,sha256=QJdbsdgjg-WcTRqPLGtm3pHJAm2o0-Y9MgE_vNzENEk,4619
187
299
  janito/tools/DOCSTRING_STANDARD.txt,sha256=VLPwNgjxRVD_xZSSVvUZ4H-4bBwM-VKh_RyfzYQsYSs,1735
188
300
  janito/tools/README.md,sha256=5HkLpF5k4PENJER7SlDPRXj0yo9mpHvAHW4uuzhq4ak,115
189
- janito/tools/__init__.py,sha256=W1B39PztC2UF7PS2WyLH6el32MFOETMlN1-LurOROCg,1171
301
+ janito/tools/__init__.py,sha256=PoMIw_JgsEGP5SO77mqsZFl0Z-p2W2WnyHaaAKSnirk,1961
190
302
  janito/tools/base.py,sha256=R38A9xWYh3JRYZMDSom2d1taNDy9J7HpLbZo9X2wH_o,316
303
+ janito/tools/cli_initializer.py,sha256=KJbUL6_iAsaeBZl_AVrdtczSZRQBJ9RPZufHJVKwAtU,2632
191
304
  janito/tools/disabled_tools.py,sha256=Tx__16wtMWZ9z34cYLdH1gukwot5MCL-9kLjd5MPX6Y,2110
192
- janito/tools/function_adapter.py,sha256=A_-5pA5Y3v0TAYMA-vq3A-Cawg75kH5XWcUEkNHSOoI,2267
305
+ janito/tools/function_adapter.py,sha256=kjU15jy2gLmKw__BRFe99lRrLCXoHdcgVMFf2W4LEw0,4870
306
+ janito/tools/initialize.py,sha256=BSwzCPCmis2n4q5W3tWBEr4MgVS4tAwBjfKoNM4CefI,2002
193
307
  janito/tools/inspect_registry.py,sha256=Jo7PrMPRKLuR-j_mBAk9PBcTzeJf1eQrS1ChGofgQk0,538
194
308
  janito/tools/loop_protection.py,sha256=WQ2Cqt459vXvrO0T1EqkEHynHlRkPzfaC83RSmXzjkM,4718
195
309
  janito/tools/loop_protection_decorator.py,sha256=R1j2ouscKbVcDm2wlxRZ6zQuKExgj633ijeDq4j0oO0,6457
@@ -206,58 +320,12 @@ janito/tools/tool_utils.py,sha256=alPm9DvtXSw_zPRKvP5GjbebPRf_nfvmWk2TNlL5Cws,12
206
320
  janito/tools/tools_adapter.py,sha256=F1Wkji222dY53HMaZWf3vqVas1Bimm3UXERKvxF54Ew,21687
207
321
  janito/tools/tools_schema.py,sha256=rGrKrmpPNR07VXHAJ_haGBRRO-YGLOF51BlYRep9AAQ,4415
208
322
  janito/tools/url_whitelist.py,sha256=0CPLkHTp5HgnwgjxwgXnJmwPeZQ30q4j3YjW59hiUUE,4295
209
- janito/tools/adapters/__init__.py,sha256=XKixOKtUJs1R-rGwGDXSLVLg5-Kp090gvWbsseWT4LI,92
210
- janito/tools/adapters/local/__init__.py,sha256=I6LtLnDTyApZrSlKcihSQqZv3gADVX781Mcj46LH7ac,2362
323
+ janito/tools/adapters/__init__.py,sha256=H25uYM2ETMLKpKPPEPAu9-AFjxkKfSyfx3pnoXSQlVA,255
324
+ janito/tools/adapters/local/__init__.py,sha256=1DVnka4iEQp8Xrs7rJVVx45fPpuVahjTFmuJhv-gN8s,249
211
325
  janito/tools/adapters/local/adapter.py,sha256=u4nLHTaYdwZXMi1J8lsKvlG6rOmdq9xjey_3zeyCG4k,8707
212
- janito/tools/adapters/local/ask_user.py,sha256=-shjMRKrRe7HNHM2w_6YAl7eEgl8QXaIV6LKrUDEBxU,4060
213
- janito/tools/adapters/local/copy_file.py,sha256=SBJm19Ipe5dqRE1Mxl6JSrn4bNmfObVnDr5b1mcEu6c,3682
214
- janito/tools/adapters/local/create_directory.py,sha256=LxwqQEsnOrEphCIoaMRRx9P9bu0MzidP3Fc5q6letxc,2584
215
- janito/tools/adapters/local/create_file.py,sha256=fLTVnMpDnHzzIVK3nS0DtawBT-I18Is-qa0Hg8y6TXY,6385
216
- janito/tools/adapters/local/delete_text_in_file.py,sha256=uEeedRxXAR7_CqUc_qhbEdM0OzRi_pgnP-iDjs2Zvjk,5087
217
- janito/tools/adapters/local/fetch_url.py,sha256=QjoOZj06PjsU8uFjJ6O8Fy-WUvS4GhSaHAJQx2rAzoE,18212
218
- janito/tools/adapters/local/find_files.py,sha256=Zbag3aP34vc7ffJh8bOqAwXj3KiZhV--uzTVHtNb-fI,6250
219
- janito/tools/adapters/local/move_file.py,sha256=LMGm8bn3NNyIPJG4vrlO09smXQcgzA09EwoooZxkIA8,4695
220
- janito/tools/adapters/local/open_html_in_browser.py,sha256=XqICIwVx5vEE77gHkaNAC-bAeEEy0DBmDksATiL-sRY,2101
221
- janito/tools/adapters/local/open_url.py,sha256=V3Sv7iLynUreLjVl5-bl-XFH_LzpTeBrS8-cvzp_7rM,1552
222
- janito/tools/adapters/local/python_code_run.py,sha256=HdDuiRb7Fd7WC6bFS292XnSI1EYhn9XKlh8Hs_4Cz8E,6981
223
- janito/tools/adapters/local/python_command_run.py,sha256=BT9emL3PsNGupkENNfUymPECiQEAm9tBhniCaOuatj0,6935
224
- janito/tools/adapters/local/python_file_run.py,sha256=p0iOoxByCoKqW7QqfxTdHbPbRzEd_KWyZqnzrSb1qLQ,6859
225
- janito/tools/adapters/local/read_chart.py,sha256=qQebp_MEE_x2AL_pl85uA58A4lbhLQsyGl7wiG_Cjhc,10411
226
- janito/tools/adapters/local/read_files.py,sha256=LzlNrQEadYF8dF97Wm8AHde2nuqbMkN5vVskQLhvFdA,2329
227
- janito/tools/adapters/local/remove_directory.py,sha256=DEhHdmwJRl5Yp9eEukIIooMrpATCtXcv5HmaDRn8vH8,1913
228
- janito/tools/adapters/local/remove_file.py,sha256=Imra4jGkBfAd6pnUAmbUsjN0exj2vzZWuNRXq_GOMsI,2093
229
- janito/tools/adapters/local/replace_text_in_file.py,sha256=zJIDecviF2YRpWxbvhtka4Iaje-QYhcaqQX1PxWolzE,10966
230
- janito/tools/adapters/local/run_bash_command.py,sha256=7fABqAeAu7WJwzzwHmT54_m5OSwPMcgpQ74lQhPG7TA,7955
231
- janito/tools/adapters/local/run_powershell_command.py,sha256=uQSJVQe40wSGbesyvZxDmIKJthAbDJFaxXm1dEN3gBs,9313
232
- janito/tools/adapters/local/show_image.py,sha256=OkdiIkaRhjqPMSF5QFcqjLK-fN1oljo_YQM9TH2ZK_A,2932
233
- janito/tools/adapters/local/show_image_grid.py,sha256=w_U04_K0qmCcX8ac6KUcs-UsnfCb-qsXT3-kasr17dM,3000
234
- janito/tools/adapters/local/view_file.py,sha256=cBKcbwbfH-UMyvQ7PmYTgsshcFmorjWtyH1kaYi7oNY,7379
235
- janito/tools/adapters/local/get_file_outline/__init__.py,sha256=OKV_BHnoD9h-vkcVoW6AHmsuDjjauHPCKNK0nVFl4sU,37
236
- janito/tools/adapters/local/get_file_outline/core.py,sha256=25k6a8PaDYxAfxnEAvZvOWg2BgUcgKU_BkzJmZKUMEA,4611
237
- janito/tools/adapters/local/get_file_outline/java_outline.py,sha256=_UeUY5JoQEUdlHcK8aqGTqYJl0T2KxIFXPTdwum9gKQ,1825
238
- janito/tools/adapters/local/get_file_outline/markdown_outline.py,sha256=bXEBg0D93tEBDNy8t-wh4i7WxsxfpQ2C3dX1_rmtj08,434
239
- janito/tools/adapters/local/get_file_outline/python_outline.py,sha256=RAcf9Vxec08lA06drYaNre5HCJ2lTzrRAskZ3rlyE-U,10326
240
- janito/tools/adapters/local/get_file_outline/search_outline.py,sha256=bski24TpnJVf3L0TNzkx3HfvaXwttQl4EVkwk2POQOw,1348
241
- janito/tools/adapters/local/search_text/__init__.py,sha256=FEYpF5tTtf0fiAyRGIGSn-kV-MJDkhdFIbus16mYW8Y,34
242
- janito/tools/adapters/local/search_text/core.py,sha256=Qoid7FESJGVIsFm5oasgv9vZDy0aSzqeJPBWAF2_Edo,7877
243
- janito/tools/adapters/local/search_text/match_lines.py,sha256=RLR8fZFP-Q57rY0fTENbMItmt3dJZiYX0otmGHVRjfw,2131
244
- janito/tools/adapters/local/search_text/pattern_utils.py,sha256=D7vtAr8oT0tGV0C_UUarAXS9XQtP-MTYmmc8Yg8iVTg,2362
245
- janito/tools/adapters/local/search_text/traverse_directory.py,sha256=EpL1qywAV0H29pm8-QsHrjKchKP4i4sRUOENVuNptCo,4000
246
- janito/tools/adapters/local/validate_file_syntax/__init__.py,sha256=P53RHmas4BbHL90cMxH9m-RpMCJI8JquoJb0rpkPVVk,29
247
- janito/tools/adapters/local/validate_file_syntax/core.py,sha256=oYCpk_kyCbseKG_xX5xQjW91bPSpzzl18TPm7mMpwPI,3714
248
- janito/tools/adapters/local/validate_file_syntax/css_validator.py,sha256=jE5d26C_fU9k9azujbGVISn2WIRL-Ys6de4dsCq30bo,1351
249
- janito/tools/adapters/local/validate_file_syntax/html_validator.py,sha256=VV93BRcAeUraXHc9dUyH1cs9gRwRwO84K1-L5zbJnYU,3207
250
- janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py,sha256=lfM0SsKsFygiEp1IuLNr5jdS7XJyjCLOPw2yo9vl-pY,1763
251
- janito/tools/adapters/local/validate_file_syntax/js_validator.py,sha256=42LvgyMVhG9c2EAaSz3J9pu-yuh1oyIvRp0wN2rHiDQ,998
252
- janito/tools/adapters/local/validate_file_syntax/json_validator.py,sha256=muCB0-bdxk9zNulzH1It3hWpYzJC3hD8LbxCnE0P5is,150
253
- janito/tools/adapters/local/validate_file_syntax/markdown_validator.py,sha256=k4UT88fXvtclygz-nFhCMHJL5sk5WlGD-fP_cWqWMyU,3511
254
- janito/tools/adapters/local/validate_file_syntax/ps1_validator.py,sha256=TeIkPt08t_-w2JiKksXHHK9lJNT348ZDkWoSTzMtRrI,1152
255
- janito/tools/adapters/local/validate_file_syntax/python_validator.py,sha256=BfCO_K18qy92m-2ZVvHsbEU5e11OPo1pO9Vz4G4616E,130
256
- janito/tools/adapters/local/validate_file_syntax/xml_validator.py,sha256=AijlsP_PgNuC8ZbGsC5vOTt3Jur76otQzkd_7qR0QFY,284
257
- janito/tools/adapters/local/validate_file_syntax/yaml_validator.py,sha256=TgyI0HRL6ug_gBcWEm5TGJJuA4E34ZXcIzMpAbv3oJs,155
258
- janito-2.33.0.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
259
- janito-2.33.0.dist-info/METADATA,sha256=VvNpRDQ9_KEcxzU3YvUh3dXFr6ja6XSEaxpBJ_ydEIU,2313
260
- janito-2.33.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
261
- janito-2.33.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
262
- janito-2.33.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
263
- janito-2.33.0.dist-info/RECORD,,
326
+ janito-3.0.0.dist-info/licenses/LICENSE,sha256=dXV4fOF2ZErugtN8l_Nrj5tsRTYgtjE3cgiya0UfBio,11356
327
+ janito-3.0.0.dist-info/METADATA,sha256=JLYLflkFEBonYah38ghiqq0OP4HzA1wYCNyXSQ0FRC4,2265
328
+ janito-3.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
329
+ janito-3.0.0.dist-info/entry_points.txt,sha256=wIo5zZxbmu4fC-ZMrsKD0T0vq7IqkOOLYhrqRGypkx4,48
330
+ janito-3.0.0.dist-info/top_level.txt,sha256=m0NaVCq0-ivxbazE2-ND0EA9Hmuijj_OGkmCbnBcCig,7
331
+ janito-3.0.0.dist-info/RECORD,,
@@ -1,120 +0,0 @@
1
- """
2
- Core plugin loader that properly handles function-based plugins.
3
-
4
- This module provides a simplified approach to load core plugins
5
- without the complex discovery mechanism.
6
- """
7
-
8
- import importlib.util
9
- import sys
10
- from pathlib import Path
11
- from typing import Optional
12
-
13
- from janito.plugins.base import Plugin, PluginMetadata
14
- from janito.tools.function_adapter import create_function_tool
15
- from janito.tools.tool_base import ToolBase
16
-
17
-
18
- class CorePlugin(Plugin):
19
- """Simple core plugin implementation."""
20
-
21
- def __init__(self, name: str, description: str, tools: list):
22
- super().__init__()
23
- self._plugin_name = name
24
- self._description = description
25
- self._tools = tools
26
- self._tool_classes = []
27
-
28
- def get_metadata(self) -> PluginMetadata:
29
- return PluginMetadata(
30
- name=self._plugin_name,
31
- version="1.0.0",
32
- description=self._description,
33
- author="Janito",
34
- license="MIT",
35
- )
36
-
37
- def get_tools(self) -> list:
38
- return self._tool_classes
39
-
40
- def initialize(self):
41
- """Initialize by creating tool classes."""
42
- self._tool_classes = []
43
- for tool_func in self._tools:
44
- if callable(tool_func):
45
- tool_class = create_function_tool(tool_func)
46
- self._tool_classes.append(tool_class)
47
-
48
-
49
- def load_core_plugin(plugin_name: str) -> Optional[Plugin]:
50
- """
51
- Load a core plugin by name.
52
-
53
- Args:
54
- plugin_name: Name of the plugin (e.g., 'core.filemanager')
55
-
56
- Returns:
57
- Plugin instance if loaded successfully
58
- """
59
- try:
60
- # Parse plugin name
61
- if "." not in plugin_name:
62
- return None
63
-
64
- parts = plugin_name.split(".")
65
- if len(parts) != 2:
66
- return None
67
-
68
- package_name, submodule_name = parts
69
-
70
- # Build path to plugin
71
- plugin_path = Path("plugins") / package_name / submodule_name / "__init__.py"
72
- if not plugin_path.exists():
73
- return None
74
-
75
- # Load the module
76
- spec = importlib.util.spec_from_file_location(plugin_name, plugin_path)
77
- if spec is None or spec.loader is None:
78
- return None
79
-
80
- module = importlib.util.module_from_spec(spec)
81
- spec.loader.exec_module(module)
82
-
83
- # Get plugin info
84
- name = getattr(module, "__plugin_name__", plugin_name)
85
- description = getattr(module, "__plugin_description__", f"Core plugin: {plugin_name}")
86
- tools = getattr(module, "__plugin_tools__", [])
87
-
88
- if not tools:
89
- return None
90
-
91
- # Create plugin
92
- plugin = CorePlugin(name, description, tools)
93
- plugin.initialize()
94
- return plugin
95
-
96
- except Exception as e:
97
- print(f"Error loading core plugin {plugin_name}: {e}")
98
- return None
99
-
100
-
101
- def get_core_plugins() -> list:
102
- """Get list of all available core plugins."""
103
- core_plugins = [
104
- "core.filemanager",
105
- "core.codeanalyzer",
106
- "core.system",
107
- "core.imagedisplay",
108
- "dev.pythondev",
109
- "dev.visualization",
110
- "ui.userinterface",
111
- "web.webtools",
112
- ]
113
-
114
- available = []
115
- for plugin_name in core_plugins:
116
- plugin = load_core_plugin(plugin_name)
117
- if plugin:
118
- available.append(plugin_name)
119
-
120
- return available