janito 2.26.0__tar.gz → 2.27.1__tar.gz

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 (479) hide show
  1. {janito-2.26.0 → janito-2.27.1}/PKG-INFO +21 -1
  2. {janito-2.26.0 → janito-2.27.1}/README-dev.md +26 -0
  3. {janito-2.26.0 → janito-2.27.1}/README.md +18 -0
  4. {janito-2.26.0 → janito-2.27.1}/docs/changelogs/CHANGELOG.md +30 -0
  5. janito-2.27.1/docs/changelogs/CHANGELOG_2.27.0.md +64 -0
  6. {janito-2.26.0 → janito-2.27.1}/docs/guides/single-shot-terminal.md +12 -0
  7. janito-2.27.1/docs/plugins/ACTUAL_TOOLS_LOCATION.md +49 -0
  8. janito-2.27.1/docs/plugins/MIGRATION_COMPLETE.md +73 -0
  9. janito-2.27.1/docs/plugins/api-reference.md +221 -0
  10. janito-2.27.1/docs/plugins/architecture.md +128 -0
  11. janito-2.27.1/docs/plugins/built-in-plugins/codeanalyzer.md +65 -0
  12. janito-2.27.1/docs/plugins/built-in-plugins/filemanager.md +65 -0
  13. janito-2.27.1/docs/plugins/built-in-plugins/pythondev.md +64 -0
  14. janito-2.27.1/docs/plugins/built-in-plugins/system.md +62 -0
  15. janito-2.27.1/docs/plugins/built-in-plugins/userinterface.md +61 -0
  16. janito-2.27.1/docs/plugins/built-in-plugins/visualization.md +87 -0
  17. janito-2.27.1/docs/plugins/built-in-plugins/webtools.md +65 -0
  18. janito-2.27.1/docs/plugins/configuration.md +127 -0
  19. janito-2.27.1/docs/plugins/examples/advanced.md +326 -0
  20. janito-2.27.1/docs/plugins/examples/basic.md +82 -0
  21. janito-2.27.1/docs/plugins/examples/intermediate.md +145 -0
  22. janito-2.27.1/docs/plugins/plugin-development.md +170 -0
  23. janito-2.27.1/docs/plugins/plugin-resources.md +76 -0
  24. janito-2.27.1/docs/plugins/publishing.md +253 -0
  25. janito-2.27.1/docs/plugins/remote-plugins.md +96 -0
  26. janito-2.27.1/docs/plugins/testing.md +253 -0
  27. {janito-2.26.0 → janito-2.27.1}/docs/reference/cli-options.md +23 -3
  28. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/session.py +37 -23
  29. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/__init__.py +2 -0
  30. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/help.py +6 -1
  31. janito-2.27.1/janito/cli/chat_mode/shell/commands/provider.py +25 -0
  32. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/toolbar.py +15 -1
  33. janito-2.27.1/janito/cli/cli_commands/enable_disable_plugin.py +64 -0
  34. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_plugins.py +20 -4
  35. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/show_config.py +24 -0
  36. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/getters.py +6 -0
  37. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/runner.py +15 -1
  38. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/setters.py +18 -6
  39. {janito-2.26.0 → janito-2.27.1}/janito/cli/main_cli.py +17 -6
  40. janito-2.27.1/janito/plugins/builtin.py +84 -0
  41. {janito-2.26.0 → janito-2.27.1}/janito/plugins/discovery.py +83 -1
  42. {janito-2.26.0 → janito-2.27.1}/janito/plugins/manager.py +2 -0
  43. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/ask_user.py +7 -1
  44. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/fetch_url.py +80 -5
  45. janito-2.27.1/janito/tools/base.py +11 -0
  46. {janito-2.26.0 → janito-2.27.1}/janito.egg-info/PKG-INFO +21 -1
  47. {janito-2.26.0 → janito-2.27.1}/janito.egg-info/SOURCES.txt +82 -8
  48. {janito-2.26.0 → janito-2.27.1}/janito.egg-info/requires.txt +3 -0
  49. janito-2.27.1/janito.egg-info/top_level.txt +1 -0
  50. janito-2.27.1/plugins/__init__.py +33 -0
  51. janito-2.27.1/plugins/core/__init__.py +7 -0
  52. janito-2.27.1/plugins/core/codeanalyzer/__init__.py +25 -0
  53. janito-2.27.1/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +1 -0
  54. janito-2.27.1/plugins/core/codeanalyzer/tools/get_file_outline/core.py +122 -0
  55. janito-2.27.1/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +47 -0
  56. janito-2.27.1/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +14 -0
  57. janito-2.27.1/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +303 -0
  58. janito-2.27.1/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +36 -0
  59. janito-2.27.1/plugins/core/codeanalyzer/tools/search_text/__init__.py +1 -0
  60. janito-2.27.1/plugins/core/codeanalyzer/tools/search_text/core.py +205 -0
  61. janito-2.27.1/plugins/core/codeanalyzer/tools/search_text/match_lines.py +67 -0
  62. janito-2.27.1/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +73 -0
  63. janito-2.27.1/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +145 -0
  64. janito-2.27.1/plugins/core/filemanager/__init__.py +63 -0
  65. janito-2.27.1/plugins/core/filemanager/tools/copy_file.py +87 -0
  66. janito-2.27.1/plugins/core/filemanager/tools/create_directory.py +70 -0
  67. janito-2.27.1/plugins/core/filemanager/tools/create_file.py +87 -0
  68. janito-2.27.1/plugins/core/filemanager/tools/delete_text_in_file.py +134 -0
  69. janito-2.27.1/plugins/core/filemanager/tools/find_files.py +143 -0
  70. janito-2.27.1/plugins/core/filemanager/tools/move_file.py +131 -0
  71. janito-2.27.1/plugins/core/filemanager/tools/read_files.py +58 -0
  72. janito-2.27.1/plugins/core/filemanager/tools/remove_directory.py +55 -0
  73. janito-2.27.1/plugins/core/filemanager/tools/remove_file.py +58 -0
  74. janito-2.27.1/plugins/core/filemanager/tools/replace_text_in_file.py +270 -0
  75. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +1 -0
  76. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/core.py +114 -0
  77. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +35 -0
  78. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +100 -0
  79. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +47 -0
  80. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +27 -0
  81. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +6 -0
  82. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +109 -0
  83. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +32 -0
  84. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +5 -0
  85. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +11 -0
  86. janito-2.27.1/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +6 -0
  87. janito-2.27.1/plugins/core/filemanager/tools/view_file.py +172 -0
  88. janito-2.27.1/plugins/core/system/__init__.py +17 -0
  89. janito-2.27.1/plugins/core/system/tools/run_bash_command.py +183 -0
  90. janito-2.27.1/plugins/core/system/tools/run_powershell_command.py +218 -0
  91. janito-2.27.1/plugins/dev/__init__.py +7 -0
  92. janito-2.27.1/plugins/dev/pythondev/__init__.py +24 -0
  93. janito-2.27.1/plugins/dev/pythondev/tools/python_code_run.py +172 -0
  94. janito-2.27.1/plugins/dev/pythondev/tools/python_command_run.py +170 -0
  95. janito-2.27.1/plugins/dev/pythondev/tools/python_file_run.py +171 -0
  96. janito-2.27.1/plugins/dev/visualization/__init__.py +17 -0
  97. janito-2.27.1/plugins/dev/visualization/tools/read_chart.py +259 -0
  98. janito-2.27.1/plugins/ui/__init__.py +7 -0
  99. janito-2.27.1/plugins/ui/userinterface/__init__.py +14 -0
  100. janito-2.27.1/plugins/ui/userinterface/tools/ask_user.py +110 -0
  101. janito-2.27.1/plugins/web/__init__.py +7 -0
  102. janito-2.27.1/plugins/web/webtools/__init__.py +25 -0
  103. janito-2.27.1/plugins/web/webtools/tools/fetch_url.py +411 -0
  104. janito-2.27.1/plugins/web/webtools/tools/open_html_in_browser.py +51 -0
  105. janito-2.27.1/plugins/web/webtools/tools/open_url.py +37 -0
  106. janito-2.27.1/plugins.txt +1 -0
  107. {janito-2.26.0 → janito-2.27.1}/pyproject.toml +1 -0
  108. janito-2.26.0/README-PLUGINS.md +0 -68
  109. janito-2.26.0/docs/guides/plugins.md +0 -209
  110. janito-2.26.0/docs/guides/remote-plugins.md +0 -198
  111. janito-2.26.0/janito-coder/janito_coder/__init__.py +0 -9
  112. janito-2.26.0/janito-coder/janito_coder/plugins/__init__.py +0 -27
  113. janito-2.26.0/janito-coder/janito_coder/plugins/code_navigator.py +0 -618
  114. janito-2.26.0/janito-coder/janito_coder/plugins/git_analyzer.py +0 -273
  115. janito-2.26.0/janito-coder/pyproject.toml +0 -347
  116. janito-2.26.0/janito.egg-info/top_level.txt +0 -2
  117. {janito-2.26.0 → janito-2.27.1}/.codespellrc +0 -0
  118. {janito-2.26.0 → janito-2.27.1}/.gitattributes +0 -0
  119. {janito-2.26.0 → janito-2.27.1}/.github/workflows/python-app.yml.disabled +0 -0
  120. {janito-2.26.0 → janito-2.27.1}/.gitignore +0 -0
  121. {janito-2.26.0 → janito-2.27.1}/.pre-commit-config.yaml +0 -0
  122. {janito-2.26.0 → janito-2.27.1}/.secrets.baseline +0 -0
  123. {janito-2.26.0 → janito-2.27.1}/.vscode/settings.json +0 -0
  124. {janito-2.26.0 → janito-2.27.1}/LICENSE +0 -0
  125. {janito-2.26.0 → janito-2.27.1}/MARKET_ANALYST_README.md +0 -0
  126. {janito-2.26.0 → janito-2.27.1}/RELEASE_COMPARISON.md +0 -0
  127. {janito-2.26.0 → janito-2.27.1}/UPDATING_DOCS.md +0 -0
  128. {janito-2.26.0 → janito-2.27.1}/adding_mcp.txt +0 -0
  129. {janito-2.26.0 → janito-2.27.1}/docs/DIV.md +0 -0
  130. {janito-2.26.0 → janito-2.27.1}/docs/Interfaces.txt +0 -0
  131. {janito-2.26.0 → janito-2.27.1}/docs/TOOLBAR-STYLING.md +0 -0
  132. {janito-2.26.0 → janito-2.27.1}/docs/about/costs.md +0 -0
  133. {janito-2.26.0 → janito-2.27.1}/docs/about/vs-webchats.md +0 -0
  134. {janito-2.26.0 → janito-2.27.1}/docs/about/why.md +0 -0
  135. {janito-2.26.0 → janito-2.27.1}/docs/alibaba-setup.md +0 -0
  136. {janito-2.26.0 → janito-2.27.1}/docs/alternatives.md +0 -0
  137. {janito-2.26.0 → janito-2.27.1}/docs/cerebras-setup.md +0 -0
  138. {janito-2.26.0 → janito-2.27.1}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  139. {janito-2.26.0 → janito-2.27.1}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  140. {janito-2.26.0 → janito-2.27.1}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  141. {janito-2.26.0 → janito-2.27.1}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  142. {janito-2.26.0 → janito-2.27.1}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  143. {janito-2.26.0 → janito-2.27.1}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  144. {janito-2.26.0 → janito-2.27.1}/docs/code_intelligence/code-generation-challenges.md +0 -0
  145. {janito-2.26.0 → janito-2.27.1}/docs/code_intelligence/code-generation-observability.md +0 -0
  146. {janito-2.26.0 → janito-2.27.1}/docs/code_intelligence/our-approach.md +0 -0
  147. {janito-2.26.0 → janito-2.27.1}/docs/code_intelligence/why-string-replacement.md +0 -0
  148. {janito-2.26.0 → janito-2.27.1}/docs/concepts/analysis-style.md +0 -0
  149. {janito-2.26.0 → janito-2.27.1}/docs/concepts/human-guided-ai.md +0 -0
  150. {janito-2.26.0 → janito-2.27.1}/docs/concepts/index.md +0 -0
  151. {janito-2.26.0 → janito-2.27.1}/docs/concepts/language-model-clients.md +0 -0
  152. {janito-2.26.0 → janito-2.27.1}/docs/concepts/prompt-design-style.md +0 -0
  153. {janito-2.26.0 → janito-2.27.1}/docs/deepseek-setup.md +0 -0
  154. {janito-2.26.0 → janito-2.27.1}/docs/driver-flow.md +0 -0
  155. {janito-2.26.0 → janito-2.27.1}/docs/driver-request-cancellation.md +0 -0
  156. {janito-2.26.0 → janito-2.27.1}/docs/drivers/events.md +0 -0
  157. {janito-2.26.0 → janito-2.27.1}/docs/drivers.md +0 -0
  158. {janito-2.26.0 → janito-2.27.1}/docs/event-bus.md +0 -0
  159. {janito-2.26.0 → janito-2.27.1}/docs/guides/configuration.md +0 -0
  160. {janito-2.26.0 → janito-2.27.1}/docs/guides/developing.md +0 -0
  161. {janito-2.26.0 → janito-2.27.1}/docs/guides/disabled-tools.md +0 -0
  162. {janito-2.26.0 → janito-2.27.1}/docs/guides/installation.md +0 -0
  163. {janito-2.26.0 → janito-2.27.1}/docs/guides/market-data-sources.md +0 -0
  164. {janito-2.26.0 → janito-2.27.1}/docs/guides/profiles.md +0 -0
  165. {janito-2.26.0 → janito-2.27.1}/docs/guides/prompting/README.md +0 -0
  166. {janito-2.26.0 → janito-2.27.1}/docs/guides/read-chart-examples.md +0 -0
  167. {janito-2.26.0 → janito-2.27.1}/docs/guides/security-commands.md +0 -0
  168. {janito-2.26.0 → janito-2.27.1}/docs/guides/stock-market-guide.md +0 -0
  169. {janito-2.26.0 → janito-2.27.1}/docs/guides/terminal-shell.md +0 -0
  170. {janito-2.26.0 → janito-2.27.1}/docs/guides/tools-developer-guide.md +0 -0
  171. {janito-2.26.0 → janito-2.27.1}/docs/guides/url-whitelist.md +0 -0
  172. {janito-2.26.0 → janito-2.27.1}/docs/guides/using.md +0 -0
  173. {janito-2.26.0 → janito-2.27.1}/docs/guides/using_tools.md +0 -0
  174. {janito-2.26.0 → janito-2.27.1}/docs/ibm-setup.md +0 -0
  175. {janito-2.26.0 → janito-2.27.1}/docs/imgs/code-generation-observability.png +0 -0
  176. {janito-2.26.0 → janito-2.27.1}/docs/imgs/code_generation_observability.png +0 -0
  177. {janito-2.26.0 → janito-2.27.1}/docs/imgs/happy-programmer.png +0 -0
  178. {janito-2.26.0 → janito-2.27.1}/docs/imgs/happy-programmer.svg +0 -0
  179. {janito-2.26.0 → janito-2.27.1}/docs/imgs/terminal-one-shot.png +0 -0
  180. {janito-2.26.0 → janito-2.27.1}/docs/imgs/terminal-shell.png +0 -0
  181. {janito-2.26.0 → janito-2.27.1}/docs/imgs/terminal_one_shot.png +0 -0
  182. {janito-2.26.0 → janito-2.27.1}/docs/imgs/terminal_shell.png +0 -0
  183. {janito-2.26.0 → janito-2.27.1}/docs/index.md +0 -0
  184. {janito-2.26.0 → janito-2.27.1}/docs/llm-drivers-required-config.md +0 -0
  185. {janito-2.26.0 → janito-2.27.1}/docs/llm-drivers.md +0 -0
  186. {janito-2.26.0 → janito-2.27.1}/docs/meta/developer-toolchain.md +0 -0
  187. {janito-2.26.0 → janito-2.27.1}/docs/meta/quality-checks.txt +0 -0
  188. {janito-2.26.0 → janito-2.27.1}/docs/mistral-setup.md +0 -0
  189. {janito-2.26.0 → janito-2.27.1}/docs/moonshotai-setup.md +0 -0
  190. {janito-2.26.0 → janito-2.27.1}/docs/openai-setup.md +0 -0
  191. {janito-2.26.0 → janito-2.27.1}/docs/overrides/partials/copyright.html +0 -0
  192. {janito-2.26.0 → janito-2.27.1}/docs/plugins/README.md +0 -0
  193. {janito-2.26.0 → janito-2.27.1}/docs/provider-platform-access.md +0 -0
  194. {janito-2.26.0 → janito-2.27.1}/docs/pt/README-pt.md +0 -0
  195. {janito-2.26.0 → janito-2.27.1}/docs/pt/README.md +0 -0
  196. {janito-2.26.0 → janito-2.27.1}/docs/pt/configuracao.md +0 -0
  197. {janito-2.26.0 → janito-2.27.1}/docs/pt/exemplos.md +0 -0
  198. {janito-2.26.0 → janito-2.27.1}/docs/pt/faq-pt.md +0 -0
  199. {janito-2.26.0 → janito-2.27.1}/docs/pt/ferramentas.md +0 -0
  200. {janito-2.26.0 → janito-2.27.1}/docs/pt/guia-uso.md +0 -0
  201. {janito-2.26.0 → janito-2.27.1}/docs/pt/instalacao.md +0 -0
  202. {janito-2.26.0 → janito-2.27.1}/docs/pt/perfis.md +0 -0
  203. {janito-2.26.0 → janito-2.27.1}/docs/public-sources.md +0 -0
  204. {janito-2.26.0 → janito-2.27.1}/docs/reference/api.md +0 -0
  205. {janito-2.26.0 → janito-2.27.1}/docs/reference/azure-openai.md +0 -0
  206. {janito-2.26.0 → janito-2.27.1}/docs/reference/message-handler-model.md +0 -0
  207. {janito-2.26.0 → janito-2.27.1}/docs/reference/rich-message-handler.md +0 -0
  208. {janito-2.26.0 → janito-2.27.1}/docs/security.md +0 -0
  209. {janito-2.26.0 → janito-2.27.1}/docs/supported-providers-models.md +0 -0
  210. {janito-2.26.0 → janito-2.27.1}/docs/tools/search-text.md +0 -0
  211. {janito-2.26.0 → janito-2.27.1}/docs/tools-index.md +0 -0
  212. {janito-2.26.0 → janito-2.27.1}/docs/tools-natural-results.md +0 -0
  213. {janito-2.26.0 → janito-2.27.1}/docs/tools-precision.md +0 -0
  214. {janito-2.26.0 → janito-2.27.1}/docs/z-ai-setup.md +0 -0
  215. {janito-2.26.0 → janito-2.27.1}/examples/loop_protection_example.py +0 -0
  216. {janito-2.26.0 → janito-2.27.1}/examples/loop_protection_tool_example.py +0 -0
  217. {janito-2.26.0 → janito-2.27.1}/get_nasdaq_top.py +0 -0
  218. {janito-2.26.0 → janito-2.27.1}/ibm-logo.txt +0 -0
  219. {janito-2.26.0 → janito-2.27.1}/janito/README.md +0 -0
  220. {janito-2.26.0 → janito-2.27.1}/janito/__init__.py +0 -0
  221. {janito-2.26.0 → janito-2.27.1}/janito/__main__.py +0 -0
  222. {janito-2.26.0 → janito-2.27.1}/janito/_version.py +0 -0
  223. {janito-2.26.0 → janito-2.27.1}/janito/agent/setup_agent.py +0 -0
  224. {janito-2.26.0 → janito-2.27.1}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  225. {janito-2.26.0 → janito-2.27.1}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  226. {janito-2.26.0 → janito-2.27.1}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  227. {janito-2.26.0 → janito-2.27.1}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  228. {janito-2.26.0 → janito-2.27.1}/janito/cli/__init__.py +0 -0
  229. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/bindings.py +0 -0
  230. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/chat_entry.py +0 -0
  231. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/prompt_style.py +0 -0
  232. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/script_runner.py +0 -0
  233. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/session_profile_select.py +0 -0
  234. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  235. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  236. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  237. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  238. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  239. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  240. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  241. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  242. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  243. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  244. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  245. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  246. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  247. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  248. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  249. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  250. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  251. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  252. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  253. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  254. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  255. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  256. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  257. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  258. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  259. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  260. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  261. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/input_history.py +0 -0
  262. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  263. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/session/history.py +0 -0
  264. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  265. {janito-2.26.0 → janito-2.27.1}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  266. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_config.py +0 -0
  267. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_drivers.py +0 -0
  268. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_models.py +0 -0
  269. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_profiles.py +0 -0
  270. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_providers.py +0 -0
  271. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_providers_region.py +0 -0
  272. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/list_tools.py +0 -0
  273. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/model_selection.py +0 -0
  274. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/model_utils.py +0 -0
  275. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/ping_providers.py +0 -0
  276. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/set_api_key.py +0 -0
  277. {janito-2.26.0 → janito-2.27.1}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  278. {janito-2.26.0 → janito-2.27.1}/janito/cli/config.py +0 -0
  279. {janito-2.26.0 → janito-2.27.1}/janito/cli/console.py +0 -0
  280. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/__init__.py +0 -0
  281. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/event_logger.py +0 -0
  282. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/model_guesser.py +0 -0
  283. {janito-2.26.0 → janito-2.27.1}/janito/cli/core/unsetters.py +0 -0
  284. {janito-2.26.0 → janito-2.27.1}/janito/cli/main.py +0 -0
  285. {janito-2.26.0 → janito-2.27.1}/janito/cli/prompt_core.py +0 -0
  286. {janito-2.26.0 → janito-2.27.1}/janito/cli/prompt_handler.py +0 -0
  287. {janito-2.26.0 → janito-2.27.1}/janito/cli/prompt_setup.py +0 -0
  288. {janito-2.26.0 → janito-2.27.1}/janito/cli/rich_terminal_reporter.py +0 -0
  289. {janito-2.26.0 → janito-2.27.1}/janito/cli/single_shot_mode/__init__.py +0 -0
  290. {janito-2.26.0 → janito-2.27.1}/janito/cli/single_shot_mode/handler.py +0 -0
  291. {janito-2.26.0 → janito-2.27.1}/janito/cli/utils.py +0 -0
  292. {janito-2.26.0 → janito-2.27.1}/janito/cli/verbose_output.py +0 -0
  293. {janito-2.26.0 → janito-2.27.1}/janito/config.py +0 -0
  294. {janito-2.26.0 → janito-2.27.1}/janito/config_manager.py +0 -0
  295. {janito-2.26.0 → janito-2.27.1}/janito/conversation_history.py +0 -0
  296. {janito-2.26.0 → janito-2.27.1}/janito/dir_walk_utils.py +0 -0
  297. {janito-2.26.0 → janito-2.27.1}/janito/docs/GETTING_STARTED.md +0 -0
  298. {janito-2.26.0 → janito-2.27.1}/janito/driver_events.py +0 -0
  299. {janito-2.26.0 → janito-2.27.1}/janito/drivers/azure_openai/driver.py +0 -0
  300. {janito-2.26.0 → janito-2.27.1}/janito/drivers/cerebras/__init__.py +0 -0
  301. {janito-2.26.0 → janito-2.27.1}/janito/drivers/dashscope.bak.zip +0 -0
  302. {janito-2.26.0 → janito-2.27.1}/janito/drivers/openai/README.md +0 -0
  303. {janito-2.26.0 → janito-2.27.1}/janito/drivers/openai/driver.py +0 -0
  304. {janito-2.26.0 → janito-2.27.1}/janito/drivers/openai_responses.bak.zip +0 -0
  305. {janito-2.26.0 → janito-2.27.1}/janito/drivers/zai/__init__.py +0 -0
  306. {janito-2.26.0 → janito-2.27.1}/janito/drivers/zai/driver.py +0 -0
  307. {janito-2.26.0 → janito-2.27.1}/janito/event_bus/__init__.py +0 -0
  308. {janito-2.26.0 → janito-2.27.1}/janito/event_bus/bus.py +0 -0
  309. {janito-2.26.0 → janito-2.27.1}/janito/event_bus/event.py +0 -0
  310. {janito-2.26.0 → janito-2.27.1}/janito/event_bus/handler.py +0 -0
  311. {janito-2.26.0 → janito-2.27.1}/janito/event_bus/queue_bus.py +0 -0
  312. {janito-2.26.0 → janito-2.27.1}/janito/exceptions.py +0 -0
  313. {janito-2.26.0 → janito-2.27.1}/janito/formatting.py +0 -0
  314. {janito-2.26.0 → janito-2.27.1}/janito/formatting_token.py +0 -0
  315. {janito-2.26.0 → janito-2.27.1}/janito/gitignore_utils.py +0 -0
  316. {janito-2.26.0 → janito-2.27.1}/janito/i18n/__init__.py +0 -0
  317. {janito-2.26.0 → janito-2.27.1}/janito/i18n/it.py +0 -0
  318. {janito-2.26.0 → janito-2.27.1}/janito/i18n/messages.py +0 -0
  319. {janito-2.26.0 → janito-2.27.1}/janito/i18n/pt.py +0 -0
  320. {janito-2.26.0 → janito-2.27.1}/janito/llm/README.md +0 -0
  321. {janito-2.26.0 → janito-2.27.1}/janito/llm/__init__.py +0 -0
  322. {janito-2.26.0 → janito-2.27.1}/janito/llm/agent.py +0 -0
  323. {janito-2.26.0 → janito-2.27.1}/janito/llm/auth.py +0 -0
  324. {janito-2.26.0 → janito-2.27.1}/janito/llm/auth_utils.py +0 -0
  325. {janito-2.26.0 → janito-2.27.1}/janito/llm/driver.py +0 -0
  326. {janito-2.26.0 → janito-2.27.1}/janito/llm/driver_config.py +0 -0
  327. {janito-2.26.0 → janito-2.27.1}/janito/llm/driver_config_builder.py +0 -0
  328. {janito-2.26.0 → janito-2.27.1}/janito/llm/driver_input.py +0 -0
  329. {janito-2.26.0 → janito-2.27.1}/janito/llm/message_parts.py +0 -0
  330. {janito-2.26.0 → janito-2.27.1}/janito/llm/model.py +0 -0
  331. {janito-2.26.0 → janito-2.27.1}/janito/llm/provider.py +0 -0
  332. {janito-2.26.0 → janito-2.27.1}/janito/mkdocs.yml +0 -0
  333. {janito-2.26.0 → janito-2.27.1}/janito/perf_singleton.py +0 -0
  334. {janito-2.26.0 → janito-2.27.1}/janito/performance_collector.py +0 -0
  335. {janito-2.26.0 → janito-2.27.1}/janito/platform_discovery.py +0 -0
  336. {janito-2.26.0 → janito-2.27.1}/janito/plugins/__init__.py +0 -0
  337. {janito-2.26.0 → janito-2.27.1}/janito/plugins/base.py +0 -0
  338. {janito-2.26.0 → janito-2.27.1}/janito/plugins/config.py +0 -0
  339. {janito-2.26.0 → janito-2.27.1}/janito/provider_config.py +0 -0
  340. {janito-2.26.0 → janito-2.27.1}/janito/provider_registry.py +0 -0
  341. {janito-2.26.0 → janito-2.27.1}/janito/providers/__init__.py +0 -0
  342. {janito-2.26.0 → janito-2.27.1}/janito/providers/alibaba/__init__.py +0 -0
  343. {janito-2.26.0 → janito-2.27.1}/janito/providers/alibaba/model_info.py +0 -0
  344. {janito-2.26.0 → janito-2.27.1}/janito/providers/alibaba/provider.py +0 -0
  345. {janito-2.26.0 → janito-2.27.1}/janito/providers/anthropic/model_info.py +0 -0
  346. {janito-2.26.0 → janito-2.27.1}/janito/providers/anthropic/provider.py +0 -0
  347. {janito-2.26.0 → janito-2.27.1}/janito/providers/azure_openai/model_info.py +0 -0
  348. {janito-2.26.0 → janito-2.27.1}/janito/providers/azure_openai/provider.py +0 -0
  349. {janito-2.26.0 → janito-2.27.1}/janito/providers/cerebras/__init__.py +0 -0
  350. {janito-2.26.0 → janito-2.27.1}/janito/providers/cerebras/model_info.py +0 -0
  351. {janito-2.26.0 → janito-2.27.1}/janito/providers/cerebras/provider.py +0 -0
  352. {janito-2.26.0 → janito-2.27.1}/janito/providers/dashscope.bak.zip +0 -0
  353. {janito-2.26.0 → janito-2.27.1}/janito/providers/deepseek/__init__.py +0 -0
  354. {janito-2.26.0 → janito-2.27.1}/janito/providers/deepseek/model_info.py +0 -0
  355. {janito-2.26.0 → janito-2.27.1}/janito/providers/deepseek/provider.py +0 -0
  356. {janito-2.26.0 → janito-2.27.1}/janito/providers/google/__init__.py +0 -0
  357. {janito-2.26.0 → janito-2.27.1}/janito/providers/google/model_info.py +0 -0
  358. {janito-2.26.0 → janito-2.27.1}/janito/providers/google/provider.py +0 -0
  359. {janito-2.26.0 → janito-2.27.1}/janito/providers/ibm/README.md +0 -0
  360. {janito-2.26.0 → janito-2.27.1}/janito/providers/ibm/__init__.py +0 -0
  361. {janito-2.26.0 → janito-2.27.1}/janito/providers/ibm/model_info.py +0 -0
  362. {janito-2.26.0 → janito-2.27.1}/janito/providers/ibm/provider.py +0 -0
  363. {janito-2.26.0 → janito-2.27.1}/janito/providers/mistral/__init__.py +0 -0
  364. {janito-2.26.0 → janito-2.27.1}/janito/providers/mistral/model_info.py +0 -0
  365. {janito-2.26.0 → janito-2.27.1}/janito/providers/mistral/provider.py +0 -0
  366. {janito-2.26.0 → janito-2.27.1}/janito/providers/moonshotai/__init__.py +0 -0
  367. {janito-2.26.0 → janito-2.27.1}/janito/providers/moonshotai/model_info.py +0 -0
  368. {janito-2.26.0 → janito-2.27.1}/janito/providers/moonshotai/provider.py +0 -0
  369. {janito-2.26.0 → janito-2.27.1}/janito/providers/openai/__init__.py +0 -0
  370. {janito-2.26.0 → janito-2.27.1}/janito/providers/openai/model_info.py +0 -0
  371. {janito-2.26.0 → janito-2.27.1}/janito/providers/openai/provider.py +0 -0
  372. {janito-2.26.0 → janito-2.27.1}/janito/providers/openai/schema_generator.py +0 -0
  373. {janito-2.26.0 → janito-2.27.1}/janito/providers/registry.py +0 -0
  374. {janito-2.26.0 → janito-2.27.1}/janito/providers/zai/__init__.py +0 -0
  375. {janito-2.26.0 → janito-2.27.1}/janito/providers/zai/model_info.py +0 -0
  376. {janito-2.26.0 → janito-2.27.1}/janito/providers/zai/provider.py +0 -0
  377. {janito-2.26.0 → janito-2.27.1}/janito/providers/zai/schema_generator.py +0 -0
  378. {janito-2.26.0 → janito-2.27.1}/janito/regions/__init__.py +0 -0
  379. {janito-2.26.0 → janito-2.27.1}/janito/regions/cli.py +0 -0
  380. {janito-2.26.0 → janito-2.27.1}/janito/regions/geo_utils.py +0 -0
  381. {janito-2.26.0 → janito-2.27.1}/janito/regions/provider_regions.py +0 -0
  382. {janito-2.26.0 → janito-2.27.1}/janito/report_events.py +0 -0
  383. {janito-2.26.0 → janito-2.27.1}/janito/shell.bak.zip +0 -0
  384. {janito-2.26.0 → janito-2.27.1}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  385. {janito-2.26.0 → janito-2.27.1}/janito/tools/README.md +0 -0
  386. {janito-2.26.0 → janito-2.27.1}/janito/tools/__init__.py +0 -0
  387. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/__init__.py +0 -0
  388. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/__init__.py +0 -0
  389. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/adapter.py +0 -0
  390. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/copy_file.py +0 -0
  391. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/create_directory.py +0 -0
  392. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/create_file.py +0 -0
  393. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  394. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/find_files.py +0 -0
  395. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  396. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  397. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  398. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  399. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  400. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  401. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/move_file.py +0 -0
  402. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  403. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/open_url.py +0 -0
  404. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/python_code_run.py +0 -0
  405. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/python_command_run.py +0 -0
  406. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/python_file_run.py +0 -0
  407. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/read_chart.py +0 -0
  408. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/read_files.py +0 -0
  409. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/remove_directory.py +0 -0
  410. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/remove_file.py +0 -0
  411. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  412. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/run_bash_command.py +0 -0
  413. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  414. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  415. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/search_text/core.py +0 -0
  416. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  417. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  418. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  419. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  420. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  421. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  422. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  423. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +0 -0
  424. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  425. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  426. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  427. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  428. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  429. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  430. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  431. {janito-2.26.0 → janito-2.27.1}/janito/tools/adapters/local/view_file.py +0 -0
  432. {janito-2.26.0 → janito-2.27.1}/janito/tools/disabled_tools.py +0 -0
  433. {janito-2.26.0 → janito-2.27.1}/janito/tools/inspect_registry.py +0 -0
  434. {janito-2.26.0 → janito-2.27.1}/janito/tools/loop_protection.py +0 -0
  435. {janito-2.26.0 → janito-2.27.1}/janito/tools/loop_protection_decorator.py +0 -0
  436. {janito-2.26.0 → janito-2.27.1}/janito/tools/outline_file.bak.zip +0 -0
  437. {janito-2.26.0 → janito-2.27.1}/janito/tools/path_security.py +0 -0
  438. {janito-2.26.0 → janito-2.27.1}/janito/tools/path_utils.py +0 -0
  439. {janito-2.26.0 → janito-2.27.1}/janito/tools/permissions.py +0 -0
  440. {janito-2.26.0 → janito-2.27.1}/janito/tools/permissions_parse.py +0 -0
  441. {janito-2.26.0 → janito-2.27.1}/janito/tools/tool_base.py +0 -0
  442. {janito-2.26.0 → janito-2.27.1}/janito/tools/tool_events.py +0 -0
  443. {janito-2.26.0 → janito-2.27.1}/janito/tools/tool_run_exception.py +0 -0
  444. {janito-2.26.0 → janito-2.27.1}/janito/tools/tool_use_tracker.py +0 -0
  445. {janito-2.26.0 → janito-2.27.1}/janito/tools/tool_utils.py +0 -0
  446. {janito-2.26.0 → janito-2.27.1}/janito/tools/tools_adapter.py +0 -0
  447. {janito-2.26.0 → janito-2.27.1}/janito/tools/tools_schema.py +0 -0
  448. {janito-2.26.0 → janito-2.27.1}/janito/tools/url_whitelist.py +0 -0
  449. {janito-2.26.0 → janito-2.27.1}/janito/utils.py +0 -0
  450. {janito-2.26.0 → janito-2.27.1}/janito.egg-info/dependency_links.txt +0 -0
  451. {janito-2.26.0 → janito-2.27.1}/janito.egg-info/entry_points.txt +0 -0
  452. {janito-2.26.0 → janito-2.27.1}/market_prompt_fix.py +0 -0
  453. {janito-2.26.0 → janito-2.27.1}/market_test.py +0 -0
  454. {janito-2.26.0 → janito-2.27.1}/mkdocs.yml +0 -0
  455. {janito-2.26.0 → janito-2.27.1}/mkdocs_hooks.py +0 -0
  456. {janito-2.26.0 → janito-2.27.1}/plugins/example_plugin.py +0 -0
  457. {janito-2.26.0 → janito-2.27.1}/pytest.ini +0 -0
  458. {janito-2.26.0 → janito-2.27.1}/requirements-dev.txt +0 -0
  459. {janito-2.26.0 → janito-2.27.1}/requirements.txt +0 -0
  460. {janito-2.26.0 → janito-2.27.1}/setup.cfg +0 -0
  461. {janito-2.26.0 → janito-2.27.1}/test_example.py +0 -0
  462. {janito-2.26.0 → janito-2.27.1}/test_key_field_behavior.py +0 -0
  463. {janito-2.26.0 → janito-2.27.1}/test_key_field_protection.py +0 -0
  464. {janito-2.26.0 → janito-2.27.1}/test_loop_protection_return.py +0 -0
  465. {janito-2.26.0 → janito-2.27.1}/test_market_analyst.py +0 -0
  466. {janito-2.26.0 → janito-2.27.1}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  467. {janito-2.26.0 → janito-2.27.1}/tests/adapters/local/test_read_files.py +0 -0
  468. {janito-2.26.0 → janito-2.27.1}/tests/test_cli_list_models.py +0 -0
  469. {janito-2.26.0 → janito-2.27.1}/tests/test_cli_list_providers.py +0 -0
  470. {janito-2.26.0 → janito-2.27.1}/tests/test_cli_list_providers_alibaba.py +0 -0
  471. {janito-2.26.0 → janito-2.27.1}/tests/test_cli_list_providers_moonshotai.py +0 -0
  472. {janito-2.26.0 → janito-2.27.1}/tests/test_cli_version.py +0 -0
  473. {janito-2.26.0 → janito-2.27.1}/tests/test_disabled_tools.py +0 -0
  474. {janito-2.26.0 → janito-2.27.1}/tests/test_plugin_system.py +0 -0
  475. {janito-2.26.0 → janito-2.27.1}/tests/test_provider_alibaba.py +0 -0
  476. {janito-2.26.0 → janito-2.27.1}/tests/test_provider_cerebras.py +0 -0
  477. {janito-2.26.0 → janito-2.27.1}/tests/test_provider_moonshotai.py +0 -0
  478. {janito-2.26.0 → janito-2.27.1}/tools/release.py +0 -0
  479. {janito-2.26.0 → janito-2.27.1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.26.0
3
+ Version: 2.27.1
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
@@ -28,6 +28,8 @@ Requires-Dist: codespell==2.4.1; extra == "dev"
28
28
  Requires-Dist: black; extra == "dev"
29
29
  Requires-Dist: questionary>=2.0.1; extra == "dev"
30
30
  Requires-Dist: setuptools_scm>=8.0; extra == "dev"
31
+ Provides-Extra: coder
32
+ Requires-Dist: janito-coder; extra == "coder"
31
33
  Dynamic: license-file
32
34
 
33
35
  # Janito, control you context
@@ -187,7 +189,25 @@ janito -r -w "Read and update this file: ..."
187
189
  To enable all permissions (read, write, execute):
188
190
 
189
191
  ```bash
192
+ # Using individual flags
190
193
  janito -r -w -x "Run this code: print('Hello, world!')"
194
+
195
+ # Using the convenient /rwx prefix (single-shot mode)
196
+ janito /rwx "Run this code: print('Hello, world!')"
197
+ ```
198
+
199
+ #### One-Shot Mode
200
+ For quick tasks without entering interactive mode, provide your prompt directly:
201
+
202
+ ```bash
203
+ # Basic one-shot
204
+ janito "What are the key classes in this project?"
205
+
206
+ # One-shot with all permissions enabled
207
+ janito /rwx "Create a Python script and run it"
208
+
209
+ # One-shot with specific permissions
210
+ janito -r -w "Read this file and create a summary"
191
211
  ```
192
212
 
193
213
  > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
@@ -36,6 +36,32 @@ This document provides guidelines and instructions for developers contributing t
36
36
  pip install -e .
37
37
  ```
38
38
 
39
+ ## Release Process
40
+
41
+ The project includes an automated release script at `tools/release.py` that handles the complete release process:
42
+
43
+ - **Full release** (build + upload to PyPI):
44
+ ```sh
45
+ python tools/release.py
46
+ ```
47
+
48
+ - **Build only** (skip PyPI upload):
49
+ ```sh
50
+ python tools/release.py --build-only
51
+ ```
52
+
53
+ The release script will:
54
+ 1. Check for uncommitted changes
55
+ 2. Verify the latest git tag version
56
+ 3. Check PyPI for existing versions
57
+ 4. Build the package using `python -m build`
58
+ 5. Upload to PyPI using `twine upload`
59
+
60
+ **Requirements**: Make sure you have `build` and `twine` installed:
61
+ ```sh
62
+ pip install build twine
63
+ ```
64
+
39
65
  ## Running Tests
40
66
 
41
67
  - (Add test instructions here if/when tests are present)
@@ -155,7 +155,25 @@ janito -r -w "Read and update this file: ..."
155
155
  To enable all permissions (read, write, execute):
156
156
 
157
157
  ```bash
158
+ # Using individual flags
158
159
  janito -r -w -x "Run this code: print('Hello, world!')"
160
+
161
+ # Using the convenient /rwx prefix (single-shot mode)
162
+ janito /rwx "Run this code: print('Hello, world!')"
163
+ ```
164
+
165
+ #### One-Shot Mode
166
+ For quick tasks without entering interactive mode, provide your prompt directly:
167
+
168
+ ```bash
169
+ # Basic one-shot
170
+ janito "What are the key classes in this project?"
171
+
172
+ # One-shot with all permissions enabled
173
+ janito /rwx "Create a Python script and run it"
174
+
175
+ # One-shot with specific permissions
176
+ janito -r -w "Read this file and create a summary"
159
177
  ```
160
178
 
161
179
  > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
@@ -2,6 +2,36 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.27.0] - 2025-08-16
6
+
7
+ ### Added
8
+
9
+ - **Enhanced CLI Experience**:
10
+ - **One-Shot Mode Prefix Support**: Added `/rwx` prefix support to enable all tool permissions in a single command
11
+ - Use `/rwx "your prompt here"` to enable read, write, and execute permissions in one-shot mode
12
+ - Equivalent to using `-r -w -x` flags but more convenient for quick tasks
13
+ - Maintains security by requiring explicit user action for each command
14
+
15
+ - **Enhanced Web Fetching**:
16
+ - **Browser-like Session Support**: Enhanced `fetch_url` tool with browser-like session capabilities
17
+ - Persistent session management for improved reliability
18
+ - Better handling of cookies and session state
19
+ - Enhanced user-agent and header management
20
+ - Improved error handling for network requests
21
+
22
+ ### Changed
23
+
24
+ - **Improved Documentation**:
25
+ - Updated CLI documentation to reflect new `/rwx` prefix and one-shot mode features
26
+ - Enhanced fetch_url tool documentation with new session parameters
27
+ - Improved parameter descriptions and usage examples
28
+
29
+ ### Fixed
30
+
31
+ - **Documentation Fixes**:
32
+ - Added missing docstring parameters for fetch_url tool
33
+ - Fixed parameter documentation inconsistencies
34
+
5
35
  ## [2.26.0] - 2025-08-16
6
36
 
7
37
  ### Added
@@ -0,0 +1,64 @@
1
+ # Changelog v2.27.0
2
+
3
+ ## [2.27.0] - 2025-08-16
4
+
5
+ ### Added
6
+
7
+ - **Enhanced CLI Experience**:
8
+ - **One-Shot Mode Prefix Support**: Added `/rwx` prefix support to enable all tool permissions in a single command
9
+ - Use `/rwx "your prompt here"` to enable read, write, and execute permissions in one-shot mode
10
+ - Equivalent to using `-r -w -x` flags but more convenient for quick tasks
11
+ - Maintains security by requiring explicit user action for each command
12
+
13
+ - **Enhanced Web Fetching**:
14
+ - **Browser-like Session Support**: Enhanced `fetch_url` tool with browser-like session capabilities
15
+ - Persistent session management for improved reliability
16
+ - Better handling of cookies and session state
17
+ - Enhanced user-agent and header management
18
+ - Improved error handling for network requests
19
+
20
+ ### Changed
21
+
22
+ - **Improved Documentation**:
23
+ - Updated CLI documentation to reflect new `/rwx` prefix and one-shot mode features
24
+ - Enhanced fetch_url tool documentation with new session parameters
25
+ - Improved parameter descriptions and usage examples
26
+
27
+ ### Fixed
28
+
29
+ - **Documentation Fixes**:
30
+ - Added missing docstring parameters for fetch_url tool
31
+ - Fixed parameter documentation inconsistencies
32
+
33
+ ### Developer Experience
34
+
35
+ - **CLI Usability**:
36
+ - Streamlined one-shot mode with convenient prefix commands
37
+ - Consistent behavior between interactive and non-interactive modes
38
+ - Clear documentation for new features
39
+
40
+ ### Technical Details
41
+
42
+ - **Implementation**: Enhanced CLI argument parsing to support `/rwx` prefix
43
+ - **Integration**: Full integration with existing permission system
44
+ - **Compatibility**: Backward compatible with existing CLI flags and commands
45
+
46
+ ### Migration Guide
47
+
48
+ For users upgrading from v2.26.0:
49
+
50
+ 1. **No Breaking Changes**: All existing functionality remains unchanged
51
+ 2. **New Prefix**: Use `/rwx "prompt"` for one-shot mode with all permissions
52
+ 3. **Existing Flags**: `-r -w -x` flags continue to work as before
53
+ 4. **fetch_url Tool**: Enhanced session support is automatic, no configuration needed
54
+
55
+ ### Contributors
56
+
57
+ - Added convenient one-shot mode prefix for improved CLI experience
58
+ - Enhanced web fetching capabilities with browser-like session support
59
+ - Improved documentation and parameter descriptions
60
+ - Fixed documentation inconsistencies
61
+
62
+ ---
63
+
64
+ **Full Changelog**: https://github.com/ikignosis/janito/compare/v2.26.0...v2.27.0
@@ -10,6 +10,18 @@ janito "what are the key classes of this project?"
10
10
 
11
11
  Janito will process your request and exit after displaying the result.
12
12
 
13
+ ### Quick Permission Setup
14
+
15
+ For one-shot mode, you can quickly enable all tool permissions using the `/rwx` prefix:
16
+
17
+ ```bash
18
+ # Enable read, write, and execute permissions
19
+ janito /rwx "create a python script and run it"
20
+
21
+ # Or use individual flags
22
+ janito -r -w -x "create a python script and run it"
23
+ ```
24
+
13
25
  > ⚠️ **Warning:** Some models may not complete all required steps in a single-shot (one-off) run. If the model does not act as expected, try appending "; just do it" to your command-line prompt to encourage direct action.
14
26
 
15
27
  ![One-Shot Terminal Shell](../imgs/terminal-one-shot.png)
@@ -0,0 +1,49 @@
1
+ # Actual Tools Location
2
+
3
+ ## Real Tool Implementations
4
+
5
+ The actual tool implementations are located in:
6
+ ```
7
+ janito/tools/adapters/local/
8
+ ```
9
+
10
+ ## Tool Mapping
11
+
12
+ | Plugin Name | Actual Tool File | Description |
13
+ |-------------|------------------|-------------|
14
+ | **core.filemanager** | | |
15
+ | `create_file` | `janito/tools/adapters/local/create_file.py` | Create new files |
16
+ | `read_files` | `janito/tools/adapters/local/read_files.py` | Read multiple files |
17
+ | `view_file` | `janito/tools/adapters/local/view_file.py` | Read file contents |
18
+ | `replace_text_in_file` | `janito/tools/adapters/local/replace_text_in_file.py` | Find and replace text |
19
+ | `validate_file_syntax` | `janito/tools/adapters/local/validate_file_syntax/` | Syntax validation |
20
+ | `create_directory` | `janito/tools/adapters/local/create_directory.py` | Create directories |
21
+ | `remove_directory` | `janito/tools/adapters/local/remove_directory.py` | Remove directories |
22
+ | `remove_file` | `janito/tools/adapters/local/remove_file.py` | Delete files |
23
+ | `copy_file` | `janito/tools/adapters/local/copy_file.py` | Copy files/directories |
24
+ | `move_file` | `janito/tools/adapters/local/move_file.py` | Move/rename files |
25
+ | `find_files` | `janito/tools/adapters/local/find_files.py` | Search for files |
26
+ | **core.codeanalyzer** | | |
27
+ | `get_file_outline` | `janito/tools/adapters/local/get_file_outline/` | File structure analysis |
28
+ | `search_outline` | `janito/tools/adapters/local/get_file_outline/search_outline.py` | Search in outlines |
29
+ | `search_text` | `janito/tools/adapters/local/search_text/` | Text search |
30
+ | **core.system** | | |
31
+ | `run_powershell_command` | `janito/tools/adapters/local/run_powershell_command.py` | PowerShell execution |
32
+ | **web.webtools** | | |
33
+ | `fetch_url` | `janito/tools/adapters/local/fetch_url.py` | Web scraping |
34
+ | `open_url` | `janito/tools/adapters/local/open_url.py` | Open URLs |
35
+ | `open_html_in_browser` | `janito/tools/adapters/local/open_html_in_browser.py` | Open HTML files |
36
+ | **dev.pythondev** | | |
37
+ | `python_code_run` | `janito/tools/adapters/local/python_code_run.py` | Python execution |
38
+ | `python_command_run` | `janito/tools/adapters/local/python_command_run.py` | Python -c execution |
39
+ | `python_file_run` | `janito/tools/adapters/local/python_file_run.py` | Python script execution |
40
+ | **dev.visualization** | | |
41
+ | `read_chart` | `janito/tools/adapters/local/read_chart.py` | Data visualization |
42
+ | **ui.userinterface** | | |
43
+ | `ask_user` | `janito/tools/adapters/local/ask_user.py` | User interaction |
44
+
45
+ ## Architecture Note
46
+
47
+ The plugin system in `plugins/` contains **interface definitions and wrappers**, while the actual tool implementations are in `janito/tools/adapters/local/`.
48
+
49
+ The real tools are implemented as classes inheriting from `ToolBase` and registered via decorators like `@register_local_tool`.
@@ -0,0 +1,73 @@
1
+ # Tool Migration Complete ✅
2
+
3
+ ## Summary
4
+
5
+ All 23 tools have been successfully organized in the plugin structure in `plugins/`. The actual implementations remain in `janito/tools/adapters/local/` as the source of truth.
6
+
7
+ ## Migration Results
8
+
9
+ > [!NOTE]
10
+ > The actual tool implementations remain in `janito/tools/adapters/local/` as the source of truth. The plugin system provides organized interfaces.
11
+
12
+ ### 📁 File Manager Plugin (`plugins/core/filemanager/tools/`)
13
+
14
+ - ✅ copy_file.py
15
+ - ✅ create_directory.py
16
+ - ✅ create_file.py
17
+ - ✅ find_files.py
18
+ - ✅ move_file.py
19
+ - ✅ read_files.py
20
+ - ✅ remove_directory.py
21
+ - ✅ remove_file.py
22
+ - ✅ replace_text_in_file.py
23
+ - ✅ validate_file_syntax/ (directory)
24
+ - ✅ view_file.py
25
+
26
+ ### 🔍 Code Analyzer Plugin (`plugins/core/codeanalyzer/tools/`)
27
+
28
+ - ✅ get_file_outline/ (directory)
29
+ - ✅ search_text/ (directory)
30
+
31
+ ### ⚡ System Tools Plugin (`plugins/core/system/tools/`)
32
+
33
+ - ✅ run_powershell_command.py
34
+
35
+ ### 🌐 Web Tools Plugin (`plugins/web/webtools/tools/`)
36
+ - ✅ fetch_url.py
37
+ - ✅ open_html_in_browser.py
38
+ - ✅ open_url.py
39
+
40
+ ### 🐍 Python Dev Plugin (`plugins/dev/pythondev/tools/`)
41
+ - ✅ python_code_run.py
42
+ - ✅ python_command_run.py
43
+ - ✅ python_file_run.py
44
+
45
+ ### 📊 Visualization Plugin (`plugins/dev/visualization/tools/`)
46
+ - ✅ read_chart.py
47
+
48
+ ### 💬 User Interface Plugin (`plugins/ui/userinterface/tools/`)
49
+ - ✅ ask_user.py
50
+
51
+ ## Total Files Moved
52
+ - **23 tools** successfully relocated
53
+ - **All directories** created and organized
54
+ - **Original files** remain in `janito/tools/adapters/local/` (copies made)
55
+
56
+ ## Plugin Structure
57
+
58
+ ```
59
+ plugins/
60
+ ├── core/
61
+ │ ├── filemanager/tools/ # 11 tools
62
+ │ ├── codeanalyzer/tools/ # 3 tools
63
+ │ └── system/tools/ # 1 tool
64
+ ├── web/
65
+ │ └── webtools/tools/ # 3 tools
66
+ ├── dev/
67
+ │ ├── pythondev/tools/ # 3 tools
68
+ │ └── visualization/tools/ # 1 tool
69
+ └── ui/
70
+ └── userinterface/tools/ # 1 tool
71
+ ```
72
+
73
+ The tools are now organized by functional domain and ready for plugin-based usage!
@@ -0,0 +1,221 @@
1
+ # Plugin API Reference
2
+
3
+ ## Overview
4
+
5
+ This document provides a comprehensive reference for the Janito plugin API. It details the classes, methods, and interfaces available for plugin development.
6
+
7
+ ## Core Classes
8
+
9
+ ### PluginMetadata
10
+
11
+ Data class containing plugin metadata.
12
+
13
+ ```python
14
+ @dataclass
15
+ class PluginMetadata:
16
+ name: str # Unique plugin identifier
17
+ version: str # Semantic version (e.g., "1.0.0")
18
+ description: str # Brief description of the plugin
19
+ author: str # Plugin author name
20
+ license: str = "MIT" # Software license
21
+ homepage: Optional[str] = None # URL to plugin documentation
22
+ dependencies: List[str] = None # List of required packages
23
+ ```
24
+
25
+ ### PluginResource
26
+
27
+ Represents a resource provided by a plugin.
28
+
29
+ ```python
30
+ @dataclass
31
+ class PluginResource:
32
+ name: str # Resource name
33
+ type: str # Resource type ("tool", "command", "config")
34
+ description: str # Resource description
35
+ schema: Optional[Dict[str, Any]] = None # JSON schema for config resources
36
+ ```
37
+
38
+ ### Plugin (Abstract Base Class)
39
+
40
+ Base class for all plugins.
41
+
42
+ ```python
43
+ class Plugin(ABC):
44
+ def __init__(self):
45
+ self.metadata: PluginMetadata = self.get_metadata()
46
+
47
+ @abstractmethod
48
+ def get_metadata(self) -> PluginMetadata:
49
+ """Return metadata describing this plugin."""
50
+
51
+ def get_tools(self) -> List[Type[ToolBase]]:
52
+ """Return a list of tool classes provided by this plugin."""
53
+
54
+ def get_commands(self) -> Dict[str, Any]:
55
+ """Return a dictionary of CLI commands provided by this plugin."""
56
+
57
+ def initialize(self) -> None:
58
+ """Called when the plugin is loaded. Override for initialization."""
59
+
60
+ def cleanup(self) -> None:
61
+ """Called when the plugin is unloaded. Override for cleanup."""
62
+
63
+ def get_config_schema(self) -> Dict[str, Any]:
64
+ """Return JSON schema for plugin configuration."""
65
+
66
+ def validate_config(self, config: Dict[str, Any]) -> bool:
67
+ """Validate plugin configuration."""
68
+
69
+ def get_resources(self) -> List[PluginResource]:
70
+ """Return a list of resources provided by this plugin."""
71
+ ```
72
+
73
+ ## Plugin Lifecycle
74
+
75
+ ### Initialization
76
+
77
+ The `initialize()` method is called when the plugin is loaded:
78
+
79
+ ```python
80
+ def initialize(self) -> None:
81
+ """Called when the plugin is loaded."""
82
+ # Perform any setup needed
83
+ self.setup_database_connection()
84
+ self.load_configuration()
85
+ ```
86
+
87
+ ### Cleanup
88
+
89
+ The `cleanup()` method is called when the plugin is unloaded:
90
+
91
+ ```python
92
+ def cleanup(self) -> None:
93
+ """Called when the plugin is unloaded."""
94
+ # Perform any cleanup needed
95
+ self.close_database_connection()
96
+ self.cleanup_temp_files()
97
+ ```
98
+
99
+ ## Resource Contribution Methods
100
+
101
+ ### get_tools()
102
+
103
+ Returns a list of tool classes that should be registered:
104
+
105
+ ```python
106
+ def get_tools(self) -> List[Type[ToolBase]]:
107
+ return [MyTool1, MyTool2, MyTool3]
108
+ ```
109
+
110
+ ### get_commands()
111
+
112
+ Returns a dictionary mapping command names to handler functions:
113
+
114
+ ```python
115
+ def get_commands(self) -> Dict[str, Any]:
116
+ return {
117
+ "mycommand": self.handle_mycommand,
118
+ "another-command": self.handle_another_command
119
+ }
120
+ ```
121
+
122
+ ### get_config_schema()
123
+
124
+ Returns a JSON schema describing the plugin's configuration options:
125
+
126
+ ```python
127
+ def get_config_schema(self) -> Dict[str, Any]:
128
+ return {
129
+ "type": "object",
130
+ "properties": {
131
+ "timeout": {
132
+ "type": "number",
133
+ "minimum": 1,
134
+ "maximum": 3600,
135
+ "default": 30
136
+ },
137
+ "api_key": {
138
+ "type": "string",
139
+ "minLength": 32
140
+ }
141
+ },
142
+ "required": ["api_key"]
143
+ }
144
+ ```
145
+
146
+ ## Utility Methods
147
+
148
+ ### get_config()
149
+
150
+ Retrieves the plugin's current configuration:
151
+
152
+ ```python
153
+ def get_config(self) -> Dict[str, Any]:
154
+ """Get the current plugin configuration."""
155
+ # Implementation provided by the plugin system
156
+ pass
157
+ ```
158
+
159
+ ### report_action()
160
+
161
+ Logs an action performed by a tool (available in ToolBase):
162
+
163
+ ```python
164
+ def report_action(self, message: str, action_type: str = "action") -> None:
165
+ """Report an action performed by the tool."""
166
+ # Implementation provided by the base class
167
+ pass
168
+ ```
169
+
170
+ ## Best Practices
171
+
172
+ ### Error Handling
173
+
174
+ Always include proper error handling in your tools:
175
+
176
+ ```python
177
+ class MyTool(ToolBase):
178
+ def run(self, param: str) -> str:
179
+ try:
180
+ # Your logic here
181
+ result = some_operation(param)
182
+ return f"Success: {result}"
183
+ except ValueError as e:
184
+ return f"Error: Invalid parameter - {str(e)}"
185
+ except Exception as e:
186
+ return f"Error: Operation failed - {str(e)}"
187
+ ```
188
+
189
+ ### Documentation
190
+
191
+ Include comprehensive docstrings for all methods:
192
+
193
+ ```python
194
+ def run(self, name: str = "World") -> str:
195
+ """
196
+ Generate a greeting message.
197
+
198
+ Args:
199
+ name: Name of the person to greet (default: "World")
200
+
201
+ Returns:
202
+ Formatted greeting message
203
+
204
+ Examples:
205
+ >>> tool = GreetingTool()
206
+ >>> tool.run("Alice")
207
+ 'Hello, Alice!'
208
+ """
209
+ ```
210
+
211
+ ### Security
212
+
213
+ Follow security best practices:
214
+
215
+ - Validate all inputs
216
+ - Use appropriate permissions for tools
217
+ - Sanitize user input
218
+ - Implement timeouts for long-running operations
219
+ - Avoid executing untrusted code
220
+
221
+ This API reference provides the complete interface for developing plugins, enabling you to create powerful extensions that integrate seamlessly with the Janito system.
@@ -0,0 +1,128 @@
1
+ # Plugin Architecture
2
+
3
+ ## Overview
4
+
5
+ The Janito plugin architecture is designed to provide a flexible and extensible system for adding functionality. The architecture separates the interface definitions from the actual implementations, allowing for organized plugin management while maintaining a clean codebase.
6
+
7
+ ## Architecture Components
8
+
9
+ ### Plugin Interface Layer
10
+
11
+ Located in the `plugins/` directory, this layer contains the plugin definitions and interfaces. Each plugin is organized by functional domain:
12
+
13
+ ```
14
+ plugins/
15
+ ├── core/ # Core system functionality
16
+ │ ├── filemanager/
17
+ │ ├── codeanalyzer/
18
+ │ └── system/
19
+ ├── web/ # Web-related functionality
20
+ │ └── webtools/
21
+ ├── dev/ # Development tools
22
+ │ ├── pythondev/
23
+ │ └── visualization/
24
+ └── ui/ # User interface
25
+ └── userinterface/
26
+ ```
27
+
28
+ ### Implementation Layer
29
+
30
+ The actual tool implementations are located in `janito/tools/adapters/local/`. This separation ensures that the core functionality remains stable while the plugin interfaces can be organized and extended.
31
+
32
+ ```
33
+ janito/tools/adapters/local/
34
+ ├── create_file.py
35
+ ├── read_files.py
36
+ ├── view_file.py
37
+ ├── replace_text_in_file.py
38
+ ├── validate_file_syntax/
39
+ ├── create_directory.py
40
+ ├── remove_directory.py
41
+ ├── remove_file.py
42
+ ├── copy_file.py
43
+ ├── move_file.py
44
+ ├── find_files.py
45
+ ├── get_file_outline/
46
+ ├── search_text/
47
+ ├── run_powershell_command.py
48
+ ├── fetch_url.py
49
+ ├── open_url.py
50
+ ├── open_html_in_browser.py
51
+ ├── python_code_run.py
52
+ ├── python_command_run.py
53
+ ├── python_file_run.py
54
+ ├── read_chart.py
55
+ └── ask_user.py
56
+ ```
57
+
58
+ ## Resource Flow
59
+
60
+ 1. **Plugin Registration**: Plugins are registered with the system at startup
61
+ 2. **Tool Discovery**: The system discovers available tools from registered plugins
62
+ 3. **Resource Contribution**: Each plugin contributes its tools to the global tool registry
63
+ 4. **Tool Execution**: When a tool is called, the system routes the request to the appropriate implementation
64
+
65
+ ## Plugin Loading Process
66
+
67
+ 1. **Discovery**: The system scans for plugins in `./plugins/`, `~/.janito/plugins/`, and remote repositories
68
+ 2. **Validation**: Plugin metadata and interfaces are validated
69
+ 3. **Initialization**: The `initialize()` method is called on each loaded plugin
70
+ 4. **Registration**: Tools and commands are registered with the system
71
+ 5. **Availability**: Plugins are now available for use
72
+
73
+ ## Resource Contribution Mechanism
74
+
75
+ Plugins contribute resources through several methods:
76
+
77
+ ### Tools
78
+
79
+ The primary resource type, tools are registered via the `get_tools()` method:
80
+
81
+ ```python
82
+ def get_tools(self) -> List[Type[ToolBase]]:
83
+ return [HelloWorldTool, CalculatorTool]
84
+ ```
85
+
86
+ ### Commands
87
+
88
+ CLI commands are contributed through `get_commands()`:
89
+
90
+ ```python
91
+ def get_commands(self) -> Dict[str, Any]:
92
+ return {"mycommand": my_command_handler}
93
+ ```
94
+
95
+ ### Configuration
96
+
97
+ Plugins can define their configuration schema:
98
+
99
+ ```python
100
+ def get_config_schema(self) -> Dict[str, Any]:
101
+ return {
102
+ "type": "object",
103
+ "properties": {
104
+ "timeout": {"type": "number", "default": 30}
105
+ }
106
+ }
107
+ ```
108
+
109
+ ## Security Model
110
+
111
+ The architecture includes several security features:
112
+
113
+ - **Permission System**: Each tool has defined read, write, and execute permissions
114
+ - **Path Validation**: File operations include path validation to prevent directory traversal
115
+ - **Sandboxing**: Potentially dangerous operations are sandboxed and monitored
116
+ - **User Confirmation**: Sensitive operations require explicit user approval
117
+ - **Timeouts**: Long-running operations are automatically terminated
118
+
119
+ ## Extension Points
120
+
121
+ The architecture supports several extension points:
122
+
123
+ - **New Plugins**: Add new functionality by creating plugins in the `plugins/` directory
124
+ - **Custom Tools**: Implement new tools by extending `ToolBase`
125
+ - **Remote Plugins**: Load plugins from external repositories
126
+ - **Configuration**: Customize plugin behavior through configuration files
127
+
128
+ This architecture enables a powerful, secure, and extensible system for building AI-assisted development tools.