janito 3.0.0__tar.gz → 3.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. janito-3.2.0/ANNOUNCEMENT_v3.1.0.md +63 -0
  2. {janito-3.0.0 → janito-3.2.0}/PKG-INFO +1 -1
  3. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/CHANGELOG.md +33 -0
  4. janito-3.2.0/docs/changelogs/CHANGELOG_3.1.0.md +51 -0
  5. {janito-3.0.0 → janito-3.2.0}/docs/guides/using.md +1 -0
  6. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/filemanager.md +1 -1
  7. janito-3.2.0/docs/together-setup.md +86 -0
  8. {janito-3.0.0 → janito-3.2.0}/janito/README.md +3 -0
  9. janito-3.2.0/janito/cli/chat_mode/bindings.py +64 -0
  10. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/session.py +12 -1
  11. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +47 -33
  12. janito-3.2.0/janito/cli/core/model_guesser.py +70 -0
  13. {janito-3.0.0 → janito-3.2.0}/janito/cli/prompt_core.py +20 -9
  14. {janito-3.0.0 → janito-3.2.0}/janito/i18n/it.py +46 -46
  15. {janito-3.0.0 → janito-3.2.0}/janito/llm/agent.py +32 -16
  16. janito-3.2.0/janito/llm/cancellation_manager.py +63 -0
  17. {janito-3.0.0 → janito-3.2.0}/janito/llm/driver.py +8 -0
  18. janito-3.2.0/janito/llm/enter_cancellation.py +107 -0
  19. {janito-3.0.0 → janito-3.2.0}/janito/plugin_system/core_loader.py +76 -3
  20. {janito-3.0.0 → janito-3.2.0}/janito/plugin_system/core_loader_fixed.py +79 -3
  21. {janito-3.0.0 → janito-3.2.0}/janito/plugins/auto_loader.py +12 -11
  22. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/create_file.py +2 -2
  23. janito-3.2.0/janito/plugins/core_adapter.py +131 -0
  24. {janito-3.0.0 → janito-3.2.0}/janito/plugins/discovery_core.py +14 -9
  25. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/core_tools_plugin.py +9 -10
  26. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/create_file.py +2 -2
  27. {janito-3.0.0 → janito-3.2.0}/janito/providers/__init__.py +1 -0
  28. janito-3.2.0/janito/providers/together/__init__.py +1 -0
  29. janito-3.2.0/janito/providers/together/model_info.py +69 -0
  30. janito-3.2.0/janito/providers/together/provider.py +108 -0
  31. janito-3.2.0/janito/tools/loop_protection_decorator.py +142 -0
  32. {janito-3.0.0 → janito-3.2.0}/janito.egg-info/PKG-INFO +1 -1
  33. {janito-3.0.0 → janito-3.2.0}/janito.egg-info/SOURCES.txt +8 -1
  34. janito-3.0.0/janito/cli/chat_mode/bindings.py +0 -38
  35. janito-3.0.0/janito/cli/core/model_guesser.py +0 -54
  36. janito-3.0.0/janito/plugins/core_adapter.py +0 -55
  37. janito-3.0.0/janito/tools/function_adapter.py +0 -142
  38. janito-3.0.0/janito/tools/loop_protection_decorator.py +0 -145
  39. {janito-3.0.0 → janito-3.2.0}/.codespellrc +0 -0
  40. {janito-3.0.0 → janito-3.2.0}/.gitattributes +0 -0
  41. {janito-3.0.0 → janito-3.2.0}/.github/workflows/python-app.yml.disabled +0 -0
  42. {janito-3.0.0 → janito-3.2.0}/.gitignore +0 -0
  43. {janito-3.0.0 → janito-3.2.0}/.pre-commit-config.yaml +0 -0
  44. {janito-3.0.0 → janito-3.2.0}/.secrets.baseline +0 -0
  45. {janito-3.0.0 → janito-3.2.0}/.vscode/settings.json +0 -0
  46. {janito-3.0.0 → janito-3.2.0}/LICENSE +0 -0
  47. {janito-3.0.0 → janito-3.2.0}/MARKET_ANALYST_README.md +0 -0
  48. {janito-3.0.0 → janito-3.2.0}/README-dev.md +0 -0
  49. {janito-3.0.0 → janito-3.2.0}/README.md +0 -0
  50. {janito-3.0.0 → janito-3.2.0}/RELEASE_COMPARISON.md +0 -0
  51. {janito-3.0.0 → janito-3.2.0}/UPDATING_DOCS.md +0 -0
  52. {janito-3.0.0 → janito-3.2.0}/adding_mcp.txt +0 -0
  53. {janito-3.0.0 → janito-3.2.0}/docs/CHANGELOG.md +0 -0
  54. {janito-3.0.0 → janito-3.2.0}/docs/CHANGELOG_3.0.0.md +0 -0
  55. {janito-3.0.0 → janito-3.2.0}/docs/DIV.md +0 -0
  56. {janito-3.0.0 → janito-3.2.0}/docs/Interfaces.txt +0 -0
  57. {janito-3.0.0 → janito-3.2.0}/docs/PROFILES.md +0 -0
  58. {janito-3.0.0 → janito-3.2.0}/docs/TOOLBAR-STYLING.md +0 -0
  59. {janito-3.0.0 → janito-3.2.0}/docs/about/costs.md +0 -0
  60. {janito-3.0.0 → janito-3.2.0}/docs/about/vs-webchats.md +0 -0
  61. {janito-3.0.0 → janito-3.2.0}/docs/about/why.md +0 -0
  62. {janito-3.0.0 → janito-3.2.0}/docs/alibaba-setup.md +0 -0
  63. {janito-3.0.0 → janito-3.2.0}/docs/alternatives.md +0 -0
  64. {janito-3.0.0 → janito-3.2.0}/docs/cerebras-setup.md +0 -0
  65. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  66. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  67. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  68. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  69. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  70. {janito-3.0.0 → janito-3.2.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  71. {janito-3.0.0 → janito-3.2.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  72. {janito-3.0.0 → janito-3.2.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  73. {janito-3.0.0 → janito-3.2.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  74. {janito-3.0.0 → janito-3.2.0}/docs/code_intelligence/our-approach.md +0 -0
  75. {janito-3.0.0 → janito-3.2.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  76. {janito-3.0.0 → janito-3.2.0}/docs/concepts/analysis-style.md +0 -0
  77. {janito-3.0.0 → janito-3.2.0}/docs/concepts/human-guided-ai.md +0 -0
  78. {janito-3.0.0 → janito-3.2.0}/docs/concepts/index.md +0 -0
  79. {janito-3.0.0 → janito-3.2.0}/docs/concepts/language-model-clients.md +0 -0
  80. {janito-3.0.0 → janito-3.2.0}/docs/concepts/prompt-design-style.md +0 -0
  81. {janito-3.0.0 → janito-3.2.0}/docs/deepseek-setup.md +0 -0
  82. {janito-3.0.0 → janito-3.2.0}/docs/driver-flow.md +0 -0
  83. {janito-3.0.0 → janito-3.2.0}/docs/driver-request-cancellation.md +0 -0
  84. {janito-3.0.0 → janito-3.2.0}/docs/drivers/events.md +0 -0
  85. {janito-3.0.0 → janito-3.2.0}/docs/drivers.md +0 -0
  86. {janito-3.0.0 → janito-3.2.0}/docs/event-bus.md +0 -0
  87. {janito-3.0.0 → janito-3.2.0}/docs/guides/configuration.md +0 -0
  88. {janito-3.0.0 → janito-3.2.0}/docs/guides/developing.md +0 -0
  89. {janito-3.0.0 → janito-3.2.0}/docs/guides/disabled-tools.md +0 -0
  90. {janito-3.0.0 → janito-3.2.0}/docs/guides/installation.md +0 -0
  91. {janito-3.0.0 → janito-3.2.0}/docs/guides/market-data-sources.md +0 -0
  92. {janito-3.0.0 → janito-3.2.0}/docs/guides/profiles.md +0 -0
  93. {janito-3.0.0 → janito-3.2.0}/docs/guides/prompting/README.md +0 -0
  94. {janito-3.0.0 → janito-3.2.0}/docs/guides/read-chart-examples.md +0 -0
  95. {janito-3.0.0 → janito-3.2.0}/docs/guides/security-commands.md +0 -0
  96. {janito-3.0.0 → janito-3.2.0}/docs/guides/single-shot-terminal.md +0 -0
  97. {janito-3.0.0 → janito-3.2.0}/docs/guides/stock-market-guide.md +0 -0
  98. {janito-3.0.0 → janito-3.2.0}/docs/guides/terminal-shell.md +0 -0
  99. {janito-3.0.0 → janito-3.2.0}/docs/guides/tools-developer-guide.md +0 -0
  100. {janito-3.0.0 → janito-3.2.0}/docs/guides/url-whitelist.md +0 -0
  101. {janito-3.0.0 → janito-3.2.0}/docs/guides/using_tools.md +0 -0
  102. {janito-3.0.0 → janito-3.2.0}/docs/ibm-setup.md +0 -0
  103. {janito-3.0.0 → janito-3.2.0}/docs/imgs/code-generation-observability.png +0 -0
  104. {janito-3.0.0 → janito-3.2.0}/docs/imgs/code_generation_observability.png +0 -0
  105. {janito-3.0.0 → janito-3.2.0}/docs/imgs/happy-programmer.png +0 -0
  106. {janito-3.0.0 → janito-3.2.0}/docs/imgs/happy-programmer.svg +0 -0
  107. {janito-3.0.0 → janito-3.2.0}/docs/imgs/terminal-one-shot.png +0 -0
  108. {janito-3.0.0 → janito-3.2.0}/docs/imgs/terminal-shell.png +0 -0
  109. {janito-3.0.0 → janito-3.2.0}/docs/imgs/terminal_one_shot.png +0 -0
  110. {janito-3.0.0 → janito-3.2.0}/docs/imgs/terminal_shell.png +0 -0
  111. {janito-3.0.0 → janito-3.2.0}/docs/index.md +0 -0
  112. {janito-3.0.0 → janito-3.2.0}/docs/llm-drivers-required-config.md +0 -0
  113. {janito-3.0.0 → janito-3.2.0}/docs/llm-drivers.md +0 -0
  114. {janito-3.0.0 → janito-3.2.0}/docs/meta/developer-toolchain.md +0 -0
  115. {janito-3.0.0 → janito-3.2.0}/docs/meta/quality-checks.txt +0 -0
  116. {janito-3.0.0 → janito-3.2.0}/docs/mistral-setup.md +0 -0
  117. {janito-3.0.0 → janito-3.2.0}/docs/moonshot-setup.md +0 -0
  118. {janito-3.0.0 → janito-3.2.0}/docs/openai-setup.md +0 -0
  119. {janito-3.0.0 → janito-3.2.0}/docs/overrides/partials/copyright.html +0 -0
  120. {janito-3.0.0 → janito-3.2.0}/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -0
  121. {janito-3.0.0 → janito-3.2.0}/docs/plugins/MIGRATION_COMPLETE.md +0 -0
  122. {janito-3.0.0 → janito-3.2.0}/docs/plugins/README.md +0 -0
  123. {janito-3.0.0 → janito-3.2.0}/docs/plugins/api-reference.md +0 -0
  124. {janito-3.0.0 → janito-3.2.0}/docs/plugins/architecture.md +0 -0
  125. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  126. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
  127. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  128. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/system.md +0 -0
  129. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  130. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
  131. {janito-3.0.0 → janito-3.2.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
  132. {janito-3.0.0 → janito-3.2.0}/docs/plugins/configuration.md +0 -0
  133. {janito-3.0.0 → janito-3.2.0}/docs/plugins/examples/advanced.md +0 -0
  134. {janito-3.0.0 → janito-3.2.0}/docs/plugins/examples/basic.md +0 -0
  135. {janito-3.0.0 → janito-3.2.0}/docs/plugins/examples/intermediate.md +0 -0
  136. {janito-3.0.0 → janito-3.2.0}/docs/plugins/plugin-development.md +0 -0
  137. {janito-3.0.0 → janito-3.2.0}/docs/plugins/plugin-resources.md +0 -0
  138. {janito-3.0.0 → janito-3.2.0}/docs/plugins/publishing.md +0 -0
  139. {janito-3.0.0 → janito-3.2.0}/docs/plugins/remote-plugins.md +0 -0
  140. {janito-3.0.0 → janito-3.2.0}/docs/plugins/testing.md +0 -0
  141. {janito-3.0.0 → janito-3.2.0}/docs/provider-platform-access.md +0 -0
  142. {janito-3.0.0 → janito-3.2.0}/docs/public-sources.md +0 -0
  143. {janito-3.0.0 → janito-3.2.0}/docs/reference/api.md +0 -0
  144. {janito-3.0.0 → janito-3.2.0}/docs/reference/azure-openai.md +0 -0
  145. {janito-3.0.0 → janito-3.2.0}/docs/reference/cli-options.md +0 -0
  146. {janito-3.0.0 → janito-3.2.0}/docs/reference/message-handler-model.md +0 -0
  147. {janito-3.0.0 → janito-3.2.0}/docs/reference/rich-message-handler.md +0 -0
  148. {janito-3.0.0 → janito-3.2.0}/docs/security.md +0 -0
  149. {janito-3.0.0 → janito-3.2.0}/docs/supported-providers-models.md +0 -0
  150. {janito-3.0.0 → janito-3.2.0}/docs/tools/search-text.md +0 -0
  151. {janito-3.0.0 → janito-3.2.0}/docs/tools/show-image-grid.md +0 -0
  152. {janito-3.0.0 → janito-3.2.0}/docs/tools/show-image.md +0 -0
  153. {janito-3.0.0 → janito-3.2.0}/docs/tools-index.md +0 -0
  154. {janito-3.0.0 → janito-3.2.0}/docs/tools-natural-results.md +0 -0
  155. {janito-3.0.0 → janito-3.2.0}/docs/tools-precision.md +0 -0
  156. {janito-3.0.0 → janito-3.2.0}/docs/z-ai-setup.md +0 -0
  157. {janito-3.0.0 → janito-3.2.0}/examples/loop_protection_example.py +0 -0
  158. {janito-3.0.0 → janito-3.2.0}/examples/loop_protection_tool_example.py +0 -0
  159. {janito-3.0.0 → janito-3.2.0}/get_nasdaq_top.py +0 -0
  160. {janito-3.0.0 → janito-3.2.0}/ibm-logo.txt +0 -0
  161. {janito-3.0.0 → janito-3.2.0}/init_janito_tools.py +0 -0
  162. {janito-3.0.0 → janito-3.2.0}/janito/__init__.py +0 -0
  163. {janito-3.0.0 → janito-3.2.0}/janito/__main__.py +0 -0
  164. {janito-3.0.0 → janito-3.2.0}/janito/_version.py +0 -0
  165. {janito-3.0.0 → janito-3.2.0}/janito/agent/setup_agent.py +0 -0
  166. {janito-3.0.0 → janito-3.2.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  167. {janito-3.0.0 → janito-3.2.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  168. {janito-3.0.0 → janito-3.2.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  169. {janito-3.0.0 → janito-3.2.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  170. {janito-3.0.0 → janito-3.2.0}/janito/cli/__init__.py +0 -0
  171. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  172. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  173. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/script_runner.py +0 -0
  174. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  175. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  176. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  177. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  178. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  179. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  180. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  181. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  182. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  183. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  184. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  185. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  186. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  187. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  188. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  189. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  190. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
  191. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  192. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  193. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  194. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  195. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  196. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  197. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  198. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  199. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  200. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  201. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  202. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  203. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  204. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  205. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  206. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  207. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  208. {janito-3.0.0 → janito-3.2.0}/janito/cli/chat_mode/toolbar.py +0 -0
  209. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/check_tools.py +0 -0
  210. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
  211. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_config.py +0 -0
  212. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  213. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_models.py +0 -0
  214. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_plugins.py +0 -0
  215. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  216. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_providers.py +0 -0
  217. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  218. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/list_tools.py +0 -0
  219. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/model_selection.py +0 -0
  220. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/model_utils.py +0 -0
  221. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  222. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  223. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/show_config.py +0 -0
  224. {janito-3.0.0 → janito-3.2.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  225. {janito-3.0.0 → janito-3.2.0}/janito/cli/config.py +0 -0
  226. {janito-3.0.0 → janito-3.2.0}/janito/cli/console.py +0 -0
  227. {janito-3.0.0 → janito-3.2.0}/janito/cli/core/__init__.py +0 -0
  228. {janito-3.0.0 → janito-3.2.0}/janito/cli/core/event_logger.py +0 -0
  229. {janito-3.0.0 → janito-3.2.0}/janito/cli/core/getters.py +0 -0
  230. {janito-3.0.0 → janito-3.2.0}/janito/cli/core/runner.py +0 -0
  231. {janito-3.0.0 → janito-3.2.0}/janito/cli/core/setters.py +0 -0
  232. {janito-3.0.0 → janito-3.2.0}/janito/cli/core/unsetters.py +0 -0
  233. {janito-3.0.0 → janito-3.2.0}/janito/cli/main.py +0 -0
  234. {janito-3.0.0 → janito-3.2.0}/janito/cli/main_cli.py +0 -0
  235. {janito-3.0.0 → janito-3.2.0}/janito/cli/prompt_handler.py +0 -0
  236. {janito-3.0.0 → janito-3.2.0}/janito/cli/prompt_setup.py +0 -0
  237. {janito-3.0.0 → janito-3.2.0}/janito/cli/rich_terminal_reporter.py +0 -0
  238. {janito-3.0.0 → janito-3.2.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  239. {janito-3.0.0 → janito-3.2.0}/janito/cli/single_shot_mode/handler.py +0 -0
  240. {janito-3.0.0 → janito-3.2.0}/janito/cli/utils.py +0 -0
  241. {janito-3.0.0 → janito-3.2.0}/janito/cli/verbose_output.py +0 -0
  242. {janito-3.0.0 → janito-3.2.0}/janito/config.py +0 -0
  243. {janito-3.0.0 → janito-3.2.0}/janito/config_manager.py +0 -0
  244. {janito-3.0.0 → janito-3.2.0}/janito/conversation_history.py +0 -0
  245. {janito-3.0.0 → janito-3.2.0}/janito/dir_walk_utils.py +0 -0
  246. {janito-3.0.0 → janito-3.2.0}/janito/docs/GETTING_STARTED.md +0 -0
  247. {janito-3.0.0 → janito-3.2.0}/janito/driver_events.py +0 -0
  248. {janito-3.0.0 → janito-3.2.0}/janito/drivers/azure_openai/driver.py +0 -0
  249. {janito-3.0.0 → janito-3.2.0}/janito/drivers/cerebras/__init__.py +0 -0
  250. {janito-3.0.0 → janito-3.2.0}/janito/drivers/dashscope.bak.zip +0 -0
  251. {janito-3.0.0 → janito-3.2.0}/janito/drivers/openai/README.md +0 -0
  252. {janito-3.0.0 → janito-3.2.0}/janito/drivers/openai/driver.py +0 -0
  253. {janito-3.0.0 → janito-3.2.0}/janito/drivers/openai_responses.bak.zip +0 -0
  254. {janito-3.0.0 → janito-3.2.0}/janito/drivers/zai/__init__.py +0 -0
  255. {janito-3.0.0 → janito-3.2.0}/janito/drivers/zai/driver.py +0 -0
  256. {janito-3.0.0 → janito-3.2.0}/janito/event_bus/__init__.py +0 -0
  257. {janito-3.0.0 → janito-3.2.0}/janito/event_bus/bus.py +0 -0
  258. {janito-3.0.0 → janito-3.2.0}/janito/event_bus/event.py +0 -0
  259. {janito-3.0.0 → janito-3.2.0}/janito/event_bus/handler.py +0 -0
  260. {janito-3.0.0 → janito-3.2.0}/janito/event_bus/queue_bus.py +0 -0
  261. {janito-3.0.0 → janito-3.2.0}/janito/exceptions.py +0 -0
  262. {janito-3.0.0 → janito-3.2.0}/janito/formatting.py +0 -0
  263. {janito-3.0.0 → janito-3.2.0}/janito/formatting_token.py +0 -0
  264. {janito-3.0.0 → janito-3.2.0}/janito/gitignore_utils.py +0 -0
  265. {janito-3.0.0 → janito-3.2.0}/janito/i18n/__init__.py +0 -0
  266. {janito-3.0.0 → janito-3.2.0}/janito/i18n/messages.py +0 -0
  267. {janito-3.0.0 → janito-3.2.0}/janito/i18n/pt.py +0 -0
  268. {janito-3.0.0 → janito-3.2.0}/janito/llm/README.md +0 -0
  269. {janito-3.0.0 → janito-3.2.0}/janito/llm/__init__.py +0 -0
  270. {janito-3.0.0 → janito-3.2.0}/janito/llm/auth.py +0 -0
  271. {janito-3.0.0 → janito-3.2.0}/janito/llm/auth_utils.py +0 -0
  272. {janito-3.0.0 → janito-3.2.0}/janito/llm/driver_config.py +0 -0
  273. {janito-3.0.0 → janito-3.2.0}/janito/llm/driver_config_builder.py +0 -0
  274. {janito-3.0.0 → janito-3.2.0}/janito/llm/driver_input.py +0 -0
  275. {janito-3.0.0 → janito-3.2.0}/janito/llm/message_parts.py +0 -0
  276. {janito-3.0.0 → janito-3.2.0}/janito/llm/model.py +0 -0
  277. {janito-3.0.0 → janito-3.2.0}/janito/llm/provider.py +0 -0
  278. {janito-3.0.0 → janito-3.2.0}/janito/mkdocs.yml +0 -0
  279. {janito-3.0.0 → janito-3.2.0}/janito/perf_singleton.py +0 -0
  280. {janito-3.0.0 → janito-3.2.0}/janito/performance_collector.py +0 -0
  281. {janito-3.0.0 → janito-3.2.0}/janito/platform_discovery.py +0 -0
  282. {janito-3.0.0 → janito-3.2.0}/janito/plugin_system/__init__.py +0 -0
  283. {janito-3.0.0 → janito-3.2.0}/janito/plugin_system/base.py +0 -0
  284. {janito-3.0.0 → janito-3.2.0}/janito/plugins/__init__.py +0 -0
  285. {janito-3.0.0 → janito-3.2.0}/janito/plugins/auto_loader_fixed.py +0 -0
  286. {janito-3.0.0 → janito-3.2.0}/janito/plugins/builtin.py +0 -0
  287. {janito-3.0.0 → janito-3.2.0}/janito/plugins/config.py +0 -0
  288. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/__init__.py +0 -0
  289. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/__init__.py +0 -0
  290. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  291. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
  292. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  293. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  294. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  295. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  296. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  297. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/search_text/core.py +0 -0
  298. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  299. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  300. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  301. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/__init__.py +0 -0
  302. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/copy_file.py +0 -0
  303. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/create_directory.py +0 -0
  304. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/delete_text_in_file.py +0 -0
  305. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/find_files.py +0 -0
  306. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/move_file.py +0 -0
  307. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/read_files.py +0 -0
  308. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/remove_directory.py +0 -0
  309. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/remove_file.py +0 -0
  310. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
  311. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  312. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  313. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  314. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  315. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
  316. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  317. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  318. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  319. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  320. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  321. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  322. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  323. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/filemanager/tools/view_file.py +0 -0
  324. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/imagedisplay/__init__.py +0 -0
  325. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/imagedisplay/plugin.py +0 -0
  326. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/imagedisplay/tools/__init__.py +0 -0
  327. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/imagedisplay/tools/show_image.py +0 -0
  328. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/imagedisplay/tools/show_image_grid.py +0 -0
  329. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/system/__init__.py +0 -0
  330. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/system/tools/run_bash_command.py +0 -0
  331. {janito-3.0.0 → janito-3.2.0}/janito/plugins/core/system/tools/run_powershell_command.py +0 -0
  332. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/__init__.py +0 -0
  333. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/pythondev/__init__.py +0 -0
  334. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/pythondev/tools/python_code_run.py +0 -0
  335. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/pythondev/tools/python_command_run.py +0 -0
  336. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/pythondev/tools/python_file_run.py +0 -0
  337. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/visualization/__init__.py +0 -0
  338. {janito-3.0.0 → janito-3.2.0}/janito/plugins/dev/visualization/tools/read_chart.py +0 -0
  339. {janito-3.0.0 → janito-3.2.0}/janito/plugins/discovery.py +0 -0
  340. {janito-3.0.0 → janito-3.2.0}/janito/plugins/example_plugin.py +0 -0
  341. {janito-3.0.0 → janito-3.2.0}/janito/plugins/manager.py +0 -0
  342. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/__init__.py +0 -0
  343. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/ask_user.py +0 -0
  344. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/copy_file.py +0 -0
  345. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/create_directory.py +0 -0
  346. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/decorators.py +0 -0
  347. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/delete_text_in_file.py +0 -0
  348. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/fetch_url.py +0 -0
  349. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/find_files.py +0 -0
  350. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/get_file_outline/__init__.py +0 -0
  351. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/get_file_outline/core.py +0 -0
  352. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/get_file_outline/java_outline.py +0 -0
  353. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/get_file_outline/markdown_outline.py +0 -0
  354. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/get_file_outline/python_outline.py +0 -0
  355. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/get_file_outline/search_outline.py +0 -0
  356. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/move_file.py +0 -0
  357. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/open_html_in_browser.py +0 -0
  358. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/open_url.py +0 -0
  359. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/python_code_run.py +0 -0
  360. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/python_command_run.py +0 -0
  361. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/python_file_run.py +0 -0
  362. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/read_chart.py +0 -0
  363. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/read_files.py +0 -0
  364. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/remove_directory.py +0 -0
  365. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/remove_file.py +0 -0
  366. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/replace_text_in_file.py +0 -0
  367. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/run_bash_command.py +0 -0
  368. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/run_powershell_command.py +0 -0
  369. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/search_text/__init__.py +0 -0
  370. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/search_text/core.py +0 -0
  371. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/search_text/match_lines.py +0 -0
  372. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/search_text/pattern_utils.py +0 -0
  373. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/search_text/traverse_directory.py +0 -0
  374. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/show_image.py +0 -0
  375. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/show_image_grid.py +0 -0
  376. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/__init__.py +0 -0
  377. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/core.py +0 -0
  378. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/css_validator.py +0 -0
  379. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/html_validator.py +0 -0
  380. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/jinja2_validator.py +0 -0
  381. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/js_validator.py +0 -0
  382. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/json_validator.py +0 -0
  383. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/markdown_validator.py +0 -0
  384. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/ps1_validator.py +0 -0
  385. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/python_validator.py +0 -0
  386. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/xml_validator.py +0 -0
  387. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/validate_file_syntax/yaml_validator.py +0 -0
  388. {janito-3.0.0 → janito-3.2.0}/janito/plugins/tools/view_file.py +0 -0
  389. {janito-3.0.0 → janito-3.2.0}/janito/plugins/ui/__init__.py +0 -0
  390. {janito-3.0.0 → janito-3.2.0}/janito/plugins/ui/userinterface/__init__.py +0 -0
  391. {janito-3.0.0 → janito-3.2.0}/janito/plugins/ui/userinterface/tools/ask_user.py +0 -0
  392. {janito-3.0.0 → janito-3.2.0}/janito/plugins/web/__init__.py +0 -0
  393. {janito-3.0.0 → janito-3.2.0}/janito/plugins/web/webtools/__init__.py +0 -0
  394. {janito-3.0.0 → janito-3.2.0}/janito/plugins/web/webtools/tools/fetch_url.py +0 -0
  395. {janito-3.0.0 → janito-3.2.0}/janito/plugins/web/webtools/tools/open_html_in_browser.py +0 -0
  396. {janito-3.0.0 → janito-3.2.0}/janito/plugins/web/webtools/tools/open_url.py +0 -0
  397. {janito-3.0.0 → janito-3.2.0}/janito/provider_config.py +0 -0
  398. {janito-3.0.0 → janito-3.2.0}/janito/provider_registry.py +0 -0
  399. {janito-3.0.0 → janito-3.2.0}/janito/providers/alibaba/__init__.py +0 -0
  400. {janito-3.0.0 → janito-3.2.0}/janito/providers/alibaba/model_info.py +0 -0
  401. {janito-3.0.0 → janito-3.2.0}/janito/providers/alibaba/provider.py +0 -0
  402. {janito-3.0.0 → janito-3.2.0}/janito/providers/anthropic/model_info.py +0 -0
  403. {janito-3.0.0 → janito-3.2.0}/janito/providers/anthropic/provider.py +0 -0
  404. {janito-3.0.0 → janito-3.2.0}/janito/providers/azure_openai/model_info.py +0 -0
  405. {janito-3.0.0 → janito-3.2.0}/janito/providers/azure_openai/provider.py +0 -0
  406. {janito-3.0.0 → janito-3.2.0}/janito/providers/cerebras/__init__.py +0 -0
  407. {janito-3.0.0 → janito-3.2.0}/janito/providers/cerebras/model_info.py +0 -0
  408. {janito-3.0.0 → janito-3.2.0}/janito/providers/cerebras/provider.py +0 -0
  409. {janito-3.0.0 → janito-3.2.0}/janito/providers/dashscope.bak.zip +0 -0
  410. {janito-3.0.0 → janito-3.2.0}/janito/providers/deepseek/__init__.py +0 -0
  411. {janito-3.0.0 → janito-3.2.0}/janito/providers/deepseek/model_info.py +0 -0
  412. {janito-3.0.0 → janito-3.2.0}/janito/providers/deepseek/provider.py +0 -0
  413. {janito-3.0.0 → janito-3.2.0}/janito/providers/google/__init__.py +0 -0
  414. {janito-3.0.0 → janito-3.2.0}/janito/providers/google/model_info.py +0 -0
  415. {janito-3.0.0 → janito-3.2.0}/janito/providers/google/provider.py +0 -0
  416. {janito-3.0.0 → janito-3.2.0}/janito/providers/ibm/README.md +0 -0
  417. {janito-3.0.0 → janito-3.2.0}/janito/providers/ibm/__init__.py +0 -0
  418. {janito-3.0.0 → janito-3.2.0}/janito/providers/ibm/model_info.py +0 -0
  419. {janito-3.0.0 → janito-3.2.0}/janito/providers/ibm/provider.py +0 -0
  420. {janito-3.0.0 → janito-3.2.0}/janito/providers/mistral/__init__.py +0 -0
  421. {janito-3.0.0 → janito-3.2.0}/janito/providers/mistral/model_info.py +0 -0
  422. {janito-3.0.0 → janito-3.2.0}/janito/providers/mistral/provider.py +0 -0
  423. {janito-3.0.0 → janito-3.2.0}/janito/providers/moonshot/__init__.py +0 -0
  424. {janito-3.0.0 → janito-3.2.0}/janito/providers/moonshot/model_info.py +0 -0
  425. {janito-3.0.0 → janito-3.2.0}/janito/providers/moonshot/provider.py +0 -0
  426. {janito-3.0.0 → janito-3.2.0}/janito/providers/openai/__init__.py +0 -0
  427. {janito-3.0.0 → janito-3.2.0}/janito/providers/openai/model_info.py +0 -0
  428. {janito-3.0.0 → janito-3.2.0}/janito/providers/openai/provider.py +0 -0
  429. {janito-3.0.0 → janito-3.2.0}/janito/providers/openai/schema_generator.py +0 -0
  430. {janito-3.0.0 → janito-3.2.0}/janito/providers/registry.py +0 -0
  431. {janito-3.0.0 → janito-3.2.0}/janito/providers/zai/__init__.py +0 -0
  432. {janito-3.0.0 → janito-3.2.0}/janito/providers/zai/model_info.py +0 -0
  433. {janito-3.0.0 → janito-3.2.0}/janito/providers/zai/provider.py +0 -0
  434. {janito-3.0.0 → janito-3.2.0}/janito/providers/zai/schema_generator.py +0 -0
  435. {janito-3.0.0 → janito-3.2.0}/janito/regions/__init__.py +0 -0
  436. {janito-3.0.0 → janito-3.2.0}/janito/regions/cli.py +0 -0
  437. {janito-3.0.0 → janito-3.2.0}/janito/regions/geo_utils.py +0 -0
  438. {janito-3.0.0 → janito-3.2.0}/janito/regions/provider_regions.py +0 -0
  439. {janito-3.0.0 → janito-3.2.0}/janito/report_events.py +0 -0
  440. {janito-3.0.0 → janito-3.2.0}/janito/shell.bak.zip +0 -0
  441. {janito-3.0.0 → janito-3.2.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  442. {janito-3.0.0 → janito-3.2.0}/janito/tools/README.md +0 -0
  443. {janito-3.0.0 → janito-3.2.0}/janito/tools/__init__.py +0 -0
  444. {janito-3.0.0 → janito-3.2.0}/janito/tools/adapters/__init__.py +0 -0
  445. {janito-3.0.0 → janito-3.2.0}/janito/tools/adapters/local/__init__.py +0 -0
  446. {janito-3.0.0 → janito-3.2.0}/janito/tools/adapters/local/adapter.py +0 -0
  447. {janito-3.0.0 → janito-3.2.0}/janito/tools/base.py +0 -0
  448. {janito-3.0.0 → janito-3.2.0}/janito/tools/cli_initializer.py +0 -0
  449. {janito-3.0.0 → janito-3.2.0}/janito/tools/disabled_tools.py +0 -0
  450. {janito-3.0.0 → janito-3.2.0}/janito/tools/initialize.py +0 -0
  451. {janito-3.0.0 → janito-3.2.0}/janito/tools/inspect_registry.py +0 -0
  452. {janito-3.0.0 → janito-3.2.0}/janito/tools/loop_protection.py +0 -0
  453. {janito-3.0.0 → janito-3.2.0}/janito/tools/outline_file.bak.zip +0 -0
  454. {janito-3.0.0 → janito-3.2.0}/janito/tools/path_security.py +0 -0
  455. {janito-3.0.0 → janito-3.2.0}/janito/tools/path_utils.py +0 -0
  456. {janito-3.0.0 → janito-3.2.0}/janito/tools/permissions.py +0 -0
  457. {janito-3.0.0 → janito-3.2.0}/janito/tools/permissions_parse.py +0 -0
  458. {janito-3.0.0 → janito-3.2.0}/janito/tools/tool_base.py +0 -0
  459. {janito-3.0.0 → janito-3.2.0}/janito/tools/tool_events.py +0 -0
  460. {janito-3.0.0 → janito-3.2.0}/janito/tools/tool_run_exception.py +0 -0
  461. {janito-3.0.0 → janito-3.2.0}/janito/tools/tool_use_tracker.py +0 -0
  462. {janito-3.0.0 → janito-3.2.0}/janito/tools/tool_utils.py +0 -0
  463. {janito-3.0.0 → janito-3.2.0}/janito/tools/tools_adapter.py +0 -0
  464. {janito-3.0.0 → janito-3.2.0}/janito/tools/tools_schema.py +0 -0
  465. {janito-3.0.0 → janito-3.2.0}/janito/tools/url_whitelist.py +0 -0
  466. {janito-3.0.0 → janito-3.2.0}/janito/utils.py +0 -0
  467. {janito-3.0.0 → janito-3.2.0}/janito.egg-info/dependency_links.txt +0 -0
  468. {janito-3.0.0 → janito-3.2.0}/janito.egg-info/entry_points.txt +0 -0
  469. {janito-3.0.0 → janito-3.2.0}/janito.egg-info/requires.txt +0 -0
  470. {janito-3.0.0 → janito-3.2.0}/janito.egg-info/top_level.txt +0 -0
  471. {janito-3.0.0 → janito-3.2.0}/market_prompt_fix.py +0 -0
  472. {janito-3.0.0 → janito-3.2.0}/market_test.py +0 -0
  473. {janito-3.0.0 → janito-3.2.0}/mkdocs.yml +0 -0
  474. {janito-3.0.0 → janito-3.2.0}/mkdocs_hooks.py +0 -0
  475. {janito-3.0.0 → janito-3.2.0}/pyproject.toml +0 -0
  476. {janito-3.0.0 → janito-3.2.0}/pytest.ini +0 -0
  477. {janito-3.0.0 → janito-3.2.0}/requirements-dev.txt +0 -0
  478. {janito-3.0.0 → janito-3.2.0}/requirements.txt +0 -0
  479. {janito-3.0.0 → janito-3.2.0}/setup.cfg +0 -0
  480. {janito-3.0.0 → janito-3.2.0}/test.txt +0 -0
  481. {janito-3.0.0 → janito-3.2.0}/test_example.py +0 -0
  482. {janito-3.0.0 → janito-3.2.0}/test_http_errors.py +0 -0
  483. {janito-3.0.0 → janito-3.2.0}/test_http_errors_direct.py +0 -0
  484. {janito-3.0.0 → janito-3.2.0}/test_key_field_behavior.py +0 -0
  485. {janito-3.0.0 → janito-3.2.0}/test_key_field_protection.py +0 -0
  486. {janito-3.0.0 → janito-3.2.0}/test_loop_protection_return.py +0 -0
  487. {janito-3.0.0 → janito-3.2.0}/test_market_analyst.py +0 -0
  488. {janito-3.0.0 → janito-3.2.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  489. {janito-3.0.0 → janito-3.2.0}/tests/adapters/local/test_read_files.py +0 -0
  490. {janito-3.0.0 → janito-3.2.0}/tests/test_cli_list_models.py +0 -0
  491. {janito-3.0.0 → janito-3.2.0}/tests/test_cli_list_providers.py +0 -0
  492. {janito-3.0.0 → janito-3.2.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  493. {janito-3.0.0 → janito-3.2.0}/tests/test_cli_list_providers_moonshot.py +0 -0
  494. {janito-3.0.0 → janito-3.2.0}/tests/test_cli_version.py +0 -0
  495. {janito-3.0.0 → janito-3.2.0}/tests/test_disabled_tools.py +0 -0
  496. {janito-3.0.0 → janito-3.2.0}/tests/test_plugin_system.py +0 -0
  497. {janito-3.0.0 → janito-3.2.0}/tests/test_provider_alibaba.py +0 -0
  498. {janito-3.0.0 → janito-3.2.0}/tests/test_provider_cerebras.py +0 -0
  499. {janito-3.0.0 → janito-3.2.0}/tests/test_provider_moonshot.py +0 -0
  500. {janito-3.0.0 → janito-3.2.0}/tools/release.py +0 -0
  501. {janito-3.0.0 → janito-3.2.0}/tox.ini +0 -0
@@ -0,0 +1,63 @@
1
+ # 🚀 Janito v3.1.0 Released - Enter Key Cancellation for Chat Mode
2
+
3
+ **Release Date:** August 23, 2025
4
+ **Version:** v3.1.0
5
+ **PyPI:** [janito 3.1.0](https://pypi.org/project/janito/3.1.0/)
6
+
7
+ ## 🎯 What's New
8
+
9
+ ### Instant Request Cancellation in Chat Mode
10
+
11
+ Say goodbye to waiting for stuck LLM requests! Janito v3.1.0 introduces **Enter key cancellation support** for interactive chat mode.
12
+
13
+ #### ✨ Key Features
14
+ - **Press Enter to Cancel**: Instantly cancel any running request with a single key press
15
+ - **Real-time Feedback**: Clear visual confirmation when cancellation occurs
16
+ - **Clean Recovery**: Session remains active and ready for your next prompt
17
+ - **Cross-Platform**: Works seamlessly across all supported platforms
18
+
19
+ #### 🎮 How to Use
20
+ 1. Start chat mode: `janito`
21
+ 2. Submit any prompt
22
+ 3. **Press Enter** at any time to cancel the current request
23
+ 4. See immediate confirmation: "Request cancelled by Enter key"
24
+ 5. Continue chatting without interruption
25
+
26
+ ## 📦 Installation & Upgrade
27
+
28
+ ```bash
29
+ # New installation
30
+ pip install janito==3.1.0
31
+
32
+ # Upgrade existing installation
33
+ pip install --upgrade janito
34
+ ```
35
+
36
+ ## 🔧 Technical Highlights
37
+
38
+ - **Global Cancellation Manager**: Robust cross-component cancellation system
39
+ - **Thread-Safe**: Safe cancellation across async operations
40
+ - **Backward Compatible**: All existing functionality preserved
41
+ - **Clean Architecture**: Extensible design for future enhancements
42
+
43
+ ## 📚 Documentation
44
+
45
+ - [Full Release Notes](docs/changelogs/CHANGELOG_3.1.0.md)
46
+ - [Updated Usage Guide](docs/guides/using.md)
47
+ - [CLI Options Reference](docs/reference/cli-options.md)
48
+
49
+ ## 🌟 Try It Now
50
+
51
+ Experience the improved chat mode with instant cancellation:
52
+
53
+ ```bash
54
+ janito
55
+ # Then try: "Write a comprehensive analysis of quantum computing applications"
56
+ # Press Enter anytime to cancel if needed!
57
+ ```
58
+
59
+ ---
60
+
61
+ **Happy coding!** 🎉
62
+
63
+ *Join our community for support and discussions.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 3.0.0
3
+ Version: 3.2.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
@@ -517,4 +517,37 @@ For users upgrading from previous versions:
517
517
 
518
518
  ---
519
519
 
520
+ ## [3.1.0] - 2025-08-23
521
+
522
+ ### Added
523
+
524
+ - **Enter Key Cancellation Support for Chat Mode**: Revolutionary usability improvement for interactive chat sessions
525
+ - **Instant Request Cancellation**: Press **Enter key** at any time to immediately cancel current LLM operations
526
+ - **Global Cancellation Manager**: Robust cross-component cancellation system spanning agent, driver, and prompt handler
527
+ - **User Feedback**: Clear visual confirmation with red "Request cancelled by Enter key" message
528
+ - **Clean State Management**: Automatic cleanup of cancellation state after request completion
529
+ - **Thread-Safe Implementation**: Safe cancellation across multiple threads and async operations
530
+
531
+ ### Technical Implementation
532
+
533
+ - **Global Cancellation Manager**: New `janito.llm.cancellation_manager` module provides centralized cancellation handling
534
+ - **Key Binding Integration**: Enhanced chat mode with dedicated Enter key handling for cancellation
535
+ - **Cross-Component Support**: Cancellation signals properly propagate through entire application stack
536
+ - **Backward Compatible**: All existing functionality preserved, cancellation is additive feature
537
+
538
+ ### Developer Experience
539
+
540
+ - **Extensible Architecture**: Cancellation system designed for future integration with other components
541
+ - **Clean API**: Simple interface for starting, cancelling, and clearing requests across application
542
+ - **Comprehensive Testing**: Full test coverage for cancellation scenarios and edge cases
543
+
544
+ ### Documentation
545
+
546
+ - Updated CLI options documentation with new cancellation behavior
547
+ - Enhanced chat mode guides with cancellation instructions
548
+ - Added troubleshooting section for long-running requests
549
+ - New dedicated changelog: [CHANGELOG_3.1.0.md](../changelogs/CHANGELOG_3.1.0.md)
550
+
551
+ ---
552
+
520
553
  **Full Changelog**: https://github.com/ikignosis/janito/compare/v2.22.0...v2.23.0
@@ -0,0 +1,51 @@
1
+ # Janito v3.1.0 Release Notes
2
+
3
+ **Release Date:** August 23, 2025
4
+ **Version:** v3.1.0
5
+ **PyPI:** [janito 3.1.0](https://pypi.org/project/janito/3.1.0/)
6
+
7
+ ## 🚀 New Features
8
+
9
+ ### Enter Key Cancellation Support for Chat Mode
10
+
11
+ This release introduces a significant usability improvement for the interactive chat mode: **Enter key cancellation support**.
12
+
13
+ #### What's New
14
+ - **Instant Request Cancellation**: Press the **Enter key** at any time during a request to immediately cancel the current LLM operation
15
+ - **Global Cancellation Manager**: Robust cancellation system that works across all components (agent, driver, prompt handler)
16
+ - **User Feedback**: Clear visual confirmation when a request is cancelled
17
+ - **Clean State Management**: Proper cleanup of cancellation state after request completion
18
+
19
+ #### How It Works
20
+ When you're in chat mode and a request is taking longer than expected:
21
+ 1. Simply press **Enter** - no need for Ctrl+C or other interrupt combinations
22
+ 2. The current LLM request is immediately cancelled
23
+ 3. You'll see a red confirmation message: "Request cancelled by Enter key"
24
+ 4. The chat session remains active and ready for your next prompt
25
+
26
+ #### Technical Implementation
27
+ - **Global Cancellation Manager**: New `janito.llm.cancellation_manager` module provides centralized cancellation handling
28
+ - **Key Binding Integration**: Chat mode now has dedicated Enter key handling for cancellation
29
+ - **Cross-Component Support**: Cancellation signals propagate properly through agent, driver, and prompt handler layers
30
+ - **Thread-Safe**: Robust handling across multiple threads and async operations
31
+
32
+ ## 🔄 Changes
33
+
34
+ - Enhanced chat mode user experience with intuitive cancellation
35
+ - Improved responsiveness during long-running LLM requests
36
+ - Better error handling and state cleanup for cancelled operations
37
+
38
+ ## 📚 Documentation Updates
39
+
40
+ - Updated CLI options documentation
41
+ - Added cancellation behavior to chat mode guides
42
+ - Enhanced troubleshooting sections for long-running requests
43
+
44
+ ## 🛠️ Developer Notes
45
+
46
+ The cancellation system is designed to be extensible and can be integrated with other components as needed. The global cancellation manager provides a clean API for starting, cancelling, and clearing requests across the entire application stack.
47
+
48
+ ---
49
+
50
+ **Installation:** `pip install janito==3.1.0`
51
+ **Upgrade:** `pip install --upgrade janito`
@@ -24,6 +24,7 @@ janito --web
24
24
  ## Basic Usage Tips
25
25
  - Use natural language to describe what you want Janito to do (e.g., "Add type hints to all functions in utils.py").
26
26
  - In the chat shell, use `/help` for available commands. Use `/exec on` to enable code/shell execution tools at runtime.
27
+ - **Press Enter** at any time to cancel a long-running request in chat mode
27
28
  - Use CLI flags to customize behavior (see [CLI Options](../reference/cli-options.md)).
28
29
 
29
30
  ## More Resources
@@ -74,7 +74,7 @@ Overwrite existing file (use with caution):
74
74
  - **Path Expansion**: Supports `~` for home directory and environment variables like `$HOME`
75
75
  - **Directory Creation**: Automatically creates parent directories as needed
76
76
  - **Encoding Safety**: Uses UTF-8 encoding with proper error handling for international characters
77
- - **Loop Protection**: Prevents excessive file creation calls (max 5 per 10 seconds per file)
77
+ - **Loop Protection**: Prevents repeated create calls for the same path within a short window (1 allowed per 10 seconds)
78
78
 
79
79
  **Return Values:**
80
80
 
@@ -0,0 +1,86 @@
1
+ # Together AI Setup Guide
2
+
3
+ This guide explains how to set up the Together AI provider for Janito, giving you access to OLMo 2 models and other open-source models.
4
+
5
+ ## 1. Get Your Together AI API Key
6
+
7
+ 1. Visit [Together AI](https://api.together.xyz/)
8
+ 2. Sign up for an account
9
+ 3. Navigate to your API keys section
10
+ 4. Copy your API key
11
+
12
+ ## 2. Configure Janito for Together AI
13
+
14
+ ### Set your API key:
15
+ ```bash
16
+ janito --set-api-key YOUR_TOGETHER_API_KEY --provider together
17
+ ```
18
+
19
+ ### Set Together AI as your default provider:
20
+ ```bash
21
+ janito --set-config provider together
22
+ ```
23
+
24
+ ## 3. Available Models
25
+
26
+ The Together AI provider supports several models including:
27
+
28
+ - **allenai/OLMo-2-0325-32B-Instruct** (default) - Fully open 32B parameter model
29
+ - **allenai/OLMo-2-1124-7B-Instruct** - 7B parameter OLMo 2 model
30
+ - **allenai/OLMo-2-0425-1B** - 1B parameter OLMo 2 model
31
+ - **meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo**
32
+ - **meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo**
33
+ - **mistralai/Mixtral-8x7B-Instruct-v0.1**
34
+ - **deepseek-ai/deepseek-llm-67b-chat**
35
+
36
+ ## 4. Usage Examples
37
+
38
+ ### Basic chat:
39
+ ```bash
40
+ janito chat --provider together
41
+ ```
42
+
43
+ ### Use a specific model:
44
+ ```bash
45
+ janito chat --provider together --model allenai/OLMo-2-1124-7B-Instruct
46
+ ```
47
+
48
+ ### Single query:
49
+ ```bash
50
+ janito "Explain quantum computing" --provider together
51
+ ```
52
+
53
+ ### Use OLMo 2 1B for faster responses:
54
+ ```bash
55
+ janito "Write a Python function" --provider together --model allenai/OLMo-2-0425-1B
56
+ ```
57
+
58
+ ## 5. Environment Variables
59
+
60
+ The Together AI provider uses the following environment variable:
61
+ - `TOGETHER_API_KEY` - Your Together AI API key
62
+
63
+ ## 6. Troubleshooting
64
+
65
+ ### Check if Together AI is available:
66
+ ```bash
67
+ janito --list-providers
68
+ ```
69
+
70
+ ### Verify your API key:
71
+ ```bash
72
+ janito ping-providers
73
+ ```
74
+
75
+ ### List available models:
76
+ ```bash
77
+ janito list-models --provider together
78
+ ```
79
+
80
+ ## 7. Pricing
81
+
82
+ Together AI offers pay-as-you-go pricing. Check their [pricing page](https://api.together.xyz/pricing) for current rates.
83
+
84
+ ## 8. Regional Availability
85
+
86
+ Together AI is available globally, including Europe and China, with no regional restrictions.
@@ -106,6 +106,9 @@ janito --set model=kimi-k1-8k
106
106
 
107
107
  ## Advanced Features
108
108
 
109
+ ### 🚀 New in v3.1.0: Enter Key Cancellation
110
+ **Chat Mode Enhancement**: Press **Enter** at any time to instantly cancel long-running requests in interactive chat mode. No more waiting for stuck requests!
111
+
109
112
  ### Tool Usage
110
113
 
111
114
  Janito includes powerful built-in tools for:
@@ -0,0 +1,64 @@
1
+ """
2
+ Key bindings for Janito Chat CLI.
3
+ """
4
+
5
+ from prompt_toolkit.key_binding import KeyBindings
6
+ from janito.tools.permissions import get_global_allowed_permissions
7
+
8
+
9
+ class KeyBindingsFactory:
10
+ @staticmethod
11
+ def create():
12
+ bindings = KeyBindings()
13
+
14
+ @bindings.add("c-y")
15
+ def _(event):
16
+ buf = event.app.current_buffer
17
+ buf.text = "Yes"
18
+ buf.validate_and_handle()
19
+
20
+ @bindings.add("c-n")
21
+ def _(event):
22
+ buf = event.app.current_buffer
23
+ buf.text = "No"
24
+ buf.validate_and_handle()
25
+
26
+ @bindings.add("f2")
27
+ def _(event):
28
+ buf = event.app.current_buffer
29
+ buf.text = "/restart"
30
+ buf.validate_and_handle()
31
+
32
+ @bindings.add("f12")
33
+ def _(event):
34
+ buf = event.app.current_buffer
35
+ buf.text = "Do It"
36
+ buf.validate_and_handle()
37
+
38
+ @bindings.add("c-c")
39
+ def _(event):
40
+ """Handle Ctrl+C to interrupt current request or exit chat."""
41
+ # Use global cancellation manager for robust cancellation
42
+ from janito.llm.cancellation_manager import get_cancellation_manager
43
+
44
+ cancel_manager = get_cancellation_manager()
45
+
46
+ cancelled = cancel_manager.cancel_current_request()
47
+ if cancelled:
48
+ # Provide user feedback
49
+ from rich.console import Console
50
+
51
+ console = Console()
52
+ console.print("[red]Request cancelled by Ctrl+C[/red]")
53
+
54
+ # Prevent the Ctrl+C from being processed as input
55
+ event.app.output.flush()
56
+ return
57
+ else:
58
+ # No active request to cancel, exit the chat
59
+ from rich.console import Console
60
+ console = Console()
61
+ console.print("[yellow]Goodbye![/yellow]")
62
+ event.app.exit()
63
+
64
+ return bindings
@@ -22,6 +22,7 @@ import time
22
22
 
23
23
  # Shared prompt/agent factory
24
24
  from janito.cli.prompt_setup import setup_agent_and_prompt_handler
25
+ from janito.llm.cancellation_manager import get_cancellation_manager
25
26
 
26
27
  import time
27
28
 
@@ -113,6 +114,10 @@ class ChatSession:
113
114
 
114
115
  # Check if multi-line mode should be enabled by default
115
116
  self.multi_line_mode = getattr(args, "multi", False) if args else False
117
+
118
+ # Default to single-line mode (Enter submits) unless explicitly enabled
119
+ if not self.multi_line_mode:
120
+ self.multi_line_mode = False
116
121
 
117
122
  def _select_profile_and_role(self, args, role):
118
123
  profile, role_arg, python_profile, market_profile = self._extract_args(args)
@@ -283,7 +288,13 @@ class ChatSession:
283
288
  )
284
289
  )
285
290
 
286
- self._prompt_handler.run_prompt(cmd_input)
291
+ try:
292
+ self._prompt_handler.run_prompt(cmd_input)
293
+ finally:
294
+ # Ensure cancellation manager is cleared
295
+ cancel_manager = get_cancellation_manager()
296
+ cancel_manager.clear_current_request()
297
+
287
298
  end_time = time.time()
288
299
  elapsed = end_time - start_time
289
300
  self.msg_count += 1
@@ -59,39 +59,53 @@ Examples:
59
59
  command = args[0].lower()
60
60
  whitelist_manager = get_url_whitelist_manager()
61
61
 
62
- if command == "list":
63
- sites = whitelist_manager.get_allowed_sites()
64
- if sites:
65
- print("Allowed sites:")
66
- for site in sites:
67
- print(f" • {site}")
68
- else:
69
- print("No sites are whitelisted (all sites are allowed)")
70
-
71
- elif command == "add":
72
- if len(args) < 2:
73
- print("Error: Please specify a site to add")
74
- return
75
- site = args[1]
76
- if whitelist_manager.add_allowed_site(site):
77
- print(f"✅ Added '{site}' to allowed sites")
78
- else:
79
- print(f"ℹ️ '{site}' is already in allowed sites")
80
-
81
- elif command == "remove":
82
- if len(args) < 2:
83
- print("Error: Please specify a site to remove")
84
- return
85
- site = args[1]
86
- if whitelist_manager.remove_allowed_site(site):
87
- print(f"✅ Removed '{site}' from allowed sites")
88
- else:
89
- print(f"ℹ️ '{site}' was not in allowed sites")
90
-
91
- elif command == "clear":
92
- whitelist_manager.clear_whitelist()
93
- print("✅ Cleared all allowed sites (all sites are now allowed)")
94
-
62
+ handlers = {
63
+ "list": self._handle_list,
64
+ "add": self._handle_add,
65
+ "remove": self._handle_remove,
66
+ "clear": self._handle_clear,
67
+ }
68
+
69
+ handler = handlers.get(command)
70
+ if handler:
71
+ handler(args, whitelist_manager)
95
72
  else:
96
73
  print(f"Error: Unknown command '{command}'")
97
74
  print(self.get_usage())
75
+
76
+ def _handle_list(self, args, whitelist_manager):
77
+ """Handle list command."""
78
+ sites = whitelist_manager.get_allowed_sites()
79
+ if sites:
80
+ print("Allowed sites:")
81
+ for site in sites:
82
+ print(f" • {site}")
83
+ else:
84
+ print("No sites are whitelisted (all sites are allowed)")
85
+
86
+ def _handle_add(self, args, whitelist_manager):
87
+ """Handle add command."""
88
+ if len(args) < 2:
89
+ print("Error: Please specify a site to add")
90
+ return
91
+ site = args[1]
92
+ if whitelist_manager.add_allowed_site(site):
93
+ print(f"✅ Added '{site}' to allowed sites")
94
+ else:
95
+ print(f"ℹ️ '{site}' is already in allowed sites")
96
+
97
+ def _handle_remove(self, args, whitelist_manager):
98
+ """Handle remove command."""
99
+ if len(args) < 2:
100
+ print("Error: Please specify a site to remove")
101
+ return
102
+ site = args[1]
103
+ if whitelist_manager.remove_allowed_site(site):
104
+ print(f"✅ Removed '{site}' from allowed sites")
105
+ else:
106
+ print(f"ℹ️ '{site}' was not in allowed sites")
107
+
108
+ def _handle_clear(self, args, whitelist_manager):
109
+ """Handle clear command."""
110
+ whitelist_manager.clear_whitelist()
111
+ print("✅ Cleared all allowed sites (all sites are now allowed)")
@@ -0,0 +1,70 @@
1
+ """
2
+ Module for guessing the provider based on model names.
3
+ """
4
+
5
+ from janito.providers.registry import LLMProviderRegistry
6
+
7
+
8
+ def guess_provider_from_model(model_name: str) -> str:
9
+ """
10
+ Guess the provider based on the model name.
11
+
12
+ Args:
13
+ model_name: The name of the model to guess the provider for
14
+
15
+ Returns:
16
+ The provider name if a match is found, None otherwise
17
+ """
18
+ if not model_name:
19
+ return None
20
+
21
+ model_name = model_name.lower()
22
+
23
+ # Check each provider's models
24
+ return _find_provider_for_model(model_name)
25
+
26
+
27
+ def _find_provider_for_model(model_name: str) -> str:
28
+ """Find provider for given model name."""
29
+ for provider_name in LLMProviderRegistry.list_providers():
30
+ provider_class = LLMProviderRegistry.get(provider_name)
31
+ if not provider_class:
32
+ continue
33
+
34
+ if _check_provider_models(provider_name, provider_class, model_name):
35
+ return provider_name
36
+
37
+ return None
38
+
39
+
40
+ def _check_provider_models(provider_name: str, provider_class, model_name: str) -> bool:
41
+ """Check if provider has matching model."""
42
+ try:
43
+ if hasattr(provider_class, "MODEL_SPECS"):
44
+ model_specs = provider_class.MODEL_SPECS
45
+ for spec_model_name in model_specs.keys():
46
+ if spec_model_name.lower() == model_name:
47
+ return True
48
+
49
+ # Handle special cases like moonshot
50
+ if provider_name == "moonshot":
51
+ return _check_moonshot_models(model_name)
52
+
53
+ except Exception:
54
+ # Skip providers that have issues accessing model specs
55
+ pass
56
+
57
+ return False
58
+
59
+
60
+ def _check_moonshot_models(model_name: str) -> bool:
61
+ """Check moonshot models specifically."""
62
+ try:
63
+ from janito.providers.moonshot.model_info import MOONSHOT_MODEL_SPECS
64
+
65
+ for spec_model_name in MOONSHOT_MODEL_SPECS.keys():
66
+ if spec_model_name.lower() == model_name:
67
+ return True
68
+ except ImportError:
69
+ pass
70
+ return False
@@ -207,15 +207,26 @@ class PromptHandler:
207
207
  """
208
208
  try:
209
209
  self._print_verbose_debug("Calling agent.chat()...")
210
- final_event = self.agent.chat(prompt=user_prompt)
211
- if hasattr(self.agent, "set_latest_event"):
212
- self.agent.set_latest_event(final_event)
213
- self.agent.last_event = final_event
214
- self._print_verbose_debug(f"agent.chat() returned: {final_event}")
215
- self._print_verbose_final_event(final_event)
216
- if on_event and final_event is not None:
217
- on_event(final_event)
218
- global_event_bus.publish(final_event)
210
+
211
+ # Use global cancellation manager
212
+ from janito.llm.cancellation_manager import get_cancellation_manager
213
+
214
+ cancel_manager = get_cancellation_manager()
215
+ driver_cancel_event = cancel_manager.start_new_request()
216
+
217
+ try:
218
+ final_event = self.agent.chat(prompt=user_prompt)
219
+ if hasattr(self.agent, "set_latest_event"):
220
+ self.agent.set_latest_event(final_event)
221
+ self.agent.last_event = final_event
222
+ self._print_verbose_debug(f"agent.chat() returned: {final_event}")
223
+ self._print_verbose_final_event(final_event)
224
+ if on_event and final_event is not None:
225
+ on_event(final_event)
226
+ global_event_bus.publish(final_event)
227
+ finally:
228
+ cancel_manager.clear_current_request()
229
+
219
230
  except KeyboardInterrupt:
220
231
  # Capture user interrupt / cancellation
221
232
  self.console.print("[red]Interrupted by the user.[/red]")