janito 2.25.0__tar.gz → 2.27.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 (397) hide show
  1. {janito-2.25.0 → janito-2.27.0}/PKG-INFO +19 -1
  2. {janito-2.25.0 → janito-2.27.0}/README-dev.md +26 -0
  3. {janito-2.25.0 → janito-2.27.0}/README.md +18 -0
  4. {janito-2.25.0 → janito-2.27.0}/docs/changelogs/CHANGELOG.md +49 -0
  5. janito-2.27.0/docs/changelogs/CHANGELOG_2.26.0.md +52 -0
  6. janito-2.27.0/docs/changelogs/CHANGELOG_2.27.0.md +64 -0
  7. {janito-2.25.0 → janito-2.27.0}/docs/guides/single-shot-terminal.md +12 -0
  8. {janito-2.25.0 → janito-2.27.0}/docs/reference/cli-options.md +23 -3
  9. janito-2.27.0/janito/cli/chat_mode/shell/commands/unrestricted.py +40 -0
  10. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/show_config.py +24 -0
  11. {janito-2.25.0 → janito-2.27.0}/janito/cli/main_cli.py +13 -1
  12. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/fetch_url.py +80 -5
  13. {janito-2.25.0 → janito-2.27.0}/janito.egg-info/PKG-INFO +19 -1
  14. {janito-2.25.0 → janito-2.27.0}/janito.egg-info/SOURCES.txt +3 -0
  15. {janito-2.25.0 → janito-2.27.0}/.codespellrc +0 -0
  16. {janito-2.25.0 → janito-2.27.0}/.gitattributes +0 -0
  17. {janito-2.25.0 → janito-2.27.0}/.github/workflows/python-app.yml.disabled +0 -0
  18. {janito-2.25.0 → janito-2.27.0}/.gitignore +0 -0
  19. {janito-2.25.0 → janito-2.27.0}/.pre-commit-config.yaml +0 -0
  20. {janito-2.25.0 → janito-2.27.0}/.secrets.baseline +0 -0
  21. {janito-2.25.0 → janito-2.27.0}/.vscode/settings.json +0 -0
  22. {janito-2.25.0 → janito-2.27.0}/LICENSE +0 -0
  23. {janito-2.25.0 → janito-2.27.0}/MARKET_ANALYST_README.md +0 -0
  24. {janito-2.25.0 → janito-2.27.0}/README-PLUGINS.md +0 -0
  25. {janito-2.25.0 → janito-2.27.0}/RELEASE_COMPARISON.md +0 -0
  26. {janito-2.25.0 → janito-2.27.0}/UPDATING_DOCS.md +0 -0
  27. {janito-2.25.0 → janito-2.27.0}/adding_mcp.txt +0 -0
  28. {janito-2.25.0 → janito-2.27.0}/docs/DIV.md +0 -0
  29. {janito-2.25.0 → janito-2.27.0}/docs/Interfaces.txt +0 -0
  30. {janito-2.25.0 → janito-2.27.0}/docs/TOOLBAR-STYLING.md +0 -0
  31. {janito-2.25.0 → janito-2.27.0}/docs/about/costs.md +0 -0
  32. {janito-2.25.0 → janito-2.27.0}/docs/about/vs-webchats.md +0 -0
  33. {janito-2.25.0 → janito-2.27.0}/docs/about/why.md +0 -0
  34. {janito-2.25.0 → janito-2.27.0}/docs/alibaba-setup.md +0 -0
  35. {janito-2.25.0 → janito-2.27.0}/docs/alternatives.md +0 -0
  36. {janito-2.25.0 → janito-2.27.0}/docs/cerebras-setup.md +0 -0
  37. {janito-2.25.0 → janito-2.27.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  38. {janito-2.25.0 → janito-2.27.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  39. {janito-2.25.0 → janito-2.27.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  40. {janito-2.25.0 → janito-2.27.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  41. {janito-2.25.0 → janito-2.27.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  42. {janito-2.25.0 → janito-2.27.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  43. {janito-2.25.0 → janito-2.27.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  44. {janito-2.25.0 → janito-2.27.0}/docs/code_intelligence/our-approach.md +0 -0
  45. {janito-2.25.0 → janito-2.27.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  46. {janito-2.25.0 → janito-2.27.0}/docs/concepts/analysis-style.md +0 -0
  47. {janito-2.25.0 → janito-2.27.0}/docs/concepts/human-guided-ai.md +0 -0
  48. {janito-2.25.0 → janito-2.27.0}/docs/concepts/index.md +0 -0
  49. {janito-2.25.0 → janito-2.27.0}/docs/concepts/language-model-clients.md +0 -0
  50. {janito-2.25.0 → janito-2.27.0}/docs/concepts/prompt-design-style.md +0 -0
  51. {janito-2.25.0 → janito-2.27.0}/docs/deepseek-setup.md +0 -0
  52. {janito-2.25.0 → janito-2.27.0}/docs/driver-flow.md +0 -0
  53. {janito-2.25.0 → janito-2.27.0}/docs/driver-request-cancellation.md +0 -0
  54. {janito-2.25.0 → janito-2.27.0}/docs/drivers/events.md +0 -0
  55. {janito-2.25.0 → janito-2.27.0}/docs/drivers.md +0 -0
  56. {janito-2.25.0 → janito-2.27.0}/docs/event-bus.md +0 -0
  57. {janito-2.25.0 → janito-2.27.0}/docs/guides/configuration.md +0 -0
  58. {janito-2.25.0 → janito-2.27.0}/docs/guides/developing.md +0 -0
  59. {janito-2.25.0 → janito-2.27.0}/docs/guides/disabled-tools.md +0 -0
  60. {janito-2.25.0 → janito-2.27.0}/docs/guides/installation.md +0 -0
  61. {janito-2.25.0 → janito-2.27.0}/docs/guides/market-data-sources.md +0 -0
  62. {janito-2.25.0 → janito-2.27.0}/docs/guides/plugins.md +0 -0
  63. {janito-2.25.0 → janito-2.27.0}/docs/guides/profiles.md +0 -0
  64. {janito-2.25.0 → janito-2.27.0}/docs/guides/prompting/README.md +0 -0
  65. {janito-2.25.0 → janito-2.27.0}/docs/guides/read-chart-examples.md +0 -0
  66. {janito-2.25.0 → janito-2.27.0}/docs/guides/remote-plugins.md +0 -0
  67. {janito-2.25.0 → janito-2.27.0}/docs/guides/security-commands.md +0 -0
  68. {janito-2.25.0 → janito-2.27.0}/docs/guides/stock-market-guide.md +0 -0
  69. {janito-2.25.0 → janito-2.27.0}/docs/guides/terminal-shell.md +0 -0
  70. {janito-2.25.0 → janito-2.27.0}/docs/guides/tools-developer-guide.md +0 -0
  71. {janito-2.25.0 → janito-2.27.0}/docs/guides/url-whitelist.md +0 -0
  72. {janito-2.25.0 → janito-2.27.0}/docs/guides/using.md +0 -0
  73. {janito-2.25.0 → janito-2.27.0}/docs/guides/using_tools.md +0 -0
  74. {janito-2.25.0 → janito-2.27.0}/docs/ibm-setup.md +0 -0
  75. {janito-2.25.0 → janito-2.27.0}/docs/imgs/code-generation-observability.png +0 -0
  76. {janito-2.25.0 → janito-2.27.0}/docs/imgs/code_generation_observability.png +0 -0
  77. {janito-2.25.0 → janito-2.27.0}/docs/imgs/happy-programmer.png +0 -0
  78. {janito-2.25.0 → janito-2.27.0}/docs/imgs/happy-programmer.svg +0 -0
  79. {janito-2.25.0 → janito-2.27.0}/docs/imgs/terminal-one-shot.png +0 -0
  80. {janito-2.25.0 → janito-2.27.0}/docs/imgs/terminal-shell.png +0 -0
  81. {janito-2.25.0 → janito-2.27.0}/docs/imgs/terminal_one_shot.png +0 -0
  82. {janito-2.25.0 → janito-2.27.0}/docs/imgs/terminal_shell.png +0 -0
  83. {janito-2.25.0 → janito-2.27.0}/docs/index.md +0 -0
  84. {janito-2.25.0 → janito-2.27.0}/docs/llm-drivers-required-config.md +0 -0
  85. {janito-2.25.0 → janito-2.27.0}/docs/llm-drivers.md +0 -0
  86. {janito-2.25.0 → janito-2.27.0}/docs/meta/developer-toolchain.md +0 -0
  87. {janito-2.25.0 → janito-2.27.0}/docs/meta/quality-checks.txt +0 -0
  88. {janito-2.25.0 → janito-2.27.0}/docs/mistral-setup.md +0 -0
  89. {janito-2.25.0 → janito-2.27.0}/docs/moonshotai-setup.md +0 -0
  90. {janito-2.25.0 → janito-2.27.0}/docs/openai-setup.md +0 -0
  91. {janito-2.25.0 → janito-2.27.0}/docs/overrides/partials/copyright.html +0 -0
  92. {janito-2.25.0 → janito-2.27.0}/docs/plugins/README.md +0 -0
  93. {janito-2.25.0 → janito-2.27.0}/docs/provider-platform-access.md +0 -0
  94. {janito-2.25.0 → janito-2.27.0}/docs/pt/README-pt.md +0 -0
  95. {janito-2.25.0 → janito-2.27.0}/docs/pt/README.md +0 -0
  96. {janito-2.25.0 → janito-2.27.0}/docs/pt/configuracao.md +0 -0
  97. {janito-2.25.0 → janito-2.27.0}/docs/pt/exemplos.md +0 -0
  98. {janito-2.25.0 → janito-2.27.0}/docs/pt/faq-pt.md +0 -0
  99. {janito-2.25.0 → janito-2.27.0}/docs/pt/ferramentas.md +0 -0
  100. {janito-2.25.0 → janito-2.27.0}/docs/pt/guia-uso.md +0 -0
  101. {janito-2.25.0 → janito-2.27.0}/docs/pt/instalacao.md +0 -0
  102. {janito-2.25.0 → janito-2.27.0}/docs/pt/perfis.md +0 -0
  103. {janito-2.25.0 → janito-2.27.0}/docs/public-sources.md +0 -0
  104. {janito-2.25.0 → janito-2.27.0}/docs/reference/api.md +0 -0
  105. {janito-2.25.0 → janito-2.27.0}/docs/reference/azure-openai.md +0 -0
  106. {janito-2.25.0 → janito-2.27.0}/docs/reference/message-handler-model.md +0 -0
  107. {janito-2.25.0 → janito-2.27.0}/docs/reference/rich-message-handler.md +0 -0
  108. {janito-2.25.0 → janito-2.27.0}/docs/security.md +0 -0
  109. {janito-2.25.0 → janito-2.27.0}/docs/supported-providers-models.md +0 -0
  110. {janito-2.25.0 → janito-2.27.0}/docs/tools/search-text.md +0 -0
  111. {janito-2.25.0 → janito-2.27.0}/docs/tools-index.md +0 -0
  112. {janito-2.25.0 → janito-2.27.0}/docs/tools-natural-results.md +0 -0
  113. {janito-2.25.0 → janito-2.27.0}/docs/tools-precision.md +0 -0
  114. {janito-2.25.0 → janito-2.27.0}/docs/z-ai-setup.md +0 -0
  115. {janito-2.25.0 → janito-2.27.0}/examples/loop_protection_example.py +0 -0
  116. {janito-2.25.0 → janito-2.27.0}/examples/loop_protection_tool_example.py +0 -0
  117. {janito-2.25.0 → janito-2.27.0}/get_nasdaq_top.py +0 -0
  118. {janito-2.25.0 → janito-2.27.0}/ibm-logo.txt +0 -0
  119. {janito-2.25.0 → janito-2.27.0}/janito/README.md +0 -0
  120. {janito-2.25.0 → janito-2.27.0}/janito/__init__.py +0 -0
  121. {janito-2.25.0 → janito-2.27.0}/janito/__main__.py +0 -0
  122. {janito-2.25.0 → janito-2.27.0}/janito/_version.py +0 -0
  123. {janito-2.25.0 → janito-2.27.0}/janito/agent/setup_agent.py +0 -0
  124. {janito-2.25.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  125. {janito-2.25.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  126. {janito-2.25.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  127. {janito-2.25.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  128. {janito-2.25.0 → janito-2.27.0}/janito/cli/__init__.py +0 -0
  129. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/bindings.py +0 -0
  130. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  131. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  132. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/script_runner.py +0 -0
  133. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/session.py +0 -0
  134. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
  135. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  136. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  137. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  138. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  139. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  140. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  141. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  142. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  143. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  144. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  145. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  146. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  147. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  148. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  149. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  150. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  151. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  152. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  153. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  154. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  155. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  156. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  157. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  158. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  159. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  160. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  161. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  162. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  163. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  164. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  165. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  166. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  167. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  168. {janito-2.25.0 → janito-2.27.0}/janito/cli/chat_mode/toolbar.py +0 -0
  169. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_config.py +0 -0
  170. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  171. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_models.py +0 -0
  172. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_plugins.py +0 -0
  173. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  174. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_providers.py +0 -0
  175. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  176. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/list_tools.py +0 -0
  177. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/model_selection.py +0 -0
  178. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/model_utils.py +0 -0
  179. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  180. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  181. {janito-2.25.0 → janito-2.27.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
  182. {janito-2.25.0 → janito-2.27.0}/janito/cli/config.py +0 -0
  183. {janito-2.25.0 → janito-2.27.0}/janito/cli/console.py +0 -0
  184. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/__init__.py +0 -0
  185. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/event_logger.py +0 -0
  186. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/getters.py +0 -0
  187. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/model_guesser.py +0 -0
  188. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/runner.py +0 -0
  189. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/setters.py +0 -0
  190. {janito-2.25.0 → janito-2.27.0}/janito/cli/core/unsetters.py +0 -0
  191. {janito-2.25.0 → janito-2.27.0}/janito/cli/main.py +0 -0
  192. {janito-2.25.0 → janito-2.27.0}/janito/cli/prompt_core.py +0 -0
  193. {janito-2.25.0 → janito-2.27.0}/janito/cli/prompt_handler.py +0 -0
  194. {janito-2.25.0 → janito-2.27.0}/janito/cli/prompt_setup.py +0 -0
  195. {janito-2.25.0 → janito-2.27.0}/janito/cli/rich_terminal_reporter.py +0 -0
  196. {janito-2.25.0 → janito-2.27.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  197. {janito-2.25.0 → janito-2.27.0}/janito/cli/single_shot_mode/handler.py +0 -0
  198. {janito-2.25.0 → janito-2.27.0}/janito/cli/utils.py +0 -0
  199. {janito-2.25.0 → janito-2.27.0}/janito/cli/verbose_output.py +0 -0
  200. {janito-2.25.0 → janito-2.27.0}/janito/config.py +0 -0
  201. {janito-2.25.0 → janito-2.27.0}/janito/config_manager.py +0 -0
  202. {janito-2.25.0 → janito-2.27.0}/janito/conversation_history.py +0 -0
  203. {janito-2.25.0 → janito-2.27.0}/janito/dir_walk_utils.py +0 -0
  204. {janito-2.25.0 → janito-2.27.0}/janito/docs/GETTING_STARTED.md +0 -0
  205. {janito-2.25.0 → janito-2.27.0}/janito/driver_events.py +0 -0
  206. {janito-2.25.0 → janito-2.27.0}/janito/drivers/azure_openai/driver.py +0 -0
  207. {janito-2.25.0 → janito-2.27.0}/janito/drivers/cerebras/__init__.py +0 -0
  208. {janito-2.25.0 → janito-2.27.0}/janito/drivers/dashscope.bak.zip +0 -0
  209. {janito-2.25.0 → janito-2.27.0}/janito/drivers/openai/README.md +0 -0
  210. {janito-2.25.0 → janito-2.27.0}/janito/drivers/openai/driver.py +0 -0
  211. {janito-2.25.0 → janito-2.27.0}/janito/drivers/openai_responses.bak.zip +0 -0
  212. {janito-2.25.0 → janito-2.27.0}/janito/drivers/zai/__init__.py +0 -0
  213. {janito-2.25.0 → janito-2.27.0}/janito/drivers/zai/driver.py +0 -0
  214. {janito-2.25.0 → janito-2.27.0}/janito/event_bus/__init__.py +0 -0
  215. {janito-2.25.0 → janito-2.27.0}/janito/event_bus/bus.py +0 -0
  216. {janito-2.25.0 → janito-2.27.0}/janito/event_bus/event.py +0 -0
  217. {janito-2.25.0 → janito-2.27.0}/janito/event_bus/handler.py +0 -0
  218. {janito-2.25.0 → janito-2.27.0}/janito/event_bus/queue_bus.py +0 -0
  219. {janito-2.25.0 → janito-2.27.0}/janito/exceptions.py +0 -0
  220. {janito-2.25.0 → janito-2.27.0}/janito/formatting.py +0 -0
  221. {janito-2.25.0 → janito-2.27.0}/janito/formatting_token.py +0 -0
  222. {janito-2.25.0 → janito-2.27.0}/janito/gitignore_utils.py +0 -0
  223. {janito-2.25.0 → janito-2.27.0}/janito/i18n/__init__.py +0 -0
  224. {janito-2.25.0 → janito-2.27.0}/janito/i18n/it.py +0 -0
  225. {janito-2.25.0 → janito-2.27.0}/janito/i18n/messages.py +0 -0
  226. {janito-2.25.0 → janito-2.27.0}/janito/i18n/pt.py +0 -0
  227. {janito-2.25.0 → janito-2.27.0}/janito/llm/README.md +0 -0
  228. {janito-2.25.0 → janito-2.27.0}/janito/llm/__init__.py +0 -0
  229. {janito-2.25.0 → janito-2.27.0}/janito/llm/agent.py +0 -0
  230. {janito-2.25.0 → janito-2.27.0}/janito/llm/auth.py +0 -0
  231. {janito-2.25.0 → janito-2.27.0}/janito/llm/auth_utils.py +0 -0
  232. {janito-2.25.0 → janito-2.27.0}/janito/llm/driver.py +0 -0
  233. {janito-2.25.0 → janito-2.27.0}/janito/llm/driver_config.py +0 -0
  234. {janito-2.25.0 → janito-2.27.0}/janito/llm/driver_config_builder.py +0 -0
  235. {janito-2.25.0 → janito-2.27.0}/janito/llm/driver_input.py +0 -0
  236. {janito-2.25.0 → janito-2.27.0}/janito/llm/message_parts.py +0 -0
  237. {janito-2.25.0 → janito-2.27.0}/janito/llm/model.py +0 -0
  238. {janito-2.25.0 → janito-2.27.0}/janito/llm/provider.py +0 -0
  239. {janito-2.25.0 → janito-2.27.0}/janito/mkdocs.yml +0 -0
  240. {janito-2.25.0 → janito-2.27.0}/janito/perf_singleton.py +0 -0
  241. {janito-2.25.0 → janito-2.27.0}/janito/performance_collector.py +0 -0
  242. {janito-2.25.0 → janito-2.27.0}/janito/platform_discovery.py +0 -0
  243. {janito-2.25.0 → janito-2.27.0}/janito/plugins/__init__.py +0 -0
  244. {janito-2.25.0 → janito-2.27.0}/janito/plugins/base.py +0 -0
  245. {janito-2.25.0 → janito-2.27.0}/janito/plugins/config.py +0 -0
  246. {janito-2.25.0 → janito-2.27.0}/janito/plugins/discovery.py +0 -0
  247. {janito-2.25.0 → janito-2.27.0}/janito/plugins/manager.py +0 -0
  248. {janito-2.25.0 → janito-2.27.0}/janito/provider_config.py +0 -0
  249. {janito-2.25.0 → janito-2.27.0}/janito/provider_registry.py +0 -0
  250. {janito-2.25.0 → janito-2.27.0}/janito/providers/__init__.py +0 -0
  251. {janito-2.25.0 → janito-2.27.0}/janito/providers/alibaba/__init__.py +0 -0
  252. {janito-2.25.0 → janito-2.27.0}/janito/providers/alibaba/model_info.py +0 -0
  253. {janito-2.25.0 → janito-2.27.0}/janito/providers/alibaba/provider.py +0 -0
  254. {janito-2.25.0 → janito-2.27.0}/janito/providers/anthropic/model_info.py +0 -0
  255. {janito-2.25.0 → janito-2.27.0}/janito/providers/anthropic/provider.py +0 -0
  256. {janito-2.25.0 → janito-2.27.0}/janito/providers/azure_openai/model_info.py +0 -0
  257. {janito-2.25.0 → janito-2.27.0}/janito/providers/azure_openai/provider.py +0 -0
  258. {janito-2.25.0 → janito-2.27.0}/janito/providers/cerebras/__init__.py +0 -0
  259. {janito-2.25.0 → janito-2.27.0}/janito/providers/cerebras/model_info.py +0 -0
  260. {janito-2.25.0 → janito-2.27.0}/janito/providers/cerebras/provider.py +0 -0
  261. {janito-2.25.0 → janito-2.27.0}/janito/providers/dashscope.bak.zip +0 -0
  262. {janito-2.25.0 → janito-2.27.0}/janito/providers/deepseek/__init__.py +0 -0
  263. {janito-2.25.0 → janito-2.27.0}/janito/providers/deepseek/model_info.py +0 -0
  264. {janito-2.25.0 → janito-2.27.0}/janito/providers/deepseek/provider.py +0 -0
  265. {janito-2.25.0 → janito-2.27.0}/janito/providers/google/__init__.py +0 -0
  266. {janito-2.25.0 → janito-2.27.0}/janito/providers/google/model_info.py +0 -0
  267. {janito-2.25.0 → janito-2.27.0}/janito/providers/google/provider.py +0 -0
  268. {janito-2.25.0 → janito-2.27.0}/janito/providers/ibm/README.md +0 -0
  269. {janito-2.25.0 → janito-2.27.0}/janito/providers/ibm/__init__.py +0 -0
  270. {janito-2.25.0 → janito-2.27.0}/janito/providers/ibm/model_info.py +0 -0
  271. {janito-2.25.0 → janito-2.27.0}/janito/providers/ibm/provider.py +0 -0
  272. {janito-2.25.0 → janito-2.27.0}/janito/providers/mistral/__init__.py +0 -0
  273. {janito-2.25.0 → janito-2.27.0}/janito/providers/mistral/model_info.py +0 -0
  274. {janito-2.25.0 → janito-2.27.0}/janito/providers/mistral/provider.py +0 -0
  275. {janito-2.25.0 → janito-2.27.0}/janito/providers/moonshotai/__init__.py +0 -0
  276. {janito-2.25.0 → janito-2.27.0}/janito/providers/moonshotai/model_info.py +0 -0
  277. {janito-2.25.0 → janito-2.27.0}/janito/providers/moonshotai/provider.py +0 -0
  278. {janito-2.25.0 → janito-2.27.0}/janito/providers/openai/__init__.py +0 -0
  279. {janito-2.25.0 → janito-2.27.0}/janito/providers/openai/model_info.py +0 -0
  280. {janito-2.25.0 → janito-2.27.0}/janito/providers/openai/provider.py +0 -0
  281. {janito-2.25.0 → janito-2.27.0}/janito/providers/openai/schema_generator.py +0 -0
  282. {janito-2.25.0 → janito-2.27.0}/janito/providers/registry.py +0 -0
  283. {janito-2.25.0 → janito-2.27.0}/janito/providers/zai/__init__.py +0 -0
  284. {janito-2.25.0 → janito-2.27.0}/janito/providers/zai/model_info.py +0 -0
  285. {janito-2.25.0 → janito-2.27.0}/janito/providers/zai/provider.py +0 -0
  286. {janito-2.25.0 → janito-2.27.0}/janito/providers/zai/schema_generator.py +0 -0
  287. {janito-2.25.0 → janito-2.27.0}/janito/regions/__init__.py +0 -0
  288. {janito-2.25.0 → janito-2.27.0}/janito/regions/cli.py +0 -0
  289. {janito-2.25.0 → janito-2.27.0}/janito/regions/geo_utils.py +0 -0
  290. {janito-2.25.0 → janito-2.27.0}/janito/regions/provider_regions.py +0 -0
  291. {janito-2.25.0 → janito-2.27.0}/janito/report_events.py +0 -0
  292. {janito-2.25.0 → janito-2.27.0}/janito/shell.bak.zip +0 -0
  293. {janito-2.25.0 → janito-2.27.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  294. {janito-2.25.0 → janito-2.27.0}/janito/tools/README.md +0 -0
  295. {janito-2.25.0 → janito-2.27.0}/janito/tools/__init__.py +0 -0
  296. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/__init__.py +0 -0
  297. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/__init__.py +0 -0
  298. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/adapter.py +0 -0
  299. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/ask_user.py +0 -0
  300. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/copy_file.py +0 -0
  301. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/create_directory.py +0 -0
  302. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/create_file.py +0 -0
  303. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  304. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/find_files.py +0 -0
  305. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  306. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  307. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  308. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  309. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  310. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  311. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/move_file.py +0 -0
  312. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  313. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/open_url.py +0 -0
  314. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  315. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  316. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  317. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/read_chart.py +0 -0
  318. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/read_files.py +0 -0
  319. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  320. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/remove_file.py +0 -0
  321. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  322. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  323. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  324. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  325. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/core.py +0 -0
  326. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  327. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  328. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  329. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  330. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  331. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  332. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  333. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +0 -0
  334. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  335. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  336. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  337. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  338. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  339. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  340. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  341. {janito-2.25.0 → janito-2.27.0}/janito/tools/adapters/local/view_file.py +0 -0
  342. {janito-2.25.0 → janito-2.27.0}/janito/tools/disabled_tools.py +0 -0
  343. {janito-2.25.0 → janito-2.27.0}/janito/tools/inspect_registry.py +0 -0
  344. {janito-2.25.0 → janito-2.27.0}/janito/tools/loop_protection.py +0 -0
  345. {janito-2.25.0 → janito-2.27.0}/janito/tools/loop_protection_decorator.py +0 -0
  346. {janito-2.25.0 → janito-2.27.0}/janito/tools/outline_file.bak.zip +0 -0
  347. {janito-2.25.0 → janito-2.27.0}/janito/tools/path_security.py +0 -0
  348. {janito-2.25.0 → janito-2.27.0}/janito/tools/path_utils.py +0 -0
  349. {janito-2.25.0 → janito-2.27.0}/janito/tools/permissions.py +0 -0
  350. {janito-2.25.0 → janito-2.27.0}/janito/tools/permissions_parse.py +0 -0
  351. {janito-2.25.0 → janito-2.27.0}/janito/tools/tool_base.py +0 -0
  352. {janito-2.25.0 → janito-2.27.0}/janito/tools/tool_events.py +0 -0
  353. {janito-2.25.0 → janito-2.27.0}/janito/tools/tool_run_exception.py +0 -0
  354. {janito-2.25.0 → janito-2.27.0}/janito/tools/tool_use_tracker.py +0 -0
  355. {janito-2.25.0 → janito-2.27.0}/janito/tools/tool_utils.py +0 -0
  356. {janito-2.25.0 → janito-2.27.0}/janito/tools/tools_adapter.py +0 -0
  357. {janito-2.25.0 → janito-2.27.0}/janito/tools/tools_schema.py +0 -0
  358. {janito-2.25.0 → janito-2.27.0}/janito/tools/url_whitelist.py +0 -0
  359. {janito-2.25.0 → janito-2.27.0}/janito/utils.py +0 -0
  360. {janito-2.25.0 → janito-2.27.0}/janito-coder/janito_coder/__init__.py +0 -0
  361. {janito-2.25.0 → janito-2.27.0}/janito-coder/janito_coder/plugins/__init__.py +0 -0
  362. {janito-2.25.0 → janito-2.27.0}/janito-coder/janito_coder/plugins/code_navigator.py +0 -0
  363. {janito-2.25.0 → janito-2.27.0}/janito-coder/janito_coder/plugins/git_analyzer.py +0 -0
  364. {janito-2.25.0 → janito-2.27.0}/janito-coder/pyproject.toml +0 -0
  365. {janito-2.25.0 → janito-2.27.0}/janito.egg-info/dependency_links.txt +0 -0
  366. {janito-2.25.0 → janito-2.27.0}/janito.egg-info/entry_points.txt +0 -0
  367. {janito-2.25.0 → janito-2.27.0}/janito.egg-info/requires.txt +0 -0
  368. {janito-2.25.0 → janito-2.27.0}/janito.egg-info/top_level.txt +0 -0
  369. {janito-2.25.0 → janito-2.27.0}/market_prompt_fix.py +0 -0
  370. {janito-2.25.0 → janito-2.27.0}/market_test.py +0 -0
  371. {janito-2.25.0 → janito-2.27.0}/mkdocs.yml +0 -0
  372. {janito-2.25.0 → janito-2.27.0}/mkdocs_hooks.py +0 -0
  373. {janito-2.25.0 → janito-2.27.0}/plugins/example_plugin.py +0 -0
  374. {janito-2.25.0 → janito-2.27.0}/pyproject.toml +0 -0
  375. {janito-2.25.0 → janito-2.27.0}/pytest.ini +0 -0
  376. {janito-2.25.0 → janito-2.27.0}/requirements-dev.txt +0 -0
  377. {janito-2.25.0 → janito-2.27.0}/requirements.txt +0 -0
  378. {janito-2.25.0 → janito-2.27.0}/setup.cfg +0 -0
  379. {janito-2.25.0 → janito-2.27.0}/test_example.py +0 -0
  380. {janito-2.25.0 → janito-2.27.0}/test_key_field_behavior.py +0 -0
  381. {janito-2.25.0 → janito-2.27.0}/test_key_field_protection.py +0 -0
  382. {janito-2.25.0 → janito-2.27.0}/test_loop_protection_return.py +0 -0
  383. {janito-2.25.0 → janito-2.27.0}/test_market_analyst.py +0 -0
  384. {janito-2.25.0 → janito-2.27.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  385. {janito-2.25.0 → janito-2.27.0}/tests/adapters/local/test_read_files.py +0 -0
  386. {janito-2.25.0 → janito-2.27.0}/tests/test_cli_list_models.py +0 -0
  387. {janito-2.25.0 → janito-2.27.0}/tests/test_cli_list_providers.py +0 -0
  388. {janito-2.25.0 → janito-2.27.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  389. {janito-2.25.0 → janito-2.27.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
  390. {janito-2.25.0 → janito-2.27.0}/tests/test_cli_version.py +0 -0
  391. {janito-2.25.0 → janito-2.27.0}/tests/test_disabled_tools.py +0 -0
  392. {janito-2.25.0 → janito-2.27.0}/tests/test_plugin_system.py +0 -0
  393. {janito-2.25.0 → janito-2.27.0}/tests/test_provider_alibaba.py +0 -0
  394. {janito-2.25.0 → janito-2.27.0}/tests/test_provider_cerebras.py +0 -0
  395. {janito-2.25.0 → janito-2.27.0}/tests/test_provider_moonshotai.py +0 -0
  396. {janito-2.25.0 → janito-2.27.0}/tools/release.py +0 -0
  397. {janito-2.25.0 → janito-2.27.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.25.0
3
+ Version: 2.27.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
@@ -187,7 +187,25 @@ janito -r -w "Read and update this file: ..."
187
187
  To enable all permissions (read, write, execute):
188
188
 
189
189
  ```bash
190
+ # Using individual flags
190
191
  janito -r -w -x "Run this code: print('Hello, world!')"
192
+
193
+ # Using the convenient /rwx prefix (single-shot mode)
194
+ janito /rwx "Run this code: print('Hello, world!')"
195
+ ```
196
+
197
+ #### One-Shot Mode
198
+ For quick tasks without entering interactive mode, provide your prompt directly:
199
+
200
+ ```bash
201
+ # Basic one-shot
202
+ janito "What are the key classes in this project?"
203
+
204
+ # One-shot with all permissions enabled
205
+ janito /rwx "Create a Python script and run it"
206
+
207
+ # One-shot with specific permissions
208
+ janito -r -w "Read this file and create a summary"
191
209
  ```
192
210
 
193
211
  > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
@@ -36,6 +36,32 @@ This document provides guidelines and instructions for developers contributing t
36
36
  pip install -e .
37
37
  ```
38
38
 
39
+ ## Release Process
40
+
41
+ The project includes an automated release script at `tools/release.py` that handles the complete release process:
42
+
43
+ - **Full release** (build + upload to PyPI):
44
+ ```sh
45
+ python tools/release.py
46
+ ```
47
+
48
+ - **Build only** (skip PyPI upload):
49
+ ```sh
50
+ python tools/release.py --build-only
51
+ ```
52
+
53
+ The release script will:
54
+ 1. Check for uncommitted changes
55
+ 2. Verify the latest git tag version
56
+ 3. Check PyPI for existing versions
57
+ 4. Build the package using `python -m build`
58
+ 5. Upload to PyPI using `twine upload`
59
+
60
+ **Requirements**: Make sure you have `build` and `twine` installed:
61
+ ```sh
62
+ pip install build twine
63
+ ```
64
+
39
65
  ## Running Tests
40
66
 
41
67
  - (Add test instructions here if/when tests are present)
@@ -155,7 +155,25 @@ janito -r -w "Read and update this file: ..."
155
155
  To enable all permissions (read, write, execute):
156
156
 
157
157
  ```bash
158
+ # Using individual flags
158
159
  janito -r -w -x "Run this code: print('Hello, world!')"
160
+
161
+ # Using the convenient /rwx prefix (single-shot mode)
162
+ janito /rwx "Run this code: print('Hello, world!')"
163
+ ```
164
+
165
+ #### One-Shot Mode
166
+ For quick tasks without entering interactive mode, provide your prompt directly:
167
+
168
+ ```bash
169
+ # Basic one-shot
170
+ janito "What are the key classes in this project?"
171
+
172
+ # One-shot with all permissions enabled
173
+ janito /rwx "Create a Python script and run it"
174
+
175
+ # One-shot with specific permissions
176
+ janito -r -w "Read this file and create a summary"
159
177
  ```
160
178
 
161
179
  > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
@@ -2,6 +2,55 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.27.0] - 2025-08-16
6
+
7
+ ### Added
8
+
9
+ - **Enhanced CLI Experience**:
10
+ - **One-Shot Mode Prefix Support**: Added `/rwx` prefix support to enable all tool permissions in a single command
11
+ - Use `/rwx "your prompt here"` to enable read, write, and execute permissions in one-shot mode
12
+ - Equivalent to using `-r -w -x` flags but more convenient for quick tasks
13
+ - Maintains security by requiring explicit user action for each command
14
+
15
+ - **Enhanced Web Fetching**:
16
+ - **Browser-like Session Support**: Enhanced `fetch_url` tool with browser-like session capabilities
17
+ - Persistent session management for improved reliability
18
+ - Better handling of cookies and session state
19
+ - Enhanced user-agent and header management
20
+ - Improved error handling for network requests
21
+
22
+ ### Changed
23
+
24
+ - **Improved Documentation**:
25
+ - Updated CLI documentation to reflect new `/rwx` prefix and one-shot mode features
26
+ - Enhanced fetch_url tool documentation with new session parameters
27
+ - Improved parameter descriptions and usage examples
28
+
29
+ ### Fixed
30
+
31
+ - **Documentation Fixes**:
32
+ - Added missing docstring parameters for fetch_url tool
33
+ - Fixed parameter documentation inconsistencies
34
+
35
+ ## [2.26.0] - 2025-08-16
36
+
37
+ ### Added
38
+
39
+ - **Chat Mode Shell Enhancements**:
40
+ - **Unrestricted Mode Command**: Added new `/unrestricted` command to chat mode shell
41
+ - Toggle unrestricted mode equivalent to the `-u` CLI flag
42
+ - Real-time switching between restricted and unrestricted modes
43
+ - Visual feedback with color-coded status messages
44
+ - Integration with URL whitelist manager for comprehensive security control
45
+ - **Security Warning**: Clear indication when unrestricted mode is enabled (DANGEROUS - no path or URL restrictions)
46
+
47
+ ### Security
48
+
49
+ - **Enhanced Security Controls**:
50
+ - URL whitelist manager integration with unrestricted mode toggle
51
+ - Path security controls synchronized with shell state
52
+ - Real-time security status updates in chat mode
53
+
5
54
  ## [2.25.0] - 2025-08-15
6
55
 
7
56
  ### Added
@@ -0,0 +1,52 @@
1
+ # Changelog v2.26.0
2
+
3
+ ## [2.26.0] - 2025-08-16
4
+
5
+ ### Added
6
+
7
+ - **Chat Mode Shell Enhancements**:
8
+ - **Unrestricted Mode Command**: Added new `/unrestricted` command to chat mode shell
9
+ - Toggle unrestricted mode equivalent to the `-u` CLI flag
10
+ - Real-time switching between restricted and unrestricted modes
11
+ - Visual feedback with color-coded status messages
12
+ - Integration with URL whitelist manager for comprehensive security control
13
+ - **Security Warning**: Clear indication when unrestricted mode is enabled (DANGEROUS - no path or URL restrictions)
14
+
15
+ ### Security
16
+
17
+ - **Enhanced Security Controls**:
18
+ - URL whitelist manager integration with unrestricted mode toggle
19
+ - Path security controls synchronized with shell state
20
+ - Real-time security status updates in chat mode
21
+
22
+ ### Developer Experience
23
+
24
+ - **Chat Mode Usability**:
25
+ - Seamless switching between security modes without restart
26
+ - Clear visual indicators for current security state
27
+ - Consistent behavior between CLI flags and shell commands
28
+
29
+ ### Technical Details
30
+
31
+ - **Implementation**: New `UnrestrictedShellHandler` class in `janito.cli.chat_mode.shell.commands.unrestricted`
32
+ - **Integration**: Full integration with existing shell state management
33
+ - **Compatibility**: Backward compatible with existing `-u` CLI flag behavior
34
+
35
+ ### Migration Guide
36
+
37
+ For users upgrading from v2.25.0:
38
+
39
+ 1. **No Breaking Changes**: All existing functionality remains unchanged
40
+ 2. **New Command**: Use `/unrestricted` in chat mode shell to toggle unrestricted mode
41
+ 3. **CLI Flag**: The `-u` CLI flag continues to work as before
42
+ 4. **Security**: Unrestricted mode is clearly indicated with red warning text
43
+
44
+ ### Contributors
45
+
46
+ - Added unrestricted mode command for enhanced chat mode flexibility
47
+ - Improved security state management in shell commands
48
+ - Enhanced user feedback for security-sensitive operations
49
+
50
+ ---
51
+
52
+ **Full Changelog**: https://github.com/ikignosis/janito/compare/v2.25.0...v2.26.0
@@ -0,0 +1,64 @@
1
+ # Changelog v2.27.0
2
+
3
+ ## [2.27.0] - 2025-08-16
4
+
5
+ ### Added
6
+
7
+ - **Enhanced CLI Experience**:
8
+ - **One-Shot Mode Prefix Support**: Added `/rwx` prefix support to enable all tool permissions in a single command
9
+ - Use `/rwx "your prompt here"` to enable read, write, and execute permissions in one-shot mode
10
+ - Equivalent to using `-r -w -x` flags but more convenient for quick tasks
11
+ - Maintains security by requiring explicit user action for each command
12
+
13
+ - **Enhanced Web Fetching**:
14
+ - **Browser-like Session Support**: Enhanced `fetch_url` tool with browser-like session capabilities
15
+ - Persistent session management for improved reliability
16
+ - Better handling of cookies and session state
17
+ - Enhanced user-agent and header management
18
+ - Improved error handling for network requests
19
+
20
+ ### Changed
21
+
22
+ - **Improved Documentation**:
23
+ - Updated CLI documentation to reflect new `/rwx` prefix and one-shot mode features
24
+ - Enhanced fetch_url tool documentation with new session parameters
25
+ - Improved parameter descriptions and usage examples
26
+
27
+ ### Fixed
28
+
29
+ - **Documentation Fixes**:
30
+ - Added missing docstring parameters for fetch_url tool
31
+ - Fixed parameter documentation inconsistencies
32
+
33
+ ### Developer Experience
34
+
35
+ - **CLI Usability**:
36
+ - Streamlined one-shot mode with convenient prefix commands
37
+ - Consistent behavior between interactive and non-interactive modes
38
+ - Clear documentation for new features
39
+
40
+ ### Technical Details
41
+
42
+ - **Implementation**: Enhanced CLI argument parsing to support `/rwx` prefix
43
+ - **Integration**: Full integration with existing permission system
44
+ - **Compatibility**: Backward compatible with existing CLI flags and commands
45
+
46
+ ### Migration Guide
47
+
48
+ For users upgrading from v2.26.0:
49
+
50
+ 1. **No Breaking Changes**: All existing functionality remains unchanged
51
+ 2. **New Prefix**: Use `/rwx "prompt"` for one-shot mode with all permissions
52
+ 3. **Existing Flags**: `-r -w -x` flags continue to work as before
53
+ 4. **fetch_url Tool**: Enhanced session support is automatic, no configuration needed
54
+
55
+ ### Contributors
56
+
57
+ - Added convenient one-shot mode prefix for improved CLI experience
58
+ - Enhanced web fetching capabilities with browser-like session support
59
+ - Improved documentation and parameter descriptions
60
+ - Fixed documentation inconsistencies
61
+
62
+ ---
63
+
64
+ **Full Changelog**: https://github.com/ikignosis/janito/compare/v2.26.0...v2.27.0
@@ -10,6 +10,18 @@ janito "what are the key classes of this project?"
10
10
 
11
11
  Janito will process your request and exit after displaying the result.
12
12
 
13
+ ### Quick Permission Setup
14
+
15
+ For one-shot mode, you can quickly enable all tool permissions using the `/rwx` prefix:
16
+
17
+ ```bash
18
+ # Enable read, write, and execute permissions
19
+ janito /rwx "create a python script and run it"
20
+
21
+ # Or use individual flags
22
+ janito -r -w -x "create a python script and run it"
23
+ ```
24
+
13
25
  > ⚠️ **Warning:** Some models may not complete all required steps in a single-shot (one-off) run. If the model does not act as expected, try appending "; just do it" to your command-line prompt to encourage direct action.
14
26
 
15
27
  ![One-Shot Terminal Shell](../imgs/terminal-one-shot.png)
@@ -55,14 +55,34 @@ janito --multi # Start chat mode with multiline input as default
55
55
  janito -u -x --read --write "Run a tool with unrestricted paths (DANGEROUS)"
56
56
  ```
57
57
 
58
- ### ⚠️ Enabling Execution Tools
58
+ ### ⚠️ Enabling Tool Permissions
59
59
 
60
- By default, tools that can execute code or shell commands are **disabled** for safety. To enable these tools (such as code execution, shell commands, etc.), use the `--exec` or `-x` flag:
60
+ By default, tools that can read, write, or execute code are **disabled** for safety. You can enable these permissions using individual flags or a convenient shortcut:
61
61
 
62
+ #### Individual Permission Flags
63
+ - `-r`, `--read`: Enable tools that require read permissions
64
+ - `-w`, `--write`: Enable tools that require write permissions
65
+ - `-x`, `--exec`: Enable execution/run tools (code execution, shell commands)
66
+
67
+ #### Quick Permission Shortcut
68
+ Use `/rwx` prefix to enable all permissions at once:
69
+ ```sh
70
+ janito /rwx "Create a Python script and run it"
71
+ ```
72
+
73
+ #### Examples
62
74
  ```sh
75
+ # Enable all permissions individually
76
+ janito -r -w -x "Create and run a Python script"
77
+
78
+ # Enable only execution tools
63
79
  janito -x "Run this code: print('Hello, world!')"
80
+
81
+ # Enable read and write tools
82
+ janito -r -w "Read a file and create a new one"
64
83
  ```
65
- > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
84
+
85
+ > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use these options if you trust your prompt and environment.
66
86
 
67
87
  ### ⚠️ Disabling Path Security
68
88
 
@@ -0,0 +1,40 @@
1
+ """Unrestricted mode command for chat mode."""
2
+
3
+ from janito.cli.chat_mode.shell.commands.base import ShellCmdHandler
4
+ from janito.cli.console import shared_console
5
+
6
+
7
+ class UnrestrictedShellHandler(ShellCmdHandler):
8
+ """Toggle unrestricted mode (equivalent to -u CLI flag)."""
9
+
10
+ help_text = "Toggle unrestricted mode (disable path security and URL whitelist)"
11
+
12
+ def run(self):
13
+ """Execute the unrestricted command."""
14
+ if not self.shell_state:
15
+ shared_console.print("[red]Error: Shell state not available[/red]")
16
+ return
17
+
18
+ # Toggle unrestricted mode
19
+ current_unrestricted = getattr(self.shell_state, 'unrestricted_mode', False)
20
+ new_unrestricted = not current_unrestricted
21
+
22
+ # Update shell state
23
+ self.shell_state.unrestricted_mode = new_unrestricted
24
+
25
+ # Update tools adapter
26
+ if hasattr(self.shell_state, 'tools_adapter'):
27
+ setattr(self.shell_state.tools_adapter, 'unrestricted_paths', new_unrestricted)
28
+
29
+ # Update URL whitelist manager
30
+ from janito.tools.url_whitelist import get_url_whitelist_manager
31
+ whitelist_manager = get_url_whitelist_manager()
32
+ whitelist_manager.set_unrestricted_mode(new_unrestricted)
33
+
34
+ status = "enabled" if new_unrestricted else "disabled"
35
+ warning = " (DANGEROUS - no path or URL restrictions)" if new_unrestricted else ""
36
+
37
+ shared_console.print(
38
+ f"[bold {'red' if new_unrestricted else 'green'}]"
39
+ f"Unrestricted mode {status}{warning}[/bold {'red' if new_unrestricted else 'green'}]"
40
+ )
@@ -42,6 +42,30 @@ def handle_show_config(args):
42
42
  console.print(f"[bold yellow]Current provider:[/bold yellow] {provider!r}\n")
43
43
  if model is not None:
44
44
  console.print(f"[bold yellow]Global model:[/bold yellow] {model!r}\n")
45
+
46
+ # Show all configuration values
47
+ console.print("[bold green]Configuration values:[/bold green]")
48
+ all_config = config.all()
49
+ if all_config:
50
+ for key, value in sorted(all_config.items()):
51
+ # Hide sensitive values like API keys
52
+ if 'api_key' in key.lower() and value:
53
+ masked_value = value[:8] + '***' + value[-4:] if len(value) > 12 else '***'
54
+ console.print(f" {key}: {masked_value!r}")
55
+ elif key == 'providers' and isinstance(value, dict):
56
+ # Handle nested provider configs with API keys
57
+ masked_providers = {}
58
+ for provider_name, provider_config in value.items():
59
+ masked_config = dict(provider_config)
60
+ if 'api_key' in masked_config and masked_config['api_key']:
61
+ api_key = masked_config['api_key']
62
+ masked_config['api_key'] = api_key[:8] + '***' + api_key[-4:] if len(api_key) > 12 else '***'
63
+ masked_providers[provider_name] = masked_config
64
+ console.print(f" {key}: {masked_providers!r}")
65
+ else:
66
+ console.print(f" {key}: {value!r}")
67
+ else:
68
+ console.print(" (no configuration values set)")
45
69
 
46
70
  # Show disabled tools
47
71
  from janito.tools.disabled_tools import load_disabled_tools_from_config
@@ -293,7 +293,8 @@ class JanitoCLI:
293
293
  self.parser = argparse.ArgumentParser(
294
294
  description="Janito CLI - A tool for running LLM-powered workflows from the command line."
295
295
  "\n\nExample usage: janito -p moonshotai -m kimi-k1-8k 'Your prompt here'\n\n"
296
- "Use -m or --model to set the model for the session."
296
+ "Use -m or --model to set the model for the session.",
297
+
297
298
  )
298
299
  self._define_args()
299
300
  self.args = self.parser.parse_args()
@@ -409,6 +410,17 @@ class JanitoCLI:
409
410
  self._maybe_print_verbose_provider_model()
410
411
  handle_getter(self.args)
411
412
  return
413
+ # Handle /rwx prefix for enabling all permissions
414
+ if self.args.user_prompt and self.args.user_prompt[0] == '/rwx':
415
+ self.args.read = True
416
+ self.args.write = True
417
+ self.args.exec = True
418
+ # Remove the /rwx prefix from the prompt
419
+ self.args.user_prompt = self.args.user_prompt[1:]
420
+ elif self.args.user_prompt and self.args.user_prompt[0].startswith('/'):
421
+ # Skip LLM processing for other commands that start with /
422
+ return
423
+
412
424
  # If running in single shot mode and --profile is not provided, default to 'developer' profile
413
425
  if get_prompt_mode(self.args) == "single_shot" and not getattr(
414
426
  self.args, "profile", None
@@ -4,6 +4,7 @@ import os
4
4
  import json
5
5
  from pathlib import Path
6
6
  from bs4 import BeautifulSoup
7
+ from typing import Dict, Any, Optional
7
8
  from janito.tools.adapters.local.adapter import register_local_tool
8
9
  from janito.tools.tool_base import ToolBase, ToolPermissions
9
10
  from janito.report_events import ReportAction
@@ -45,6 +46,9 @@ class FetchUrlTool(ToolBase):
45
46
  timeout (int, optional): Timeout in seconds for the HTTP request. Defaults to 10.
46
47
  save_to_file (str, optional): File path to save the full resource content. If provided,
47
48
  the complete response will be saved to this file instead of being processed.
49
+ headers (Dict[str, str], optional): Custom HTTP headers to send with the request.
50
+ cookies (Dict[str, str], optional): Custom cookies to send with the request.
51
+ follow_redirects (bool, optional): Whether to follow HTTP redirects. Defaults to True.
48
52
  Returns:
49
53
  str: Extracted text content from the web page, or a warning message. Example:
50
54
  - "<main text content...>"
@@ -64,6 +68,22 @@ class FetchUrlTool(ToolBase):
64
68
  {}
65
69
  ) # In-memory session cache - lifetime matches tool instance
66
70
  self._load_cache()
71
+
72
+ # Browser-like session with cookies and headers
73
+ self.session = requests.Session()
74
+ self.session.headers.update({
75
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
76
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
77
+ 'Accept-Language': 'en-US,en;q=0.5',
78
+ 'Accept-Encoding': 'gzip, deflate, br',
79
+ 'DNT': '1',
80
+ 'Connection': 'keep-alive',
81
+ 'Upgrade-Insecure-Requests': '1',
82
+ })
83
+
84
+ # Load cookies from disk if they exist
85
+ self.cookies_file = self.cache_dir / "cookies.json"
86
+ self._load_cookies()
67
87
 
68
88
  def _load_cache(self):
69
89
  """Load error cache from disk."""
@@ -84,6 +104,33 @@ class FetchUrlTool(ToolBase):
84
104
  except IOError:
85
105
  pass # Silently fail if we can't write cache
86
106
 
107
+ def _load_cookies(self):
108
+ """Load cookies from disk into session."""
109
+ if self.cookies_file.exists():
110
+ try:
111
+ with open(self.cookies_file, "r", encoding="utf-8") as f:
112
+ cookies_data = json.load(f)
113
+ for cookie in cookies_data:
114
+ self.session.cookies.set(**cookie)
115
+ except (json.JSONDecodeError, IOError):
116
+ pass # Silently fail if we can't load cookies
117
+
118
+ def _save_cookies(self):
119
+ """Save session cookies to disk."""
120
+ try:
121
+ cookies_data = []
122
+ for cookie in self.session.cookies:
123
+ cookies_data.append({
124
+ 'name': cookie.name,
125
+ 'value': cookie.value,
126
+ 'domain': cookie.domain,
127
+ 'path': cookie.path
128
+ })
129
+ with open(self.cookies_file, "w", encoding="utf-8") as f:
130
+ json.dump(cookies_data, f, indent=2)
131
+ except IOError:
132
+ pass # Silently fail if we can't write cookies
133
+
87
134
  def _get_cached_error(self, url: str) -> tuple[str, bool]:
88
135
  """
89
136
  Check if we have a cached error for this URL.
@@ -123,14 +170,15 @@ class FetchUrlTool(ToolBase):
123
170
  }
124
171
  self._save_cache()
125
172
 
126
- def _fetch_url_content(self, url: str, timeout: int = 10) -> str:
173
+ def _fetch_url_content(self, url: str, timeout: int = 10, headers: Optional[Dict[str, str]] = None,
174
+ cookies: Optional[Dict[str, str]] = None, follow_redirects: bool = True) -> str:
127
175
  """Fetch URL content and handle HTTP errors.
128
176
 
129
177
  Implements two-tier caching:
130
178
  1. Session cache: In-memory cache for successful responses (lifetime = tool instance)
131
179
  2. Error cache: Persistent disk cache for HTTP errors with different expiration times
132
180
 
133
- Also implements URL whitelist checking.
181
+ Also implements URL whitelist checking and browser-like behavior.
134
182
  """
135
183
  # Check URL whitelist
136
184
  from janito.tools.url_whitelist import get_url_whitelist_manager
@@ -172,9 +220,27 @@ class FetchUrlTool(ToolBase):
172
220
  return cached_error
173
221
 
174
222
  try:
175
- response = requests.get(url, timeout=timeout)
223
+ # Merge custom headers with default ones
224
+ request_headers = self.session.headers.copy()
225
+ if headers:
226
+ request_headers.update(headers)
227
+
228
+ # Merge custom cookies
229
+ if cookies:
230
+ self.session.cookies.update(cookies)
231
+
232
+ response = self.session.get(
233
+ url,
234
+ timeout=timeout,
235
+ headers=request_headers,
236
+ allow_redirects=follow_redirects
237
+ )
176
238
  response.raise_for_status()
177
239
  content = response.text
240
+
241
+ # Save cookies after successful request
242
+ self._save_cookies()
243
+
178
244
  # Cache successful responses in session cache
179
245
  self.session_cache[url] = content
180
246
  return content
@@ -275,6 +341,9 @@ class FetchUrlTool(ToolBase):
275
341
  context_chars: int = 400,
276
342
  timeout: int = 10,
277
343
  save_to_file: str = None,
344
+ headers: Dict[str, str] = None,
345
+ cookies: Dict[str, str] = None,
346
+ follow_redirects: bool = True,
278
347
  ) -> str:
279
348
  if not url.strip():
280
349
  self.report_warning(tr("ℹ️ Empty URL provided."), ReportAction.READ)
@@ -284,7 +353,10 @@ class FetchUrlTool(ToolBase):
284
353
 
285
354
  # Check if we should save to file
286
355
  if save_to_file:
287
- html_content = self._fetch_url_content(url, timeout=timeout)
356
+ html_content = self._fetch_url_content(
357
+ url, timeout=timeout, headers=headers, cookies=cookies,
358
+ follow_redirects=follow_redirects
359
+ )
288
360
  if html_content.startswith("Warning:"):
289
361
  return html_content
290
362
 
@@ -307,7 +379,10 @@ class FetchUrlTool(ToolBase):
307
379
  return error_msg
308
380
 
309
381
  # Normal processing path
310
- html_content = self._fetch_url_content(url, timeout=timeout)
382
+ html_content = self._fetch_url_content(
383
+ url, timeout=timeout, headers=headers, cookies=cookies,
384
+ follow_redirects=follow_redirects
385
+ )
311
386
  if html_content.startswith("Warning:"):
312
387
  return html_content
313
388
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.25.0
3
+ Version: 2.27.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
@@ -187,7 +187,25 @@ janito -r -w "Read and update this file: ..."
187
187
  To enable all permissions (read, write, execute):
188
188
 
189
189
  ```bash
190
+ # Using individual flags
190
191
  janito -r -w -x "Run this code: print('Hello, world!')"
192
+
193
+ # Using the convenient /rwx prefix (single-shot mode)
194
+ janito /rwx "Run this code: print('Hello, world!')"
195
+ ```
196
+
197
+ #### One-Shot Mode
198
+ For quick tasks without entering interactive mode, provide your prompt directly:
199
+
200
+ ```bash
201
+ # Basic one-shot
202
+ janito "What are the key classes in this project?"
203
+
204
+ # One-shot with all permissions enabled
205
+ janito /rwx "Create a Python script and run it"
206
+
207
+ # One-shot with specific permissions
208
+ janito -r -w "Read this file and create a summary"
191
209
  ```
192
210
 
193
211
  > **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
@@ -61,6 +61,8 @@ docs/about/why.md
61
61
  docs/changelogs/CHANGELOG.md
62
62
  docs/changelogs/CHANGELOG_2.16.0.md
63
63
  docs/changelogs/CHANGELOG_2.23.0.md
64
+ docs/changelogs/CHANGELOG_2.26.0.md
65
+ docs/changelogs/CHANGELOG_2.27.0.md
64
66
  docs/changelogs/RELEASE_NOTES_2.22.0.md
65
67
  docs/changelogs/RELEASE_NOTES_2.24.1.md
66
68
  docs/code_intelligence/agentic-frameworks-comparison.md
@@ -202,6 +204,7 @@ janito/cli/chat_mode/shell/commands/security_command.py
202
204
  janito/cli/chat_mode/shell/commands/session.py
203
205
  janito/cli/chat_mode/shell/commands/session_control.py
204
206
  janito/cli/chat_mode/shell/commands/tools.py
207
+ janito/cli/chat_mode/shell/commands/unrestricted.py
205
208
  janito/cli/chat_mode/shell/commands/utility.py
206
209
  janito/cli/chat_mode/shell/commands/verbose.py
207
210
  janito/cli/chat_mode/shell/commands/write.py
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes