janito 3.14.2__tar.gz → 3.15.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 (500) hide show
  1. {janito-3.14.2/janito.egg-info → janito-3.15.1}/PKG-INFO +9 -29
  2. janito-3.15.1/README.md +26 -0
  3. janito-3.15.1/docs/guides/releasing.md +87 -0
  4. {janito-3.14.2 → janito-3.15.1}/docs/guides/terminal-shell.md +1 -1
  5. {janito-3.14.2 → janito-3.15.1}/docs/index.md +1 -0
  6. {janito-3.14.2 → janito-3.15.1}/docs/models/supported_models.md +2 -2
  7. {janito-3.14.2 → janito-3.15.1}/examples/loop_protection_tool_example.py +145 -147
  8. {janito-3.14.2 → janito-3.15.1}/janito/platform_discovery.py +1 -8
  9. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/adapter.py +3 -2
  10. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/ask_user.py +111 -112
  11. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/copy_file.py +86 -87
  12. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/create_directory.py +111 -112
  13. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/create_file.py +0 -1
  14. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/delete_text_in_file.py +133 -134
  15. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/fetch_url.py +465 -466
  16. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/find_files.py +142 -143
  17. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/markdown_view.py +0 -1
  18. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/move_file.py +130 -131
  19. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/open_html_in_browser.py +50 -51
  20. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/open_url.py +36 -37
  21. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/python_code_run.py +171 -172
  22. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/python_command_run.py +170 -171
  23. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/python_file_run.py +171 -172
  24. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/read_chart.py +258 -259
  25. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/read_files.py +57 -58
  26. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/remove_directory.py +54 -55
  27. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/remove_file.py +57 -58
  28. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/replace_text_in_file.py +275 -276
  29. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/run_bash_command.py +182 -183
  30. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/run_powershell_command.py +217 -218
  31. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/show_image.py +0 -1
  32. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/show_image_grid.py +0 -1
  33. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/view_file.py +0 -1
  34. {janito-3.14.2 → janito-3.15.1}/janito/providers/alibaba/model_info.py +2 -2
  35. {janito-3.14.2 → janito-3.15.1}/janito/providers/alibaba/provider.py +1 -1
  36. janito-3.15.1/janito/tools/base.py +19 -0
  37. {janito-3.14.2 → janito-3.15.1}/janito/tools/tool_base.py +122 -121
  38. {janito-3.14.2 → janito-3.15.1}/janito/tools/tools_schema.py +104 -104
  39. {janito-3.14.2 → janito-3.15.1/janito.egg-info}/PKG-INFO +9 -29
  40. {janito-3.14.2 → janito-3.15.1}/janito.egg-info/SOURCES.txt +1 -0
  41. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/copy_file.py +86 -87
  42. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/create_file.py +86 -87
  43. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/delete_text_in_file.py +133 -134
  44. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/find_files.py +142 -143
  45. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/move_file.py +130 -131
  46. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/read_files.py +57 -58
  47. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/remove_directory.py +54 -55
  48. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/remove_file.py +57 -58
  49. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/replace_text_in_file.py +269 -270
  50. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/view_file.py +171 -172
  51. {janito-3.14.2 → janito-3.15.1}/plugins/core/system/tools/run_bash_command.py +182 -183
  52. {janito-3.14.2 → janito-3.15.1}/plugins/core/system/tools/run_powershell_command.py +217 -218
  53. {janito-3.14.2 → janito-3.15.1}/plugins/dev/pythondev/tools/python_code_run.py +171 -172
  54. {janito-3.14.2 → janito-3.15.1}/plugins/dev/pythondev/tools/python_command_run.py +170 -171
  55. {janito-3.14.2 → janito-3.15.1}/plugins/dev/pythondev/tools/python_file_run.py +171 -172
  56. {janito-3.14.2 → janito-3.15.1}/plugins/dev/visualization/tools/read_chart.py +258 -259
  57. {janito-3.14.2 → janito-3.15.1}/plugins/ui/userinterface/tools/ask_user.py +109 -110
  58. {janito-3.14.2 → janito-3.15.1}/plugins/web/webtools/tools/fetch_url.py +0 -1
  59. {janito-3.14.2 → janito-3.15.1}/plugins/web/webtools/tools/open_html_in_browser.py +50 -51
  60. {janito-3.14.2 → janito-3.15.1}/plugins/web/webtools/tools/open_url.py +36 -37
  61. {janito-3.14.2 → janito-3.15.1}/tools/release.py +246 -187
  62. janito-3.14.2/README.md +0 -46
  63. janito-3.14.2/janito/tools/base.py +0 -12
  64. {janito-3.14.2 → janito-3.15.1}/.codespellrc +0 -0
  65. {janito-3.14.2 → janito-3.15.1}/.gitattributes +0 -0
  66. {janito-3.14.2 → janito-3.15.1}/.github/workflows/python-app.yml.disabled +0 -0
  67. {janito-3.14.2 → janito-3.15.1}/.gitignore +0 -0
  68. {janito-3.14.2 → janito-3.15.1}/.pre-commit-config.yaml +0 -0
  69. {janito-3.14.2 → janito-3.15.1}/.secrets.baseline +0 -0
  70. {janito-3.14.2 → janito-3.15.1}/.vscode/settings.json +0 -0
  71. {janito-3.14.2 → janito-3.15.1}/LICENSE +0 -0
  72. {janito-3.14.2 → janito-3.15.1}/MARKET_ANALYST_README.md +0 -0
  73. {janito-3.14.2 → janito-3.15.1}/README-dev.md +0 -0
  74. {janito-3.14.2 → janito-3.15.1}/RELEASE_COMPARISON.md +0 -0
  75. {janito-3.14.2 → janito-3.15.1}/UPDATING_DOCS.md +0 -0
  76. {janito-3.14.2 → janito-3.15.1}/adding_mcp.txt +0 -0
  77. {janito-3.14.2 → janito-3.15.1}/alibaba-qwen3.md +0 -0
  78. {janito-3.14.2 → janito-3.15.1}/cow.txt +0 -0
  79. {janito-3.14.2 → janito-3.15.1}/detailed_cow.txt +0 -0
  80. {janito-3.14.2 → janito-3.15.1}/docs/CHANGELOG.md +0 -0
  81. {janito-3.14.2 → janito-3.15.1}/docs/DIV.md +0 -0
  82. {janito-3.14.2 → janito-3.15.1}/docs/Interfaces.txt +0 -0
  83. {janito-3.14.2 → janito-3.15.1}/docs/PROFILES.md +0 -0
  84. {janito-3.14.2 → janito-3.15.1}/docs/README.md +0 -0
  85. {janito-3.14.2 → janito-3.15.1}/docs/TOOLBAR-STYLING.md +0 -0
  86. {janito-3.14.2 → janito-3.15.1}/docs/about/costs.md +0 -0
  87. {janito-3.14.2 → janito-3.15.1}/docs/about/vs-webchats.md +0 -0
  88. {janito-3.14.2 → janito-3.15.1}/docs/about/why.md +0 -0
  89. {janito-3.14.2 → janito-3.15.1}/docs/agent/agent-lifecycle.md +0 -0
  90. {janito-3.14.2 → janito-3.15.1}/docs/agent/tools-workflow-lifecycle.md +0 -0
  91. {janito-3.14.2 → janito-3.15.1}/docs/alibaba-setup.md +0 -0
  92. {janito-3.14.2 → janito-3.15.1}/docs/alternatives.md +0 -0
  93. {janito-3.14.2 → janito-3.15.1}/docs/anthropic-setup.md +0 -0
  94. {janito-3.14.2 → janito-3.15.1}/docs/cerebras-setup.md +0 -0
  95. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/CHANGELOG.md +0 -0
  96. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  97. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  98. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  99. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  100. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  101. {janito-3.14.2 → janito-3.15.1}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  102. {janito-3.14.2 → janito-3.15.1}/docs/cli.md +0 -0
  103. {janito-3.14.2 → janito-3.15.1}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  104. {janito-3.14.2 → janito-3.15.1}/docs/code_intelligence/code-generation-challenges.md +0 -0
  105. {janito-3.14.2 → janito-3.15.1}/docs/code_intelligence/code-generation-observability.md +0 -0
  106. {janito-3.14.2 → janito-3.15.1}/docs/code_intelligence/our-approach.md +0 -0
  107. {janito-3.14.2 → janito-3.15.1}/docs/code_intelligence/why-string-replacement.md +0 -0
  108. {janito-3.14.2 → janito-3.15.1}/docs/concepts/analysis-style.md +0 -0
  109. {janito-3.14.2 → janito-3.15.1}/docs/concepts/human-guided-ai.md +0 -0
  110. {janito-3.14.2 → janito-3.15.1}/docs/concepts/index.md +0 -0
  111. {janito-3.14.2 → janito-3.15.1}/docs/concepts/language-model-clients.md +0 -0
  112. {janito-3.14.2 → janito-3.15.1}/docs/concepts/prompt-design-style.md +0 -0
  113. {janito-3.14.2 → janito-3.15.1}/docs/configuration.md +0 -0
  114. {janito-3.14.2 → janito-3.15.1}/docs/deepseek-setup.md +0 -0
  115. {janito-3.14.2 → janito-3.15.1}/docs/driver-flow.md +0 -0
  116. {janito-3.14.2 → janito-3.15.1}/docs/driver-request-cancellation.md +0 -0
  117. {janito-3.14.2 → janito-3.15.1}/docs/drivers/events.md +0 -0
  118. {janito-3.14.2 → janito-3.15.1}/docs/drivers.md +0 -0
  119. {janito-3.14.2 → janito-3.15.1}/docs/event-bus.md +0 -0
  120. {janito-3.14.2 → janito-3.15.1}/docs/google-setup.md +0 -0
  121. {janito-3.14.2 → janito-3.15.1}/docs/guides/configuration.md +0 -0
  122. {janito-3.14.2 → janito-3.15.1}/docs/guides/developing.md +0 -0
  123. {janito-3.14.2 → janito-3.15.1}/docs/guides/disabled-tools.md +0 -0
  124. {janito-3.14.2 → janito-3.15.1}/docs/guides/installation.md +0 -0
  125. {janito-3.14.2 → janito-3.15.1}/docs/guides/market-data-sources.md +0 -0
  126. {janito-3.14.2 → janito-3.15.1}/docs/guides/profiles.md +0 -0
  127. {janito-3.14.2 → janito-3.15.1}/docs/guides/prompting/README.md +0 -0
  128. {janito-3.14.2 → janito-3.15.1}/docs/guides/security-commands.md +0 -0
  129. {janito-3.14.2 → janito-3.15.1}/docs/guides/single-shot-terminal.md +0 -0
  130. {janito-3.14.2 → janito-3.15.1}/docs/guides/stock-market-guide.md +0 -0
  131. {janito-3.14.2 → janito-3.15.1}/docs/guides/tools-developer-guide.md +0 -0
  132. {janito-3.14.2 → janito-3.15.1}/docs/guides/url-whitelist.md +0 -0
  133. {janito-3.14.2 → janito-3.15.1}/docs/guides/using.md +0 -0
  134. {janito-3.14.2 → janito-3.15.1}/docs/guides/using_tools.md +0 -0
  135. {janito-3.14.2 → janito-3.15.1}/docs/ibm-setup.md +0 -0
  136. {janito-3.14.2 → janito-3.15.1}/docs/imgs/code-generation-observability.png +0 -0
  137. {janito-3.14.2 → janito-3.15.1}/docs/imgs/code_generation_observability.png +0 -0
  138. {janito-3.14.2 → janito-3.15.1}/docs/imgs/happy-programmer.png +0 -0
  139. {janito-3.14.2 → janito-3.15.1}/docs/imgs/happy-programmer.svg +0 -0
  140. {janito-3.14.2 → janito-3.15.1}/docs/imgs/terminal-one-shot.png +0 -0
  141. {janito-3.14.2 → janito-3.15.1}/docs/imgs/terminal-shell.png +0 -0
  142. {janito-3.14.2 → janito-3.15.1}/docs/imgs/terminal_one_shot.png +0 -0
  143. {janito-3.14.2 → janito-3.15.1}/docs/imgs/terminal_shell.png +0 -0
  144. {janito-3.14.2 → janito-3.15.1}/docs/llm-drivers-required-config.md +0 -0
  145. {janito-3.14.2 → janito-3.15.1}/docs/llm-drivers.md +0 -0
  146. {janito-3.14.2 → janito-3.15.1}/docs/meta/developer-toolchain.md +0 -0
  147. {janito-3.14.2 → janito-3.15.1}/docs/meta/quality-checks.txt +0 -0
  148. {janito-3.14.2 → janito-3.15.1}/docs/mistral-setup.md +0 -0
  149. {janito-3.14.2 → janito-3.15.1}/docs/moonshot-setup.md +0 -0
  150. {janito-3.14.2 → janito-3.15.1}/docs/openai-setup.md +0 -0
  151. {janito-3.14.2 → janito-3.15.1}/docs/overrides/partials/copyright.html +0 -0
  152. {janito-3.14.2 → janito-3.15.1}/docs/plugins/README.md +0 -0
  153. {janito-3.14.2 → janito-3.15.1}/docs/plugins/api-reference.md +0 -0
  154. {janito-3.14.2 → janito-3.15.1}/docs/plugins/architecture.md +0 -0
  155. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  156. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/filemanager.md +0 -0
  157. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
  158. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  159. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/system.md +0 -0
  160. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  161. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/visualization.md +0 -0
  162. {janito-3.14.2 → janito-3.15.1}/docs/plugins/built-in-plugins/webtools.md +0 -0
  163. {janito-3.14.2 → janito-3.15.1}/docs/plugins/configuration.md +0 -0
  164. {janito-3.14.2 → janito-3.15.1}/docs/plugins/examples/advanced.md +0 -0
  165. {janito-3.14.2 → janito-3.15.1}/docs/plugins/examples/basic.md +0 -0
  166. {janito-3.14.2 → janito-3.15.1}/docs/plugins/examples/intermediate.md +0 -0
  167. {janito-3.14.2 → janito-3.15.1}/docs/plugins/plugin-development.md +0 -0
  168. {janito-3.14.2 → janito-3.15.1}/docs/plugins/plugin-resources.md +0 -0
  169. {janito-3.14.2 → janito-3.15.1}/docs/plugins/publishing.md +0 -0
  170. {janito-3.14.2 → janito-3.15.1}/docs/plugins/remote-plugins.md +0 -0
  171. {janito-3.14.2 → janito-3.15.1}/docs/plugins/testing.md +0 -0
  172. {janito-3.14.2 → janito-3.15.1}/docs/provider-platform-access.md +0 -0
  173. {janito-3.14.2 → janito-3.15.1}/docs/providers.md +0 -0
  174. {janito-3.14.2 → janito-3.15.1}/docs/public-sources.md +0 -0
  175. {janito-3.14.2 → janito-3.15.1}/docs/reference/api.md +0 -0
  176. {janito-3.14.2 → janito-3.15.1}/docs/reference/azure-openai.md +0 -0
  177. {janito-3.14.2 → janito-3.15.1}/docs/reference/cli-options.md +0 -0
  178. {janito-3.14.2 → janito-3.15.1}/docs/reference/message-handler-model.md +0 -0
  179. {janito-3.14.2 → janito-3.15.1}/docs/reference/rich-message-handler.md +0 -0
  180. {janito-3.14.2 → janito-3.15.1}/docs/security.md +0 -0
  181. {janito-3.14.2 → janito-3.15.1}/docs/supported-providers-models.md +0 -0
  182. {janito-3.14.2 → janito-3.15.1}/docs/tools/search-text.md +0 -0
  183. {janito-3.14.2 → janito-3.15.1}/docs/tools/show-image-grid.md +0 -0
  184. {janito-3.14.2 → janito-3.15.1}/docs/tools/show-image.md +0 -0
  185. {janito-3.14.2 → janito-3.15.1}/docs/tools-index.md +0 -0
  186. {janito-3.14.2 → janito-3.15.1}/docs/tools-natural-results.md +0 -0
  187. {janito-3.14.2 → janito-3.15.1}/docs/tools-precision.md +0 -0
  188. {janito-3.14.2 → janito-3.15.1}/docs/tools.md +0 -0
  189. {janito-3.14.2 → janito-3.15.1}/docs/z-ai-setup.md +0 -0
  190. {janito-3.14.2 → janito-3.15.1}/examples/loop_protection_example.py +0 -0
  191. {janito-3.14.2 → janito-3.15.1}/get_nasdaq_top.py +0 -0
  192. {janito-3.14.2 → janito-3.15.1}/ibm-logo.txt +0 -0
  193. {janito-3.14.2 → janito-3.15.1}/janito/README.md +0 -0
  194. {janito-3.14.2 → janito-3.15.1}/janito/__init__.py +0 -0
  195. {janito-3.14.2 → janito-3.15.1}/janito/__main__.py +0 -0
  196. {janito-3.14.2 → janito-3.15.1}/janito/_version.py +0 -0
  197. {janito-3.14.2 → janito-3.15.1}/janito/agent/setup_agent.py +0 -0
  198. {janito-3.14.2 → janito-3.15.1}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  199. {janito-3.14.2 → janito-3.15.1}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  200. {janito-3.14.2 → janito-3.15.1}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  201. {janito-3.14.2 → janito-3.15.1}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  202. {janito-3.14.2 → janito-3.15.1}/janito/agent_events.py +0 -0
  203. {janito-3.14.2 → janito-3.15.1}/janito/cli/__init__.py +0 -0
  204. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/bindings.py +0 -0
  205. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/chat_entry.py +0 -0
  206. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/prompt_style.py +0 -0
  207. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/script_runner.py +0 -0
  208. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/session.py +0 -0
  209. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  210. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  211. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  212. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  213. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  214. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  215. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  216. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/clear_context.py +0 -0
  217. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  218. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  219. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  220. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  221. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/interactive.py +0 -0
  222. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  223. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  224. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  225. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  226. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  227. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
  228. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  229. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  230. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  231. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  232. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  233. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  234. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  235. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  236. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  237. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  238. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  239. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  240. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  241. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/input_history.py +0 -0
  242. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  243. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/session/history.py +0 -0
  244. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  245. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  246. {janito-3.14.2 → janito-3.15.1}/janito/cli/chat_mode/toolbar.py +0 -0
  247. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
  248. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_config.py +0 -0
  249. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_drivers.py +0 -0
  250. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_models.py +0 -0
  251. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_plugins.py +0 -0
  252. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_profiles.py +0 -0
  253. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_providers.py +0 -0
  254. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_providers_region.py +0 -0
  255. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/list_tools.py +0 -0
  256. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/model_selection.py +0 -0
  257. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/model_utils.py +0 -0
  258. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/ping_providers.py +0 -0
  259. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/set_api_key.py +0 -0
  260. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/show_config.py +0 -0
  261. {janito-3.14.2 → janito-3.15.1}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  262. {janito-3.14.2 → janito-3.15.1}/janito/cli/config.py +0 -0
  263. {janito-3.14.2 → janito-3.15.1}/janito/cli/console.py +0 -0
  264. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/__init__.py +0 -0
  265. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/event_logger.py +0 -0
  266. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/getters.py +0 -0
  267. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/model_guesser.py +0 -0
  268. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/runner.py +0 -0
  269. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/setters.py +0 -0
  270. {janito-3.14.2 → janito-3.15.1}/janito/cli/core/unsetters.py +0 -0
  271. {janito-3.14.2 → janito-3.15.1}/janito/cli/main.py +0 -0
  272. {janito-3.14.2 → janito-3.15.1}/janito/cli/main_cli.py +0 -0
  273. {janito-3.14.2 → janito-3.15.1}/janito/cli/prompt_core.py +0 -0
  274. {janito-3.14.2 → janito-3.15.1}/janito/cli/prompt_handler.py +0 -0
  275. {janito-3.14.2 → janito-3.15.1}/janito/cli/prompt_setup.py +0 -0
  276. {janito-3.14.2 → janito-3.15.1}/janito/cli/rich_terminal_reporter.py +0 -0
  277. {janito-3.14.2 → janito-3.15.1}/janito/cli/single_shot_mode/__init__.py +0 -0
  278. {janito-3.14.2 → janito-3.15.1}/janito/cli/single_shot_mode/handler.py +0 -0
  279. {janito-3.14.2 → janito-3.15.1}/janito/cli/utils.py +0 -0
  280. {janito-3.14.2 → janito-3.15.1}/janito/cli/verbose_output.py +0 -0
  281. {janito-3.14.2 → janito-3.15.1}/janito/config.py +0 -0
  282. {janito-3.14.2 → janito-3.15.1}/janito/config_manager.py +0 -0
  283. {janito-3.14.2 → janito-3.15.1}/janito/conversation_history.py +0 -0
  284. {janito-3.14.2 → janito-3.15.1}/janito/dir_walk_utils.py +0 -0
  285. {janito-3.14.2 → janito-3.15.1}/janito/docs/GETTING_STARTED.md +0 -0
  286. {janito-3.14.2 → janito-3.15.1}/janito/driver_events.py +0 -0
  287. {janito-3.14.2 → janito-3.15.1}/janito/drivers/azure_openai/driver.py +0 -0
  288. {janito-3.14.2 → janito-3.15.1}/janito/drivers/cerebras/__init__.py +0 -0
  289. {janito-3.14.2 → janito-3.15.1}/janito/drivers/dashscope.bak.zip +0 -0
  290. {janito-3.14.2 → janito-3.15.1}/janito/drivers/openai/README.md +0 -0
  291. {janito-3.14.2 → janito-3.15.1}/janito/drivers/openai/driver.py +0 -0
  292. {janito-3.14.2 → janito-3.15.1}/janito/drivers/openai_responses.bak.zip +0 -0
  293. {janito-3.14.2 → janito-3.15.1}/janito/drivers/zai/__init__.py +0 -0
  294. {janito-3.14.2 → janito-3.15.1}/janito/drivers/zai/driver.py +0 -0
  295. {janito-3.14.2 → janito-3.15.1}/janito/event_bus/__init__.py +0 -0
  296. {janito-3.14.2 → janito-3.15.1}/janito/event_bus/bus.py +0 -0
  297. {janito-3.14.2 → janito-3.15.1}/janito/event_bus/event.py +0 -0
  298. {janito-3.14.2 → janito-3.15.1}/janito/event_bus/handler.py +0 -0
  299. {janito-3.14.2 → janito-3.15.1}/janito/event_bus/queue_bus.py +0 -0
  300. {janito-3.14.2 → janito-3.15.1}/janito/exceptions.py +0 -0
  301. {janito-3.14.2 → janito-3.15.1}/janito/formatting.py +0 -0
  302. {janito-3.14.2 → janito-3.15.1}/janito/formatting_token.py +0 -0
  303. {janito-3.14.2 → janito-3.15.1}/janito/gitignore_utils.py +0 -0
  304. {janito-3.14.2 → janito-3.15.1}/janito/hello.txt +0 -0
  305. {janito-3.14.2 → janito-3.15.1}/janito/i18n/__init__.py +0 -0
  306. {janito-3.14.2 → janito-3.15.1}/janito/i18n/it.py +0 -0
  307. {janito-3.14.2 → janito-3.15.1}/janito/i18n/messages.py +0 -0
  308. {janito-3.14.2 → janito-3.15.1}/janito/i18n/pt.py +0 -0
  309. {janito-3.14.2 → janito-3.15.1}/janito/llm/README.md +0 -0
  310. {janito-3.14.2 → janito-3.15.1}/janito/llm/__init__.py +0 -0
  311. {janito-3.14.2 → janito-3.15.1}/janito/llm/agent.py +0 -0
  312. {janito-3.14.2 → janito-3.15.1}/janito/llm/auth.py +0 -0
  313. {janito-3.14.2 → janito-3.15.1}/janito/llm/auth_utils.py +0 -0
  314. {janito-3.14.2 → janito-3.15.1}/janito/llm/driver.py +0 -0
  315. {janito-3.14.2 → janito-3.15.1}/janito/llm/driver_config.py +0 -0
  316. {janito-3.14.2 → janito-3.15.1}/janito/llm/driver_config_builder.py +0 -0
  317. {janito-3.14.2 → janito-3.15.1}/janito/llm/driver_input.py +0 -0
  318. {janito-3.14.2 → janito-3.15.1}/janito/llm/message_parts.py +0 -0
  319. {janito-3.14.2 → janito-3.15.1}/janito/llm/model.py +0 -0
  320. {janito-3.14.2 → janito-3.15.1}/janito/llm/provider.py +0 -0
  321. {janito-3.14.2 → janito-3.15.1}/janito/llm/response_cache.py +0 -0
  322. {janito-3.14.2 → janito-3.15.1}/janito/perf_singleton.py +0 -0
  323. {janito-3.14.2 → janito-3.15.1}/janito/performance_collector.py +0 -0
  324. {janito-3.14.2 → janito-3.15.1}/janito/plugins/__init__.py +0 -0
  325. {janito-3.14.2 → janito-3.15.1}/janito/plugins/auto_loader.py +0 -0
  326. {janito-3.14.2 → janito-3.15.1}/janito/plugins/auto_loader_fixed.py +0 -0
  327. {janito-3.14.2 → janito-3.15.1}/janito/plugins/base.py +0 -0
  328. {janito-3.14.2 → janito-3.15.1}/janito/plugins/builtin.py +0 -0
  329. {janito-3.14.2 → janito-3.15.1}/janito/plugins/config.py +0 -0
  330. {janito-3.14.2 → janito-3.15.1}/janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  331. {janito-3.14.2 → janito-3.15.1}/janito/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  332. {janito-3.14.2 → janito-3.15.1}/janito/plugins/core/filemanager/tools/validate_file_syntax/txt_validator.py +0 -0
  333. {janito-3.14.2 → janito-3.15.1}/janito/plugins/core_adapter.py +0 -0
  334. {janito-3.14.2 → janito-3.15.1}/janito/plugins/core_loader.py +0 -0
  335. {janito-3.14.2 → janito-3.15.1}/janito/plugins/core_loader_fixed.py +0 -0
  336. {janito-3.14.2 → janito-3.15.1}/janito/plugins/discovery.py +0 -0
  337. {janito-3.14.2 → janito-3.15.1}/janito/plugins/discovery_core.py +0 -0
  338. {janito-3.14.2 → janito-3.15.1}/janito/plugins/manager.py +0 -0
  339. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/__init__.py +0 -0
  340. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/__init__.py +0 -0
  341. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/clear_context.py +0 -0
  342. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/get_file_outline/__init__.py +0 -0
  343. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/get_file_outline/core.py +0 -0
  344. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/get_file_outline/java_outline.py +0 -0
  345. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/get_file_outline/markdown_outline.py +0 -0
  346. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/get_file_outline/python_outline.py +0 -0
  347. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/get_file_outline/search_outline.py +0 -0
  348. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/search_text/__init__.py +0 -0
  349. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/search_text/core.py +0 -0
  350. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/search_text/match_lines.py +0 -0
  351. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/search_text/pattern_utils.py +0 -0
  352. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/search_text/traverse_directory.py +0 -0
  353. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/__init__.py +0 -0
  354. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/core.py +0 -0
  355. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/css_validator.py +0 -0
  356. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/html_validator.py +0 -0
  357. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/jinja2_validator.py +0 -0
  358. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/js_validator.py +0 -0
  359. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/json_validator.py +0 -0
  360. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/markdown_validator.py +0 -0
  361. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/ps1_validator.py +0 -0
  362. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/python_validator.py +0 -0
  363. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/txt_validator.py +0 -0
  364. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/xml_validator.py +0 -0
  365. {janito-3.14.2 → janito-3.15.1}/janito/plugins/tools/local/validate_file_syntax/yaml_validator.py +0 -0
  366. {janito-3.14.2 → janito-3.15.1}/janito/provider_config.py +0 -0
  367. {janito-3.14.2 → janito-3.15.1}/janito/provider_registry.py +0 -0
  368. {janito-3.14.2 → janito-3.15.1}/janito/providers/__init__.py +0 -0
  369. {janito-3.14.2 → janito-3.15.1}/janito/providers/alibaba/__init__.py +0 -0
  370. {janito-3.14.2 → janito-3.15.1}/janito/providers/anthropic/model_info.py +0 -0
  371. {janito-3.14.2 → janito-3.15.1}/janito/providers/anthropic/provider.py +0 -0
  372. {janito-3.14.2 → janito-3.15.1}/janito/providers/azure_openai/model_info.py +0 -0
  373. {janito-3.14.2 → janito-3.15.1}/janito/providers/azure_openai/provider.py +0 -0
  374. {janito-3.14.2 → janito-3.15.1}/janito/providers/cerebras/__init__.py +0 -0
  375. {janito-3.14.2 → janito-3.15.1}/janito/providers/cerebras/model_info.py +0 -0
  376. {janito-3.14.2 → janito-3.15.1}/janito/providers/cerebras/provider.py +0 -0
  377. {janito-3.14.2 → janito-3.15.1}/janito/providers/dashscope.bak.zip +0 -0
  378. {janito-3.14.2 → janito-3.15.1}/janito/providers/deepseek/__init__.py +0 -0
  379. {janito-3.14.2 → janito-3.15.1}/janito/providers/deepseek/model_info.py +0 -0
  380. {janito-3.14.2 → janito-3.15.1}/janito/providers/deepseek/provider.py +0 -0
  381. {janito-3.14.2 → janito-3.15.1}/janito/providers/google/__init__.py +0 -0
  382. {janito-3.14.2 → janito-3.15.1}/janito/providers/google/model_info.py +0 -0
  383. {janito-3.14.2 → janito-3.15.1}/janito/providers/google/provider.py +0 -0
  384. {janito-3.14.2 → janito-3.15.1}/janito/providers/ibm/README.md +0 -0
  385. {janito-3.14.2 → janito-3.15.1}/janito/providers/ibm/__init__.py +0 -0
  386. {janito-3.14.2 → janito-3.15.1}/janito/providers/ibm/model_info.py +0 -0
  387. {janito-3.14.2 → janito-3.15.1}/janito/providers/ibm/provider.py +0 -0
  388. {janito-3.14.2 → janito-3.15.1}/janito/providers/mistral/__init__.py +0 -0
  389. {janito-3.14.2 → janito-3.15.1}/janito/providers/mistral/model_info.py +0 -0
  390. {janito-3.14.2 → janito-3.15.1}/janito/providers/mistral/provider.py +0 -0
  391. {janito-3.14.2 → janito-3.15.1}/janito/providers/moonshot/__init__.py +0 -0
  392. {janito-3.14.2 → janito-3.15.1}/janito/providers/moonshot/model_info.py +0 -0
  393. {janito-3.14.2 → janito-3.15.1}/janito/providers/moonshot/provider.py +0 -0
  394. {janito-3.14.2 → janito-3.15.1}/janito/providers/openai/__init__.py +0 -0
  395. {janito-3.14.2 → janito-3.15.1}/janito/providers/openai/model_info.py +0 -0
  396. {janito-3.14.2 → janito-3.15.1}/janito/providers/openai/provider.py +0 -0
  397. {janito-3.14.2 → janito-3.15.1}/janito/providers/openai/schema_generator.py +0 -0
  398. {janito-3.14.2 → janito-3.15.1}/janito/providers/registry.py +0 -0
  399. {janito-3.14.2 → janito-3.15.1}/janito/providers/zai/__init__.py +0 -0
  400. {janito-3.14.2 → janito-3.15.1}/janito/providers/zai/model_info.py +0 -0
  401. {janito-3.14.2 → janito-3.15.1}/janito/providers/zai/provider.py +0 -0
  402. {janito-3.14.2 → janito-3.15.1}/janito/providers/zai/schema_generator.py +0 -0
  403. {janito-3.14.2 → janito-3.15.1}/janito/regions/__init__.py +0 -0
  404. {janito-3.14.2 → janito-3.15.1}/janito/regions/cli.py +0 -0
  405. {janito-3.14.2 → janito-3.15.1}/janito/regions/geo_utils.py +0 -0
  406. {janito-3.14.2 → janito-3.15.1}/janito/regions/provider_regions.py +0 -0
  407. {janito-3.14.2 → janito-3.15.1}/janito/report_events.py +0 -0
  408. {janito-3.14.2 → janito-3.15.1}/janito/shell.bak.zip +0 -0
  409. {janito-3.14.2 → janito-3.15.1}/janito/tests/test_tool_adapter_case_insensitive.py +0 -0
  410. {janito-3.14.2 → janito-3.15.1}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  411. {janito-3.14.2 → janito-3.15.1}/janito/tools/README.md +0 -0
  412. {janito-3.14.2 → janito-3.15.1}/janito/tools/__init__.py +0 -0
  413. {janito-3.14.2 → janito-3.15.1}/janito/tools/disabled_tools.py +0 -0
  414. {janito-3.14.2 → janito-3.15.1}/janito/tools/function_adapter.py +0 -0
  415. {janito-3.14.2 → janito-3.15.1}/janito/tools/inspect_registry.py +0 -0
  416. {janito-3.14.2 → janito-3.15.1}/janito/tools/loop_protection.py +0 -0
  417. {janito-3.14.2 → janito-3.15.1}/janito/tools/loop_protection_decorator.py +0 -0
  418. {janito-3.14.2 → janito-3.15.1}/janito/tools/outline_file.bak.zip +0 -0
  419. {janito-3.14.2 → janito-3.15.1}/janito/tools/path_security.py +0 -0
  420. {janito-3.14.2 → janito-3.15.1}/janito/tools/path_utils.py +0 -0
  421. {janito-3.14.2 → janito-3.15.1}/janito/tools/permissions.py +0 -0
  422. {janito-3.14.2 → janito-3.15.1}/janito/tools/permissions_parse.py +0 -0
  423. {janito-3.14.2 → janito-3.15.1}/janito/tools/tool_events.py +0 -0
  424. {janito-3.14.2 → janito-3.15.1}/janito/tools/tool_run_exception.py +0 -0
  425. {janito-3.14.2 → janito-3.15.1}/janito/tools/tool_use_tracker.py +0 -0
  426. {janito-3.14.2 → janito-3.15.1}/janito/tools/tool_utils.py +0 -0
  427. {janito-3.14.2 → janito-3.15.1}/janito/tools/tools_adapter.py +0 -0
  428. {janito-3.14.2 → janito-3.15.1}/janito/tools/url_whitelist.py +0 -0
  429. {janito-3.14.2 → janito-3.15.1}/janito/utils.py +0 -0
  430. {janito-3.14.2 → janito-3.15.1}/janito.egg-info/dependency_links.txt +0 -0
  431. {janito-3.14.2 → janito-3.15.1}/janito.egg-info/entry_points.txt +0 -0
  432. {janito-3.14.2 → janito-3.15.1}/janito.egg-info/requires.txt +0 -0
  433. {janito-3.14.2 → janito-3.15.1}/janito.egg-info/top_level.txt +0 -0
  434. {janito-3.14.2 → janito-3.15.1}/market_prompt_fix.py +0 -0
  435. {janito-3.14.2 → janito-3.15.1}/mkdocs.log +0 -0
  436. {janito-3.14.2 → janito-3.15.1}/mkdocs.yml +0 -0
  437. {janito-3.14.2 → janito-3.15.1}/mkdocs_hooks.py +0 -0
  438. {janito-3.14.2 → janito-3.15.1}/penguin_ascii.py +0 -0
  439. {janito-3.14.2 → janito-3.15.1}/plugins/__init__.py +0 -0
  440. {janito-3.14.2 → janito-3.15.1}/plugins/core/__init__.py +0 -0
  441. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/__init__.py +0 -0
  442. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  443. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
  444. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  445. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  446. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  447. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  448. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  449. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/search_text/core.py +0 -0
  450. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  451. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  452. {janito-3.14.2 → janito-3.15.1}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  453. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/__init__.py +0 -0
  454. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  455. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  456. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  457. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  458. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
  459. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  460. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  461. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  462. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  463. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  464. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  465. {janito-3.14.2 → janito-3.15.1}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  466. {janito-3.14.2 → janito-3.15.1}/plugins/core/imagedisplay/__init__.py +0 -0
  467. {janito-3.14.2 → janito-3.15.1}/plugins/core/imagedisplay/plugin.py +0 -0
  468. {janito-3.14.2 → janito-3.15.1}/plugins/core/imagedisplay/tools/__init__.py +0 -0
  469. {janito-3.14.2 → janito-3.15.1}/plugins/core/imagedisplay/tools/show_image.py +0 -0
  470. {janito-3.14.2 → janito-3.15.1}/plugins/core/imagedisplay/tools/show_image_grid.py +0 -0
  471. {janito-3.14.2 → janito-3.15.1}/plugins/core/system/__init__.py +0 -0
  472. {janito-3.14.2 → janito-3.15.1}/plugins/dev/__init__.py +0 -0
  473. {janito-3.14.2 → janito-3.15.1}/plugins/dev/pythondev/__init__.py +0 -0
  474. {janito-3.14.2 → janito-3.15.1}/plugins/dev/visualization/__init__.py +0 -0
  475. {janito-3.14.2 → janito-3.15.1}/plugins/example_plugin.py +0 -0
  476. {janito-3.14.2 → janito-3.15.1}/plugins/ui/__init__.py +0 -0
  477. {janito-3.14.2 → janito-3.15.1}/plugins/ui/userinterface/__init__.py +0 -0
  478. {janito-3.14.2 → janito-3.15.1}/plugins/web/__init__.py +0 -0
  479. {janito-3.14.2 → janito-3.15.1}/plugins/web/webtools/__init__.py +0 -0
  480. {janito-3.14.2 → janito-3.15.1}/pyproject.toml +0 -0
  481. {janito-3.14.2 → janito-3.15.1}/requirements-dev.txt +0 -0
  482. {janito-3.14.2 → janito-3.15.1}/requirements.txt +0 -0
  483. {janito-3.14.2 → janito-3.15.1}/setup.cfg +0 -0
  484. {janito-3.14.2 → janito-3.15.1}/tests/local/get_file_outline/test_core_outline.py +0 -0
  485. {janito-3.14.2 → janito-3.15.1}/tests/local/test_read_file/__init__.py +0 -0
  486. {janito-3.14.2 → janito-3.15.1}/tests/local/test_read_file/read_file.py +0 -0
  487. {janito-3.14.2 → janito-3.15.1}/tests/local/test_read_file/test_read_file.py +0 -0
  488. {janito-3.14.2 → janito-3.15.1}/tests/local/test_read_files.py +0 -0
  489. {janito-3.14.2 → janito-3.15.1}/tests/test_cli_list_models.py +0 -0
  490. {janito-3.14.2 → janito-3.15.1}/tests/test_cli_list_providers.py +0 -0
  491. {janito-3.14.2 → janito-3.15.1}/tests/test_cli_list_providers_alibaba.py +0 -0
  492. {janito-3.14.2 → janito-3.15.1}/tests/test_cli_list_providers_moonshot.py +0 -0
  493. {janito-3.14.2 → janito-3.15.1}/tests/test_cli_version.py +0 -0
  494. {janito-3.14.2 → janito-3.15.1}/tests/test_disabled_tools.py +0 -0
  495. {janito-3.14.2 → janito-3.15.1}/tests/test_plugin_system.py +0 -0
  496. {janito-3.14.2 → janito-3.15.1}/tests/test_provider_alibaba.py +0 -0
  497. {janito-3.14.2 → janito-3.15.1}/tests/test_provider_cerebras.py +0 -0
  498. {janito-3.14.2 → janito-3.15.1}/tests/test_provider_moonshot.py +0 -0
  499. {janito-3.14.2 → janito-3.15.1}/tox.ini +0 -0
  500. {janito-3.14.2 → janito-3.15.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.14.2
3
+ Version: 3.15.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
@@ -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,35 +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
- # Debian/Ubuntu
55
- echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
56
- sudo apt-get update
57
- sudo apt-get install janito
58
-
59
- # Fedora/RHEL
60
- cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
61
- [repo.nine.ch]
62
- name=Nine Repo
63
- baseurl=https://repo.nine.ch/yum/
64
- enabled=1
65
- gpgcheck=0
66
- EOF
67
- dnf install janito
68
-
69
- # Arch
70
- # Install yay: https://github.com/Jguer/yay#binary
71
- yay --version
72
- 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 .
73
58
  ```
74
59
 
75
- For Windows users, janito is also built for arm64 and amd64. You can download the
76
- latest exe file from the [releases](https://github.com/ninech/janito/releases) and
77
- install it.
78
-
79
60
  ## Getting started
80
61
 
81
- * login to the API using `janito auth login`
82
- * 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
@@ -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.*
@@ -86,7 +86,7 @@ This document lists all supported large language models (LLMs) across providers,
86
86
  | `qwen3-30b-a3b-instruct-2507` | 129,024 | 32,768 | Alibaba Qwen3 30B A3B Instruct Model (OpenAI-compatible) |
87
87
  | `qwen3-next-80b-a3b-instruct` | 262,144 | 65,536 | Alibaba Qwen3-Max Preview (256K) - 80B A3B Instruct Model (OpenAI-compatible) |
88
88
  | `qwen3-next-80b-a3b-thinking` | 262,144 | 65,536 | Alibaba Qwen3-Max Preview (256K) - 80B A3B Thinking Model (OpenAI-compatible) |
89
- | `qwen3-max-preview` | 262,144 | 65,536 | Alibaba Qwen3-Max Preview (256K) - Standard Model (OpenAI-compatible) |
89
+ | `qwen3-max` | 262,144 | 65,536 | Alibaba Qwen3-Max Preview (256K) - Standard Model (OpenAI-compatible) |
90
90
 
91
91
  ## DeepSeek
92
92
 
@@ -126,6 +126,6 @@ Azure OpenAI supports any deployment name configured by the user. The following
126
126
 
127
127
  > **Note**: Azure OpenAI deployments are user-defined. Use `--provider azure_openai --model YOUR_DEPLOYMENT_NAME` to use any valid deployment.
128
128
 
129
- ---
129
+
130
130
 
131
131
  *Last updated from source code: September 2025*
@@ -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()
@@ -24,13 +24,7 @@ class PlatformDiscovery:
24
24
  return f"Git Bash ({self.os_environ.get('MSYSTEM')})"
25
25
  return None
26
26
 
27
- def _detect_wsl(self):
28
- if self.os_environ.get("WSL_DISTRO_NAME"):
29
- shell = self.os_environ.get("SHELL")
30
- shell_name = shell.split("/")[-1] if shell else "unknown"
31
- distro = self.os_environ.get("WSL_DISTRO_NAME")
32
- return f"{shell_name} (WSL: {distro})"
33
- return None
27
+
34
28
 
35
29
  def _detect_powershell(self):
36
30
  try:
@@ -87,7 +81,6 @@ class PlatformDiscovery:
87
81
  """
88
82
  shell_info = (
89
83
  self._detect_git_bash()
90
- or self._detect_wsl()
91
84
  or self._detect_powershell()
92
85
  or self._detect_shell_env()
93
86
  or self._detect_comspec()
@@ -76,10 +76,11 @@ class LocalToolsAdapter(ToolsAdapter):
76
76
  raise TypeError(
77
77
  f"Tool '{tool_class.__name__}' must implement a callable 'run' method."
78
78
  )
79
- tool_name = getattr(instance, "tool_name", None)
79
+ # Derive tool name from class name by convention
80
+ tool_name = instance.tool_name
80
81
  if not tool_name or not isinstance(tool_name, str):
81
82
  raise ValueError(
82
- f"Tool '{tool_class.__name__}' must provide a class attribute 'tool_name' (str) for its registration name."
83
+ f"Tool '{tool_class.__name__}' must provide a valid tool_name property."
83
84
  )
84
85
  if tool_name in self._tools:
85
86
  raise ValueError(f"Tool '{tool_name}' is already registered.")