janito 3.7.0__tar.gz → 3.9.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 (491) hide show
  1. {janito-3.7.0 → janito-3.9.0}/PKG-INFO +14 -14
  2. janito-3.9.0/README.md +49 -0
  3. {janito-3.7.0 → janito-3.9.0}/docs/about/why.md +1 -1
  4. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/CHANGELOG.md +1 -1
  5. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +1 -1
  6. {janito-3.7.0 → janito-3.9.0}/docs/guides/disabled-tools.md +2 -2
  7. {janito-3.7.0 → janito-3.9.0}/docs/guides/security-commands.md +2 -2
  8. {janito-3.7.0 → janito-3.9.0}/docs/guides/tools-developer-guide.md +2 -2
  9. {janito-3.7.0 → janito-3.9.0}/docs/guides/url-whitelist.md +3 -3
  10. {janito-3.7.0 → janito-3.9.0}/docs/moonshot-setup.md +1 -1
  11. {janito-3.7.0 → janito-3.9.0}/docs/plugins/architecture.md +2 -2
  12. {janito-3.7.0 → janito-3.9.0}/docs/plugins/testing.md +1 -1
  13. {janito-3.7.0 → janito-3.9.0}/docs/reference/cli-options.md +1 -1
  14. {janito-3.7.0 → janito-3.9.0}/docs/supported-providers-models.md +2 -1
  15. {janito-3.7.0 → janito-3.9.0}/examples/loop_protection_tool_example.py +1 -1
  16. {janito-3.7.0 → janito-3.9.0}/janito/README.md +1 -1
  17. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_tools.py +1 -1
  18. {janito-3.7.0 → janito-3.9.0}/janito/cli/prompt_core.py +48 -3
  19. {janito-3.7.0 → janito-3.9.0}/janito/cli/rich_terminal_reporter.py +10 -2
  20. {janito-3.7.0 → janito-3.9.0}/janito/docs/GETTING_STARTED.md +1 -1
  21. {janito-3.7.0 → janito-3.9.0}/janito/llm/agent.py +6 -0
  22. {janito-3.7.0 → janito-3.9.0/janito}/plugins/core/filemanager/tools/validate_file_syntax/core.py +7 -2
  23. janito-3.9.0/janito/plugins/core/filemanager/tools/validate_file_syntax/txt_validator.py +28 -0
  24. {janito-3.7.0 → janito-3.9.0}/janito/plugins/manager.py +1 -1
  25. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/adapter.py +1 -1
  26. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/ask_user.py +1 -1
  27. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/copy_file.py +1 -1
  28. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/create_directory.py +1 -1
  29. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/create_file.py +10 -6
  30. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/delete_text_in_file.py +2 -2
  31. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/fetch_url.py +3 -3
  32. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/find_files.py +1 -1
  33. {janito-3.7.0/plugins/core/codeanalyzer/tools → janito-3.9.0/janito/plugins/tools/local}/get_file_outline/core.py +2 -2
  34. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/move_file.py +1 -1
  35. {janito-3.7.0/plugins/web/webtools/tools → janito-3.9.0/janito/plugins/tools/local}/open_html_in_browser.py +1 -1
  36. {janito-3.7.0/plugins/web/webtools/tools → janito-3.9.0/janito/plugins/tools/local}/open_url.py +1 -1
  37. {janito-3.7.0/plugins/dev/pythondev/tools → janito-3.9.0/janito/plugins/tools/local}/python_code_run.py +1 -1
  38. {janito-3.7.0/plugins/dev/pythondev/tools → janito-3.9.0/janito/plugins/tools/local}/python_command_run.py +1 -1
  39. {janito-3.7.0/plugins/dev/pythondev/tools → janito-3.9.0/janito/plugins/tools/local}/python_file_run.py +1 -1
  40. {janito-3.7.0/plugins/dev/visualization/tools → janito-3.9.0/janito/plugins/tools/local}/read_chart.py +1 -1
  41. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/read_files.py +1 -1
  42. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/remove_directory.py +1 -1
  43. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/remove_file.py +1 -1
  44. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/replace_text_in_file.py +2 -2
  45. {janito-3.7.0/plugins/core/system/tools → janito-3.9.0/janito/plugins/tools/local}/run_bash_command.py +1 -1
  46. {janito-3.7.0/plugins/core/system/tools → janito-3.9.0/janito/plugins/tools/local}/run_powershell_command.py +1 -1
  47. {janito-3.7.0/plugins/core/codeanalyzer/tools → janito-3.9.0/janito/plugins/tools/local}/search_text/core.py +2 -2
  48. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/show_image.py +1 -1
  49. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/show_image_grid.py +1 -1
  50. janito-3.9.0/janito/plugins/tools/local/validate_file_syntax/core.py +119 -0
  51. janito-3.9.0/janito/plugins/tools/local/validate_file_syntax/txt_validator.py +28 -0
  52. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/view_file.py +1 -1
  53. {janito-3.7.0 → janito-3.9.0}/janito/providers/alibaba/model_info.py +10 -0
  54. {janito-3.7.0 → janito-3.9.0}/janito/providers/alibaba/provider.py +1 -3
  55. {janito-3.7.0 → janito-3.9.0}/janito/providers/moonshot/model_info.py +8 -8
  56. {janito-3.7.0 → janito-3.9.0}/janito/providers/moonshot/provider.py +1 -1
  57. {janito-3.7.0 → janito-3.9.0}/janito/tools/__init__.py +2 -2
  58. {janito-3.7.0 → janito-3.9.0}/janito/tools/inspect_registry.py +1 -1
  59. {janito-3.7.0 → janito-3.9.0}/janito/tools/tool_base.py +8 -1
  60. {janito-3.7.0 → janito-3.9.0}/janito.egg-info/PKG-INFO +14 -14
  61. {janito-3.7.0 → janito-3.9.0}/janito.egg-info/SOURCES.txt +58 -63
  62. janito-3.9.0/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +1 -0
  63. {janito-3.7.0 → janito-3.9.0}/plugins/web/webtools/tools/fetch_url.py +2 -2
  64. janito-3.9.0/tests/local/test_read_file/__init__.py +1 -0
  65. janito-3.9.0/tests/local/test_read_file/read_file.py +69 -0
  66. janito-3.9.0/tests/local/test_read_file/test_read_file.py +83 -0
  67. janito-3.7.0/README.md +0 -49
  68. janito-3.7.0/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -52
  69. janito-3.7.0/docs/plugins/MIGRATION_COMPLETE.md +0 -73
  70. janito-3.7.0/market_test.py +0 -108
  71. janito-3.7.0/pytest.ini +0 -3
  72. janito-3.7.0/test.txt +0 -1
  73. janito-3.7.0/test_example.py +0 -90
  74. janito-3.7.0/test_http_errors.py +0 -100
  75. janito-3.7.0/test_http_errors_direct.py +0 -53
  76. janito-3.7.0/test_key_field_behavior.py +0 -104
  77. janito-3.7.0/test_key_field_protection.py +0 -74
  78. janito-3.7.0/test_loop_protection_return.py +0 -67
  79. janito-3.7.0/test_market_analyst.py +0 -133
  80. {janito-3.7.0 → janito-3.9.0}/.codespellrc +0 -0
  81. {janito-3.7.0 → janito-3.9.0}/.gitattributes +0 -0
  82. {janito-3.7.0 → janito-3.9.0}/.github/workflows/python-app.yml.disabled +0 -0
  83. {janito-3.7.0 → janito-3.9.0}/.gitignore +0 -0
  84. {janito-3.7.0 → janito-3.9.0}/.pre-commit-config.yaml +0 -0
  85. {janito-3.7.0 → janito-3.9.0}/.secrets.baseline +0 -0
  86. {janito-3.7.0 → janito-3.9.0}/.vscode/settings.json +0 -0
  87. {janito-3.7.0 → janito-3.9.0}/LICENSE +0 -0
  88. {janito-3.7.0 → janito-3.9.0}/MARKET_ANALYST_README.md +0 -0
  89. {janito-3.7.0 → janito-3.9.0}/README-dev.md +0 -0
  90. {janito-3.7.0 → janito-3.9.0}/RELEASE_COMPARISON.md +0 -0
  91. {janito-3.7.0 → janito-3.9.0}/UPDATING_DOCS.md +0 -0
  92. {janito-3.7.0 → janito-3.9.0}/adding_mcp.txt +0 -0
  93. {janito-3.7.0 → janito-3.9.0}/docs/CHANGELOG.md +0 -0
  94. {janito-3.7.0 → janito-3.9.0}/docs/DIV.md +0 -0
  95. {janito-3.7.0 → janito-3.9.0}/docs/Interfaces.txt +0 -0
  96. {janito-3.7.0 → janito-3.9.0}/docs/PROFILES.md +0 -0
  97. {janito-3.7.0 → janito-3.9.0}/docs/TOOLBAR-STYLING.md +0 -0
  98. {janito-3.7.0 → janito-3.9.0}/docs/about/costs.md +0 -0
  99. {janito-3.7.0 → janito-3.9.0}/docs/about/vs-webchats.md +0 -0
  100. {janito-3.7.0 → janito-3.9.0}/docs/alibaba-setup.md +0 -0
  101. {janito-3.7.0 → janito-3.9.0}/docs/alternatives.md +0 -0
  102. {janito-3.7.0 → janito-3.9.0}/docs/cerebras-setup.md +0 -0
  103. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  104. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  105. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  106. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  107. {janito-3.7.0 → janito-3.9.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  108. {janito-3.7.0 → janito-3.9.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  109. {janito-3.7.0 → janito-3.9.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  110. {janito-3.7.0 → janito-3.9.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  111. {janito-3.7.0 → janito-3.9.0}/docs/code_intelligence/our-approach.md +0 -0
  112. {janito-3.7.0 → janito-3.9.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  113. {janito-3.7.0 → janito-3.9.0}/docs/concepts/analysis-style.md +0 -0
  114. {janito-3.7.0 → janito-3.9.0}/docs/concepts/human-guided-ai.md +0 -0
  115. {janito-3.7.0 → janito-3.9.0}/docs/concepts/index.md +0 -0
  116. {janito-3.7.0 → janito-3.9.0}/docs/concepts/language-model-clients.md +0 -0
  117. {janito-3.7.0 → janito-3.9.0}/docs/concepts/prompt-design-style.md +0 -0
  118. {janito-3.7.0 → janito-3.9.0}/docs/deepseek-setup.md +0 -0
  119. {janito-3.7.0 → janito-3.9.0}/docs/driver-flow.md +0 -0
  120. {janito-3.7.0 → janito-3.9.0}/docs/driver-request-cancellation.md +0 -0
  121. {janito-3.7.0 → janito-3.9.0}/docs/drivers/events.md +0 -0
  122. {janito-3.7.0 → janito-3.9.0}/docs/drivers.md +0 -0
  123. {janito-3.7.0 → janito-3.9.0}/docs/event-bus.md +0 -0
  124. {janito-3.7.0 → janito-3.9.0}/docs/guides/configuration.md +0 -0
  125. {janito-3.7.0 → janito-3.9.0}/docs/guides/developing.md +0 -0
  126. {janito-3.7.0 → janito-3.9.0}/docs/guides/installation.md +0 -0
  127. {janito-3.7.0 → janito-3.9.0}/docs/guides/market-data-sources.md +0 -0
  128. {janito-3.7.0 → janito-3.9.0}/docs/guides/profiles.md +0 -0
  129. {janito-3.7.0 → janito-3.9.0}/docs/guides/prompting/README.md +0 -0
  130. {janito-3.7.0 → janito-3.9.0}/docs/guides/read-chart-examples.md +0 -0
  131. {janito-3.7.0 → janito-3.9.0}/docs/guides/single-shot-terminal.md +0 -0
  132. {janito-3.7.0 → janito-3.9.0}/docs/guides/stock-market-guide.md +0 -0
  133. {janito-3.7.0 → janito-3.9.0}/docs/guides/terminal-shell.md +0 -0
  134. {janito-3.7.0 → janito-3.9.0}/docs/guides/using.md +0 -0
  135. {janito-3.7.0 → janito-3.9.0}/docs/guides/using_tools.md +0 -0
  136. {janito-3.7.0 → janito-3.9.0}/docs/ibm-setup.md +0 -0
  137. {janito-3.7.0 → janito-3.9.0}/docs/imgs/code-generation-observability.png +0 -0
  138. {janito-3.7.0 → janito-3.9.0}/docs/imgs/code_generation_observability.png +0 -0
  139. {janito-3.7.0 → janito-3.9.0}/docs/imgs/happy-programmer.png +0 -0
  140. {janito-3.7.0 → janito-3.9.0}/docs/imgs/happy-programmer.svg +0 -0
  141. {janito-3.7.0 → janito-3.9.0}/docs/imgs/terminal-one-shot.png +0 -0
  142. {janito-3.7.0 → janito-3.9.0}/docs/imgs/terminal-shell.png +0 -0
  143. {janito-3.7.0 → janito-3.9.0}/docs/imgs/terminal_one_shot.png +0 -0
  144. {janito-3.7.0 → janito-3.9.0}/docs/imgs/terminal_shell.png +0 -0
  145. {janito-3.7.0 → janito-3.9.0}/docs/index.md +0 -0
  146. {janito-3.7.0 → janito-3.9.0}/docs/llm-drivers-required-config.md +0 -0
  147. {janito-3.7.0 → janito-3.9.0}/docs/llm-drivers.md +0 -0
  148. {janito-3.7.0 → janito-3.9.0}/docs/meta/developer-toolchain.md +0 -0
  149. {janito-3.7.0 → janito-3.9.0}/docs/meta/quality-checks.txt +0 -0
  150. {janito-3.7.0 → janito-3.9.0}/docs/mistral-setup.md +0 -0
  151. {janito-3.7.0 → janito-3.9.0}/docs/openai-setup.md +0 -0
  152. {janito-3.7.0 → janito-3.9.0}/docs/overrides/partials/copyright.html +0 -0
  153. {janito-3.7.0 → janito-3.9.0}/docs/plugins/README.md +0 -0
  154. {janito-3.7.0 → janito-3.9.0}/docs/plugins/api-reference.md +0 -0
  155. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  156. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
  157. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
  158. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  159. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/system.md +0 -0
  160. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  161. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
  162. {janito-3.7.0 → janito-3.9.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
  163. {janito-3.7.0 → janito-3.9.0}/docs/plugins/configuration.md +0 -0
  164. {janito-3.7.0 → janito-3.9.0}/docs/plugins/examples/advanced.md +0 -0
  165. {janito-3.7.0 → janito-3.9.0}/docs/plugins/examples/basic.md +0 -0
  166. {janito-3.7.0 → janito-3.9.0}/docs/plugins/examples/intermediate.md +0 -0
  167. {janito-3.7.0 → janito-3.9.0}/docs/plugins/plugin-development.md +0 -0
  168. {janito-3.7.0 → janito-3.9.0}/docs/plugins/plugin-resources.md +0 -0
  169. {janito-3.7.0 → janito-3.9.0}/docs/plugins/publishing.md +0 -0
  170. {janito-3.7.0 → janito-3.9.0}/docs/plugins/remote-plugins.md +0 -0
  171. {janito-3.7.0 → janito-3.9.0}/docs/provider-platform-access.md +0 -0
  172. {janito-3.7.0 → janito-3.9.0}/docs/public-sources.md +0 -0
  173. {janito-3.7.0 → janito-3.9.0}/docs/reference/api.md +0 -0
  174. {janito-3.7.0 → janito-3.9.0}/docs/reference/azure-openai.md +0 -0
  175. {janito-3.7.0 → janito-3.9.0}/docs/reference/message-handler-model.md +0 -0
  176. {janito-3.7.0 → janito-3.9.0}/docs/reference/rich-message-handler.md +0 -0
  177. {janito-3.7.0 → janito-3.9.0}/docs/security.md +0 -0
  178. {janito-3.7.0 → janito-3.9.0}/docs/tools/search-text.md +0 -0
  179. {janito-3.7.0 → janito-3.9.0}/docs/tools/show-image-grid.md +0 -0
  180. {janito-3.7.0 → janito-3.9.0}/docs/tools/show-image.md +0 -0
  181. {janito-3.7.0 → janito-3.9.0}/docs/tools-index.md +0 -0
  182. {janito-3.7.0 → janito-3.9.0}/docs/tools-natural-results.md +0 -0
  183. {janito-3.7.0 → janito-3.9.0}/docs/tools-precision.md +0 -0
  184. {janito-3.7.0 → janito-3.9.0}/docs/z-ai-setup.md +0 -0
  185. {janito-3.7.0 → janito-3.9.0}/examples/loop_protection_example.py +0 -0
  186. {janito-3.7.0 → janito-3.9.0}/get_nasdaq_top.py +0 -0
  187. {janito-3.7.0 → janito-3.9.0}/ibm-logo.txt +0 -0
  188. {janito-3.7.0 → janito-3.9.0}/janito/__init__.py +0 -0
  189. {janito-3.7.0 → janito-3.9.0}/janito/__main__.py +0 -0
  190. {janito-3.7.0 → janito-3.9.0}/janito/_version.py +0 -0
  191. {janito-3.7.0 → janito-3.9.0}/janito/agent/setup_agent.py +0 -0
  192. {janito-3.7.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  193. {janito-3.7.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  194. {janito-3.7.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  195. {janito-3.7.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  196. {janito-3.7.0 → janito-3.9.0}/janito/cli/__init__.py +0 -0
  197. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/bindings.py +0 -0
  198. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  199. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  200. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/script_runner.py +0 -0
  201. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/session.py +0 -0
  202. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  203. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  204. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  205. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  206. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  207. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  208. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  209. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  210. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  211. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  212. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  213. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  214. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  215. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  216. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  217. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  218. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
  219. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  220. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  221. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  222. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  223. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  224. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  225. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  226. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  227. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  228. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  229. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  230. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  231. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  232. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  233. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  234. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  235. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  236. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  237. {janito-3.7.0 → janito-3.9.0}/janito/cli/chat_mode/toolbar.py +0 -0
  238. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
  239. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_config.py +0 -0
  240. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  241. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_models.py +0 -0
  242. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_plugins.py +0 -0
  243. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  244. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_providers.py +0 -0
  245. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  246. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/model_selection.py +0 -0
  247. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/model_utils.py +0 -0
  248. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  249. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  250. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/show_config.py +0 -0
  251. {janito-3.7.0 → janito-3.9.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  252. {janito-3.7.0 → janito-3.9.0}/janito/cli/config.py +0 -0
  253. {janito-3.7.0 → janito-3.9.0}/janito/cli/console.py +0 -0
  254. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/__init__.py +0 -0
  255. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/event_logger.py +0 -0
  256. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/getters.py +0 -0
  257. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/model_guesser.py +0 -0
  258. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/runner.py +0 -0
  259. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/setters.py +0 -0
  260. {janito-3.7.0 → janito-3.9.0}/janito/cli/core/unsetters.py +0 -0
  261. {janito-3.7.0 → janito-3.9.0}/janito/cli/main.py +0 -0
  262. {janito-3.7.0 → janito-3.9.0}/janito/cli/main_cli.py +0 -0
  263. {janito-3.7.0 → janito-3.9.0}/janito/cli/prompt_handler.py +0 -0
  264. {janito-3.7.0 → janito-3.9.0}/janito/cli/prompt_setup.py +0 -0
  265. {janito-3.7.0 → janito-3.9.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  266. {janito-3.7.0 → janito-3.9.0}/janito/cli/single_shot_mode/handler.py +0 -0
  267. {janito-3.7.0 → janito-3.9.0}/janito/cli/utils.py +0 -0
  268. {janito-3.7.0 → janito-3.9.0}/janito/cli/verbose_output.py +0 -0
  269. {janito-3.7.0 → janito-3.9.0}/janito/config.py +0 -0
  270. {janito-3.7.0 → janito-3.9.0}/janito/config_manager.py +0 -0
  271. {janito-3.7.0 → janito-3.9.0}/janito/conversation_history.py +0 -0
  272. {janito-3.7.0 → janito-3.9.0}/janito/dir_walk_utils.py +0 -0
  273. {janito-3.7.0 → janito-3.9.0}/janito/driver_events.py +0 -0
  274. {janito-3.7.0 → janito-3.9.0}/janito/drivers/azure_openai/driver.py +0 -0
  275. {janito-3.7.0 → janito-3.9.0}/janito/drivers/cerebras/__init__.py +0 -0
  276. {janito-3.7.0 → janito-3.9.0}/janito/drivers/dashscope.bak.zip +0 -0
  277. {janito-3.7.0 → janito-3.9.0}/janito/drivers/openai/README.md +0 -0
  278. {janito-3.7.0 → janito-3.9.0}/janito/drivers/openai/driver.py +0 -0
  279. {janito-3.7.0 → janito-3.9.0}/janito/drivers/openai_responses.bak.zip +0 -0
  280. {janito-3.7.0 → janito-3.9.0}/janito/drivers/zai/__init__.py +0 -0
  281. {janito-3.7.0 → janito-3.9.0}/janito/drivers/zai/driver.py +0 -0
  282. {janito-3.7.0 → janito-3.9.0}/janito/event_bus/__init__.py +0 -0
  283. {janito-3.7.0 → janito-3.9.0}/janito/event_bus/bus.py +0 -0
  284. {janito-3.7.0 → janito-3.9.0}/janito/event_bus/event.py +0 -0
  285. {janito-3.7.0 → janito-3.9.0}/janito/event_bus/handler.py +0 -0
  286. {janito-3.7.0 → janito-3.9.0}/janito/event_bus/queue_bus.py +0 -0
  287. {janito-3.7.0 → janito-3.9.0}/janito/exceptions.py +0 -0
  288. {janito-3.7.0 → janito-3.9.0}/janito/formatting.py +0 -0
  289. {janito-3.7.0 → janito-3.9.0}/janito/formatting_token.py +0 -0
  290. {janito-3.7.0 → janito-3.9.0}/janito/gitignore_utils.py +0 -0
  291. {janito-3.7.0 → janito-3.9.0}/janito/hello.txt +0 -0
  292. {janito-3.7.0 → janito-3.9.0}/janito/i18n/__init__.py +0 -0
  293. {janito-3.7.0 → janito-3.9.0}/janito/i18n/it.py +0 -0
  294. {janito-3.7.0 → janito-3.9.0}/janito/i18n/messages.py +0 -0
  295. {janito-3.7.0 → janito-3.9.0}/janito/i18n/pt.py +0 -0
  296. {janito-3.7.0 → janito-3.9.0}/janito/llm/README.md +0 -0
  297. {janito-3.7.0 → janito-3.9.0}/janito/llm/__init__.py +0 -0
  298. {janito-3.7.0 → janito-3.9.0}/janito/llm/auth.py +0 -0
  299. {janito-3.7.0 → janito-3.9.0}/janito/llm/auth_utils.py +0 -0
  300. {janito-3.7.0 → janito-3.9.0}/janito/llm/driver.py +0 -0
  301. {janito-3.7.0 → janito-3.9.0}/janito/llm/driver_config.py +0 -0
  302. {janito-3.7.0 → janito-3.9.0}/janito/llm/driver_config_builder.py +0 -0
  303. {janito-3.7.0 → janito-3.9.0}/janito/llm/driver_input.py +0 -0
  304. {janito-3.7.0 → janito-3.9.0}/janito/llm/message_parts.py +0 -0
  305. {janito-3.7.0 → janito-3.9.0}/janito/llm/model.py +0 -0
  306. {janito-3.7.0 → janito-3.9.0}/janito/llm/provider.py +0 -0
  307. {janito-3.7.0 → janito-3.9.0}/janito/mkdocs.yml +0 -0
  308. {janito-3.7.0 → janito-3.9.0}/janito/perf_singleton.py +0 -0
  309. {janito-3.7.0 → janito-3.9.0}/janito/performance_collector.py +0 -0
  310. {janito-3.7.0 → janito-3.9.0}/janito/platform_discovery.py +0 -0
  311. {janito-3.7.0 → janito-3.9.0}/janito/plugins/__init__.py +0 -0
  312. {janito-3.7.0 → janito-3.9.0}/janito/plugins/auto_loader.py +0 -0
  313. {janito-3.7.0 → janito-3.9.0}/janito/plugins/auto_loader_fixed.py +0 -0
  314. {janito-3.7.0 → janito-3.9.0}/janito/plugins/base.py +0 -0
  315. {janito-3.7.0 → janito-3.9.0}/janito/plugins/builtin.py +0 -0
  316. {janito-3.7.0 → janito-3.9.0}/janito/plugins/config.py +0 -0
  317. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/janito/plugins/core/filemanager/tools}/validate_file_syntax/__init__.py +0 -0
  318. {janito-3.7.0 → janito-3.9.0}/janito/plugins/core_adapter.py +0 -0
  319. {janito-3.7.0 → janito-3.9.0}/janito/plugins/core_loader.py +0 -0
  320. {janito-3.7.0 → janito-3.9.0}/janito/plugins/core_loader_fixed.py +0 -0
  321. {janito-3.7.0 → janito-3.9.0}/janito/plugins/discovery.py +0 -0
  322. {janito-3.7.0 → janito-3.9.0}/janito/plugins/discovery_core.py +0 -0
  323. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/__init__.py +0 -0
  324. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/__init__.py +0 -0
  325. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/__init__.py +0 -0
  326. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/java_outline.py +0 -0
  327. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/markdown_outline.py +0 -0
  328. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/python_outline.py +0 -0
  329. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/search_outline.py +0 -0
  330. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/__init__.py +0 -0
  331. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/match_lines.py +0 -0
  332. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/pattern_utils.py +0 -0
  333. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/traverse_directory.py +0 -0
  334. {janito-3.7.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/validate_file_syntax/__init__.py +0 -0
  335. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/css_validator.py +0 -0
  336. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/html_validator.py +0 -0
  337. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/jinja2_validator.py +0 -0
  338. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/js_validator.py +0 -0
  339. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/json_validator.py +0 -0
  340. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/markdown_validator.py +0 -0
  341. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/ps1_validator.py +0 -0
  342. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/python_validator.py +0 -0
  343. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/xml_validator.py +0 -0
  344. {janito-3.7.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/yaml_validator.py +0 -0
  345. {janito-3.7.0 → janito-3.9.0}/janito/provider_config.py +0 -0
  346. {janito-3.7.0 → janito-3.9.0}/janito/provider_registry.py +0 -0
  347. {janito-3.7.0 → janito-3.9.0}/janito/providers/__init__.py +0 -0
  348. {janito-3.7.0 → janito-3.9.0}/janito/providers/alibaba/__init__.py +0 -0
  349. {janito-3.7.0 → janito-3.9.0}/janito/providers/anthropic/model_info.py +0 -0
  350. {janito-3.7.0 → janito-3.9.0}/janito/providers/anthropic/provider.py +0 -0
  351. {janito-3.7.0 → janito-3.9.0}/janito/providers/azure_openai/model_info.py +0 -0
  352. {janito-3.7.0 → janito-3.9.0}/janito/providers/azure_openai/provider.py +0 -0
  353. {janito-3.7.0 → janito-3.9.0}/janito/providers/cerebras/__init__.py +0 -0
  354. {janito-3.7.0 → janito-3.9.0}/janito/providers/cerebras/model_info.py +0 -0
  355. {janito-3.7.0 → janito-3.9.0}/janito/providers/cerebras/provider.py +0 -0
  356. {janito-3.7.0 → janito-3.9.0}/janito/providers/dashscope.bak.zip +0 -0
  357. {janito-3.7.0 → janito-3.9.0}/janito/providers/deepseek/__init__.py +0 -0
  358. {janito-3.7.0 → janito-3.9.0}/janito/providers/deepseek/model_info.py +0 -0
  359. {janito-3.7.0 → janito-3.9.0}/janito/providers/deepseek/provider.py +0 -0
  360. {janito-3.7.0 → janito-3.9.0}/janito/providers/google/__init__.py +0 -0
  361. {janito-3.7.0 → janito-3.9.0}/janito/providers/google/model_info.py +0 -0
  362. {janito-3.7.0 → janito-3.9.0}/janito/providers/google/provider.py +0 -0
  363. {janito-3.7.0 → janito-3.9.0}/janito/providers/ibm/README.md +0 -0
  364. {janito-3.7.0 → janito-3.9.0}/janito/providers/ibm/__init__.py +0 -0
  365. {janito-3.7.0 → janito-3.9.0}/janito/providers/ibm/model_info.py +0 -0
  366. {janito-3.7.0 → janito-3.9.0}/janito/providers/ibm/provider.py +0 -0
  367. {janito-3.7.0 → janito-3.9.0}/janito/providers/mistral/__init__.py +0 -0
  368. {janito-3.7.0 → janito-3.9.0}/janito/providers/mistral/model_info.py +0 -0
  369. {janito-3.7.0 → janito-3.9.0}/janito/providers/mistral/provider.py +0 -0
  370. {janito-3.7.0 → janito-3.9.0}/janito/providers/moonshot/__init__.py +0 -0
  371. {janito-3.7.0 → janito-3.9.0}/janito/providers/openai/__init__.py +0 -0
  372. {janito-3.7.0 → janito-3.9.0}/janito/providers/openai/model_info.py +0 -0
  373. {janito-3.7.0 → janito-3.9.0}/janito/providers/openai/provider.py +0 -0
  374. {janito-3.7.0 → janito-3.9.0}/janito/providers/openai/schema_generator.py +0 -0
  375. {janito-3.7.0 → janito-3.9.0}/janito/providers/registry.py +0 -0
  376. {janito-3.7.0 → janito-3.9.0}/janito/providers/zai/__init__.py +0 -0
  377. {janito-3.7.0 → janito-3.9.0}/janito/providers/zai/model_info.py +0 -0
  378. {janito-3.7.0 → janito-3.9.0}/janito/providers/zai/provider.py +0 -0
  379. {janito-3.7.0 → janito-3.9.0}/janito/providers/zai/schema_generator.py +0 -0
  380. {janito-3.7.0 → janito-3.9.0}/janito/regions/__init__.py +0 -0
  381. {janito-3.7.0 → janito-3.9.0}/janito/regions/cli.py +0 -0
  382. {janito-3.7.0 → janito-3.9.0}/janito/regions/geo_utils.py +0 -0
  383. {janito-3.7.0 → janito-3.9.0}/janito/regions/provider_regions.py +0 -0
  384. {janito-3.7.0 → janito-3.9.0}/janito/report_events.py +0 -0
  385. {janito-3.7.0 → janito-3.9.0}/janito/shell.bak.zip +0 -0
  386. {janito-3.7.0 → janito-3.9.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  387. {janito-3.7.0 → janito-3.9.0}/janito/tools/README.md +0 -0
  388. {janito-3.7.0 → janito-3.9.0}/janito/tools/base.py +0 -0
  389. {janito-3.7.0 → janito-3.9.0}/janito/tools/disabled_tools.py +0 -0
  390. {janito-3.7.0 → janito-3.9.0}/janito/tools/function_adapter.py +0 -0
  391. {janito-3.7.0 → janito-3.9.0}/janito/tools/loop_protection.py +0 -0
  392. {janito-3.7.0 → janito-3.9.0}/janito/tools/loop_protection_decorator.py +0 -0
  393. {janito-3.7.0 → janito-3.9.0}/janito/tools/outline_file.bak.zip +0 -0
  394. {janito-3.7.0 → janito-3.9.0}/janito/tools/path_security.py +0 -0
  395. {janito-3.7.0 → janito-3.9.0}/janito/tools/path_utils.py +0 -0
  396. {janito-3.7.0 → janito-3.9.0}/janito/tools/permissions.py +0 -0
  397. {janito-3.7.0 → janito-3.9.0}/janito/tools/permissions_parse.py +0 -0
  398. {janito-3.7.0 → janito-3.9.0}/janito/tools/tool_events.py +0 -0
  399. {janito-3.7.0 → janito-3.9.0}/janito/tools/tool_run_exception.py +0 -0
  400. {janito-3.7.0 → janito-3.9.0}/janito/tools/tool_use_tracker.py +0 -0
  401. {janito-3.7.0 → janito-3.9.0}/janito/tools/tool_utils.py +0 -0
  402. {janito-3.7.0 → janito-3.9.0}/janito/tools/tools_adapter.py +0 -0
  403. {janito-3.7.0 → janito-3.9.0}/janito/tools/tools_schema.py +0 -0
  404. {janito-3.7.0 → janito-3.9.0}/janito/tools/url_whitelist.py +0 -0
  405. {janito-3.7.0 → janito-3.9.0}/janito/utils.py +0 -0
  406. {janito-3.7.0 → janito-3.9.0}/janito.egg-info/dependency_links.txt +0 -0
  407. {janito-3.7.0 → janito-3.9.0}/janito.egg-info/entry_points.txt +0 -0
  408. {janito-3.7.0 → janito-3.9.0}/janito.egg-info/requires.txt +0 -0
  409. {janito-3.7.0 → janito-3.9.0}/janito.egg-info/top_level.txt +0 -0
  410. {janito-3.7.0 → janito-3.9.0}/market_prompt_fix.py +0 -0
  411. {janito-3.7.0 → janito-3.9.0}/mkdocs.yml +0 -0
  412. {janito-3.7.0 → janito-3.9.0}/mkdocs_hooks.py +0 -0
  413. {janito-3.7.0 → janito-3.9.0}/plugins/__init__.py +0 -0
  414. {janito-3.7.0 → janito-3.9.0}/plugins/core/__init__.py +0 -0
  415. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/__init__.py +0 -0
  416. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  417. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/codeanalyzer/tools}/get_file_outline/core.py +0 -0
  418. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  419. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  420. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  421. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  422. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  423. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/codeanalyzer/tools}/search_text/core.py +0 -0
  424. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  425. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  426. {janito-3.7.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  427. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/__init__.py +0 -0
  428. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/copy_file.py +0 -0
  429. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/create_directory.py +0 -0
  430. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/create_file.py +0 -0
  431. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/delete_text_in_file.py +0 -0
  432. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/find_files.py +0 -0
  433. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/move_file.py +0 -0
  434. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/read_files.py +0 -0
  435. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/remove_directory.py +0 -0
  436. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/remove_file.py +0 -0
  437. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
  438. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/validate_file_syntax/core.py +0 -0
  439. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  440. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  441. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
  442. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  443. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  444. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  445. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  446. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  447. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  448. {janito-3.7.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  449. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/view_file.py +0 -0
  450. {janito-3.7.0 → janito-3.9.0}/plugins/core/imagedisplay/__init__.py +0 -0
  451. {janito-3.7.0 → janito-3.9.0}/plugins/core/imagedisplay/plugin.py +0 -0
  452. {janito-3.7.0 → janito-3.9.0}/plugins/core/imagedisplay/tools/__init__.py +0 -0
  453. {janito-3.7.0 → janito-3.9.0}/plugins/core/imagedisplay/tools/show_image.py +0 -0
  454. {janito-3.7.0 → janito-3.9.0}/plugins/core/imagedisplay/tools/show_image_grid.py +0 -0
  455. {janito-3.7.0 → janito-3.9.0}/plugins/core/system/__init__.py +0 -0
  456. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/system/tools}/run_bash_command.py +0 -0
  457. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/system/tools}/run_powershell_command.py +0 -0
  458. {janito-3.7.0 → janito-3.9.0}/plugins/dev/__init__.py +0 -0
  459. {janito-3.7.0 → janito-3.9.0}/plugins/dev/pythondev/__init__.py +0 -0
  460. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/pythondev/tools}/python_code_run.py +0 -0
  461. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/pythondev/tools}/python_command_run.py +0 -0
  462. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/pythondev/tools}/python_file_run.py +0 -0
  463. {janito-3.7.0 → janito-3.9.0}/plugins/dev/visualization/__init__.py +0 -0
  464. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/visualization/tools}/read_chart.py +0 -0
  465. {janito-3.7.0 → janito-3.9.0}/plugins/example_plugin.py +0 -0
  466. {janito-3.7.0 → janito-3.9.0}/plugins/ui/__init__.py +0 -0
  467. {janito-3.7.0 → janito-3.9.0}/plugins/ui/userinterface/__init__.py +0 -0
  468. {janito-3.7.0 → janito-3.9.0}/plugins/ui/userinterface/tools/ask_user.py +0 -0
  469. {janito-3.7.0 → janito-3.9.0}/plugins/web/__init__.py +0 -0
  470. {janito-3.7.0 → janito-3.9.0}/plugins/web/webtools/__init__.py +0 -0
  471. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/web/webtools/tools}/open_html_in_browser.py +0 -0
  472. {janito-3.7.0/janito/tools/adapters/local → janito-3.9.0/plugins/web/webtools/tools}/open_url.py +0 -0
  473. {janito-3.7.0 → janito-3.9.0}/plugins.txt +0 -0
  474. {janito-3.7.0 → janito-3.9.0}/pyproject.toml +0 -0
  475. {janito-3.7.0 → janito-3.9.0}/requirements-dev.txt +0 -0
  476. {janito-3.7.0 → janito-3.9.0}/requirements.txt +0 -0
  477. {janito-3.7.0 → janito-3.9.0}/setup.cfg +0 -0
  478. {janito-3.7.0/tests/adapters → janito-3.9.0/tests}/local/get_file_outline/test_core_outline.py +0 -0
  479. {janito-3.7.0/tests/adapters → janito-3.9.0/tests}/local/test_read_files.py +0 -0
  480. {janito-3.7.0 → janito-3.9.0}/tests/test_cli_list_models.py +0 -0
  481. {janito-3.7.0 → janito-3.9.0}/tests/test_cli_list_providers.py +0 -0
  482. {janito-3.7.0 → janito-3.9.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  483. {janito-3.7.0 → janito-3.9.0}/tests/test_cli_list_providers_moonshot.py +0 -0
  484. {janito-3.7.0 → janito-3.9.0}/tests/test_cli_version.py +0 -0
  485. {janito-3.7.0 → janito-3.9.0}/tests/test_disabled_tools.py +0 -0
  486. {janito-3.7.0 → janito-3.9.0}/tests/test_plugin_system.py +0 -0
  487. {janito-3.7.0 → janito-3.9.0}/tests/test_provider_alibaba.py +0 -0
  488. {janito-3.7.0 → janito-3.9.0}/tests/test_provider_cerebras.py +0 -0
  489. {janito-3.7.0 → janito-3.9.0}/tests/test_provider_moonshot.py +0 -0
  490. {janito-3.7.0 → janito-3.9.0}/tools/release.py +0 -0
  491. {janito-3.7.0 → janito-3.9.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.7.0
3
+ Version: 3.9.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
@@ -33,30 +33,30 @@ Provides-Extra: coder
33
33
  Requires-Dist: janito-coder; extra == "coder"
34
34
  Dynamic: license-file
35
35
 
36
- # nctl
36
+ # Janito
37
37
 
38
38
  ```bash
39
- $ nctl --help
40
- Usage: nctl <command>
39
+ $ janito --help
40
+ Usage: janito <command>
41
41
 
42
42
  Interact with Nine API resources. See https://docs.nineapis.ch for the full API docs.
43
43
 
44
- Run "nctl <command> --help" for more information on a command.
44
+ Run "janito <command> --help" for more information on a command.
45
45
  ```
46
46
 
47
47
  ## Setup
48
48
 
49
49
  ```bash
50
50
  # If you have go already installed
51
- go install github.com/ninech/nctl@latest
51
+ go install github.com/ninech/janito@latest
52
52
 
53
53
  # Homebrew
54
- brew install ninech/taps/nctl
54
+ brew install ninech/taps/janito
55
55
 
56
56
  # Debian/Ubuntu
57
57
  echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
58
58
  sudo apt-get update
59
- sudo apt-get install nctl
59
+ sudo apt-get install janito
60
60
 
61
61
  # Fedora/RHEL
62
62
  cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
@@ -66,19 +66,19 @@ baseurl=https://repo.nine.ch/yum/
66
66
  enabled=1
67
67
  gpgcheck=0
68
68
  EOF
69
- dnf install nctl
69
+ dnf install janito
70
70
 
71
71
  # Arch
72
72
  # Install yay: https://github.com/Jguer/yay#binary
73
73
  yay --version
74
- yay -S nctl-bin
74
+ yay -S janito-bin
75
75
  ```
76
76
 
77
- For Windows users, nctl is also built for arm64 and amd64. You can download the
78
- latest exe file from the [releases](https://github.com/ninech/nctl/releases) and
77
+ For Windows users, janito is also built for arm64 and amd64. You can download the
78
+ latest exe file from the [releases](https://github.com/ninech/janito/releases) and
79
79
  install it.
80
80
 
81
81
  ## Getting started
82
82
 
83
- * login to the API using `nctl auth login`
84
- * run `nctl --help` to get a list of all available commands
83
+ * login to the API using `janito auth login`
84
+ * run `janito --help` to get a list of all available commands
janito-3.9.0/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # Janito
2
+
3
+ ```bash
4
+ $ janito --help
5
+ Usage: janito <command>
6
+
7
+ Interact with Nine API resources. See https://docs.nineapis.ch for the full API docs.
8
+
9
+ Run "janito <command> --help" for more information on a command.
10
+ ```
11
+
12
+ ## Setup
13
+
14
+ ```bash
15
+ # If you have go already installed
16
+ go install github.com/ninech/janito@latest
17
+
18
+ # Homebrew
19
+ brew install ninech/taps/janito
20
+
21
+ # Debian/Ubuntu
22
+ echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
23
+ sudo apt-get update
24
+ sudo apt-get install janito
25
+
26
+ # Fedora/RHEL
27
+ cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
28
+ [repo.nine.ch]
29
+ name=Nine Repo
30
+ baseurl=https://repo.nine.ch/yum/
31
+ enabled=1
32
+ gpgcheck=0
33
+ EOF
34
+ dnf install janito
35
+
36
+ # Arch
37
+ # Install yay: https://github.com/Jguer/yay#binary
38
+ yay --version
39
+ yay -S janito-bin
40
+ ```
41
+
42
+ For Windows users, janito is also built for arm64 and amd64. You can download the
43
+ latest exe file from the [releases](https://github.com/ninech/janito/releases) and
44
+ install it.
45
+
46
+ ## Getting started
47
+
48
+ * login to the API using `janito auth login`
49
+ * run `janito --help` to get a list of all available commands
@@ -12,7 +12,7 @@ Janito is designed to give you maximum control over how AI assists you with your
12
12
 
13
13
  - 💻 **Not Locked to an Editor:** Janito works in the terminal, scripts, or web—no need for a heavyweight IDE or plugin ecosystem.
14
14
  - 🧰 **Composable and Extensible:** Tools can be enabled, disabled, or customized for each session, letting you experiment or automate workflows.
15
- - 🕒 **Session-Scoped Adjustments:** Temporary overrides (via CLI options or prompt tweaks) let you try new approaches without changing your global setup.
15
+ - 🕒 **Session-Scoped Adjustments:** Session-based overrides (via CLI options or prompt tweaks) let you try new approaches without changing your global setup.
16
16
 
17
17
  ## 🧑‍💻 Example: Prompt-Driven Focus
18
18
 
@@ -384,7 +384,7 @@ For users upgrading from previous versions:
384
384
  - Refactored tool system to use latest git tag for version detection in release script.
385
385
  - Refined release script to recommend creating a new git tag if version exists on PyPI.
386
386
  - Removed termweb: web file viewer and related CLI/editor features, updated docs and config accordingly.
387
- - Removed temporary file x.txt.
387
+ - Removed test file x.txt.
388
388
  - Restored tool permissions to CLI defaults on /restart; store and retrieve default tool permissions in AllowedPermissionsState. Runner now sets and saves default permissions for restoration. Updated conversation_restart to restore or fallback to all-off permissions.
389
389
  - Updated disabled execution tools message for clarity.
390
390
  - Docs and UX: clarified permissions (read/write/exec), added profiles doc links, and removed localhost references from UI/toolbar.
@@ -19,7 +19,7 @@
19
19
  ### Enhanced fetch_url Tool
20
20
  - **Error Handling**: Added intelligent error caching for 403 (Forbidden) and 404 (Not Found) responses
21
21
  - **Performance**: Reduced redundant network requests when URLs are known to be inaccessible
22
- - **Reliability**: Better handling of rate limiting and temporary access restrictions
22
+ - **Reliability**: Better handling of rate limiting and session-based access restrictions
23
23
 
24
24
  ### Documentation Updates
25
25
  - **IBM Setup Guide**: Complete step-by-step documentation for IBM WatsonX configuration
@@ -75,8 +75,8 @@ Disable tools you don't use to reduce clutter:
75
75
  janito --set disabled_tools="open_url,open_html_in_browser"
76
76
  ```
77
77
 
78
- ### Temporary Disabling
79
- Temporarily disable tools for specific sessions:
78
+ ### Session-Based Disabling
79
+ Disable tools for specific sessions:
80
80
  ```bash
81
81
  janito --set disabled_tools=ask_user "Generate code without user interaction"
82
82
  ```
@@ -101,7 +101,7 @@ Fetch Apple's current stock price from tradingview.com
101
101
  # List current restrictions
102
102
  /security allowed-sites list
103
103
 
104
- # Temporarily allow all sites
104
+ # Allow all sites for testing
105
105
  /security allowed-sites clear
106
106
 
107
107
  # Re-establish restrictions
@@ -174,7 +174,7 @@ Analyze Apple's financial performance
174
174
  # Adding "tradingview.com" also allows "www.tradingview.com", "api.tradingview.com", etc.
175
175
  ```
176
176
 
177
- **Problem**: Want to temporarily disable whitelist
177
+ **Problem**: Want to disable whitelist temporarily
178
178
  ```
179
179
  # Clear all restrictions
180
180
  /security allowed-sites clear
@@ -17,7 +17,7 @@ For a list of all built-in tools and their usage, see the [Tools Reference](../t
17
17
 
18
18
  ```python
19
19
  from janito.tools.tool_base import ToolBase, ToolPermissions
20
- from janito.tools.adapters.local.adapter import register_local_tool
20
+ from janito.plugins.adapters.local.adapter import register_local_tool
21
21
 
22
22
  @register_local_tool
23
23
  class MyTool(ToolBase):
@@ -48,7 +48,7 @@ class MyTool(ToolBase):
48
48
  2. **Add a class-level docstring** summarizing the tool's purpose (user-facing).
49
49
  3. **Implement the `run` method** with type hints and a Google-style docstring, including an `Args:` section for every parameter.
50
50
  4. **Set permissions** using `permissions = ToolPermissions(read=True, write=True, execute=True)` as needed.
51
- 5. **Register your tool** with `@register_local_tool` from `janito.tools.adapters.local.adapter`. Set a unique class attribute `tool_name = "your_tool_name"`.
51
+ 5. **Register your tool** with `@register_local_tool` from `janito.plugins.adapters.local.adapter`. Set a unique class attribute `tool_name = "your_tool_name"`.
52
52
  6. **Document your tool:** Update `docs/tools-index.md` with a short description and usage for your new tool.
53
53
 
54
54
  ## Docstring Style
@@ -111,10 +111,10 @@ janito "Get Apple's 10-K filing" # ✅ Works (sec.gov)
111
111
  janito "Get Apple's stock price" # ❌ Blocked (needs tradingview.com)
112
112
  ```
113
113
 
114
- ### Temporary Access for Testing
114
+ ### Testing Access
115
115
 
116
116
  ```bash
117
- # Add a site temporarily
117
+ # Add a site for testing
118
118
  janito --add-allowed-site test-site.com
119
119
 
120
120
  # Use it for testing
@@ -176,7 +176,7 @@ janito --add-allowed-site missing-site.com
176
176
  # Adding "tradingview.com" also allows "www.tradingview.com", "api.tradingview.com", etc.
177
177
  ```
178
178
 
179
- **Problem**: Want to temporarily disable whitelist
179
+ **Problem**: Want to disable whitelist temporarily
180
180
 
181
181
  ```bash
182
182
  # Clear all restrictions
@@ -35,7 +35,7 @@ janito -p moonshot "Your prompt here"
35
35
 
36
36
  Janito supports the following Moonshot models:
37
37
 
38
- - `kimi-k2-turbo-preview` (default) - Advanced reasoning model with 128k context window
38
+ - `kimi-k2-0905-preview` (default) - Advanced reasoning model with 128k context window
39
39
  - `kimi-k2-turbo-preview` - Turbo version of the advanced reasoning model with 128k context window
40
40
  - `kimi-k1-8k` - Standard model with 8k context window
41
41
  - `kimi-k1-32k` - Standard model with 32k context window
@@ -27,10 +27,10 @@ plugins/
27
27
 
28
28
  ### Implementation Layer
29
29
 
30
- The actual tool implementations are located in `janito/tools/adapters/local/`. This separation ensures that the core functionality remains stable while the plugin interfaces can be organized and extended.
30
+ The actual tool implementations are located in `janito/plugins/tools/local/`. This separation ensures that the core functionality remains stable while the plugin interfaces can be organized and extended.
31
31
 
32
32
  ```
33
- janito/tools/adapters/local/
33
+ janito/plugins/tools/local/
34
34
  ├── create_file.py
35
35
  ├── read_files.py
36
36
  ├── view_file.py
@@ -124,7 +124,7 @@ def test_plugin_integration():
124
124
  from janito.plugins.manager import PluginManager
125
125
  from janito.config import Config
126
126
 
127
- # Create a temporary config
127
+ # Create a test config
128
128
  config = Config()
129
129
  config.set("plugins.load.myplugin", True)
130
130
 
@@ -1,6 +1,6 @@
1
1
  # 🏁 Janito CLI Options
2
2
 
3
- This page documents all command-line options for Janito, as shown by `janito --help`. These options temporarily override configuration for a single session and do not persist changes to config files unless you use `--set` or a custom config file with `-c`.
3
+ This page documents all command-line options for Janito, as shown by `janito --help`. These options override configuration for a single session and do not persist changes to config files unless you use `--set` or a custom config file with `-c`.
4
4
 
5
5
  **Syntax:** `janito [options] [prompt]`
6
6
 
@@ -61,7 +61,8 @@ For setup instructions, see the [Mistral Setup Guide](mistral-setup.md).
61
61
 
62
62
  ### Moonshot
63
63
 
64
- - **Kimi K2 Turbo Preview** (default) - Latest generation with enhanced performance
64
+ - **Kimi K2 0905 Preview** (default) - Latest generation with enhanced performance
65
+ - **Kimi K2 Turbo Preview** - Turbo version with optimized speed
65
66
  - **Kimi K2 0711 Preview** - Previous preview version
66
67
 
67
68
  Moonshot provides open-source Kimi models with competitive performance.
@@ -8,7 +8,7 @@ using the @protect_against_loops decorator.
8
8
 
9
9
  from janito.tools.tool_base import ToolBase, ToolPermissions
10
10
  from janito.tools.loop_protection_decorator import protect_against_loops
11
- from janito.tools.adapters.local.adapter import register_local_tool
11
+ from janito.plugins.tools.local.adapter import register_local_tool
12
12
 
13
13
 
14
14
  @register_local_tool
@@ -79,7 +79,7 @@ janito --set model=kimi-k1-8k
79
79
 
80
80
  ### Moonshot (Recommended)
81
81
 
82
- - **Models**: kimi-k1-8k, kimi-k1-32k, kimi-k1-128k, kimi-k2-turbo-preview, kimi-k2-0905-preview
82
+ - **Models**: kimi-k1-8k, kimi-k1-32k, kimi-k1-128k, kimi-k2-turbo-preview
83
83
  - **Strengths**: Excellent Chinese/English support, competitive pricing, fast responses
84
84
  - **Setup**: Get API key from [Moonshot AI Platform](https://platform.moonshot.cn/)
85
85
 
@@ -53,7 +53,7 @@ def _print_tools_table(console, title, tools_info):
53
53
 
54
54
 
55
55
  def handle_list_tools(args=None):
56
- from janito.tools.adapters.local.adapter import LocalToolsAdapter
56
+ from janito.plugins.tools.local.adapter import LocalToolsAdapter
57
57
  import janito.tools # Ensure all tools are registered
58
58
  from janito.tools.tool_base import ToolPermissions
59
59
 
@@ -14,7 +14,7 @@ from janito.driver_events import (
14
14
  RequestStatus,
15
15
  RateLimitRetry,
16
16
  )
17
- from janito.tools.tool_events import ToolCallError
17
+ from janito.tools.tool_events import ToolCallError, ToolCallStarted
18
18
  import threading
19
19
  from janito.cli.verbose_output import print_verbose_header
20
20
  from janito.event_bus import event_bus as global_event_bus
@@ -52,8 +52,10 @@ class PromptHandler:
52
52
  def _handle_inner_event(self, inner_event, on_event, status):
53
53
  if on_event:
54
54
  on_event(inner_event)
55
- from janito.tools.tool_events import ToolCallFinished
55
+ from janito.tools.tool_events import ToolCallFinished, ToolCallStarted
56
56
 
57
+ if isinstance(inner_event, ToolCallStarted):
58
+ return self._handle_tool_call_started(inner_event, status)
57
59
  if isinstance(inner_event, ToolCallFinished):
58
60
  return self._handle_tool_call_finished(inner_event)
59
61
  if isinstance(inner_event, RateLimitRetry):
@@ -76,6 +78,14 @@ class PromptHandler:
76
78
  )
77
79
  return None
78
80
 
81
+ def _handle_tool_call_started(self, inner_event, status):
82
+ """Handle ToolCallStarted event - pause the timer when ask_user tool is called."""
83
+ if hasattr(inner_event, 'tool_name') and inner_event.tool_name == 'ask_user':
84
+ # Pause the status timer by clearing the status
85
+ if status:
86
+ status.update("")
87
+ return None
88
+
79
89
  def _handle_tool_call_finished(self, inner_event):
80
90
  if hasattr(self.args, "verbose_tools") and self.args.verbose_tools:
81
91
  self.console.print(
@@ -207,7 +217,42 @@ class PromptHandler:
207
217
  """
208
218
  try:
209
219
  self._print_verbose_debug("Calling agent.chat()...")
210
- final_event = self.agent.chat(prompt=user_prompt)
220
+
221
+ # Show waiting status with elapsed time
222
+ start_time = time.time()
223
+
224
+ # Get provider and model info for status display
225
+ provider_name = self.agent.get_provider_name() if hasattr(self.agent, 'get_provider_name') else 'LLM'
226
+ model_name = self.agent.get_model_name() if hasattr(self.agent, 'get_model_name') else 'unknown'
227
+
228
+ status = Status(f"[bold blue]Waiting for {provider_name} (model: {model_name})...[/bold blue]")
229
+
230
+ # Thread coordination event
231
+ stop_updater = threading.Event()
232
+
233
+ def update_status():
234
+ elapsed = time.time() - start_time
235
+ status.update(f"[bold blue]Waiting for {provider_name} (model: {model_name})... ({elapsed:.1f}s)[/bold blue]")
236
+
237
+ # Start status display and update timer
238
+ with status:
239
+ # Update status every second in a separate thread
240
+ def status_updater():
241
+ while not stop_updater.is_set():
242
+ update_status()
243
+ stop_updater.wait(1.0) # Wait for 1 second or until stopped
244
+
245
+ updater_thread = threading.Thread(target=status_updater, daemon=True)
246
+ updater_thread.start()
247
+
248
+ try:
249
+ final_event = self.agent.chat(prompt=user_prompt)
250
+ finally:
251
+ # Signal the updater thread to stop
252
+ stop_updater.set()
253
+ # Wait a bit for the thread to clean up
254
+ updater_thread.join(timeout=0.1)
255
+
211
256
  if hasattr(self.agent, "set_latest_event"):
212
257
  self.agent.set_latest_event(final_event)
213
258
  self.agent.last_event = final_event
@@ -74,8 +74,16 @@ class RichTerminalReporter(EventHandlerBase):
74
74
  """
75
75
  Clears the entire current line in the terminal and returns the cursor to column 1.
76
76
  """
77
- sys.stdout.write("\033[2K\r")
78
- sys.stdout.flush()
77
+ # Use raw ANSI escape sequences but write directly to the underlying file
78
+ # to bypass Rich's escaping/interpretation
79
+ if hasattr(self.console, 'file') and hasattr(self.console.file, 'write'):
80
+ self.console.file.write("\r\033[2K")
81
+ self.console.file.flush()
82
+ else:
83
+ # Fallback to sys.stdout if console.file is not available
84
+ import sys
85
+ sys.stdout.write("\r\033[2K")
86
+ sys.stdout.flush()
79
87
 
80
88
  def on_RequestFinished(self, event):
81
89
  self.delete_current_line()
@@ -124,7 +124,7 @@ export JANITO_MODEL=ibm/granite-3-3-8b-instruct
124
124
  - **kimi-k1-32k**: Better for longer contexts
125
125
  - **kimi-k1-128k**: Best for very long documents
126
126
  - **kimi-k2-turbo-preview**: Latest model with enhanced capabilities
127
- - **kimi-k2-0905-preview**: Newest model with 256K context window for handling very large documents and complex tasks
127
+ - **kimi-k2-turbo-preview**: Turbo version of the advanced reasoning model
128
128
 
129
129
  ### OpenAI Models
130
130
  - **gpt-5**: Latest GPT model with advanced capabilities
@@ -183,6 +183,9 @@ class LLMAgent:
183
183
  elapsed = 0.0
184
184
  if getattr(self, "verbose_agent", False):
185
185
  print("[agent] [DEBUG] Waiting for event from output_queue...")
186
+ # Show initial wait message
187
+ if getattr(self, "verbose_agent", False):
188
+ print(f"[agent] [DEBUG] Starting to wait for LLM response... (timeout: {max_wait_time}s)")
186
189
  # Let KeyboardInterrupt propagate to caller
187
190
  return self._poll_for_event(poll_timeout, max_wait_time)
188
191
 
@@ -197,6 +200,9 @@ class LLMAgent:
197
200
  print(error_msg)
198
201
  print("[DEBUG] Exiting _process_next_response due to timeout")
199
202
  return None, False
203
+ # Show elapsed time info while waiting
204
+ if getattr(self, "verbose_agent", False):
205
+ print(f"[agent] [DEBUG] Waiting for LLM response... ({elapsed:.1f}s elapsed)")
200
206
  continue
201
207
  if getattr(self, "verbose_agent", False):
202
208
  print(f"[agent] [DEBUG] Received event from output_queue: {event}")
@@ -3,9 +3,9 @@ from janito.tools.path_utils import expand_path
3
3
  from janito.i18n import tr
4
4
  from janito.tools.tool_base import ToolBase, ToolPermissions
5
5
  from janito.report_events import ReportAction
6
- from janito.tools.adapters.local.adapter import register_local_tool
6
+ from janito.plugins.tools.local.adapter import register_local_tool
7
7
  from janito.tools.tool_utils import display_path
8
- from janito.tools.adapters.local.adapter import register_local_tool as register_tool
8
+ from janito.plugins.tools.local.adapter import register_local_tool as register_tool
9
9
 
10
10
  from .python_validator import validate_python
11
11
  from .json_validator import validate_json
@@ -17,6 +17,7 @@ from .markdown_validator import validate_markdown
17
17
  from .js_validator import validate_js
18
18
  from .css_validator import validate_css
19
19
  from .jinja2_validator import validate_jinja2
20
+ from .txt_validator import validate_txt
20
21
  from janito.tools.loop_protection_decorator import protect_against_loops
21
22
 
22
23
 
@@ -37,6 +38,8 @@ def _get_validator(ext):
37
38
  ".css": validate_css,
38
39
  ".j2": validate_jinja2,
39
40
  ".jinja2": validate_jinja2,
41
+ ".txt": validate_txt,
42
+ ".text": validate_txt,
40
43
  }
41
44
  return mapping.get(ext)
42
45
 
@@ -79,6 +82,7 @@ class ValidateFileSyntaxTool(ToolBase):
79
82
  - Markdown (.md)
80
83
  - JavaScript (.js)
81
84
  - Jinja2 templates (.j2, .jinja2)
85
+ - Text files (.txt, .text) [UTF-8 validation]
82
86
 
83
87
  Args:
84
88
  path (str): Path to the file to validate.
@@ -86,6 +90,7 @@ class ValidateFileSyntaxTool(ToolBase):
86
90
  str: Validation status message. Example:
87
91
  - "✅ Syntax OK"
88
92
  - "⚠️ Warning: Syntax error: <error message>"
93
+ - "⚠️ Warning: UTF-8 decoding error: <error details>"
89
94
  - "⚠️ Warning: Unsupported file extension: <ext>"
90
95
  """
91
96
 
@@ -0,0 +1,28 @@
1
+ """Text file validator for UTF-8 encoding validation."""
2
+
3
+ import codecs
4
+ from pathlib import Path
5
+
6
+
7
+ def validate_txt(path: str) -> str:
8
+ """
9
+ Validate a text file for UTF-8 encoding issues.
10
+
11
+ Args:
12
+ path (str): Path to the text file to validate
13
+
14
+ Returns:
15
+ str: Validation status message
16
+ - "✅ Syntax OK" if file is valid UTF-8
17
+ - "⚠️ Warning: UTF-8 decoding error: <error details>" if invalid
18
+ """
19
+ try:
20
+ # Try to read the file with UTF-8 encoding
21
+ with codecs.open(path, 'r', encoding='utf-8') as f:
22
+ # Read the entire file to trigger any decoding errors
23
+ f.read()
24
+ return "✅ Syntax OK"
25
+ except UnicodeDecodeError as e:
26
+ return f"⚠️ Warning: UTF-8 decoding error: {e}"
27
+ except Exception as e:
28
+ return f"⚠️ Warning: File read error: {e}"
@@ -14,7 +14,7 @@ from .base import Plugin, PluginMetadata
14
14
  from .discovery import discover_plugins
15
15
  from .config import load_plugins_config, get_user_plugins_dir
16
16
  from .builtin import BuiltinPluginRegistry, load_builtin_plugin
17
- from janito.tools.adapters.local import LocalToolsAdapter
17
+ from janito.plugins.tools.local import LocalToolsAdapter
18
18
 
19
19
  logger = logging.getLogger(__name__)
20
20
 
@@ -207,7 +207,7 @@ def register_local_tool(tool=None):
207
207
  # Register the tool on a *fresh* adapter instance to avoid circular
208
208
  # import issues during package initialisation. This keeps behaviour
209
209
  # identical to the original implementation while still allowing
210
- # immediate use via the singleton in janito.tools.adapters.local.
210
+ # immediate use via the singleton in janito.plugins.tools.local.
211
211
  LocalToolsAdapter().register_tool(cls)
212
212
  return cls
213
213
 
@@ -1,5 +1,5 @@
1
1
  from janito.tools.tool_base import ToolBase, ToolPermissions
2
- from janito.tools.adapters.local.adapter import register_local_tool
2
+ from janito.plugins.tools.local.adapter import register_local_tool
3
3
  from janito.tools.loop_protection_decorator import protect_against_loops
4
4
 
5
5
  from rich import print as rich_print
@@ -2,7 +2,7 @@ import os
2
2
  from janito.tools.path_utils import expand_path
3
3
  import shutil
4
4
  from typing import List, Union
5
- from janito.tools.adapters.local.adapter import register_local_tool
5
+ from janito.plugins.tools.local.adapter import register_local_tool
6
6
  from janito.tools.tool_base import ToolBase, ToolPermissions
7
7
  from janito.tools.tool_utils import display_path
8
8
  from janito.report_events import ReportAction
@@ -1,4 +1,4 @@
1
- from janito.tools.adapters.local.adapter import register_local_tool
1
+ from janito.plugins.tools.local.adapter import register_local_tool
2
2
 
3
3
  from janito.tools.tool_utils import display_path
4
4
  from janito.tools.tool_base import ToolBase, ToolPermissions
@@ -1,6 +1,6 @@
1
1
  import os
2
2
  from janito.tools.path_utils import expand_path
3
- from janito.tools.adapters.local.adapter import register_local_tool
3
+ from janito.plugins.tools.local.adapter import register_local_tool
4
4
 
5
5
  from janito.tools.tool_utils import display_path
6
6
  from janito.tools.tool_base import ToolBase, ToolPermissions
@@ -8,7 +8,7 @@ from janito.report_events import ReportAction
8
8
  from janito.i18n import tr
9
9
  from janito.tools.loop_protection_decorator import protect_against_loops
10
10
 
11
- from janito.tools.adapters.local.validate_file_syntax.core import validate_file_syntax
11
+ from janito.plugins.tools.local.validate_file_syntax.core import validate_file_syntax
12
12
 
13
13
 
14
14
  @register_local_tool
@@ -30,12 +30,12 @@ class CreateFileTool(ToolBase):
30
30
  - Cross-platform path handling (Windows, macOS, Linux)
31
31
 
32
32
  Args:
33
- path (str): Target file path. Supports relative and absolute paths, with automatic
33
+ path (str, required): Target file path. Supports relative and absolute paths, with automatic
34
34
  expansion of user home directory (~) and environment variables.
35
35
  Examples: "src/main.py", "~/Documents/config.json", "$HOME/.env"
36
- content (str): File content to write. Empty string creates empty file.
36
+ content (str, optional): File content to write. Empty string creates empty file.
37
37
  Supports any text content including Unicode characters, newlines,
38
- and binary-safe text representation.
38
+ and binary-safe text representation. Default: "" (empty file)
39
39
  overwrite (bool, optional): If True, allows overwriting existing files. Default: False.
40
40
  When False, prevents accidental overwrites by checking
41
41
  file existence and showing current content. Always review
@@ -71,6 +71,10 @@ class CreateFileTool(ToolBase):
71
71
  ✅ Created file 2 lines.
72
72
  ✅ Syntax OK
73
73
 
74
+ Creating empty file:
75
+ >>> create_file("empty.txt", "")
76
+ ✅ Created file 0 lines.
77
+
74
78
  Overwrite protection:
75
79
  >>> create_file("existing.txt", "new content")
76
80
  ❗ Cannot create file: file already exists at 'existing.txt'.
@@ -85,7 +89,7 @@ class CreateFileTool(ToolBase):
85
89
  tool_name = "create_file"
86
90
 
87
91
  @protect_against_loops(max_calls=5, time_window=10.0, key_field="path")
88
- def run(self, path: str, content: str, overwrite: bool = False) -> str:
92
+ def run(self, path: str, content: str = "", overwrite: bool = False) -> str:
89
93
  path = expand_path(path)
90
94
  disp_path = display_path(path)
91
95
  if os.path.exists(path) and not overwrite:
@@ -1,9 +1,9 @@
1
1
  from janito.tools.tool_base import ToolBase, ToolPermissions
2
2
  from janito.report_events import ReportAction
3
- from janito.tools.adapters.local.adapter import register_local_tool
3
+ from janito.plugins.tools.local.adapter import register_local_tool
4
4
  from janito.i18n import tr
5
5
  import shutil
6
- from janito.tools.adapters.local.validate_file_syntax.core import validate_file_syntax
6
+ from janito.plugins.tools.local.validate_file_syntax.core import validate_file_syntax
7
7
 
8
8
 
9
9
  @register_local_tool