janito 2.28.0__tar.gz → 2.29.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 (471) hide show
  1. {janito-2.28.0 → janito-2.29.0}/PKG-INFO +1 -1
  2. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/session.py +150 -58
  3. {janito-2.28.0 → janito-2.29.0}/janito/cli/prompt_core.py +0 -2
  4. {janito-2.28.0 → janito-2.29.0}/janito/cli/rich_terminal_reporter.py +2 -1
  5. {janito-2.28.0 → janito-2.29.0}/janito/cli/single_shot_mode/handler.py +0 -2
  6. {janito-2.28.0 → janito-2.29.0}/janito/provider_registry.py +1 -1
  7. {janito-2.28.0 → janito-2.29.0}/janito/providers/openai/provider.py +1 -1
  8. {janito-2.28.0/plugins/core/codeanalyzer/tools → janito-2.29.0/janito/tools/adapters/local}/search_text/core.py +1 -1
  9. {janito-2.28.0 → janito-2.29.0}/janito.egg-info/PKG-INFO +1 -1
  10. {janito-2.28.0 → janito-2.29.0}/janito.egg-info/SOURCES.txt +0 -9
  11. janito-2.29.0/janito.egg-info/top_level.txt +2 -0
  12. {janito-2.28.0/janito/tools/adapters/local → janito-2.29.0/plugins/core/codeanalyzer/tools}/search_text/core.py +1 -1
  13. janito-2.28.0/docs/pt/README-pt.md +0 -371
  14. janito-2.28.0/docs/pt/README.md +0 -38
  15. janito-2.28.0/docs/pt/configuracao.md +0 -304
  16. janito-2.28.0/docs/pt/exemplos.md +0 -489
  17. janito-2.28.0/docs/pt/faq-pt.md +0 -317
  18. janito-2.28.0/docs/pt/ferramentas.md +0 -447
  19. janito-2.28.0/docs/pt/guia-uso.md +0 -265
  20. janito-2.28.0/docs/pt/instalacao.md +0 -155
  21. janito-2.28.0/docs/pt/perfis.md +0 -361
  22. janito-2.28.0/janito.egg-info/top_level.txt +0 -1
  23. {janito-2.28.0 → janito-2.29.0}/.codespellrc +0 -0
  24. {janito-2.28.0 → janito-2.29.0}/.gitattributes +0 -0
  25. {janito-2.28.0 → janito-2.29.0}/.github/workflows/python-app.yml.disabled +0 -0
  26. {janito-2.28.0 → janito-2.29.0}/.gitignore +0 -0
  27. {janito-2.28.0 → janito-2.29.0}/.pre-commit-config.yaml +0 -0
  28. {janito-2.28.0 → janito-2.29.0}/.secrets.baseline +0 -0
  29. {janito-2.28.0 → janito-2.29.0}/.vscode/settings.json +0 -0
  30. {janito-2.28.0 → janito-2.29.0}/LICENSE +0 -0
  31. {janito-2.28.0 → janito-2.29.0}/MARKET_ANALYST_README.md +0 -0
  32. {janito-2.28.0 → janito-2.29.0}/README-dev.md +0 -0
  33. {janito-2.28.0 → janito-2.29.0}/README.md +0 -0
  34. {janito-2.28.0 → janito-2.29.0}/RELEASE_COMPARISON.md +0 -0
  35. {janito-2.28.0 → janito-2.29.0}/UPDATING_DOCS.md +0 -0
  36. {janito-2.28.0 → janito-2.29.0}/adding_mcp.txt +0 -0
  37. {janito-2.28.0 → janito-2.29.0}/docs/DIV.md +0 -0
  38. {janito-2.28.0 → janito-2.29.0}/docs/Interfaces.txt +0 -0
  39. {janito-2.28.0 → janito-2.29.0}/docs/TOOLBAR-STYLING.md +0 -0
  40. {janito-2.28.0 → janito-2.29.0}/docs/about/costs.md +0 -0
  41. {janito-2.28.0 → janito-2.29.0}/docs/about/vs-webchats.md +0 -0
  42. {janito-2.28.0 → janito-2.29.0}/docs/about/why.md +0 -0
  43. {janito-2.28.0 → janito-2.29.0}/docs/alibaba-setup.md +0 -0
  44. {janito-2.28.0 → janito-2.29.0}/docs/alternatives.md +0 -0
  45. {janito-2.28.0 → janito-2.29.0}/docs/cerebras-setup.md +0 -0
  46. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/CHANGELOG.md +0 -0
  47. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  48. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  49. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  50. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  51. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  52. {janito-2.28.0 → janito-2.29.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  53. {janito-2.28.0 → janito-2.29.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  54. {janito-2.28.0 → janito-2.29.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  55. {janito-2.28.0 → janito-2.29.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  56. {janito-2.28.0 → janito-2.29.0}/docs/code_intelligence/our-approach.md +0 -0
  57. {janito-2.28.0 → janito-2.29.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  58. {janito-2.28.0 → janito-2.29.0}/docs/concepts/analysis-style.md +0 -0
  59. {janito-2.28.0 → janito-2.29.0}/docs/concepts/human-guided-ai.md +0 -0
  60. {janito-2.28.0 → janito-2.29.0}/docs/concepts/index.md +0 -0
  61. {janito-2.28.0 → janito-2.29.0}/docs/concepts/language-model-clients.md +0 -0
  62. {janito-2.28.0 → janito-2.29.0}/docs/concepts/prompt-design-style.md +0 -0
  63. {janito-2.28.0 → janito-2.29.0}/docs/deepseek-setup.md +0 -0
  64. {janito-2.28.0 → janito-2.29.0}/docs/driver-flow.md +0 -0
  65. {janito-2.28.0 → janito-2.29.0}/docs/driver-request-cancellation.md +0 -0
  66. {janito-2.28.0 → janito-2.29.0}/docs/drivers/events.md +0 -0
  67. {janito-2.28.0 → janito-2.29.0}/docs/drivers.md +0 -0
  68. {janito-2.28.0 → janito-2.29.0}/docs/event-bus.md +0 -0
  69. {janito-2.28.0 → janito-2.29.0}/docs/guides/configuration.md +0 -0
  70. {janito-2.28.0 → janito-2.29.0}/docs/guides/developing.md +0 -0
  71. {janito-2.28.0 → janito-2.29.0}/docs/guides/disabled-tools.md +0 -0
  72. {janito-2.28.0 → janito-2.29.0}/docs/guides/installation.md +0 -0
  73. {janito-2.28.0 → janito-2.29.0}/docs/guides/market-data-sources.md +0 -0
  74. {janito-2.28.0 → janito-2.29.0}/docs/guides/profiles.md +0 -0
  75. {janito-2.28.0 → janito-2.29.0}/docs/guides/prompting/README.md +0 -0
  76. {janito-2.28.0 → janito-2.29.0}/docs/guides/read-chart-examples.md +0 -0
  77. {janito-2.28.0 → janito-2.29.0}/docs/guides/security-commands.md +0 -0
  78. {janito-2.28.0 → janito-2.29.0}/docs/guides/single-shot-terminal.md +0 -0
  79. {janito-2.28.0 → janito-2.29.0}/docs/guides/stock-market-guide.md +0 -0
  80. {janito-2.28.0 → janito-2.29.0}/docs/guides/terminal-shell.md +0 -0
  81. {janito-2.28.0 → janito-2.29.0}/docs/guides/tools-developer-guide.md +0 -0
  82. {janito-2.28.0 → janito-2.29.0}/docs/guides/url-whitelist.md +0 -0
  83. {janito-2.28.0 → janito-2.29.0}/docs/guides/using.md +0 -0
  84. {janito-2.28.0 → janito-2.29.0}/docs/guides/using_tools.md +0 -0
  85. {janito-2.28.0 → janito-2.29.0}/docs/ibm-setup.md +0 -0
  86. {janito-2.28.0 → janito-2.29.0}/docs/imgs/code-generation-observability.png +0 -0
  87. {janito-2.28.0 → janito-2.29.0}/docs/imgs/code_generation_observability.png +0 -0
  88. {janito-2.28.0 → janito-2.29.0}/docs/imgs/happy-programmer.png +0 -0
  89. {janito-2.28.0 → janito-2.29.0}/docs/imgs/happy-programmer.svg +0 -0
  90. {janito-2.28.0 → janito-2.29.0}/docs/imgs/terminal-one-shot.png +0 -0
  91. {janito-2.28.0 → janito-2.29.0}/docs/imgs/terminal-shell.png +0 -0
  92. {janito-2.28.0 → janito-2.29.0}/docs/imgs/terminal_one_shot.png +0 -0
  93. {janito-2.28.0 → janito-2.29.0}/docs/imgs/terminal_shell.png +0 -0
  94. {janito-2.28.0 → janito-2.29.0}/docs/index.md +0 -0
  95. {janito-2.28.0 → janito-2.29.0}/docs/llm-drivers-required-config.md +0 -0
  96. {janito-2.28.0 → janito-2.29.0}/docs/llm-drivers.md +0 -0
  97. {janito-2.28.0 → janito-2.29.0}/docs/meta/developer-toolchain.md +0 -0
  98. {janito-2.28.0 → janito-2.29.0}/docs/meta/quality-checks.txt +0 -0
  99. {janito-2.28.0 → janito-2.29.0}/docs/mistral-setup.md +0 -0
  100. {janito-2.28.0 → janito-2.29.0}/docs/moonshot-setup.md +0 -0
  101. {janito-2.28.0 → janito-2.29.0}/docs/openai-setup.md +0 -0
  102. {janito-2.28.0 → janito-2.29.0}/docs/overrides/partials/copyright.html +0 -0
  103. {janito-2.28.0 → janito-2.29.0}/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -0
  104. {janito-2.28.0 → janito-2.29.0}/docs/plugins/MIGRATION_COMPLETE.md +0 -0
  105. {janito-2.28.0 → janito-2.29.0}/docs/plugins/README.md +0 -0
  106. {janito-2.28.0 → janito-2.29.0}/docs/plugins/api-reference.md +0 -0
  107. {janito-2.28.0 → janito-2.29.0}/docs/plugins/architecture.md +0 -0
  108. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  109. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
  110. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  111. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/system.md +0 -0
  112. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  113. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
  114. {janito-2.28.0 → janito-2.29.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
  115. {janito-2.28.0 → janito-2.29.0}/docs/plugins/configuration.md +0 -0
  116. {janito-2.28.0 → janito-2.29.0}/docs/plugins/examples/advanced.md +0 -0
  117. {janito-2.28.0 → janito-2.29.0}/docs/plugins/examples/basic.md +0 -0
  118. {janito-2.28.0 → janito-2.29.0}/docs/plugins/examples/intermediate.md +0 -0
  119. {janito-2.28.0 → janito-2.29.0}/docs/plugins/plugin-development.md +0 -0
  120. {janito-2.28.0 → janito-2.29.0}/docs/plugins/plugin-resources.md +0 -0
  121. {janito-2.28.0 → janito-2.29.0}/docs/plugins/publishing.md +0 -0
  122. {janito-2.28.0 → janito-2.29.0}/docs/plugins/remote-plugins.md +0 -0
  123. {janito-2.28.0 → janito-2.29.0}/docs/plugins/testing.md +0 -0
  124. {janito-2.28.0 → janito-2.29.0}/docs/provider-platform-access.md +0 -0
  125. {janito-2.28.0 → janito-2.29.0}/docs/public-sources.md +0 -0
  126. {janito-2.28.0 → janito-2.29.0}/docs/reference/api.md +0 -0
  127. {janito-2.28.0 → janito-2.29.0}/docs/reference/azure-openai.md +0 -0
  128. {janito-2.28.0 → janito-2.29.0}/docs/reference/cli-options.md +0 -0
  129. {janito-2.28.0 → janito-2.29.0}/docs/reference/message-handler-model.md +0 -0
  130. {janito-2.28.0 → janito-2.29.0}/docs/reference/rich-message-handler.md +0 -0
  131. {janito-2.28.0 → janito-2.29.0}/docs/security.md +0 -0
  132. {janito-2.28.0 → janito-2.29.0}/docs/supported-providers-models.md +0 -0
  133. {janito-2.28.0 → janito-2.29.0}/docs/tools/search-text.md +0 -0
  134. {janito-2.28.0 → janito-2.29.0}/docs/tools-index.md +0 -0
  135. {janito-2.28.0 → janito-2.29.0}/docs/tools-natural-results.md +0 -0
  136. {janito-2.28.0 → janito-2.29.0}/docs/tools-precision.md +0 -0
  137. {janito-2.28.0 → janito-2.29.0}/docs/z-ai-setup.md +0 -0
  138. {janito-2.28.0 → janito-2.29.0}/examples/loop_protection_example.py +0 -0
  139. {janito-2.28.0 → janito-2.29.0}/examples/loop_protection_tool_example.py +0 -0
  140. {janito-2.28.0 → janito-2.29.0}/get_nasdaq_top.py +0 -0
  141. {janito-2.28.0 → janito-2.29.0}/ibm-logo.txt +0 -0
  142. {janito-2.28.0 → janito-2.29.0}/janito/README.md +0 -0
  143. {janito-2.28.0 → janito-2.29.0}/janito/__init__.py +0 -0
  144. {janito-2.28.0 → janito-2.29.0}/janito/__main__.py +0 -0
  145. {janito-2.28.0 → janito-2.29.0}/janito/_version.py +0 -0
  146. {janito-2.28.0 → janito-2.29.0}/janito/agent/setup_agent.py +0 -0
  147. {janito-2.28.0 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  148. {janito-2.28.0 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  149. {janito-2.28.0 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  150. {janito-2.28.0 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  151. {janito-2.28.0 → janito-2.29.0}/janito/cli/__init__.py +0 -0
  152. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/bindings.py +0 -0
  153. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  154. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  155. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/script_runner.py +0 -0
  156. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
  157. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  158. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  159. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  160. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  161. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  162. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  163. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  164. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  165. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  166. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  167. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  168. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  169. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  170. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  171. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  172. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  173. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
  174. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  175. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  176. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  177. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  178. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  179. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  180. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  181. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  182. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  183. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  184. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  185. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  186. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  187. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  188. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  189. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  190. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  191. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  192. {janito-2.28.0 → janito-2.29.0}/janito/cli/chat_mode/toolbar.py +0 -0
  193. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
  194. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_config.py +0 -0
  195. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  196. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_models.py +0 -0
  197. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_plugins.py +0 -0
  198. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  199. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_providers.py +0 -0
  200. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  201. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/list_tools.py +0 -0
  202. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/model_selection.py +0 -0
  203. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/model_utils.py +0 -0
  204. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  205. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  206. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/show_config.py +0 -0
  207. {janito-2.28.0 → janito-2.29.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  208. {janito-2.28.0 → janito-2.29.0}/janito/cli/config.py +0 -0
  209. {janito-2.28.0 → janito-2.29.0}/janito/cli/console.py +0 -0
  210. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/__init__.py +0 -0
  211. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/event_logger.py +0 -0
  212. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/getters.py +0 -0
  213. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/model_guesser.py +0 -0
  214. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/runner.py +0 -0
  215. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/setters.py +0 -0
  216. {janito-2.28.0 → janito-2.29.0}/janito/cli/core/unsetters.py +0 -0
  217. {janito-2.28.0 → janito-2.29.0}/janito/cli/main.py +0 -0
  218. {janito-2.28.0 → janito-2.29.0}/janito/cli/main_cli.py +0 -0
  219. {janito-2.28.0 → janito-2.29.0}/janito/cli/prompt_handler.py +0 -0
  220. {janito-2.28.0 → janito-2.29.0}/janito/cli/prompt_setup.py +0 -0
  221. {janito-2.28.0 → janito-2.29.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  222. {janito-2.28.0 → janito-2.29.0}/janito/cli/utils.py +0 -0
  223. {janito-2.28.0 → janito-2.29.0}/janito/cli/verbose_output.py +0 -0
  224. {janito-2.28.0 → janito-2.29.0}/janito/config.py +0 -0
  225. {janito-2.28.0 → janito-2.29.0}/janito/config_manager.py +0 -0
  226. {janito-2.28.0 → janito-2.29.0}/janito/conversation_history.py +0 -0
  227. {janito-2.28.0 → janito-2.29.0}/janito/dir_walk_utils.py +0 -0
  228. {janito-2.28.0 → janito-2.29.0}/janito/docs/GETTING_STARTED.md +0 -0
  229. {janito-2.28.0 → janito-2.29.0}/janito/driver_events.py +0 -0
  230. {janito-2.28.0 → janito-2.29.0}/janito/drivers/azure_openai/driver.py +0 -0
  231. {janito-2.28.0 → janito-2.29.0}/janito/drivers/cerebras/__init__.py +0 -0
  232. {janito-2.28.0 → janito-2.29.0}/janito/drivers/dashscope.bak.zip +0 -0
  233. {janito-2.28.0 → janito-2.29.0}/janito/drivers/openai/README.md +0 -0
  234. {janito-2.28.0 → janito-2.29.0}/janito/drivers/openai/driver.py +0 -0
  235. {janito-2.28.0 → janito-2.29.0}/janito/drivers/openai_responses.bak.zip +0 -0
  236. {janito-2.28.0 → janito-2.29.0}/janito/drivers/zai/__init__.py +0 -0
  237. {janito-2.28.0 → janito-2.29.0}/janito/drivers/zai/driver.py +0 -0
  238. {janito-2.28.0 → janito-2.29.0}/janito/event_bus/__init__.py +0 -0
  239. {janito-2.28.0 → janito-2.29.0}/janito/event_bus/bus.py +0 -0
  240. {janito-2.28.0 → janito-2.29.0}/janito/event_bus/event.py +0 -0
  241. {janito-2.28.0 → janito-2.29.0}/janito/event_bus/handler.py +0 -0
  242. {janito-2.28.0 → janito-2.29.0}/janito/event_bus/queue_bus.py +0 -0
  243. {janito-2.28.0 → janito-2.29.0}/janito/exceptions.py +0 -0
  244. {janito-2.28.0 → janito-2.29.0}/janito/formatting.py +0 -0
  245. {janito-2.28.0 → janito-2.29.0}/janito/formatting_token.py +0 -0
  246. {janito-2.28.0 → janito-2.29.0}/janito/gitignore_utils.py +0 -0
  247. {janito-2.28.0 → janito-2.29.0}/janito/i18n/__init__.py +0 -0
  248. {janito-2.28.0 → janito-2.29.0}/janito/i18n/it.py +0 -0
  249. {janito-2.28.0 → janito-2.29.0}/janito/i18n/messages.py +0 -0
  250. {janito-2.28.0 → janito-2.29.0}/janito/i18n/pt.py +0 -0
  251. {janito-2.28.0 → janito-2.29.0}/janito/llm/README.md +0 -0
  252. {janito-2.28.0 → janito-2.29.0}/janito/llm/__init__.py +0 -0
  253. {janito-2.28.0 → janito-2.29.0}/janito/llm/agent.py +0 -0
  254. {janito-2.28.0 → janito-2.29.0}/janito/llm/auth.py +0 -0
  255. {janito-2.28.0 → janito-2.29.0}/janito/llm/auth_utils.py +0 -0
  256. {janito-2.28.0 → janito-2.29.0}/janito/llm/driver.py +0 -0
  257. {janito-2.28.0 → janito-2.29.0}/janito/llm/driver_config.py +0 -0
  258. {janito-2.28.0 → janito-2.29.0}/janito/llm/driver_config_builder.py +0 -0
  259. {janito-2.28.0 → janito-2.29.0}/janito/llm/driver_input.py +0 -0
  260. {janito-2.28.0 → janito-2.29.0}/janito/llm/message_parts.py +0 -0
  261. {janito-2.28.0 → janito-2.29.0}/janito/llm/model.py +0 -0
  262. {janito-2.28.0 → janito-2.29.0}/janito/llm/provider.py +0 -0
  263. {janito-2.28.0 → janito-2.29.0}/janito/mkdocs.yml +0 -0
  264. {janito-2.28.0 → janito-2.29.0}/janito/perf_singleton.py +0 -0
  265. {janito-2.28.0 → janito-2.29.0}/janito/performance_collector.py +0 -0
  266. {janito-2.28.0 → janito-2.29.0}/janito/platform_discovery.py +0 -0
  267. {janito-2.28.0 → janito-2.29.0}/janito/plugins/__init__.py +0 -0
  268. {janito-2.28.0 → janito-2.29.0}/janito/plugins/base.py +0 -0
  269. {janito-2.28.0 → janito-2.29.0}/janito/plugins/builtin.py +0 -0
  270. {janito-2.28.0 → janito-2.29.0}/janito/plugins/config.py +0 -0
  271. {janito-2.28.0 → janito-2.29.0}/janito/plugins/discovery.py +0 -0
  272. {janito-2.28.0 → janito-2.29.0}/janito/plugins/manager.py +0 -0
  273. {janito-2.28.0 → janito-2.29.0}/janito/provider_config.py +0 -0
  274. {janito-2.28.0 → janito-2.29.0}/janito/providers/__init__.py +0 -0
  275. {janito-2.28.0 → janito-2.29.0}/janito/providers/alibaba/__init__.py +0 -0
  276. {janito-2.28.0 → janito-2.29.0}/janito/providers/alibaba/model_info.py +0 -0
  277. {janito-2.28.0 → janito-2.29.0}/janito/providers/alibaba/provider.py +0 -0
  278. {janito-2.28.0 → janito-2.29.0}/janito/providers/anthropic/model_info.py +0 -0
  279. {janito-2.28.0 → janito-2.29.0}/janito/providers/anthropic/provider.py +0 -0
  280. {janito-2.28.0 → janito-2.29.0}/janito/providers/azure_openai/model_info.py +0 -0
  281. {janito-2.28.0 → janito-2.29.0}/janito/providers/azure_openai/provider.py +0 -0
  282. {janito-2.28.0 → janito-2.29.0}/janito/providers/cerebras/__init__.py +0 -0
  283. {janito-2.28.0 → janito-2.29.0}/janito/providers/cerebras/model_info.py +0 -0
  284. {janito-2.28.0 → janito-2.29.0}/janito/providers/cerebras/provider.py +0 -0
  285. {janito-2.28.0 → janito-2.29.0}/janito/providers/dashscope.bak.zip +0 -0
  286. {janito-2.28.0 → janito-2.29.0}/janito/providers/deepseek/__init__.py +0 -0
  287. {janito-2.28.0 → janito-2.29.0}/janito/providers/deepseek/model_info.py +0 -0
  288. {janito-2.28.0 → janito-2.29.0}/janito/providers/deepseek/provider.py +0 -0
  289. {janito-2.28.0 → janito-2.29.0}/janito/providers/google/__init__.py +0 -0
  290. {janito-2.28.0 → janito-2.29.0}/janito/providers/google/model_info.py +0 -0
  291. {janito-2.28.0 → janito-2.29.0}/janito/providers/google/provider.py +0 -0
  292. {janito-2.28.0 → janito-2.29.0}/janito/providers/ibm/README.md +0 -0
  293. {janito-2.28.0 → janito-2.29.0}/janito/providers/ibm/__init__.py +0 -0
  294. {janito-2.28.0 → janito-2.29.0}/janito/providers/ibm/model_info.py +0 -0
  295. {janito-2.28.0 → janito-2.29.0}/janito/providers/ibm/provider.py +0 -0
  296. {janito-2.28.0 → janito-2.29.0}/janito/providers/mistral/__init__.py +0 -0
  297. {janito-2.28.0 → janito-2.29.0}/janito/providers/mistral/model_info.py +0 -0
  298. {janito-2.28.0 → janito-2.29.0}/janito/providers/mistral/provider.py +0 -0
  299. {janito-2.28.0 → janito-2.29.0}/janito/providers/moonshot/__init__.py +0 -0
  300. {janito-2.28.0 → janito-2.29.0}/janito/providers/moonshot/model_info.py +0 -0
  301. {janito-2.28.0 → janito-2.29.0}/janito/providers/moonshot/provider.py +0 -0
  302. {janito-2.28.0 → janito-2.29.0}/janito/providers/openai/__init__.py +0 -0
  303. {janito-2.28.0 → janito-2.29.0}/janito/providers/openai/model_info.py +0 -0
  304. {janito-2.28.0 → janito-2.29.0}/janito/providers/openai/schema_generator.py +0 -0
  305. {janito-2.28.0 → janito-2.29.0}/janito/providers/registry.py +0 -0
  306. {janito-2.28.0 → janito-2.29.0}/janito/providers/zai/__init__.py +0 -0
  307. {janito-2.28.0 → janito-2.29.0}/janito/providers/zai/model_info.py +0 -0
  308. {janito-2.28.0 → janito-2.29.0}/janito/providers/zai/provider.py +0 -0
  309. {janito-2.28.0 → janito-2.29.0}/janito/providers/zai/schema_generator.py +0 -0
  310. {janito-2.28.0 → janito-2.29.0}/janito/regions/__init__.py +0 -0
  311. {janito-2.28.0 → janito-2.29.0}/janito/regions/cli.py +0 -0
  312. {janito-2.28.0 → janito-2.29.0}/janito/regions/geo_utils.py +0 -0
  313. {janito-2.28.0 → janito-2.29.0}/janito/regions/provider_regions.py +0 -0
  314. {janito-2.28.0 → janito-2.29.0}/janito/report_events.py +0 -0
  315. {janito-2.28.0 → janito-2.29.0}/janito/shell.bak.zip +0 -0
  316. {janito-2.28.0 → janito-2.29.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  317. {janito-2.28.0 → janito-2.29.0}/janito/tools/README.md +0 -0
  318. {janito-2.28.0 → janito-2.29.0}/janito/tools/__init__.py +0 -0
  319. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/__init__.py +0 -0
  320. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/__init__.py +0 -0
  321. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/adapter.py +0 -0
  322. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/ask_user.py +0 -0
  323. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/copy_file.py +0 -0
  324. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/create_directory.py +0 -0
  325. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/create_file.py +0 -0
  326. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  327. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/fetch_url.py +0 -0
  328. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/find_files.py +0 -0
  329. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  330. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  331. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  332. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  333. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  334. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  335. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/move_file.py +0 -0
  336. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  337. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/open_url.py +0 -0
  338. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  339. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  340. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  341. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/read_chart.py +0 -0
  342. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/read_files.py +0 -0
  343. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  344. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/remove_file.py +0 -0
  345. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  346. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  347. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  348. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  349. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  350. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  351. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  352. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  353. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  354. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  355. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  356. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +0 -0
  357. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  358. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  359. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  360. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  361. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  362. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  363. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  364. {janito-2.28.0 → janito-2.29.0}/janito/tools/adapters/local/view_file.py +0 -0
  365. {janito-2.28.0 → janito-2.29.0}/janito/tools/base.py +0 -0
  366. {janito-2.28.0 → janito-2.29.0}/janito/tools/disabled_tools.py +0 -0
  367. {janito-2.28.0 → janito-2.29.0}/janito/tools/inspect_registry.py +0 -0
  368. {janito-2.28.0 → janito-2.29.0}/janito/tools/loop_protection.py +0 -0
  369. {janito-2.28.0 → janito-2.29.0}/janito/tools/loop_protection_decorator.py +0 -0
  370. {janito-2.28.0 → janito-2.29.0}/janito/tools/outline_file.bak.zip +0 -0
  371. {janito-2.28.0 → janito-2.29.0}/janito/tools/path_security.py +0 -0
  372. {janito-2.28.0 → janito-2.29.0}/janito/tools/path_utils.py +0 -0
  373. {janito-2.28.0 → janito-2.29.0}/janito/tools/permissions.py +0 -0
  374. {janito-2.28.0 → janito-2.29.0}/janito/tools/permissions_parse.py +0 -0
  375. {janito-2.28.0 → janito-2.29.0}/janito/tools/tool_base.py +0 -0
  376. {janito-2.28.0 → janito-2.29.0}/janito/tools/tool_events.py +0 -0
  377. {janito-2.28.0 → janito-2.29.0}/janito/tools/tool_run_exception.py +0 -0
  378. {janito-2.28.0 → janito-2.29.0}/janito/tools/tool_use_tracker.py +0 -0
  379. {janito-2.28.0 → janito-2.29.0}/janito/tools/tool_utils.py +0 -0
  380. {janito-2.28.0 → janito-2.29.0}/janito/tools/tools_adapter.py +0 -0
  381. {janito-2.28.0 → janito-2.29.0}/janito/tools/tools_schema.py +0 -0
  382. {janito-2.28.0 → janito-2.29.0}/janito/tools/url_whitelist.py +0 -0
  383. {janito-2.28.0 → janito-2.29.0}/janito/utils.py +0 -0
  384. {janito-2.28.0 → janito-2.29.0}/janito.egg-info/dependency_links.txt +0 -0
  385. {janito-2.28.0 → janito-2.29.0}/janito.egg-info/entry_points.txt +0 -0
  386. {janito-2.28.0 → janito-2.29.0}/janito.egg-info/requires.txt +0 -0
  387. {janito-2.28.0 → janito-2.29.0}/market_prompt_fix.py +0 -0
  388. {janito-2.28.0 → janito-2.29.0}/market_test.py +0 -0
  389. {janito-2.28.0 → janito-2.29.0}/mkdocs.yml +0 -0
  390. {janito-2.28.0 → janito-2.29.0}/mkdocs_hooks.py +0 -0
  391. {janito-2.28.0 → janito-2.29.0}/plugins/__init__.py +0 -0
  392. {janito-2.28.0 → janito-2.29.0}/plugins/core/__init__.py +0 -0
  393. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/__init__.py +0 -0
  394. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  395. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
  396. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  397. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  398. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  399. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  400. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  401. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  402. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  403. {janito-2.28.0 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  404. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/__init__.py +0 -0
  405. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/copy_file.py +0 -0
  406. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/create_directory.py +0 -0
  407. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/create_file.py +0 -0
  408. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/delete_text_in_file.py +0 -0
  409. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/find_files.py +0 -0
  410. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/move_file.py +0 -0
  411. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/read_files.py +0 -0
  412. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/remove_directory.py +0 -0
  413. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/remove_file.py +0 -0
  414. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
  415. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  416. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  417. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  418. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  419. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
  420. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  421. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  422. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  423. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  424. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  425. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  426. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  427. {janito-2.28.0 → janito-2.29.0}/plugins/core/filemanager/tools/view_file.py +0 -0
  428. {janito-2.28.0 → janito-2.29.0}/plugins/core/system/__init__.py +0 -0
  429. {janito-2.28.0 → janito-2.29.0}/plugins/core/system/tools/run_bash_command.py +0 -0
  430. {janito-2.28.0 → janito-2.29.0}/plugins/core/system/tools/run_powershell_command.py +0 -0
  431. {janito-2.28.0 → janito-2.29.0}/plugins/dev/__init__.py +0 -0
  432. {janito-2.28.0 → janito-2.29.0}/plugins/dev/pythondev/__init__.py +0 -0
  433. {janito-2.28.0 → janito-2.29.0}/plugins/dev/pythondev/tools/python_code_run.py +0 -0
  434. {janito-2.28.0 → janito-2.29.0}/plugins/dev/pythondev/tools/python_command_run.py +0 -0
  435. {janito-2.28.0 → janito-2.29.0}/plugins/dev/pythondev/tools/python_file_run.py +0 -0
  436. {janito-2.28.0 → janito-2.29.0}/plugins/dev/visualization/__init__.py +0 -0
  437. {janito-2.28.0 → janito-2.29.0}/plugins/dev/visualization/tools/read_chart.py +0 -0
  438. {janito-2.28.0 → janito-2.29.0}/plugins/example_plugin.py +0 -0
  439. {janito-2.28.0 → janito-2.29.0}/plugins/ui/__init__.py +0 -0
  440. {janito-2.28.0 → janito-2.29.0}/plugins/ui/userinterface/__init__.py +0 -0
  441. {janito-2.28.0 → janito-2.29.0}/plugins/ui/userinterface/tools/ask_user.py +0 -0
  442. {janito-2.28.0 → janito-2.29.0}/plugins/web/__init__.py +0 -0
  443. {janito-2.28.0 → janito-2.29.0}/plugins/web/webtools/__init__.py +0 -0
  444. {janito-2.28.0 → janito-2.29.0}/plugins/web/webtools/tools/fetch_url.py +0 -0
  445. {janito-2.28.0 → janito-2.29.0}/plugins/web/webtools/tools/open_html_in_browser.py +0 -0
  446. {janito-2.28.0 → janito-2.29.0}/plugins/web/webtools/tools/open_url.py +0 -0
  447. {janito-2.28.0 → janito-2.29.0}/plugins.txt +0 -0
  448. {janito-2.28.0 → janito-2.29.0}/pyproject.toml +0 -0
  449. {janito-2.28.0 → janito-2.29.0}/pytest.ini +0 -0
  450. {janito-2.28.0 → janito-2.29.0}/requirements-dev.txt +0 -0
  451. {janito-2.28.0 → janito-2.29.0}/requirements.txt +0 -0
  452. {janito-2.28.0 → janito-2.29.0}/setup.cfg +0 -0
  453. {janito-2.28.0 → janito-2.29.0}/test_example.py +0 -0
  454. {janito-2.28.0 → janito-2.29.0}/test_key_field_behavior.py +0 -0
  455. {janito-2.28.0 → janito-2.29.0}/test_key_field_protection.py +0 -0
  456. {janito-2.28.0 → janito-2.29.0}/test_loop_protection_return.py +0 -0
  457. {janito-2.28.0 → janito-2.29.0}/test_market_analyst.py +0 -0
  458. {janito-2.28.0 → janito-2.29.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  459. {janito-2.28.0 → janito-2.29.0}/tests/adapters/local/test_read_files.py +0 -0
  460. {janito-2.28.0 → janito-2.29.0}/tests/test_cli_list_models.py +0 -0
  461. {janito-2.28.0 → janito-2.29.0}/tests/test_cli_list_providers.py +0 -0
  462. {janito-2.28.0 → janito-2.29.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  463. {janito-2.28.0 → janito-2.29.0}/tests/test_cli_list_providers_moonshot.py +0 -0
  464. {janito-2.28.0 → janito-2.29.0}/tests/test_cli_version.py +0 -0
  465. {janito-2.28.0 → janito-2.29.0}/tests/test_disabled_tools.py +0 -0
  466. {janito-2.28.0 → janito-2.29.0}/tests/test_plugin_system.py +0 -0
  467. {janito-2.28.0 → janito-2.29.0}/tests/test_provider_alibaba.py +0 -0
  468. {janito-2.28.0 → janito-2.29.0}/tests/test_provider_cerebras.py +0 -0
  469. {janito-2.28.0 → janito-2.29.0}/tests/test_provider_moonshot.py +0 -0
  470. {janito-2.28.0 → janito-2.29.0}/tools/release.py +0 -0
  471. {janito-2.28.0 → janito-2.29.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.28.0
3
+ Version: 2.29.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
@@ -63,6 +63,7 @@ class ChatSession:
63
63
  allowed_permissions=None,
64
64
  ):
65
65
  self.console = console
66
+ self.session_start_time = time.time()
66
67
  self.user_input_history = UserInputHistory()
67
68
  self.input_dicts = self.user_input_history.load()
68
69
  self.mem_history = InMemoryHistory()
@@ -114,22 +115,13 @@ class ChatSession:
114
115
  self.multi_line_mode = getattr(args, "multi", False) if args else False
115
116
 
116
117
  def _select_profile_and_role(self, args, role):
117
- profile = getattr(args, "profile", None) if args is not None else None
118
- role_arg = getattr(args, "role", None) if args is not None else None
119
- python_profile = (
120
- getattr(args, "developer", False) if args is not None else False
121
- )
122
- market_profile = getattr(args, "market", False) if args is not None else False
118
+ profile, role_arg, python_profile, market_profile = self._extract_args(args)
123
119
  profile_system_prompt = None
124
120
  no_tools_mode = False
125
121
 
126
- # Handle --developer flag
127
- if python_profile and profile is None and role_arg is None:
128
- profile = "Developer with Python Tools"
129
-
130
- # Handle --market flag
131
- if market_profile and profile is None and role_arg is None:
132
- profile = "Market Analyst"
122
+ profile = self._determine_profile(
123
+ profile, role_arg, python_profile, market_profile
124
+ )
133
125
 
134
126
  if (
135
127
  profile is None
@@ -137,16 +129,9 @@ class ChatSession:
137
129
  and not python_profile
138
130
  and not market_profile
139
131
  ):
140
- # Skip interactive profile selection for list commands
141
- from janito.cli.core.getters import GETTER_KEYS
142
-
143
- # Check if any getter command is active - these don't need interactive mode
132
+ skip_profile_selection = self._should_skip_profile_selection(args)
133
+ else:
144
134
  skip_profile_selection = False
145
- if args is not None:
146
- for key in GETTER_KEYS:
147
- if getattr(args, key, False):
148
- skip_profile_selection = True
149
- break
150
135
 
151
136
  if skip_profile_selection:
152
137
  profile = "Developer with Python Tools" # Default for non-interactive commands
@@ -314,39 +299,14 @@ class ChatSession:
314
299
  )
315
300
  start_time = time.time()
316
301
 
317
- # Print rule line with model info before processing prompt
318
- model_name = (
319
- self.agent.get_model_name()
320
- if hasattr(self.agent, "get_model_name")
321
- else "Unknown"
322
- )
323
- provider_name = (
324
- self.agent.get_provider_name()
325
- if hasattr(self.agent, "get_provider_name")
326
- else "Unknown"
327
- )
302
+ model_name, provider_name = self._get_model_info()
303
+ backend_hostname = self._get_backend_hostname()
328
304
 
329
- backend_hostname = "Unknown"
330
- candidates = []
331
- drv = getattr(self.agent, "driver", None)
332
- if drv is not None:
333
- cfg = getattr(drv, "config", None)
334
- if cfg is not None:
335
- b = getattr(cfg, "base_url", None)
336
- if b:
337
- candidates.append(b)
338
- direct_base = getattr(drv, "base_url", None)
339
- if direct_base:
340
- candidates.append(direct_base)
341
- cfg2 = getattr(self.agent, "config", None)
342
- if cfg2 is not None:
343
- b2 = getattr(cfg2, "base_url", None)
344
- if b2:
345
- candidates.append(b2)
346
- top_base = getattr(self.agent, "base_url", None)
347
- if top_base:
348
- candidates.append(top_base)
349
- from urllib.parse import urlparse
305
+ self.console.print(
306
+ Rule(
307
+ f"[bold blue]Model: {model_name} ({provider_name}) | Backend: {backend_hostname}[/bold blue]"
308
+ )
309
+ )
350
310
 
351
311
  for candidate in candidates:
352
312
  try:
@@ -377,8 +337,6 @@ class ChatSession:
377
337
  print_token_message_summary(
378
338
  self.console, self.msg_count, usage, elapsed=elapsed
379
339
  )
380
- # Send terminal bell character to trigger TUI bell after printing token summary
381
- print("\a", end="", flush=True)
382
340
  if final_event and hasattr(final_event, "metadata"):
383
341
  exit_reason = (
384
342
  final_event.metadata.get("exit_reason")
@@ -395,6 +353,102 @@ class ChatSession:
395
353
 
396
354
  self.console.print(traceback.format_exc())
397
355
 
356
+ def _extract_args(self, args):
357
+ """Extract profile and role arguments from args."""
358
+ profile = getattr(args, "profile", None) if args is not None else None
359
+ role_arg = getattr(args, "role", None) if args is not None else None
360
+ python_profile = (
361
+ getattr(args, "developer", False) if args is not None else False
362
+ )
363
+ market_profile = getattr(args, "market", False) if args is not None else False
364
+ return profile, role_arg, python_profile, market_profile
365
+
366
+ def _determine_profile(self, profile, role_arg, python_profile, market_profile):
367
+ """Determine the profile based on flags and arguments."""
368
+ if python_profile and profile is None and role_arg is None:
369
+ return "Developer with Python Tools"
370
+ if market_profile and profile is None and role_arg is None:
371
+ return "Market Analyst"
372
+ return profile
373
+
374
+ def _should_skip_profile_selection(self, args):
375
+ """Check if profile selection should be skipped for getter commands."""
376
+ from janito.cli.core.getters import GETTER_KEYS
377
+
378
+ if args is None:
379
+ return False
380
+
381
+ for key in GETTER_KEYS:
382
+ if getattr(args, key, False):
383
+ return True
384
+ return False
385
+
386
+ def _get_model_info(self):
387
+ """Get model and provider information."""
388
+ model_name = (
389
+ self.agent.get_model_name()
390
+ if hasattr(self.agent, "get_model_name")
391
+ else "Unknown"
392
+ )
393
+ provider_name = (
394
+ self.agent.get_provider_name()
395
+ if hasattr(self.agent, "get_provider_name")
396
+ else "Unknown"
397
+ )
398
+ return model_name, provider_name
399
+
400
+ def _get_backend_hostname(self):
401
+ """Extract backend hostname from agent configuration."""
402
+ candidates = self._collect_base_urls()
403
+ return self._parse_hostname_from_urls(candidates)
404
+
405
+ def _collect_base_urls(self):
406
+ """Collect all possible base URLs from agent configuration."""
407
+ candidates = []
408
+
409
+ # Collect from driver
410
+ drv = getattr(self.agent, "driver", None)
411
+ if drv is not None:
412
+ cfg = getattr(drv, "config", None)
413
+ if cfg is not None:
414
+ b = getattr(cfg, "base_url", None)
415
+ if b:
416
+ candidates.append(b)
417
+ direct_base = getattr(drv, "base_url", None)
418
+ if direct_base:
419
+ candidates.append(direct_base)
420
+
421
+ # Collect from agent config
422
+ cfg2 = getattr(self.agent, "config", None)
423
+ if cfg2 is not None:
424
+ b2 = getattr(cfg2, "base_url", None)
425
+ if b2:
426
+ candidates.append(b2)
427
+
428
+ # Collect from agent directly
429
+ top_base = getattr(self.agent, "base_url", None)
430
+ if top_base:
431
+ candidates.append(top_base)
432
+
433
+ return candidates
434
+
435
+ def _parse_hostname_from_urls(self, candidates):
436
+ """Parse hostname from a list of URL candidates."""
437
+ from urllib.parse import urlparse
438
+
439
+ for candidate in candidates:
440
+ try:
441
+ if not candidate:
442
+ continue
443
+ parsed = urlparse(str(candidate))
444
+ host = parsed.netloc or parsed.path
445
+ if host:
446
+ return host
447
+ except Exception:
448
+ return str(candidate)
449
+
450
+ return "Unknown"
451
+
398
452
  def _create_prompt_session(self):
399
453
  return PromptSession(
400
454
  style=chat_shell_style,
@@ -416,7 +470,25 @@ class ChatSession:
416
470
  else:
417
471
  try:
418
472
  cmd_input = session.prompt(HTML("<inputline>💬 </inputline>"))
419
- except (KeyboardInterrupt, EOFError):
473
+ except KeyboardInterrupt:
474
+ # Ask for confirmation on Ctrl+C
475
+ from prompt_toolkit import prompt
476
+
477
+ try:
478
+ confirm = prompt(
479
+ "Are you sure you want to exit? (y/n): ",
480
+ style=self._create_prompt_session().style,
481
+ )
482
+ if confirm.lower() == "y":
483
+ self._handle_exit()
484
+ return None
485
+ else:
486
+ return "" # Return empty string to continue
487
+ except (KeyboardInterrupt, EOFError):
488
+ # Handle second Ctrl+C or Ctrl+D as immediate exit
489
+ self._handle_exit()
490
+ return None
491
+ except EOFError:
420
492
  self._handle_exit()
421
493
  return None
422
494
  sanitized = cmd_input.strip()
@@ -430,7 +502,27 @@ class ChatSession:
430
502
  return sanitized
431
503
 
432
504
  def _handle_exit(self):
433
- self.console.print("[bold yellow]Exiting chat. Goodbye![/bold yellow]")
505
+ session_duration = time.time() - self.session_start_time
506
+
507
+ # Get total token usage from performance collector
508
+ from janito.perf_singleton import performance_collector
509
+
510
+ total_tokens = performance_collector.get_token_usage().get("total_tokens", 0)
511
+
512
+ # Format session duration
513
+ if session_duration < 60:
514
+ duration_str = f"{session_duration:.1f}s"
515
+ elif session_duration < 3600:
516
+ duration_str = f"{session_duration/60:.1f}m"
517
+ else:
518
+ duration_str = f"{session_duration/3600:.1f}h"
519
+
520
+ self.console.print(f"[bold yellow]Session completed![/bold yellow]")
521
+ self.console.print(
522
+ f"[dim]Session time: {duration_str} | Total tokens: {total_tokens:,}[/dim]"
523
+ )
524
+ self.console.print("[bold yellow]Goodbye![/bold yellow]")
525
+
434
526
  if hasattr(self, "agent") and hasattr(self.agent, "join_driver"):
435
527
  if (
436
528
  hasattr(self.agent, "input_queue")
@@ -216,8 +216,6 @@ class PromptHandler:
216
216
  if on_event and final_event is not None:
217
217
  on_event(final_event)
218
218
  global_event_bus.publish(final_event)
219
- # Terminal bell moved to token summary printing in session.py and handler.py
220
- pass # print('\a', end='', flush=True)
221
219
  except KeyboardInterrupt:
222
220
  # Capture user interrupt / cancellation
223
221
  self.console.print("[red]Interrupted by the user.[/red]")
@@ -139,11 +139,12 @@ class RichTerminalReporter(EventHandlerBase):
139
139
  if not msg or not subtype:
140
140
  return
141
141
  if subtype == ReportSubtype.ACTION_INFO:
142
- # Use orange for modification actions, cyan otherwise
142
+ # Use orange for all write/modification actions
143
143
  modification_actions = (
144
144
  getattr(ReportAction, "UPDATE", None),
145
145
  getattr(ReportAction, "WRITE", None),
146
146
  getattr(ReportAction, "DELETE", None),
147
+ getattr(ReportAction, "CREATE", None),
147
148
  )
148
149
  style = (
149
150
  "orange1"
@@ -125,8 +125,6 @@ class PromptHandler:
125
125
  print_token_message_summary(
126
126
  shared_console, msg_count=1, usage=usage, elapsed=elapsed
127
127
  )
128
- # Send terminal bell character to trigger TUI bell after printing token summary
129
- print("\a", end="", flush=True)
130
128
  self._cleanup_driver_and_console()
131
129
 
132
130
  def _cleanup_driver_and_console(self):
@@ -41,7 +41,7 @@ class ProviderRegistry:
41
41
  rows.append(info[:3])
42
42
 
43
43
  # Group providers by openness (open-source first, then proprietary)
44
- open_providers = {"cerebras", "deepseek", "alibaba", "moonshotai", "zai"}
44
+ open_providers = {"cerebras", "deepseek", "alibaba", "moonshot", "zai"}
45
45
 
46
46
  def sort_key(row):
47
47
  provider_name = row[0]
@@ -18,7 +18,7 @@ class OpenAIProvider(LLMProvider):
18
18
  MAINTAINER = "João Pinto <janito@ikignosis.org>"
19
19
  MODEL_SPECS = MODEL_SPECS
20
20
  DEFAULT_MODEL = (
21
- "gpt-4.1" # Options: gpt-4.1, gpt-4o, o3-mini, o4-mini, gpt-5, gpt-5-nano
21
+ "gpt-5" # Options: gpt-4.1, gpt-4o, o3-mini, o4-mini, gpt-5, gpt-5-nano
22
22
  )
23
23
 
24
24
  def __init__(
@@ -98,7 +98,7 @@ class SearchTextTool(ToolBase):
98
98
  if max_depth > 0:
99
99
  info_str += tr(" [max_depth={max_depth}]", max_depth=max_depth)
100
100
  if count_only:
101
- info_str += " [count-only]"
101
+ info_str += " [count]"
102
102
  self.report_action(info_str, ReportAction.READ)
103
103
  if os.path.isfile(search_path):
104
104
  dir_output, dir_limit_reached, per_file_counts = self._handle_file(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.28.0
3
+ Version: 2.29.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
@@ -124,15 +124,6 @@ docs/plugins/built-in-plugins/webtools.md
124
124
  docs/plugins/examples/advanced.md
125
125
  docs/plugins/examples/basic.md
126
126
  docs/plugins/examples/intermediate.md
127
- docs/pt/README-pt.md
128
- docs/pt/README.md
129
- docs/pt/configuracao.md
130
- docs/pt/exemplos.md
131
- docs/pt/faq-pt.md
132
- docs/pt/ferramentas.md
133
- docs/pt/guia-uso.md
134
- docs/pt/instalacao.md
135
- docs/pt/perfis.md
136
127
  docs/reference/api.md
137
128
  docs/reference/azure-openai.md
138
129
  docs/reference/cli-options.md
@@ -0,0 +1,2 @@
1
+ janito
2
+ janito-coder
@@ -98,7 +98,7 @@ class SearchTextTool(ToolBase):
98
98
  if max_depth > 0:
99
99
  info_str += tr(" [max_depth={max_depth}]", max_depth=max_depth)
100
100
  if count_only:
101
- info_str += " [count-only]"
101
+ info_str += " [count]"
102
102
  self.report_action(info_str, ReportAction.READ)
103
103
  if os.path.isfile(search_path):
104
104
  dir_output, dir_limit_reached, per_file_counts = self._handle_file(