janito 3.14.1__tar.gz → 3.15.0__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 (501) hide show
  1. {janito-3.14.1/janito.egg-info → janito-3.15.0}/PKG-INFO +9 -32
  2. janito-3.15.0/README.md +26 -0
  3. {janito-3.14.1 → janito-3.15.0}/docs/deepseek-setup.md +62 -69
  4. janito-3.15.0/docs/guides/releasing.md +87 -0
  5. {janito-3.14.1 → janito-3.15.0}/docs/guides/terminal-shell.md +1 -1
  6. {janito-3.14.1 → janito-3.15.0}/docs/index.md +1 -0
  7. {janito-3.14.1 → janito-3.15.0}/docs/models/supported_models.md +2 -5
  8. {janito-3.14.1 → janito-3.15.0}/docs/supported-providers-models.md +2 -5
  9. {janito-3.14.1 → janito-3.15.0}/examples/loop_protection_tool_example.py +145 -147
  10. {janito-3.14.1 → janito-3.15.0}/janito/platform_discovery.py +1 -8
  11. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/adapter.py +3 -2
  12. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/ask_user.py +111 -112
  13. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/copy_file.py +86 -87
  14. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/create_directory.py +111 -112
  15. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/create_file.py +0 -1
  16. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/delete_text_in_file.py +133 -134
  17. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/fetch_url.py +465 -466
  18. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/find_files.py +142 -143
  19. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/markdown_view.py +0 -1
  20. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/move_file.py +130 -131
  21. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/open_html_in_browser.py +50 -51
  22. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/open_url.py +36 -37
  23. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/python_code_run.py +171 -172
  24. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/python_command_run.py +170 -171
  25. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/python_file_run.py +171 -172
  26. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/read_chart.py +258 -259
  27. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/read_files.py +57 -58
  28. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/remove_directory.py +54 -55
  29. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/remove_file.py +57 -58
  30. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/replace_text_in_file.py +275 -276
  31. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/run_bash_command.py +182 -183
  32. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/run_powershell_command.py +217 -218
  33. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/show_image.py +0 -1
  34. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/show_image_grid.py +0 -1
  35. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/view_file.py +0 -1
  36. {janito-3.14.1 → janito-3.15.0}/janito/providers/alibaba/provider.py +1 -1
  37. janito-3.15.0/janito/providers/deepseek/model_info.py +16 -0
  38. {janito-3.14.1 → janito-3.15.0}/janito/providers/deepseek/provider.py +4 -3
  39. janito-3.15.0/janito/tools/base.py +19 -0
  40. {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_base.py +122 -121
  41. {janito-3.14.1 → janito-3.15.0}/janito/tools/tools_schema.py +104 -104
  42. {janito-3.14.1 → janito-3.15.0/janito.egg-info}/PKG-INFO +9 -32
  43. {janito-3.14.1 → janito-3.15.0}/janito.egg-info/SOURCES.txt +1 -0
  44. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/copy_file.py +86 -87
  45. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/create_file.py +86 -87
  46. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/delete_text_in_file.py +133 -134
  47. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/find_files.py +142 -143
  48. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/move_file.py +130 -131
  49. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/read_files.py +57 -58
  50. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/remove_directory.py +54 -55
  51. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/remove_file.py +57 -58
  52. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/replace_text_in_file.py +269 -270
  53. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/view_file.py +171 -172
  54. {janito-3.14.1 → janito-3.15.0}/plugins/core/system/tools/run_bash_command.py +182 -183
  55. {janito-3.14.1 → janito-3.15.0}/plugins/core/system/tools/run_powershell_command.py +217 -218
  56. {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/tools/python_code_run.py +171 -172
  57. {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/tools/python_command_run.py +170 -171
  58. {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/tools/python_file_run.py +171 -172
  59. {janito-3.14.1 → janito-3.15.0}/plugins/dev/visualization/tools/read_chart.py +258 -259
  60. {janito-3.14.1 → janito-3.15.0}/plugins/ui/userinterface/tools/ask_user.py +109 -110
  61. {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/tools/fetch_url.py +0 -1
  62. {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/tools/open_html_in_browser.py +50 -51
  63. {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/tools/open_url.py +36 -37
  64. {janito-3.14.1 → janito-3.15.0}/tools/release.py +246 -187
  65. janito-3.14.1/README.md +0 -49
  66. janito-3.14.1/janito/providers/deepseek/model_info.py +0 -37
  67. janito-3.14.1/janito/tools/base.py +0 -12
  68. {janito-3.14.1 → janito-3.15.0}/.codespellrc +0 -0
  69. {janito-3.14.1 → janito-3.15.0}/.gitattributes +0 -0
  70. {janito-3.14.1 → janito-3.15.0}/.github/workflows/python-app.yml.disabled +0 -0
  71. {janito-3.14.1 → janito-3.15.0}/.gitignore +0 -0
  72. {janito-3.14.1 → janito-3.15.0}/.pre-commit-config.yaml +0 -0
  73. {janito-3.14.1 → janito-3.15.0}/.secrets.baseline +0 -0
  74. {janito-3.14.1 → janito-3.15.0}/.vscode/settings.json +0 -0
  75. {janito-3.14.1 → janito-3.15.0}/LICENSE +0 -0
  76. {janito-3.14.1 → janito-3.15.0}/MARKET_ANALYST_README.md +0 -0
  77. {janito-3.14.1 → janito-3.15.0}/README-dev.md +0 -0
  78. {janito-3.14.1 → janito-3.15.0}/RELEASE_COMPARISON.md +0 -0
  79. {janito-3.14.1 → janito-3.15.0}/UPDATING_DOCS.md +0 -0
  80. {janito-3.14.1 → janito-3.15.0}/adding_mcp.txt +0 -0
  81. {janito-3.14.1 → janito-3.15.0}/alibaba-qwen3.md +0 -0
  82. {janito-3.14.1 → janito-3.15.0}/cow.txt +0 -0
  83. {janito-3.14.1 → janito-3.15.0}/detailed_cow.txt +0 -0
  84. {janito-3.14.1 → janito-3.15.0}/docs/CHANGELOG.md +0 -0
  85. {janito-3.14.1 → janito-3.15.0}/docs/DIV.md +0 -0
  86. {janito-3.14.1 → janito-3.15.0}/docs/Interfaces.txt +0 -0
  87. {janito-3.14.1 → janito-3.15.0}/docs/PROFILES.md +0 -0
  88. {janito-3.14.1 → janito-3.15.0}/docs/README.md +0 -0
  89. {janito-3.14.1 → janito-3.15.0}/docs/TOOLBAR-STYLING.md +0 -0
  90. {janito-3.14.1 → janito-3.15.0}/docs/about/costs.md +0 -0
  91. {janito-3.14.1 → janito-3.15.0}/docs/about/vs-webchats.md +0 -0
  92. {janito-3.14.1 → janito-3.15.0}/docs/about/why.md +0 -0
  93. {janito-3.14.1 → janito-3.15.0}/docs/agent/agent-lifecycle.md +0 -0
  94. {janito-3.14.1 → janito-3.15.0}/docs/agent/tools-workflow-lifecycle.md +0 -0
  95. {janito-3.14.1 → janito-3.15.0}/docs/alibaba-setup.md +0 -0
  96. {janito-3.14.1 → janito-3.15.0}/docs/alternatives.md +0 -0
  97. {janito-3.14.1 → janito-3.15.0}/docs/anthropic-setup.md +0 -0
  98. {janito-3.14.1 → janito-3.15.0}/docs/cerebras-setup.md +0 -0
  99. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG.md +0 -0
  100. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  101. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  102. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  103. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  104. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  105. {janito-3.14.1 → janito-3.15.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  106. {janito-3.14.1 → janito-3.15.0}/docs/cli.md +0 -0
  107. {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  108. {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  109. {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  110. {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/our-approach.md +0 -0
  111. {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  112. {janito-3.14.1 → janito-3.15.0}/docs/concepts/analysis-style.md +0 -0
  113. {janito-3.14.1 → janito-3.15.0}/docs/concepts/human-guided-ai.md +0 -0
  114. {janito-3.14.1 → janito-3.15.0}/docs/concepts/index.md +0 -0
  115. {janito-3.14.1 → janito-3.15.0}/docs/concepts/language-model-clients.md +0 -0
  116. {janito-3.14.1 → janito-3.15.0}/docs/concepts/prompt-design-style.md +0 -0
  117. {janito-3.14.1 → janito-3.15.0}/docs/configuration.md +0 -0
  118. {janito-3.14.1 → janito-3.15.0}/docs/driver-flow.md +0 -0
  119. {janito-3.14.1 → janito-3.15.0}/docs/driver-request-cancellation.md +0 -0
  120. {janito-3.14.1 → janito-3.15.0}/docs/drivers/events.md +0 -0
  121. {janito-3.14.1 → janito-3.15.0}/docs/drivers.md +0 -0
  122. {janito-3.14.1 → janito-3.15.0}/docs/event-bus.md +0 -0
  123. {janito-3.14.1 → janito-3.15.0}/docs/google-setup.md +0 -0
  124. {janito-3.14.1 → janito-3.15.0}/docs/guides/configuration.md +0 -0
  125. {janito-3.14.1 → janito-3.15.0}/docs/guides/developing.md +0 -0
  126. {janito-3.14.1 → janito-3.15.0}/docs/guides/disabled-tools.md +0 -0
  127. {janito-3.14.1 → janito-3.15.0}/docs/guides/installation.md +0 -0
  128. {janito-3.14.1 → janito-3.15.0}/docs/guides/market-data-sources.md +0 -0
  129. {janito-3.14.1 → janito-3.15.0}/docs/guides/profiles.md +0 -0
  130. {janito-3.14.1 → janito-3.15.0}/docs/guides/prompting/README.md +0 -0
  131. {janito-3.14.1 → janito-3.15.0}/docs/guides/security-commands.md +0 -0
  132. {janito-3.14.1 → janito-3.15.0}/docs/guides/single-shot-terminal.md +0 -0
  133. {janito-3.14.1 → janito-3.15.0}/docs/guides/stock-market-guide.md +0 -0
  134. {janito-3.14.1 → janito-3.15.0}/docs/guides/tools-developer-guide.md +0 -0
  135. {janito-3.14.1 → janito-3.15.0}/docs/guides/url-whitelist.md +0 -0
  136. {janito-3.14.1 → janito-3.15.0}/docs/guides/using.md +0 -0
  137. {janito-3.14.1 → janito-3.15.0}/docs/guides/using_tools.md +0 -0
  138. {janito-3.14.1 → janito-3.15.0}/docs/ibm-setup.md +0 -0
  139. {janito-3.14.1 → janito-3.15.0}/docs/imgs/code-generation-observability.png +0 -0
  140. {janito-3.14.1 → janito-3.15.0}/docs/imgs/code_generation_observability.png +0 -0
  141. {janito-3.14.1 → janito-3.15.0}/docs/imgs/happy-programmer.png +0 -0
  142. {janito-3.14.1 → janito-3.15.0}/docs/imgs/happy-programmer.svg +0 -0
  143. {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal-one-shot.png +0 -0
  144. {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal-shell.png +0 -0
  145. {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal_one_shot.png +0 -0
  146. {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal_shell.png +0 -0
  147. {janito-3.14.1 → janito-3.15.0}/docs/llm-drivers-required-config.md +0 -0
  148. {janito-3.14.1 → janito-3.15.0}/docs/llm-drivers.md +0 -0
  149. {janito-3.14.1 → janito-3.15.0}/docs/meta/developer-toolchain.md +0 -0
  150. {janito-3.14.1 → janito-3.15.0}/docs/meta/quality-checks.txt +0 -0
  151. {janito-3.14.1 → janito-3.15.0}/docs/mistral-setup.md +0 -0
  152. {janito-3.14.1 → janito-3.15.0}/docs/moonshot-setup.md +0 -0
  153. {janito-3.14.1 → janito-3.15.0}/docs/openai-setup.md +0 -0
  154. {janito-3.14.1 → janito-3.15.0}/docs/overrides/partials/copyright.html +0 -0
  155. {janito-3.14.1 → janito-3.15.0}/docs/plugins/README.md +0 -0
  156. {janito-3.14.1 → janito-3.15.0}/docs/plugins/api-reference.md +0 -0
  157. {janito-3.14.1 → janito-3.15.0}/docs/plugins/architecture.md +0 -0
  158. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  159. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
  160. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
  161. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  162. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/system.md +0 -0
  163. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  164. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
  165. {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
  166. {janito-3.14.1 → janito-3.15.0}/docs/plugins/configuration.md +0 -0
  167. {janito-3.14.1 → janito-3.15.0}/docs/plugins/examples/advanced.md +0 -0
  168. {janito-3.14.1 → janito-3.15.0}/docs/plugins/examples/basic.md +0 -0
  169. {janito-3.14.1 → janito-3.15.0}/docs/plugins/examples/intermediate.md +0 -0
  170. {janito-3.14.1 → janito-3.15.0}/docs/plugins/plugin-development.md +0 -0
  171. {janito-3.14.1 → janito-3.15.0}/docs/plugins/plugin-resources.md +0 -0
  172. {janito-3.14.1 → janito-3.15.0}/docs/plugins/publishing.md +0 -0
  173. {janito-3.14.1 → janito-3.15.0}/docs/plugins/remote-plugins.md +0 -0
  174. {janito-3.14.1 → janito-3.15.0}/docs/plugins/testing.md +0 -0
  175. {janito-3.14.1 → janito-3.15.0}/docs/provider-platform-access.md +0 -0
  176. {janito-3.14.1 → janito-3.15.0}/docs/providers.md +0 -0
  177. {janito-3.14.1 → janito-3.15.0}/docs/public-sources.md +0 -0
  178. {janito-3.14.1 → janito-3.15.0}/docs/reference/api.md +0 -0
  179. {janito-3.14.1 → janito-3.15.0}/docs/reference/azure-openai.md +0 -0
  180. {janito-3.14.1 → janito-3.15.0}/docs/reference/cli-options.md +0 -0
  181. {janito-3.14.1 → janito-3.15.0}/docs/reference/message-handler-model.md +0 -0
  182. {janito-3.14.1 → janito-3.15.0}/docs/reference/rich-message-handler.md +0 -0
  183. {janito-3.14.1 → janito-3.15.0}/docs/security.md +0 -0
  184. {janito-3.14.1 → janito-3.15.0}/docs/tools/search-text.md +0 -0
  185. {janito-3.14.1 → janito-3.15.0}/docs/tools/show-image-grid.md +0 -0
  186. {janito-3.14.1 → janito-3.15.0}/docs/tools/show-image.md +0 -0
  187. {janito-3.14.1 → janito-3.15.0}/docs/tools-index.md +0 -0
  188. {janito-3.14.1 → janito-3.15.0}/docs/tools-natural-results.md +0 -0
  189. {janito-3.14.1 → janito-3.15.0}/docs/tools-precision.md +0 -0
  190. {janito-3.14.1 → janito-3.15.0}/docs/tools.md +0 -0
  191. {janito-3.14.1 → janito-3.15.0}/docs/z-ai-setup.md +0 -0
  192. {janito-3.14.1 → janito-3.15.0}/examples/loop_protection_example.py +0 -0
  193. {janito-3.14.1 → janito-3.15.0}/get_nasdaq_top.py +0 -0
  194. {janito-3.14.1 → janito-3.15.0}/ibm-logo.txt +0 -0
  195. {janito-3.14.1 → janito-3.15.0}/janito/README.md +0 -0
  196. {janito-3.14.1 → janito-3.15.0}/janito/__init__.py +0 -0
  197. {janito-3.14.1 → janito-3.15.0}/janito/__main__.py +0 -0
  198. {janito-3.14.1 → janito-3.15.0}/janito/_version.py +0 -0
  199. {janito-3.14.1 → janito-3.15.0}/janito/agent/setup_agent.py +0 -0
  200. {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  201. {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  202. {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  203. {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  204. {janito-3.14.1 → janito-3.15.0}/janito/agent_events.py +0 -0
  205. {janito-3.14.1 → janito-3.15.0}/janito/cli/__init__.py +0 -0
  206. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/bindings.py +0 -0
  207. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  208. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  209. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/script_runner.py +0 -0
  210. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/session.py +0 -0
  211. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  212. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  213. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  214. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  215. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  216. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  217. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  218. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/clear_context.py +0 -0
  219. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  220. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  221. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  222. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  223. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/interactive.py +0 -0
  224. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  225. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  226. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  227. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  228. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  229. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
  230. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  231. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  232. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  233. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  234. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  235. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  236. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  237. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  238. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  239. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  240. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  241. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  242. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  243. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  244. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  245. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  246. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  247. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  248. {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/toolbar.py +0 -0
  249. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
  250. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_config.py +0 -0
  251. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  252. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_models.py +0 -0
  253. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_plugins.py +0 -0
  254. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  255. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_providers.py +0 -0
  256. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  257. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_tools.py +0 -0
  258. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/model_selection.py +0 -0
  259. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/model_utils.py +0 -0
  260. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  261. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  262. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/show_config.py +0 -0
  263. {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  264. {janito-3.14.1 → janito-3.15.0}/janito/cli/config.py +0 -0
  265. {janito-3.14.1 → janito-3.15.0}/janito/cli/console.py +0 -0
  266. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/__init__.py +0 -0
  267. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/event_logger.py +0 -0
  268. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/getters.py +0 -0
  269. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/model_guesser.py +0 -0
  270. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/runner.py +0 -0
  271. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/setters.py +0 -0
  272. {janito-3.14.1 → janito-3.15.0}/janito/cli/core/unsetters.py +0 -0
  273. {janito-3.14.1 → janito-3.15.0}/janito/cli/main.py +0 -0
  274. {janito-3.14.1 → janito-3.15.0}/janito/cli/main_cli.py +0 -0
  275. {janito-3.14.1 → janito-3.15.0}/janito/cli/prompt_core.py +0 -0
  276. {janito-3.14.1 → janito-3.15.0}/janito/cli/prompt_handler.py +0 -0
  277. {janito-3.14.1 → janito-3.15.0}/janito/cli/prompt_setup.py +0 -0
  278. {janito-3.14.1 → janito-3.15.0}/janito/cli/rich_terminal_reporter.py +0 -0
  279. {janito-3.14.1 → janito-3.15.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  280. {janito-3.14.1 → janito-3.15.0}/janito/cli/single_shot_mode/handler.py +0 -0
  281. {janito-3.14.1 → janito-3.15.0}/janito/cli/utils.py +0 -0
  282. {janito-3.14.1 → janito-3.15.0}/janito/cli/verbose_output.py +0 -0
  283. {janito-3.14.1 → janito-3.15.0}/janito/config.py +0 -0
  284. {janito-3.14.1 → janito-3.15.0}/janito/config_manager.py +0 -0
  285. {janito-3.14.1 → janito-3.15.0}/janito/conversation_history.py +0 -0
  286. {janito-3.14.1 → janito-3.15.0}/janito/dir_walk_utils.py +0 -0
  287. {janito-3.14.1 → janito-3.15.0}/janito/docs/GETTING_STARTED.md +0 -0
  288. {janito-3.14.1 → janito-3.15.0}/janito/driver_events.py +0 -0
  289. {janito-3.14.1 → janito-3.15.0}/janito/drivers/azure_openai/driver.py +0 -0
  290. {janito-3.14.1 → janito-3.15.0}/janito/drivers/cerebras/__init__.py +0 -0
  291. {janito-3.14.1 → janito-3.15.0}/janito/drivers/dashscope.bak.zip +0 -0
  292. {janito-3.14.1 → janito-3.15.0}/janito/drivers/openai/README.md +0 -0
  293. {janito-3.14.1 → janito-3.15.0}/janito/drivers/openai/driver.py +0 -0
  294. {janito-3.14.1 → janito-3.15.0}/janito/drivers/openai_responses.bak.zip +0 -0
  295. {janito-3.14.1 → janito-3.15.0}/janito/drivers/zai/__init__.py +0 -0
  296. {janito-3.14.1 → janito-3.15.0}/janito/drivers/zai/driver.py +0 -0
  297. {janito-3.14.1 → janito-3.15.0}/janito/event_bus/__init__.py +0 -0
  298. {janito-3.14.1 → janito-3.15.0}/janito/event_bus/bus.py +0 -0
  299. {janito-3.14.1 → janito-3.15.0}/janito/event_bus/event.py +0 -0
  300. {janito-3.14.1 → janito-3.15.0}/janito/event_bus/handler.py +0 -0
  301. {janito-3.14.1 → janito-3.15.0}/janito/event_bus/queue_bus.py +0 -0
  302. {janito-3.14.1 → janito-3.15.0}/janito/exceptions.py +0 -0
  303. {janito-3.14.1 → janito-3.15.0}/janito/formatting.py +0 -0
  304. {janito-3.14.1 → janito-3.15.0}/janito/formatting_token.py +0 -0
  305. {janito-3.14.1 → janito-3.15.0}/janito/gitignore_utils.py +0 -0
  306. {janito-3.14.1 → janito-3.15.0}/janito/hello.txt +0 -0
  307. {janito-3.14.1 → janito-3.15.0}/janito/i18n/__init__.py +0 -0
  308. {janito-3.14.1 → janito-3.15.0}/janito/i18n/it.py +0 -0
  309. {janito-3.14.1 → janito-3.15.0}/janito/i18n/messages.py +0 -0
  310. {janito-3.14.1 → janito-3.15.0}/janito/i18n/pt.py +0 -0
  311. {janito-3.14.1 → janito-3.15.0}/janito/llm/README.md +0 -0
  312. {janito-3.14.1 → janito-3.15.0}/janito/llm/__init__.py +0 -0
  313. {janito-3.14.1 → janito-3.15.0}/janito/llm/agent.py +0 -0
  314. {janito-3.14.1 → janito-3.15.0}/janito/llm/auth.py +0 -0
  315. {janito-3.14.1 → janito-3.15.0}/janito/llm/auth_utils.py +0 -0
  316. {janito-3.14.1 → janito-3.15.0}/janito/llm/driver.py +0 -0
  317. {janito-3.14.1 → janito-3.15.0}/janito/llm/driver_config.py +0 -0
  318. {janito-3.14.1 → janito-3.15.0}/janito/llm/driver_config_builder.py +0 -0
  319. {janito-3.14.1 → janito-3.15.0}/janito/llm/driver_input.py +0 -0
  320. {janito-3.14.1 → janito-3.15.0}/janito/llm/message_parts.py +0 -0
  321. {janito-3.14.1 → janito-3.15.0}/janito/llm/model.py +0 -0
  322. {janito-3.14.1 → janito-3.15.0}/janito/llm/provider.py +0 -0
  323. {janito-3.14.1 → janito-3.15.0}/janito/llm/response_cache.py +0 -0
  324. {janito-3.14.1 → janito-3.15.0}/janito/perf_singleton.py +0 -0
  325. {janito-3.14.1 → janito-3.15.0}/janito/performance_collector.py +0 -0
  326. {janito-3.14.1 → janito-3.15.0}/janito/plugins/__init__.py +0 -0
  327. {janito-3.14.1 → janito-3.15.0}/janito/plugins/auto_loader.py +0 -0
  328. {janito-3.14.1 → janito-3.15.0}/janito/plugins/auto_loader_fixed.py +0 -0
  329. {janito-3.14.1 → janito-3.15.0}/janito/plugins/base.py +0 -0
  330. {janito-3.14.1 → janito-3.15.0}/janito/plugins/builtin.py +0 -0
  331. {janito-3.14.1 → janito-3.15.0}/janito/plugins/config.py +0 -0
  332. {janito-3.14.1 → janito-3.15.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  333. {janito-3.14.1 → janito-3.15.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  334. {janito-3.14.1 → janito-3.15.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/txt_validator.py +0 -0
  335. {janito-3.14.1 → janito-3.15.0}/janito/plugins/core_adapter.py +0 -0
  336. {janito-3.14.1 → janito-3.15.0}/janito/plugins/core_loader.py +0 -0
  337. {janito-3.14.1 → janito-3.15.0}/janito/plugins/core_loader_fixed.py +0 -0
  338. {janito-3.14.1 → janito-3.15.0}/janito/plugins/discovery.py +0 -0
  339. {janito-3.14.1 → janito-3.15.0}/janito/plugins/discovery_core.py +0 -0
  340. {janito-3.14.1 → janito-3.15.0}/janito/plugins/manager.py +0 -0
  341. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/__init__.py +0 -0
  342. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/__init__.py +0 -0
  343. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/clear_context.py +0 -0
  344. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/__init__.py +0 -0
  345. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/core.py +0 -0
  346. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/java_outline.py +0 -0
  347. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/markdown_outline.py +0 -0
  348. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/python_outline.py +0 -0
  349. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/search_outline.py +0 -0
  350. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/__init__.py +0 -0
  351. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/core.py +0 -0
  352. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/match_lines.py +0 -0
  353. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/pattern_utils.py +0 -0
  354. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/traverse_directory.py +0 -0
  355. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/__init__.py +0 -0
  356. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/core.py +0 -0
  357. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/css_validator.py +0 -0
  358. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/html_validator.py +0 -0
  359. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/jinja2_validator.py +0 -0
  360. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/js_validator.py +0 -0
  361. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/json_validator.py +0 -0
  362. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/markdown_validator.py +0 -0
  363. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/ps1_validator.py +0 -0
  364. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/python_validator.py +0 -0
  365. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/txt_validator.py +0 -0
  366. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/xml_validator.py +0 -0
  367. {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/yaml_validator.py +0 -0
  368. {janito-3.14.1 → janito-3.15.0}/janito/provider_config.py +0 -0
  369. {janito-3.14.1 → janito-3.15.0}/janito/provider_registry.py +0 -0
  370. {janito-3.14.1 → janito-3.15.0}/janito/providers/__init__.py +0 -0
  371. {janito-3.14.1 → janito-3.15.0}/janito/providers/alibaba/__init__.py +0 -0
  372. {janito-3.14.1 → janito-3.15.0}/janito/providers/alibaba/model_info.py +0 -0
  373. {janito-3.14.1 → janito-3.15.0}/janito/providers/anthropic/model_info.py +0 -0
  374. {janito-3.14.1 → janito-3.15.0}/janito/providers/anthropic/provider.py +0 -0
  375. {janito-3.14.1 → janito-3.15.0}/janito/providers/azure_openai/model_info.py +0 -0
  376. {janito-3.14.1 → janito-3.15.0}/janito/providers/azure_openai/provider.py +0 -0
  377. {janito-3.14.1 → janito-3.15.0}/janito/providers/cerebras/__init__.py +0 -0
  378. {janito-3.14.1 → janito-3.15.0}/janito/providers/cerebras/model_info.py +0 -0
  379. {janito-3.14.1 → janito-3.15.0}/janito/providers/cerebras/provider.py +0 -0
  380. {janito-3.14.1 → janito-3.15.0}/janito/providers/dashscope.bak.zip +0 -0
  381. {janito-3.14.1 → janito-3.15.0}/janito/providers/deepseek/__init__.py +0 -0
  382. {janito-3.14.1 → janito-3.15.0}/janito/providers/google/__init__.py +0 -0
  383. {janito-3.14.1 → janito-3.15.0}/janito/providers/google/model_info.py +0 -0
  384. {janito-3.14.1 → janito-3.15.0}/janito/providers/google/provider.py +0 -0
  385. {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/README.md +0 -0
  386. {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/__init__.py +0 -0
  387. {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/model_info.py +0 -0
  388. {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/provider.py +0 -0
  389. {janito-3.14.1 → janito-3.15.0}/janito/providers/mistral/__init__.py +0 -0
  390. {janito-3.14.1 → janito-3.15.0}/janito/providers/mistral/model_info.py +0 -0
  391. {janito-3.14.1 → janito-3.15.0}/janito/providers/mistral/provider.py +0 -0
  392. {janito-3.14.1 → janito-3.15.0}/janito/providers/moonshot/__init__.py +0 -0
  393. {janito-3.14.1 → janito-3.15.0}/janito/providers/moonshot/model_info.py +0 -0
  394. {janito-3.14.1 → janito-3.15.0}/janito/providers/moonshot/provider.py +0 -0
  395. {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/__init__.py +0 -0
  396. {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/model_info.py +0 -0
  397. {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/provider.py +0 -0
  398. {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/schema_generator.py +0 -0
  399. {janito-3.14.1 → janito-3.15.0}/janito/providers/registry.py +0 -0
  400. {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/__init__.py +0 -0
  401. {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/model_info.py +0 -0
  402. {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/provider.py +0 -0
  403. {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/schema_generator.py +0 -0
  404. {janito-3.14.1 → janito-3.15.0}/janito/regions/__init__.py +0 -0
  405. {janito-3.14.1 → janito-3.15.0}/janito/regions/cli.py +0 -0
  406. {janito-3.14.1 → janito-3.15.0}/janito/regions/geo_utils.py +0 -0
  407. {janito-3.14.1 → janito-3.15.0}/janito/regions/provider_regions.py +0 -0
  408. {janito-3.14.1 → janito-3.15.0}/janito/report_events.py +0 -0
  409. {janito-3.14.1 → janito-3.15.0}/janito/shell.bak.zip +0 -0
  410. {janito-3.14.1 → janito-3.15.0}/janito/tests/test_tool_adapter_case_insensitive.py +0 -0
  411. {janito-3.14.1 → janito-3.15.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  412. {janito-3.14.1 → janito-3.15.0}/janito/tools/README.md +0 -0
  413. {janito-3.14.1 → janito-3.15.0}/janito/tools/__init__.py +0 -0
  414. {janito-3.14.1 → janito-3.15.0}/janito/tools/disabled_tools.py +0 -0
  415. {janito-3.14.1 → janito-3.15.0}/janito/tools/function_adapter.py +0 -0
  416. {janito-3.14.1 → janito-3.15.0}/janito/tools/inspect_registry.py +0 -0
  417. {janito-3.14.1 → janito-3.15.0}/janito/tools/loop_protection.py +0 -0
  418. {janito-3.14.1 → janito-3.15.0}/janito/tools/loop_protection_decorator.py +0 -0
  419. {janito-3.14.1 → janito-3.15.0}/janito/tools/outline_file.bak.zip +0 -0
  420. {janito-3.14.1 → janito-3.15.0}/janito/tools/path_security.py +0 -0
  421. {janito-3.14.1 → janito-3.15.0}/janito/tools/path_utils.py +0 -0
  422. {janito-3.14.1 → janito-3.15.0}/janito/tools/permissions.py +0 -0
  423. {janito-3.14.1 → janito-3.15.0}/janito/tools/permissions_parse.py +0 -0
  424. {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_events.py +0 -0
  425. {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_run_exception.py +0 -0
  426. {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_use_tracker.py +0 -0
  427. {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_utils.py +0 -0
  428. {janito-3.14.1 → janito-3.15.0}/janito/tools/tools_adapter.py +0 -0
  429. {janito-3.14.1 → janito-3.15.0}/janito/tools/url_whitelist.py +0 -0
  430. {janito-3.14.1 → janito-3.15.0}/janito/utils.py +0 -0
  431. {janito-3.14.1 → janito-3.15.0}/janito.egg-info/dependency_links.txt +0 -0
  432. {janito-3.14.1 → janito-3.15.0}/janito.egg-info/entry_points.txt +0 -0
  433. {janito-3.14.1 → janito-3.15.0}/janito.egg-info/requires.txt +0 -0
  434. {janito-3.14.1 → janito-3.15.0}/janito.egg-info/top_level.txt +0 -0
  435. {janito-3.14.1 → janito-3.15.0}/market_prompt_fix.py +0 -0
  436. {janito-3.14.1 → janito-3.15.0}/mkdocs.log +0 -0
  437. {janito-3.14.1 → janito-3.15.0}/mkdocs.yml +0 -0
  438. {janito-3.14.1 → janito-3.15.0}/mkdocs_hooks.py +0 -0
  439. {janito-3.14.1 → janito-3.15.0}/penguin_ascii.py +0 -0
  440. {janito-3.14.1 → janito-3.15.0}/plugins/__init__.py +0 -0
  441. {janito-3.14.1 → janito-3.15.0}/plugins/core/__init__.py +0 -0
  442. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/__init__.py +0 -0
  443. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  444. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
  445. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  446. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  447. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  448. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  449. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  450. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/core.py +0 -0
  451. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  452. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  453. {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  454. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/__init__.py +0 -0
  455. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  456. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  457. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  458. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  459. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
  460. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  461. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  462. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  463. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  464. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  465. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  466. {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  467. {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/__init__.py +0 -0
  468. {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/plugin.py +0 -0
  469. {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/tools/__init__.py +0 -0
  470. {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/tools/show_image.py +0 -0
  471. {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/tools/show_image_grid.py +0 -0
  472. {janito-3.14.1 → janito-3.15.0}/plugins/core/system/__init__.py +0 -0
  473. {janito-3.14.1 → janito-3.15.0}/plugins/dev/__init__.py +0 -0
  474. {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/__init__.py +0 -0
  475. {janito-3.14.1 → janito-3.15.0}/plugins/dev/visualization/__init__.py +0 -0
  476. {janito-3.14.1 → janito-3.15.0}/plugins/example_plugin.py +0 -0
  477. {janito-3.14.1 → janito-3.15.0}/plugins/ui/__init__.py +0 -0
  478. {janito-3.14.1 → janito-3.15.0}/plugins/ui/userinterface/__init__.py +0 -0
  479. {janito-3.14.1 → janito-3.15.0}/plugins/web/__init__.py +0 -0
  480. {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/__init__.py +0 -0
  481. {janito-3.14.1 → janito-3.15.0}/pyproject.toml +0 -0
  482. {janito-3.14.1 → janito-3.15.0}/requirements-dev.txt +0 -0
  483. {janito-3.14.1 → janito-3.15.0}/requirements.txt +0 -0
  484. {janito-3.14.1 → janito-3.15.0}/setup.cfg +0 -0
  485. {janito-3.14.1 → janito-3.15.0}/tests/local/get_file_outline/test_core_outline.py +0 -0
  486. {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_file/__init__.py +0 -0
  487. {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_file/read_file.py +0 -0
  488. {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_file/test_read_file.py +0 -0
  489. {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_files.py +0 -0
  490. {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_models.py +0 -0
  491. {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_providers.py +0 -0
  492. {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  493. {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_providers_moonshot.py +0 -0
  494. {janito-3.14.1 → janito-3.15.0}/tests/test_cli_version.py +0 -0
  495. {janito-3.14.1 → janito-3.15.0}/tests/test_disabled_tools.py +0 -0
  496. {janito-3.14.1 → janito-3.15.0}/tests/test_plugin_system.py +0 -0
  497. {janito-3.14.1 → janito-3.15.0}/tests/test_provider_alibaba.py +0 -0
  498. {janito-3.14.1 → janito-3.15.0}/tests/test_provider_cerebras.py +0 -0
  499. {janito-3.14.1 → janito-3.15.0}/tests/test_provider_moonshot.py +0 -0
  500. {janito-3.14.1 → janito-3.15.0}/tox.ini +0 -0
  501. {janito-3.14.1 → janito-3.15.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.14.1
3
+ Version: 3.15.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
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
  $ janito --help
41
41
  Usage: janito <command>
42
42
 
43
- Interact with Nine API resources. See https://docs.nineapis.ch for the full API docs.
43
+ A command-line tool for managing your projects.
44
44
 
45
45
  Run "janito <command> --help" for more information on a command.
46
46
  ```
@@ -48,38 +48,15 @@ Run "janito <command> --help" for more information on a command.
48
48
  ## Setup
49
49
 
50
50
  ```bash
51
- # If you have go already installed
52
- go install github.com/ninech/janito@latest
51
+ # Install using pip
52
+ pip install janito
53
53
 
54
- # Homebrew
55
- brew install ninech/taps/janito
56
-
57
- # Debian/Ubuntu
58
- echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
59
- sudo apt-get update
60
- sudo apt-get install janito
61
-
62
- # Fedora/RHEL
63
- cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
64
- [repo.nine.ch]
65
- name=Nine Repo
66
- baseurl=https://repo.nine.ch/yum/
67
- enabled=1
68
- gpgcheck=0
69
- EOF
70
- dnf install janito
71
-
72
- # Arch
73
- # Install yay: https://github.com/Jguer/yay#binary
74
- yay --version
75
- yay -S janito-bin
54
+ # Or install from source
55
+ git clone https://github.com/yourusername/janito.git
56
+ cd janito
57
+ pip install -e .
76
58
  ```
77
59
 
78
- For Windows users, janito is also built for arm64 and amd64. You can download the
79
- latest exe file from the [releases](https://github.com/ninech/janito/releases) and
80
- install it.
81
-
82
60
  ## Getting started
83
61
 
84
- * login to the API using `janito auth login`
85
- * run `janito --help` to get a list of all available commands
62
+ * Run `janito --help` to get a list of all available commands
@@ -0,0 +1,26 @@
1
+ # Janito
2
+
3
+ ```bash
4
+ $ janito --help
5
+ Usage: janito <command>
6
+
7
+ A command-line tool for managing your projects.
8
+
9
+ Run "janito <command> --help" for more information on a command.
10
+ ```
11
+
12
+ ## Setup
13
+
14
+ ```bash
15
+ # Install using pip
16
+ pip install janito
17
+
18
+ # Or install from source
19
+ git clone https://github.com/yourusername/janito.git
20
+ cd janito
21
+ pip install -e .
22
+ ```
23
+
24
+ ## Getting started
25
+
26
+ * Run `janito --help` to get a list of all available commands
@@ -1,69 +1,62 @@
1
- # Configuring Janito for DeepSeek
2
-
3
- Janito supports DeepSeek as an LLM provider. This guide explains how to configure Janito to use DeepSeek models.
4
-
5
- ## 1. Obtain a DeepSeek API Key
6
-
7
- - Sign up or log in at [DeepSeek](https://deepseek.com/) to get your API key.
8
-
9
- ## 2. Set Your DeepSeek API Key in Janito
10
-
11
- You must specify both the API key and the provider name when configuring Janito for DeepSeek:
12
-
13
- ```bash
14
- janito --set-api-key YOUR_DEEPSEEK_API_KEY -p deepseek
15
- ```
16
-
17
- Replace `YOUR_DEEPSEEK_API_KEY` with your actual DeepSeek API key.
18
-
19
- ## 3. Select DeepSeek as the Provider
20
-
21
- You can set DeepSeek as your default provider:
22
-
23
- ```bash
24
- janito --set provider=deepseek
25
- ```
26
-
27
- Or specify it per command:
28
-
29
- ```bash
30
- janito -p deepseek "Your prompt here"
31
- ```
32
-
33
- ## 4. Choose a DeepSeek Model
34
-
35
- Janito supports the following DeepSeek models:
36
-
37
- - `deepseek-chat` (default) - General purpose chat model (8K context)
38
- - `deepseek-reasoner` - Specialized for complex reasoning tasks (8K context)
39
- - `deepseek-v3.1` - Latest V3.1 model with 128K context window
40
- - `deepseek-v3.1-base` - Base V3.1 model with 128K context window
41
- - `deepseek-r1` - R1 model with 128K context window
42
-
43
- To select a model:
44
-
45
- ```bash
46
- janito -p deepseek -m deepseek-reasoner "Your prompt here"
47
-
48
- # Or use the latest models:
49
- janito -p deepseek -m deepseek-v3.1 "Your prompt here"
50
- janito -p deepseek -m deepseek-r1 "Your prompt here"
51
- ```
52
-
53
- ## 5. Verify Your Configuration
54
-
55
- Show your current configuration (the config file path will be shown at the top):
56
-
57
- ```bash
58
- janito --show-config
59
- ```
60
-
61
- ## 6. Troubleshooting
62
-
63
- - Ensure your API key is correct and active.
64
- - If you encounter issues, use `janito --list-providers` to verify DeepSeek is available.
65
- - For more help, see the main [Configuration Guide](guides/configuration.md) or run `janito --help`.
66
-
67
- ---
68
-
69
- For more details on supported models and features, see [Supported Providers & Models](supported-providers-models.md).
1
+ # Configuring Janito for DeepSeek
2
+
3
+ Janito supports DeepSeek as an LLM provider. This guide explains how to configure Janito to use DeepSeek models.
4
+
5
+ ## 1. Obtain a DeepSeek API Key
6
+
7
+ - Sign up or log in at [DeepSeek](https://deepseek.com/) to get your API key.
8
+
9
+ ## 2. Set Your DeepSeek API Key in Janito
10
+
11
+ You must specify both the API key and the provider name when configuring Janito for DeepSeek:
12
+
13
+ ```bash
14
+ janito --set-api-key YOUR_DEEPSEEK_API_KEY -p deepseek
15
+ ```
16
+
17
+ Replace `YOUR_DEEPSEEK_API_KEY` with your actual DeepSeek API key.
18
+
19
+ ## 3. Select DeepSeek as the Provider
20
+
21
+ You can set DeepSeek as your default provider:
22
+
23
+ ```bash
24
+ janito --set provider=deepseek
25
+ ```
26
+
27
+ Or specify it per command:
28
+
29
+ ```bash
30
+ janito -p deepseek "Your prompt here"
31
+ ```
32
+
33
+ ## 4. Choose a DeepSeek Model
34
+
35
+ Janito supports the following DeepSeek models:
36
+
37
+ - `deepseek-chat` (default) - General purpose chat model (128K context)
38
+ - `deepseek-reasoner` - Specialized for complex reasoning tasks (128K context)
39
+
40
+ To select a model:
41
+
42
+ ```bash
43
+ janito -p deepseek -m deepseek-reasoner "Your prompt here"
44
+ ```
45
+
46
+ ## 5. Verify Your Configuration
47
+
48
+ Show your current configuration (the config file path will be shown at the top):
49
+
50
+ ```bash
51
+ janito --show-config
52
+ ```
53
+
54
+ ## 6. Troubleshooting
55
+
56
+ - Ensure your API key is correct and active.
57
+ - If you encounter issues, use `janito --list-providers` to verify DeepSeek is available.
58
+ - For more help, see the main [Configuration Guide](guides/configuration.md) or run `janito --help`.
59
+
60
+ ---
61
+
62
+ For more details on supported models and features, see [Supported Providers & Models](supported-providers-models.md).
@@ -0,0 +1,87 @@
1
+ # Releasing Janito
2
+
3
+ This guide explains the release process for Janito, including how to create new releases and what the automated release script does.
4
+
5
+ ## Prerequisites
6
+
7
+ Before you can create a release, you need to:
8
+
9
+ 1. Set up a GitHub Personal Access Token (PAT):
10
+
11
+ - Go to GitHub Settings → Developer settings → Personal access tokens
12
+ - Generate a new token with `repo` scope
13
+ - Store it securely
14
+
15
+ 2. Set the GITHUB_TOKEN environment variable:
16
+ ```bash
17
+ export GITHUB_TOKEN="your-token-here"
18
+ ```
19
+
20
+ 3. Install required Python packages:
21
+ ```bash
22
+ pip install requests twine build
23
+ ```
24
+
25
+ ## Release Process
26
+
27
+ The release process is automated through the `tools/release.py` script. Here's how it works:
28
+
29
+ ### 1. Create a Git Tag
30
+
31
+ First, create a new git tag following semantic versioning (vX.Y.Z):
32
+
33
+ ```bash
34
+ # Check current latest tag
35
+ git tag -l "v*" --sort=-v:refname | head -n 1
36
+
37
+ # Create new tag (increment patch version)
38
+ git tag vX.Y.Z
39
+
40
+ # Push the tag to remote
41
+ git push origin vX.Y.Z
42
+ ```
43
+
44
+ ### 2. Run the Release Script
45
+
46
+ Execute the release script:
47
+
48
+ ```bash
49
+ python tools/release.py
50
+ ```
51
+
52
+ The script will:
53
+
54
+ - Verify you have the required tools installed
55
+ - Check that there are no uncommitted changes
56
+ - Get the version from the latest git tag
57
+ - Verify the tag points to the current commit
58
+ - Build the package
59
+ - Upload to PyPI
60
+ - Create a GitHub release
61
+
62
+ ### 3. What the GitHub Release Includes
63
+
64
+ The automated GitHub release will:
65
+
66
+ - Use the tag name as the release title
67
+ - Include a basic changelog message linking to CHANGELOG.md
68
+ - Be marked as a production release (not draft or prerelease)
69
+
70
+ ## Build Only Mode
71
+
72
+ If you want to build the package without uploading it, use:
73
+
74
+ ```bash
75
+ python tools/release.py --build-only
76
+ ```
77
+
78
+ This is useful for testing the build process locally.
79
+
80
+ ## Troubleshooting
81
+
82
+ Common issues and solutions:
83
+
84
+ - **GITHUB_TOKEN not set**: Make sure you've exported the environment variable
85
+ - **Tag doesn't point to current commit**: Make sure you're on the correct commit before tagging
86
+ - **Version already exists on PyPI**: Increment the version number in your tag
87
+ - **Uncommitted changes**: Commit or stash your changes before releasing
@@ -10,7 +10,7 @@ Janito works best with modern Unicode-capable terminals. **Windows Terminal is t
10
10
 
11
11
  Janito includes built-in support for executing shell commands across platforms:
12
12
 
13
- - **Bash commands** (`run_bash_command`) - Execute bash shell commands on Linux, macOS, and Windows (via WSL/Git Bash)
13
+ - **Bash commands** (`run_bash_command`) - Execute bash shell commands on Linux, macOS, and Windows (via Git Bash)
14
14
  - **PowerShell commands** (`run_powershell_command`) - Execute PowerShell commands on Windows and cross-platform (requires PowerShell Core)
15
15
 
16
16
  These tools can be enabled/disabled via configuration and provide live output streaming, timeout handling, and security controls.
@@ -59,5 +59,6 @@ Explore our comprehensive documentation:
59
59
  - [Supported Models](models/supported_models.md)
60
60
  - [Tools & Plugins](tools.md)
61
61
  - [Developer Guide](guides/developing.md)
62
+ - [Releasing Guide](guides/releasing.md)
62
63
 
63
64
  > **Note**: The list of supported models is automatically generated from the codebase. When new models are added, this documentation updates automatically.*
@@ -92,11 +92,8 @@ This document lists all supported large language models (LLMs) across providers,
92
92
 
93
93
  | Model Name | Context Window | Max Tokens | Description |
94
94
  |------------|----------------|------------|-------------|
95
- | `deepseek-chat` | 8,192 | 4,096 | DeepSeek Chat Model (OpenAI-compatible) |
96
- | `deepseek-reasoner` | 8,192 | 4,096 | DeepSeek Reasoner Model (OpenAI-compatible) |
97
- | `deepseek-v3.1` | 131,072 | 4,096 | DeepSeek V3.1 Model (128K context, OpenAI-compatible) |
98
- | `deepseek-v3.1-base` | 131,072 | 4,096 | DeepSeek V3.1 Base Model (128K context, OpenAI-compatible) |
99
- | `deepseek-r1` | 131,072 | 4,096 | DeepSeek R1 Model (128K context, OpenAI-compatible) |
95
+ | `deepseek-chat` | 131,072 | 4,096 | DeepSeek Chat Model (OpenAI-compatible) |
96
+ | `deepseek-reasoner` | 131,072 | 32,768 | DeepSeek Reasoner Model (OpenAI-compatible) |
100
97
 
101
98
  ## Moonshot
102
99
 
@@ -41,11 +41,8 @@ This page lists the supported providers and their available models, organized by
41
41
 
42
42
  ### DeepSeek
43
43
 
44
- - **DeepSeek Chat** (default) - General purpose chat model (8K context)
45
- - **DeepSeek Reasoner** - Specialized for complex reasoning tasks (8K context)
46
- - **DeepSeek V3.1** - Latest V3.1 model with 128K context window
47
- - **DeepSeek V3.1 Base** - Base V3.1 model with 128K context window
48
- - **DeepSeek R1** - R1 model with 128K context window (reasoning-focused)
44
+ - **DeepSeek Chat** (default) - General purpose chat model (128K context)
45
+ - **DeepSeek Reasoner** - Specialized for complex reasoning tasks (128K context)
49
46
 
50
47
  ### Mistral
51
48
 
@@ -1,147 +1,145 @@
1
- #!/usr/bin/env python3
2
- """
3
- Example showing how to add loop protection to a custom tool.
4
-
5
- This example demonstrates how to create a custom tool with loop protection
6
- using the @protect_against_loops decorator.
7
- """
8
-
9
- from janito.tools.tool_base import ToolBase, ToolPermissions
10
- from janito.tools.loop_protection_decorator import protect_against_loops
11
- from janito.plugins.tools.local.adapter import register_local_tool
12
-
13
-
14
- @register_local_tool
15
- class CustomFileAnalyzerTool(ToolBase):
16
- """
17
- Example custom tool that analyzes files with loop protection.
18
-
19
- This tool demonstrates how to use the @protect_against_loops decorator
20
- to prevent excessive operations on the same file.
21
- """
22
-
23
- permissions = ToolPermissions(read=True)
24
- tool_name = "custom_file_analyzer"
25
-
26
- @protect_against_loops(max_calls=5, time_window=10.0)
27
- def run(self, path: str, analysis_type: str = "basic") -> str:
28
- """
29
- Analyze a file with the specified analysis type.
30
-
31
- Args:
32
- path (str): Path to the file to analyze
33
- analysis_type (str): Type of analysis to perform ("basic" or "detailed")
34
-
35
- Returns:
36
- str: Analysis results
37
- """
38
- self.report_action(f"Analyzing '{path}' with {analysis_type} analysis")
39
-
40
- try:
41
- # Simulate file analysis
42
- with open(path, "r", encoding="utf-8") as f:
43
- content = f.read()
44
-
45
- # Perform analysis based on type
46
- if analysis_type == "basic":
47
- lines = len(content.splitlines())
48
- words = len(content.split())
49
- chars = len(content)
50
- result = f"Basic analysis of {path}:\n"
51
- result += f" Lines: {lines}\n"
52
- result += f" Words: {words}\n"
53
- result += f" Characters: {chars}\n"
54
- else:
55
- # Detailed analysis could include more metrics
56
- result = f"Detailed analysis of {path}:\n"
57
- result += f" Content preview: {content[:100]}...\n"
58
-
59
- self.report_success(f"Analysis of {path} completed")
60
- return result
61
-
62
- except FileNotFoundError:
63
- self.report_error(f"File not found: {path}")
64
- return f"Error: File '{path}' not found"
65
- except Exception as e:
66
- self.report_error(f"Error analyzing {path}: {e}")
67
- return f"Error analyzing file: {e}"
68
-
69
-
70
- @register_local_tool
71
- class BatchFileProcessorTool(ToolBase):
72
- """
73
- Example tool that processes multiple files with loop protection.
74
-
75
- This tool demonstrates how to use the @protect_against_loops decorator
76
- with tools that operate on multiple files.
77
- """
78
-
79
- permissions = ToolPermissions(read=True)
80
- tool_name = "batch_file_processor"
81
-
82
- @protect_against_loops(max_calls=5, time_window=10.0)
83
- def run(self, file_paths: list, operation: str = "count") -> str:
84
- """
85
- Process multiple files with the specified operation.
86
-
87
- Args:
88
- file_paths (list): List of file paths to process
89
- operation (str): Operation to perform ("count", "uppercase", etc.)
90
-
91
- Returns:
92
- str: Processing results
93
- """
94
- self.report_action(
95
- f"Processing {len(file_paths)} files with {operation} operation"
96
- )
97
-
98
- results = []
99
- for path in file_paths:
100
- try:
101
- with open(path, "r", encoding="utf-8") as f:
102
- content = f.read()
103
-
104
- if operation == "count":
105
- lines = len(content.splitlines())
106
- words = len(content.split())
107
- results.append(f"{path}: {lines} lines, {words} words")
108
- elif operation == "uppercase":
109
- results.append(f"{path}: {content.upper()}")
110
-
111
- except FileNotFoundError:
112
- results.append(f"{path}: File not found")
113
- except Exception as e:
114
- results.append(f"{path}: Error - {e}")
115
-
116
- self.report_success(f"Processed {len(file_paths)} files")
117
- return "\n".join(results)
118
-
119
-
120
- def usage_examples():
121
- """Show how to use the custom tools with loop protection."""
122
- print("=== Custom Tool with Loop Protection Examples ===\n")
123
- print("Example 1: CustomFileAnalyzerTool")
124
- print(" @protect_against_loops()")
125
- print(" def run(self, path: str, analysis_type: str = 'basic') -> str:")
126
- print(" # Implementation here")
127
- print()
128
-
129
- print("Example 2: BatchFileProcessorTool")
130
- print(" @protect_against_loops('file_paths')")
131
- print(" def run(self, file_paths: list, operation: str = 'count') -> str:")
132
- print(" # Implementation here")
133
- print()
134
-
135
- print("To use these tools in your application:")
136
- print("1. Import the tool classes")
137
- print("2. Register them with the tools adapter")
138
- print("3. Call them like any other tool")
139
- print()
140
- print("The loop protection will automatically prevent:")
141
- print("- More than 5 operations on the same file within 10 seconds")
142
- print("- Excessive resource consumption from repeated file access")
143
- print("- Potential infinite loops in tool execution")
144
-
145
-
146
- if __name__ == "__main__":
147
- usage_examples()
1
+ #!/usr/bin/env python3
2
+ """
3
+ Example showing how to add loop protection to a custom tool.
4
+
5
+ This example demonstrates how to create a custom tool with loop protection
6
+ using the @protect_against_loops decorator.
7
+ """
8
+
9
+ from janito.tools.tool_base import ToolBase, ToolPermissions
10
+ from janito.tools.loop_protection_decorator import protect_against_loops
11
+ from janito.plugins.tools.local.adapter import register_local_tool
12
+
13
+
14
+ @register_local_tool
15
+ class CustomFileAnalyzerTool(ToolBase):
16
+ """
17
+ Example custom tool that analyzes files with loop protection.
18
+
19
+ This tool demonstrates how to use the @protect_against_loops decorator
20
+ to prevent excessive operations on the same file.
21
+ """
22
+
23
+ permissions = ToolPermissions(read=True)
24
+
25
+ @protect_against_loops(max_calls=5, time_window=10.0)
26
+ def run(self, path: str, analysis_type: str = "basic") -> str:
27
+ """
28
+ Analyze a file with the specified analysis type.
29
+
30
+ Args:
31
+ path (str): Path to the file to analyze
32
+ analysis_type (str): Type of analysis to perform ("basic" or "detailed")
33
+
34
+ Returns:
35
+ str: Analysis results
36
+ """
37
+ self.report_action(f"Analyzing '{path}' with {analysis_type} analysis")
38
+
39
+ try:
40
+ # Simulate file analysis
41
+ with open(path, "r", encoding="utf-8") as f:
42
+ content = f.read()
43
+
44
+ # Perform analysis based on type
45
+ if analysis_type == "basic":
46
+ lines = len(content.splitlines())
47
+ words = len(content.split())
48
+ chars = len(content)
49
+ result = f"Basic analysis of {path}:\n"
50
+ result += f" Lines: {lines}\n"
51
+ result += f" Words: {words}\n"
52
+ result += f" Characters: {chars}\n"
53
+ else:
54
+ # Detailed analysis could include more metrics
55
+ result = f"Detailed analysis of {path}:\n"
56
+ result += f" Content preview: {content[:100]}...\n"
57
+
58
+ self.report_success(f"Analysis of {path} completed")
59
+ return result
60
+
61
+ except FileNotFoundError:
62
+ self.report_error(f"File not found: {path}")
63
+ return f"Error: File '{path}' not found"
64
+ except Exception as e:
65
+ self.report_error(f"Error analyzing {path}: {e}")
66
+ return f"Error analyzing file: {e}"
67
+
68
+
69
+ @register_local_tool
70
+ class BatchFileProcessorTool(ToolBase):
71
+ """
72
+ Example tool that processes multiple files with loop protection.
73
+
74
+ This tool demonstrates how to use the @protect_against_loops decorator
75
+ with tools that operate on multiple files.
76
+ """
77
+
78
+ permissions = ToolPermissions(read=True)
79
+
80
+ @protect_against_loops(max_calls=5, time_window=10.0)
81
+ def run(self, file_paths: list, operation: str = "count") -> str:
82
+ """
83
+ Process multiple files with the specified operation.
84
+
85
+ Args:
86
+ file_paths (list): List of file paths to process
87
+ operation (str): Operation to perform ("count", "uppercase", etc.)
88
+
89
+ Returns:
90
+ str: Processing results
91
+ """
92
+ self.report_action(
93
+ f"Processing {len(file_paths)} files with {operation} operation"
94
+ )
95
+
96
+ results = []
97
+ for path in file_paths:
98
+ try:
99
+ with open(path, "r", encoding="utf-8") as f:
100
+ content = f.read()
101
+
102
+ if operation == "count":
103
+ lines = len(content.splitlines())
104
+ words = len(content.split())
105
+ results.append(f"{path}: {lines} lines, {words} words")
106
+ elif operation == "uppercase":
107
+ results.append(f"{path}: {content.upper()}")
108
+
109
+ except FileNotFoundError:
110
+ results.append(f"{path}: File not found")
111
+ except Exception as e:
112
+ results.append(f"{path}: Error - {e}")
113
+
114
+ self.report_success(f"Processed {len(file_paths)} files")
115
+ return "\n".join(results)
116
+
117
+
118
+ def usage_examples():
119
+ """Show how to use the custom tools with loop protection."""
120
+ print("=== Custom Tool with Loop Protection Examples ===\n")
121
+ print("Example 1: CustomFileAnalyzerTool")
122
+ print(" @protect_against_loops()")
123
+ print(" def run(self, path: str, analysis_type: str = 'basic') -> str:")
124
+ print(" # Implementation here")
125
+ print()
126
+
127
+ print("Example 2: BatchFileProcessorTool")
128
+ print(" @protect_against_loops('file_paths')")
129
+ print(" def run(self, file_paths: list, operation: str = 'count') -> str:")
130
+ print(" # Implementation here")
131
+ print()
132
+
133
+ print("To use these tools in your application:")
134
+ print("1. Import the tool classes")
135
+ print("2. Register them with the tools adapter")
136
+ print("3. Call them like any other tool")
137
+ print()
138
+ print("The loop protection will automatically prevent:")
139
+ print("- More than 5 operations on the same file within 10 seconds")
140
+ print("- Excessive resource consumption from repeated file access")
141
+ print("- Potential infinite loops in tool execution")
142
+
143
+
144
+ if __name__ == "__main__":
145
+ usage_examples()