janito 2.29.0__tar.gz → 2.31.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 (465) hide show
  1. {janito-2.29.0 → janito-2.31.0}/PKG-INFO +1 -1
  2. janito-2.31.0/docs/CHANGELOG.md +49 -0
  3. janito-2.31.0/docs/PROFILES.md +129 -0
  4. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/CHANGELOG.md +3 -3
  5. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/CHANGELOG_2.23.0.md +3 -3
  6. {janito-2.29.0 → janito-2.31.0}/docs/guides/market-data-sources.md +1 -1
  7. {janito-2.29.0 → janito-2.31.0}/docs/guides/stock-market-guide.md +1 -1
  8. {janito-2.29.0 → janito-2.31.0}/docs/plugins/README.md +4 -4
  9. {janito-2.29.0 → janito-2.31.0}/janito/README.md +3 -3
  10. {janito-2.29.0 → janito-2.31.0}/janito/agent/setup_agent.py +21 -35
  11. {janito-2.29.0 → janito-2.31.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +6 -0
  12. {janito-2.29.0 → janito-2.31.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +6 -0
  13. {janito-2.29.0 → janito-2.31.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +7 -1
  14. {janito-2.29.0 → janito-2.31.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +7 -1
  15. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/session.py +19 -51
  16. janito-2.31.0/janito/cli/cli_commands/list_plugins.py +117 -0
  17. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/show_system_prompt.py +8 -3
  18. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/runner.py +2 -2
  19. {janito-2.29.0 → janito-2.31.0}/janito/cli/main_cli.py +9 -15
  20. {janito-2.29.0 → janito-2.31.0}/janito/cli/prompt_core.py +2 -0
  21. {janito-2.29.0 → janito-2.31.0}/janito/cli/single_shot_mode/handler.py +2 -0
  22. {janito-2.29.0 → janito-2.31.0}/janito/llm/agent.py +6 -1
  23. {janito-2.29.0 → janito-2.31.0}/janito/provider_registry.py +1 -1
  24. {janito-2.29.0 → janito-2.31.0}/janito/providers/openai/provider.py +1 -1
  25. {janito-2.29.0/plugins/ui/userinterface/tools → janito-2.31.0/janito/tools/adapters/local}/ask_user.py +3 -1
  26. {janito-2.29.0/plugins/web/webtools/tools → janito-2.31.0/janito/tools/adapters/local}/fetch_url.py +20 -28
  27. {janito-2.29.0/plugins/core/filemanager/tools → janito-2.31.0/janito/tools/adapters/local}/replace_text_in_file.py +9 -3
  28. {janito-2.29.0/plugins/core/codeanalyzer/tools → janito-2.31.0/janito/tools/adapters/local}/search_text/core.py +2 -2
  29. {janito-2.29.0 → janito-2.31.0}/janito/tools/loop_protection_decorator.py +12 -16
  30. {janito-2.29.0 → janito-2.31.0}/janito/tools/tools_adapter.py +18 -4
  31. {janito-2.29.0 → janito-2.31.0}/janito.egg-info/PKG-INFO +1 -1
  32. {janito-2.29.0 → janito-2.31.0}/janito.egg-info/SOURCES.txt +2 -1
  33. janito-2.31.0/janito.egg-info/top_level.txt +1 -0
  34. {janito-2.29.0 → janito-2.31.0}/mkdocs.yml +2 -1
  35. {janito-2.29.0/janito/tools/adapters/local → janito-2.31.0/plugins/core/codeanalyzer/tools}/search_text/core.py +2 -2
  36. {janito-2.29.0/janito/tools/adapters/local → janito-2.31.0/plugins/web/webtools/tools}/fetch_url.py +20 -28
  37. janito-2.29.0/janito/cli/chat_mode/session_profile_select.py +0 -182
  38. janito-2.29.0/janito/cli/cli_commands/list_plugins.py +0 -93
  39. janito-2.29.0/janito.egg-info/top_level.txt +0 -2
  40. {janito-2.29.0 → janito-2.31.0}/.codespellrc +0 -0
  41. {janito-2.29.0 → janito-2.31.0}/.gitattributes +0 -0
  42. {janito-2.29.0 → janito-2.31.0}/.github/workflows/python-app.yml.disabled +0 -0
  43. {janito-2.29.0 → janito-2.31.0}/.gitignore +0 -0
  44. {janito-2.29.0 → janito-2.31.0}/.pre-commit-config.yaml +0 -0
  45. {janito-2.29.0 → janito-2.31.0}/.secrets.baseline +0 -0
  46. {janito-2.29.0 → janito-2.31.0}/.vscode/settings.json +0 -0
  47. {janito-2.29.0 → janito-2.31.0}/LICENSE +0 -0
  48. {janito-2.29.0 → janito-2.31.0}/MARKET_ANALYST_README.md +0 -0
  49. {janito-2.29.0 → janito-2.31.0}/README-dev.md +0 -0
  50. {janito-2.29.0 → janito-2.31.0}/README.md +0 -0
  51. {janito-2.29.0 → janito-2.31.0}/RELEASE_COMPARISON.md +0 -0
  52. {janito-2.29.0 → janito-2.31.0}/UPDATING_DOCS.md +0 -0
  53. {janito-2.29.0 → janito-2.31.0}/adding_mcp.txt +0 -0
  54. {janito-2.29.0 → janito-2.31.0}/docs/DIV.md +0 -0
  55. {janito-2.29.0 → janito-2.31.0}/docs/Interfaces.txt +0 -0
  56. {janito-2.29.0 → janito-2.31.0}/docs/TOOLBAR-STYLING.md +0 -0
  57. {janito-2.29.0 → janito-2.31.0}/docs/about/costs.md +0 -0
  58. {janito-2.29.0 → janito-2.31.0}/docs/about/vs-webchats.md +0 -0
  59. {janito-2.29.0 → janito-2.31.0}/docs/about/why.md +0 -0
  60. {janito-2.29.0 → janito-2.31.0}/docs/alibaba-setup.md +0 -0
  61. {janito-2.29.0 → janito-2.31.0}/docs/alternatives.md +0 -0
  62. {janito-2.29.0 → janito-2.31.0}/docs/cerebras-setup.md +0 -0
  63. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  64. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  65. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  66. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  67. {janito-2.29.0 → janito-2.31.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  68. {janito-2.29.0 → janito-2.31.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  69. {janito-2.29.0 → janito-2.31.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  70. {janito-2.29.0 → janito-2.31.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  71. {janito-2.29.0 → janito-2.31.0}/docs/code_intelligence/our-approach.md +0 -0
  72. {janito-2.29.0 → janito-2.31.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  73. {janito-2.29.0 → janito-2.31.0}/docs/concepts/analysis-style.md +0 -0
  74. {janito-2.29.0 → janito-2.31.0}/docs/concepts/human-guided-ai.md +0 -0
  75. {janito-2.29.0 → janito-2.31.0}/docs/concepts/index.md +0 -0
  76. {janito-2.29.0 → janito-2.31.0}/docs/concepts/language-model-clients.md +0 -0
  77. {janito-2.29.0 → janito-2.31.0}/docs/concepts/prompt-design-style.md +0 -0
  78. {janito-2.29.0 → janito-2.31.0}/docs/deepseek-setup.md +0 -0
  79. {janito-2.29.0 → janito-2.31.0}/docs/driver-flow.md +0 -0
  80. {janito-2.29.0 → janito-2.31.0}/docs/driver-request-cancellation.md +0 -0
  81. {janito-2.29.0 → janito-2.31.0}/docs/drivers/events.md +0 -0
  82. {janito-2.29.0 → janito-2.31.0}/docs/drivers.md +0 -0
  83. {janito-2.29.0 → janito-2.31.0}/docs/event-bus.md +0 -0
  84. {janito-2.29.0 → janito-2.31.0}/docs/guides/configuration.md +0 -0
  85. {janito-2.29.0 → janito-2.31.0}/docs/guides/developing.md +0 -0
  86. {janito-2.29.0 → janito-2.31.0}/docs/guides/disabled-tools.md +0 -0
  87. {janito-2.29.0 → janito-2.31.0}/docs/guides/installation.md +0 -0
  88. {janito-2.29.0 → janito-2.31.0}/docs/guides/profiles.md +0 -0
  89. {janito-2.29.0 → janito-2.31.0}/docs/guides/prompting/README.md +0 -0
  90. {janito-2.29.0 → janito-2.31.0}/docs/guides/read-chart-examples.md +0 -0
  91. {janito-2.29.0 → janito-2.31.0}/docs/guides/security-commands.md +0 -0
  92. {janito-2.29.0 → janito-2.31.0}/docs/guides/single-shot-terminal.md +0 -0
  93. {janito-2.29.0 → janito-2.31.0}/docs/guides/terminal-shell.md +0 -0
  94. {janito-2.29.0 → janito-2.31.0}/docs/guides/tools-developer-guide.md +0 -0
  95. {janito-2.29.0 → janito-2.31.0}/docs/guides/url-whitelist.md +0 -0
  96. {janito-2.29.0 → janito-2.31.0}/docs/guides/using.md +0 -0
  97. {janito-2.29.0 → janito-2.31.0}/docs/guides/using_tools.md +0 -0
  98. {janito-2.29.0 → janito-2.31.0}/docs/ibm-setup.md +0 -0
  99. {janito-2.29.0 → janito-2.31.0}/docs/imgs/code-generation-observability.png +0 -0
  100. {janito-2.29.0 → janito-2.31.0}/docs/imgs/code_generation_observability.png +0 -0
  101. {janito-2.29.0 → janito-2.31.0}/docs/imgs/happy-programmer.png +0 -0
  102. {janito-2.29.0 → janito-2.31.0}/docs/imgs/happy-programmer.svg +0 -0
  103. {janito-2.29.0 → janito-2.31.0}/docs/imgs/terminal-one-shot.png +0 -0
  104. {janito-2.29.0 → janito-2.31.0}/docs/imgs/terminal-shell.png +0 -0
  105. {janito-2.29.0 → janito-2.31.0}/docs/imgs/terminal_one_shot.png +0 -0
  106. {janito-2.29.0 → janito-2.31.0}/docs/imgs/terminal_shell.png +0 -0
  107. {janito-2.29.0 → janito-2.31.0}/docs/index.md +0 -0
  108. {janito-2.29.0 → janito-2.31.0}/docs/llm-drivers-required-config.md +0 -0
  109. {janito-2.29.0 → janito-2.31.0}/docs/llm-drivers.md +0 -0
  110. {janito-2.29.0 → janito-2.31.0}/docs/meta/developer-toolchain.md +0 -0
  111. {janito-2.29.0 → janito-2.31.0}/docs/meta/quality-checks.txt +0 -0
  112. {janito-2.29.0 → janito-2.31.0}/docs/mistral-setup.md +0 -0
  113. {janito-2.29.0 → janito-2.31.0}/docs/moonshot-setup.md +0 -0
  114. {janito-2.29.0 → janito-2.31.0}/docs/openai-setup.md +0 -0
  115. {janito-2.29.0 → janito-2.31.0}/docs/overrides/partials/copyright.html +0 -0
  116. {janito-2.29.0 → janito-2.31.0}/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -0
  117. {janito-2.29.0 → janito-2.31.0}/docs/plugins/MIGRATION_COMPLETE.md +0 -0
  118. {janito-2.29.0 → janito-2.31.0}/docs/plugins/api-reference.md +0 -0
  119. {janito-2.29.0 → janito-2.31.0}/docs/plugins/architecture.md +0 -0
  120. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  121. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
  122. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  123. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/system.md +0 -0
  124. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  125. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
  126. {janito-2.29.0 → janito-2.31.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
  127. {janito-2.29.0 → janito-2.31.0}/docs/plugins/configuration.md +0 -0
  128. {janito-2.29.0 → janito-2.31.0}/docs/plugins/examples/advanced.md +0 -0
  129. {janito-2.29.0 → janito-2.31.0}/docs/plugins/examples/basic.md +0 -0
  130. {janito-2.29.0 → janito-2.31.0}/docs/plugins/examples/intermediate.md +0 -0
  131. {janito-2.29.0 → janito-2.31.0}/docs/plugins/plugin-development.md +0 -0
  132. {janito-2.29.0 → janito-2.31.0}/docs/plugins/plugin-resources.md +0 -0
  133. {janito-2.29.0 → janito-2.31.0}/docs/plugins/publishing.md +0 -0
  134. {janito-2.29.0 → janito-2.31.0}/docs/plugins/remote-plugins.md +0 -0
  135. {janito-2.29.0 → janito-2.31.0}/docs/plugins/testing.md +0 -0
  136. {janito-2.29.0 → janito-2.31.0}/docs/provider-platform-access.md +0 -0
  137. {janito-2.29.0 → janito-2.31.0}/docs/public-sources.md +0 -0
  138. {janito-2.29.0 → janito-2.31.0}/docs/reference/api.md +0 -0
  139. {janito-2.29.0 → janito-2.31.0}/docs/reference/azure-openai.md +0 -0
  140. {janito-2.29.0 → janito-2.31.0}/docs/reference/cli-options.md +0 -0
  141. {janito-2.29.0 → janito-2.31.0}/docs/reference/message-handler-model.md +0 -0
  142. {janito-2.29.0 → janito-2.31.0}/docs/reference/rich-message-handler.md +0 -0
  143. {janito-2.29.0 → janito-2.31.0}/docs/security.md +0 -0
  144. {janito-2.29.0 → janito-2.31.0}/docs/supported-providers-models.md +0 -0
  145. {janito-2.29.0 → janito-2.31.0}/docs/tools/search-text.md +0 -0
  146. {janito-2.29.0 → janito-2.31.0}/docs/tools-index.md +0 -0
  147. {janito-2.29.0 → janito-2.31.0}/docs/tools-natural-results.md +0 -0
  148. {janito-2.29.0 → janito-2.31.0}/docs/tools-precision.md +0 -0
  149. {janito-2.29.0 → janito-2.31.0}/docs/z-ai-setup.md +0 -0
  150. {janito-2.29.0 → janito-2.31.0}/examples/loop_protection_example.py +0 -0
  151. {janito-2.29.0 → janito-2.31.0}/examples/loop_protection_tool_example.py +0 -0
  152. {janito-2.29.0 → janito-2.31.0}/get_nasdaq_top.py +0 -0
  153. {janito-2.29.0 → janito-2.31.0}/ibm-logo.txt +0 -0
  154. {janito-2.29.0 → janito-2.31.0}/janito/__init__.py +0 -0
  155. {janito-2.29.0 → janito-2.31.0}/janito/__main__.py +0 -0
  156. {janito-2.29.0 → janito-2.31.0}/janito/_version.py +0 -0
  157. {janito-2.29.0 → janito-2.31.0}/janito/cli/__init__.py +0 -0
  158. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/bindings.py +0 -0
  159. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  160. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  161. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/script_runner.py +0 -0
  162. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  163. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  164. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  165. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  166. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  167. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  168. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  169. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  170. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
  171. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
  172. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  173. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  174. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  175. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  176. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
  177. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  178. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
  179. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
  180. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  181. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
  182. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
  183. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
  184. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  185. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  186. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
  187. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
  188. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  189. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  190. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
  191. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  192. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  193. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  194. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  195. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  196. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  197. {janito-2.29.0 → janito-2.31.0}/janito/cli/chat_mode/toolbar.py +0 -0
  198. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
  199. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_config.py +0 -0
  200. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  201. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_models.py +0 -0
  202. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_profiles.py +0 -0
  203. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_providers.py +0 -0
  204. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  205. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/list_tools.py +0 -0
  206. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/model_selection.py +0 -0
  207. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/model_utils.py +0 -0
  208. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/ping_providers.py +0 -0
  209. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/set_api_key.py +0 -0
  210. {janito-2.29.0 → janito-2.31.0}/janito/cli/cli_commands/show_config.py +0 -0
  211. {janito-2.29.0 → janito-2.31.0}/janito/cli/config.py +0 -0
  212. {janito-2.29.0 → janito-2.31.0}/janito/cli/console.py +0 -0
  213. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/__init__.py +0 -0
  214. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/event_logger.py +0 -0
  215. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/getters.py +0 -0
  216. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/model_guesser.py +0 -0
  217. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/setters.py +0 -0
  218. {janito-2.29.0 → janito-2.31.0}/janito/cli/core/unsetters.py +0 -0
  219. {janito-2.29.0 → janito-2.31.0}/janito/cli/main.py +0 -0
  220. {janito-2.29.0 → janito-2.31.0}/janito/cli/prompt_handler.py +0 -0
  221. {janito-2.29.0 → janito-2.31.0}/janito/cli/prompt_setup.py +0 -0
  222. {janito-2.29.0 → janito-2.31.0}/janito/cli/rich_terminal_reporter.py +0 -0
  223. {janito-2.29.0 → janito-2.31.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  224. {janito-2.29.0 → janito-2.31.0}/janito/cli/utils.py +0 -0
  225. {janito-2.29.0 → janito-2.31.0}/janito/cli/verbose_output.py +0 -0
  226. {janito-2.29.0 → janito-2.31.0}/janito/config.py +0 -0
  227. {janito-2.29.0 → janito-2.31.0}/janito/config_manager.py +0 -0
  228. {janito-2.29.0 → janito-2.31.0}/janito/conversation_history.py +0 -0
  229. {janito-2.29.0 → janito-2.31.0}/janito/dir_walk_utils.py +0 -0
  230. {janito-2.29.0 → janito-2.31.0}/janito/docs/GETTING_STARTED.md +0 -0
  231. {janito-2.29.0 → janito-2.31.0}/janito/driver_events.py +0 -0
  232. {janito-2.29.0 → janito-2.31.0}/janito/drivers/azure_openai/driver.py +0 -0
  233. {janito-2.29.0 → janito-2.31.0}/janito/drivers/cerebras/__init__.py +0 -0
  234. {janito-2.29.0 → janito-2.31.0}/janito/drivers/dashscope.bak.zip +0 -0
  235. {janito-2.29.0 → janito-2.31.0}/janito/drivers/openai/README.md +0 -0
  236. {janito-2.29.0 → janito-2.31.0}/janito/drivers/openai/driver.py +0 -0
  237. {janito-2.29.0 → janito-2.31.0}/janito/drivers/openai_responses.bak.zip +0 -0
  238. {janito-2.29.0 → janito-2.31.0}/janito/drivers/zai/__init__.py +0 -0
  239. {janito-2.29.0 → janito-2.31.0}/janito/drivers/zai/driver.py +0 -0
  240. {janito-2.29.0 → janito-2.31.0}/janito/event_bus/__init__.py +0 -0
  241. {janito-2.29.0 → janito-2.31.0}/janito/event_bus/bus.py +0 -0
  242. {janito-2.29.0 → janito-2.31.0}/janito/event_bus/event.py +0 -0
  243. {janito-2.29.0 → janito-2.31.0}/janito/event_bus/handler.py +0 -0
  244. {janito-2.29.0 → janito-2.31.0}/janito/event_bus/queue_bus.py +0 -0
  245. {janito-2.29.0 → janito-2.31.0}/janito/exceptions.py +0 -0
  246. {janito-2.29.0 → janito-2.31.0}/janito/formatting.py +0 -0
  247. {janito-2.29.0 → janito-2.31.0}/janito/formatting_token.py +0 -0
  248. {janito-2.29.0 → janito-2.31.0}/janito/gitignore_utils.py +0 -0
  249. {janito-2.29.0 → janito-2.31.0}/janito/i18n/__init__.py +0 -0
  250. {janito-2.29.0 → janito-2.31.0}/janito/i18n/it.py +0 -0
  251. {janito-2.29.0 → janito-2.31.0}/janito/i18n/messages.py +0 -0
  252. {janito-2.29.0 → janito-2.31.0}/janito/i18n/pt.py +0 -0
  253. {janito-2.29.0 → janito-2.31.0}/janito/llm/README.md +0 -0
  254. {janito-2.29.0 → janito-2.31.0}/janito/llm/__init__.py +0 -0
  255. {janito-2.29.0 → janito-2.31.0}/janito/llm/auth.py +0 -0
  256. {janito-2.29.0 → janito-2.31.0}/janito/llm/auth_utils.py +0 -0
  257. {janito-2.29.0 → janito-2.31.0}/janito/llm/driver.py +0 -0
  258. {janito-2.29.0 → janito-2.31.0}/janito/llm/driver_config.py +0 -0
  259. {janito-2.29.0 → janito-2.31.0}/janito/llm/driver_config_builder.py +0 -0
  260. {janito-2.29.0 → janito-2.31.0}/janito/llm/driver_input.py +0 -0
  261. {janito-2.29.0 → janito-2.31.0}/janito/llm/message_parts.py +0 -0
  262. {janito-2.29.0 → janito-2.31.0}/janito/llm/model.py +0 -0
  263. {janito-2.29.0 → janito-2.31.0}/janito/llm/provider.py +0 -0
  264. {janito-2.29.0 → janito-2.31.0}/janito/mkdocs.yml +0 -0
  265. {janito-2.29.0 → janito-2.31.0}/janito/perf_singleton.py +0 -0
  266. {janito-2.29.0 → janito-2.31.0}/janito/performance_collector.py +0 -0
  267. {janito-2.29.0 → janito-2.31.0}/janito/platform_discovery.py +0 -0
  268. {janito-2.29.0 → janito-2.31.0}/janito/plugins/__init__.py +0 -0
  269. {janito-2.29.0 → janito-2.31.0}/janito/plugins/base.py +0 -0
  270. {janito-2.29.0 → janito-2.31.0}/janito/plugins/builtin.py +0 -0
  271. {janito-2.29.0 → janito-2.31.0}/janito/plugins/config.py +0 -0
  272. {janito-2.29.0 → janito-2.31.0}/janito/plugins/discovery.py +0 -0
  273. {janito-2.29.0 → janito-2.31.0}/janito/plugins/manager.py +0 -0
  274. {janito-2.29.0 → janito-2.31.0}/janito/provider_config.py +0 -0
  275. {janito-2.29.0 → janito-2.31.0}/janito/providers/__init__.py +0 -0
  276. {janito-2.29.0 → janito-2.31.0}/janito/providers/alibaba/__init__.py +0 -0
  277. {janito-2.29.0 → janito-2.31.0}/janito/providers/alibaba/model_info.py +0 -0
  278. {janito-2.29.0 → janito-2.31.0}/janito/providers/alibaba/provider.py +0 -0
  279. {janito-2.29.0 → janito-2.31.0}/janito/providers/anthropic/model_info.py +0 -0
  280. {janito-2.29.0 → janito-2.31.0}/janito/providers/anthropic/provider.py +0 -0
  281. {janito-2.29.0 → janito-2.31.0}/janito/providers/azure_openai/model_info.py +0 -0
  282. {janito-2.29.0 → janito-2.31.0}/janito/providers/azure_openai/provider.py +0 -0
  283. {janito-2.29.0 → janito-2.31.0}/janito/providers/cerebras/__init__.py +0 -0
  284. {janito-2.29.0 → janito-2.31.0}/janito/providers/cerebras/model_info.py +0 -0
  285. {janito-2.29.0 → janito-2.31.0}/janito/providers/cerebras/provider.py +0 -0
  286. {janito-2.29.0 → janito-2.31.0}/janito/providers/dashscope.bak.zip +0 -0
  287. {janito-2.29.0 → janito-2.31.0}/janito/providers/deepseek/__init__.py +0 -0
  288. {janito-2.29.0 → janito-2.31.0}/janito/providers/deepseek/model_info.py +0 -0
  289. {janito-2.29.0 → janito-2.31.0}/janito/providers/deepseek/provider.py +0 -0
  290. {janito-2.29.0 → janito-2.31.0}/janito/providers/google/__init__.py +0 -0
  291. {janito-2.29.0 → janito-2.31.0}/janito/providers/google/model_info.py +0 -0
  292. {janito-2.29.0 → janito-2.31.0}/janito/providers/google/provider.py +0 -0
  293. {janito-2.29.0 → janito-2.31.0}/janito/providers/ibm/README.md +0 -0
  294. {janito-2.29.0 → janito-2.31.0}/janito/providers/ibm/__init__.py +0 -0
  295. {janito-2.29.0 → janito-2.31.0}/janito/providers/ibm/model_info.py +0 -0
  296. {janito-2.29.0 → janito-2.31.0}/janito/providers/ibm/provider.py +0 -0
  297. {janito-2.29.0 → janito-2.31.0}/janito/providers/mistral/__init__.py +0 -0
  298. {janito-2.29.0 → janito-2.31.0}/janito/providers/mistral/model_info.py +0 -0
  299. {janito-2.29.0 → janito-2.31.0}/janito/providers/mistral/provider.py +0 -0
  300. {janito-2.29.0 → janito-2.31.0}/janito/providers/moonshot/__init__.py +0 -0
  301. {janito-2.29.0 → janito-2.31.0}/janito/providers/moonshot/model_info.py +0 -0
  302. {janito-2.29.0 → janito-2.31.0}/janito/providers/moonshot/provider.py +0 -0
  303. {janito-2.29.0 → janito-2.31.0}/janito/providers/openai/__init__.py +0 -0
  304. {janito-2.29.0 → janito-2.31.0}/janito/providers/openai/model_info.py +0 -0
  305. {janito-2.29.0 → janito-2.31.0}/janito/providers/openai/schema_generator.py +0 -0
  306. {janito-2.29.0 → janito-2.31.0}/janito/providers/registry.py +0 -0
  307. {janito-2.29.0 → janito-2.31.0}/janito/providers/zai/__init__.py +0 -0
  308. {janito-2.29.0 → janito-2.31.0}/janito/providers/zai/model_info.py +0 -0
  309. {janito-2.29.0 → janito-2.31.0}/janito/providers/zai/provider.py +0 -0
  310. {janito-2.29.0 → janito-2.31.0}/janito/providers/zai/schema_generator.py +0 -0
  311. {janito-2.29.0 → janito-2.31.0}/janito/regions/__init__.py +0 -0
  312. {janito-2.29.0 → janito-2.31.0}/janito/regions/cli.py +0 -0
  313. {janito-2.29.0 → janito-2.31.0}/janito/regions/geo_utils.py +0 -0
  314. {janito-2.29.0 → janito-2.31.0}/janito/regions/provider_regions.py +0 -0
  315. {janito-2.29.0 → janito-2.31.0}/janito/report_events.py +0 -0
  316. {janito-2.29.0 → janito-2.31.0}/janito/shell.bak.zip +0 -0
  317. {janito-2.29.0 → janito-2.31.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  318. {janito-2.29.0 → janito-2.31.0}/janito/tools/README.md +0 -0
  319. {janito-2.29.0 → janito-2.31.0}/janito/tools/__init__.py +0 -0
  320. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/__init__.py +0 -0
  321. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/__init__.py +0 -0
  322. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/adapter.py +0 -0
  323. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/copy_file.py +0 -0
  324. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/create_directory.py +0 -0
  325. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/create_file.py +0 -0
  326. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  327. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/find_files.py +0 -0
  328. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  329. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  330. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  331. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  332. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  333. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  334. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/move_file.py +0 -0
  335. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  336. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/open_url.py +0 -0
  337. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  338. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/python_command_run.py +0 -0
  339. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/python_file_run.py +0 -0
  340. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/read_chart.py +0 -0
  341. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/read_files.py +0 -0
  342. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  343. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/remove_file.py +0 -0
  344. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  345. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
  346. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  347. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  348. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  349. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  350. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  351. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  352. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  353. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  354. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +0 -0
  355. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  356. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  357. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  358. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  359. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  360. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  361. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  362. {janito-2.29.0 → janito-2.31.0}/janito/tools/adapters/local/view_file.py +0 -0
  363. {janito-2.29.0 → janito-2.31.0}/janito/tools/base.py +0 -0
  364. {janito-2.29.0 → janito-2.31.0}/janito/tools/disabled_tools.py +0 -0
  365. {janito-2.29.0 → janito-2.31.0}/janito/tools/inspect_registry.py +0 -0
  366. {janito-2.29.0 → janito-2.31.0}/janito/tools/loop_protection.py +0 -0
  367. {janito-2.29.0 → janito-2.31.0}/janito/tools/outline_file.bak.zip +0 -0
  368. {janito-2.29.0 → janito-2.31.0}/janito/tools/path_security.py +0 -0
  369. {janito-2.29.0 → janito-2.31.0}/janito/tools/path_utils.py +0 -0
  370. {janito-2.29.0 → janito-2.31.0}/janito/tools/permissions.py +0 -0
  371. {janito-2.29.0 → janito-2.31.0}/janito/tools/permissions_parse.py +0 -0
  372. {janito-2.29.0 → janito-2.31.0}/janito/tools/tool_base.py +0 -0
  373. {janito-2.29.0 → janito-2.31.0}/janito/tools/tool_events.py +0 -0
  374. {janito-2.29.0 → janito-2.31.0}/janito/tools/tool_run_exception.py +0 -0
  375. {janito-2.29.0 → janito-2.31.0}/janito/tools/tool_use_tracker.py +0 -0
  376. {janito-2.29.0 → janito-2.31.0}/janito/tools/tool_utils.py +0 -0
  377. {janito-2.29.0 → janito-2.31.0}/janito/tools/tools_schema.py +0 -0
  378. {janito-2.29.0 → janito-2.31.0}/janito/tools/url_whitelist.py +0 -0
  379. {janito-2.29.0 → janito-2.31.0}/janito/utils.py +0 -0
  380. {janito-2.29.0 → janito-2.31.0}/janito.egg-info/dependency_links.txt +0 -0
  381. {janito-2.29.0 → janito-2.31.0}/janito.egg-info/entry_points.txt +0 -0
  382. {janito-2.29.0 → janito-2.31.0}/janito.egg-info/requires.txt +0 -0
  383. {janito-2.29.0 → janito-2.31.0}/market_prompt_fix.py +0 -0
  384. {janito-2.29.0 → janito-2.31.0}/market_test.py +0 -0
  385. {janito-2.29.0 → janito-2.31.0}/mkdocs_hooks.py +0 -0
  386. {janito-2.29.0 → janito-2.31.0}/plugins/__init__.py +0 -0
  387. {janito-2.29.0 → janito-2.31.0}/plugins/core/__init__.py +0 -0
  388. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/__init__.py +0 -0
  389. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  390. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
  391. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  392. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  393. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  394. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  395. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  396. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  397. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  398. {janito-2.29.0 → janito-2.31.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  399. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/__init__.py +0 -0
  400. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/copy_file.py +0 -0
  401. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/create_directory.py +0 -0
  402. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/create_file.py +0 -0
  403. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/delete_text_in_file.py +0 -0
  404. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/find_files.py +0 -0
  405. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/move_file.py +0 -0
  406. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/read_files.py +0 -0
  407. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/remove_directory.py +0 -0
  408. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/remove_file.py +0 -0
  409. {janito-2.29.0/janito/tools/adapters/local → janito-2.31.0/plugins/core/filemanager/tools}/replace_text_in_file.py +0 -0
  410. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  411. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  412. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  413. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  414. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
  415. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  416. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  417. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  418. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  419. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  420. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  421. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  422. {janito-2.29.0 → janito-2.31.0}/plugins/core/filemanager/tools/view_file.py +0 -0
  423. {janito-2.29.0 → janito-2.31.0}/plugins/core/system/__init__.py +0 -0
  424. {janito-2.29.0 → janito-2.31.0}/plugins/core/system/tools/run_bash_command.py +0 -0
  425. {janito-2.29.0 → janito-2.31.0}/plugins/core/system/tools/run_powershell_command.py +0 -0
  426. {janito-2.29.0 → janito-2.31.0}/plugins/dev/__init__.py +0 -0
  427. {janito-2.29.0 → janito-2.31.0}/plugins/dev/pythondev/__init__.py +0 -0
  428. {janito-2.29.0 → janito-2.31.0}/plugins/dev/pythondev/tools/python_code_run.py +0 -0
  429. {janito-2.29.0 → janito-2.31.0}/plugins/dev/pythondev/tools/python_command_run.py +0 -0
  430. {janito-2.29.0 → janito-2.31.0}/plugins/dev/pythondev/tools/python_file_run.py +0 -0
  431. {janito-2.29.0 → janito-2.31.0}/plugins/dev/visualization/__init__.py +0 -0
  432. {janito-2.29.0 → janito-2.31.0}/plugins/dev/visualization/tools/read_chart.py +0 -0
  433. {janito-2.29.0 → janito-2.31.0}/plugins/example_plugin.py +0 -0
  434. {janito-2.29.0 → janito-2.31.0}/plugins/ui/__init__.py +0 -0
  435. {janito-2.29.0 → janito-2.31.0}/plugins/ui/userinterface/__init__.py +0 -0
  436. {janito-2.29.0/janito/tools/adapters/local → janito-2.31.0/plugins/ui/userinterface/tools}/ask_user.py +0 -0
  437. {janito-2.29.0 → janito-2.31.0}/plugins/web/__init__.py +0 -0
  438. {janito-2.29.0 → janito-2.31.0}/plugins/web/webtools/__init__.py +0 -0
  439. {janito-2.29.0 → janito-2.31.0}/plugins/web/webtools/tools/open_html_in_browser.py +0 -0
  440. {janito-2.29.0 → janito-2.31.0}/plugins/web/webtools/tools/open_url.py +0 -0
  441. {janito-2.29.0 → janito-2.31.0}/plugins.txt +0 -0
  442. {janito-2.29.0 → janito-2.31.0}/pyproject.toml +0 -0
  443. {janito-2.29.0 → janito-2.31.0}/pytest.ini +0 -0
  444. {janito-2.29.0 → janito-2.31.0}/requirements-dev.txt +0 -0
  445. {janito-2.29.0 → janito-2.31.0}/requirements.txt +0 -0
  446. {janito-2.29.0 → janito-2.31.0}/setup.cfg +0 -0
  447. {janito-2.29.0 → janito-2.31.0}/test_example.py +0 -0
  448. {janito-2.29.0 → janito-2.31.0}/test_key_field_behavior.py +0 -0
  449. {janito-2.29.0 → janito-2.31.0}/test_key_field_protection.py +0 -0
  450. {janito-2.29.0 → janito-2.31.0}/test_loop_protection_return.py +0 -0
  451. {janito-2.29.0 → janito-2.31.0}/test_market_analyst.py +0 -0
  452. {janito-2.29.0 → janito-2.31.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  453. {janito-2.29.0 → janito-2.31.0}/tests/adapters/local/test_read_files.py +0 -0
  454. {janito-2.29.0 → janito-2.31.0}/tests/test_cli_list_models.py +0 -0
  455. {janito-2.29.0 → janito-2.31.0}/tests/test_cli_list_providers.py +0 -0
  456. {janito-2.29.0 → janito-2.31.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  457. {janito-2.29.0 → janito-2.31.0}/tests/test_cli_list_providers_moonshot.py +0 -0
  458. {janito-2.29.0 → janito-2.31.0}/tests/test_cli_version.py +0 -0
  459. {janito-2.29.0 → janito-2.31.0}/tests/test_disabled_tools.py +0 -0
  460. {janito-2.29.0 → janito-2.31.0}/tests/test_plugin_system.py +0 -0
  461. {janito-2.29.0 → janito-2.31.0}/tests/test_provider_alibaba.py +0 -0
  462. {janito-2.29.0 → janito-2.31.0}/tests/test_provider_cerebras.py +0 -0
  463. {janito-2.29.0 → janito-2.31.0}/tests/test_provider_moonshot.py +0 -0
  464. {janito-2.29.0 → janito-2.31.0}/tools/release.py +0 -0
  465. {janito-2.29.0 → janito-2.31.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.29.0
3
+ Version: 2.31.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
@@ -0,0 +1,49 @@
1
+ # Changelog
2
+
3
+ All notable changes to Janito will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Removed
11
+
12
+ - **Breaking Change**: Removed `--role` argument and interactive profile selection
13
+ - The `--role` argument has been completely removed from the CLI
14
+ - Interactive profile selection has been removed from chat mode
15
+ - Use `--profile <name>` or shorthand flags like `--developer` and `--market` instead
16
+ - Default behavior now uses the Developer profile when no profile is specified
17
+
18
+ ### Changed
19
+
20
+ - Updated documentation to reflect removal of role argument
21
+ - Added comprehensive profile documentation in `PROFILES.md`
22
+ - Simplified profile selection to use explicit flags only
23
+
24
+ ## [Previous Versions]
25
+
26
+ ### Added
27
+
28
+ - Initial support for profiles and roles
29
+ - Interactive profile selection in chat mode
30
+ - `--role` argument for specifying developer roles
31
+ - `--profile` argument for system prompt templates
32
+ - `--developer` and `--market` shorthand flags
33
+
34
+ ### Available Profiles
35
+
36
+ - **Developer**: Optimized for software development tasks
37
+ - **Market Analyst**: Specialized for market analysis and business insights
38
+
39
+ ### Supported Providers
40
+
41
+ - Moonshot AI (default)
42
+ - OpenAI
43
+ - Anthropic
44
+ - IBM WatsonX
45
+ - Google AI
46
+
47
+ ---
48
+
49
+ For detailed information about profiles and their usage, see [PROFILES.md](PROFILES.md).
@@ -0,0 +1,129 @@
1
+ # Janito Profiles
2
+
3
+ Janito supports predefined system prompts called "profiles" that help the AI understand the context and role it should play when responding to your requests.
4
+
5
+ ## Available Profiles
6
+
7
+ ### Developer Profile (`--developer` or `--profile developer`)
8
+
9
+ The default profile optimized for software development tasks. This profile:
10
+
11
+ - Focuses on code generation and debugging
12
+ - Provides access to Python tools and development utilities
13
+ - Emphasizes best practices and clean code
14
+ - Includes file system operations and code execution capabilities
15
+
16
+ **Usage:**
17
+ ```bash
18
+ janito --developer "Create a REST API with FastAPI"
19
+ janito --profile developer "Debug this Python script"
20
+ ```
21
+
22
+ ### Market Analyst Profile (`--market` or `--profile market-analyst`)
23
+
24
+ A specialized profile for market analysis and business insights. This profile:
25
+
26
+ - Focuses on data analysis and market research
27
+ - Provides tools for web scraping and data processing
28
+ - Emphasizes business context and market trends
29
+ - Includes tools for generating reports and visualizations
30
+
31
+ **Usage:**
32
+ ```bash
33
+ janito --market "Analyze stock market trends for tech companies"
34
+ janito --profile market-analyst "Scrape competitor pricing data"
35
+ ```
36
+
37
+ ## How Profiles Work
38
+
39
+ Profiles are implemented as Jinja2 templates that generate system prompts based on:
40
+
41
+ - The selected profile type
42
+ - Available tools and permissions
43
+ - Platform-specific configurations
44
+ - User preferences
45
+
46
+ When you use a profile, Janito automatically:
47
+
48
+ 1. Loads the appropriate template
49
+ 2. Injects relevant tool definitions
50
+ 3. Sets up platform-specific configurations
51
+ 4. Provides context-aware responses
52
+
53
+ ## Custom Profiles
54
+
55
+ You can create custom profiles by adding system prompt files to:
56
+ ```
57
+ ~/.janito/profiles/
58
+ ```
59
+
60
+ Each file should contain a plain text system prompt. The filename becomes the profile name.
61
+
62
+ **Example:**
63
+ ```bash
64
+ # Create a custom profile
65
+ echo "You are a cybersecurity expert. Focus on security best practices, vulnerability analysis, and secure coding patterns." > ~/.janito/profiles/security-expert
66
+
67
+ # Use the custom profile
68
+ janito --profile security-expert "Review this code for security vulnerabilities"
69
+ ```
70
+
71
+ ## Profile Selection
72
+
73
+ ### Command Line
74
+ Use `--profile <name>` to specify a profile:
75
+ ```bash
76
+ janito --profile developer "Create a Python script"
77
+ janito --profile market-analyst "Analyze this data"
78
+ janito --profile security-expert "Review security"
79
+ ```
80
+
81
+ ### Shorthand Flags
82
+ Use convenience flags for built-in profiles:
83
+ ```bash
84
+ janito --developer "Create a Python script" # Same as --profile developer
85
+ janito --market "Analyze this data" # Same as --profile market-analyst
86
+ ```
87
+
88
+ ### Interactive Mode
89
+ When starting Janito in interactive mode without specifying a profile, it defaults to the Developer profile.
90
+
91
+ ## Profile Templates
92
+
93
+ Profile templates are located in:
94
+ ```
95
+ janito/agent/templates/profiles/
96
+ ├── system_prompt_template_developer.txt.j2
97
+ └── system_prompt_template_market_analyst.txt.j2
98
+ ```
99
+
100
+ These templates use Jinja2 syntax and can include:
101
+
102
+ - Tool definitions
103
+ - Platform-specific configurations
104
+ - Dynamic content based on available tools
105
+ - Conditional logic for different environments
106
+
107
+ ## Best Practices
108
+
109
+ 1. **Use appropriate profiles**: Choose the profile that best matches your task type
110
+
111
+ 2. **Create custom profiles**: For specialized domains, create custom profiles
112
+
113
+ 3. **Combine with tools**: Profiles work best when combined with Janito's built-in tools
114
+
115
+ 4. **Test and iterate**: Refine custom profiles based on results
116
+
117
+ ## Troubleshooting
118
+
119
+ **Profile not found:**
120
+
121
+ - Ensure custom profiles are saved in `~/.janito/profiles/`
122
+ - Check file permissions and encoding (UTF-8 recommended)
123
+ - Verify the profile name matches the filename
124
+
125
+ **Profile not working as expected:**
126
+
127
+ - Use `janito --show-system-prompt --profile <name>` to inspect the generated prompt
128
+ - Check if tools are properly configured for your platform
129
+ - Review the profile template for any platform-specific conditions
@@ -467,9 +467,9 @@ For users upgrading from previous versions:
467
467
  - **CLI Integration**: New commands for plugin management (`--list-remote-plugins`, `--update-remote-plugins`)
468
468
 
469
469
  - **Documentation**: Comprehensive guides for remote plugin usage
470
- - [Remote Plugins Guide](docs/guides/remote-plugins.md) - Complete documentation for remote plugin usage
471
- - Updated [Plugin System Guide](docs/guides/plugins.md) with remote plugin integration
472
- - Enhanced [README-PLUGINS.md](README-PLUGINS.md) with remote repository references
470
+ - [Remote Plugins Guide](../guides/remote-plugins.md) - Complete documentation for remote plugin usage
471
+ - Updated [Plugin System Guide](../guides/plugins.md) with remote plugin integration
472
+ - Enhanced [README-PLUGINS.md](../../README-PLUGINS.md) with remote repository references
473
473
 
474
474
  ### Changed
475
475
 
@@ -17,9 +17,9 @@
17
17
  - **CLI Integration**: New commands for plugin management (`--list-remote-plugins`, `--update-remote-plugins`)
18
18
 
19
19
  - **Documentation**: Comprehensive guides for remote plugin usage
20
- - [Remote Plugins Guide](docs/guides/remote-plugins.md) - Complete documentation for remote plugin usage
21
- - Updated [Plugin System Guide](docs/guides/plugins.md) with remote plugin integration
22
- - Enhanced [README-PLUGINS.md](README-PLUGINS.md) with remote repository references
20
+ - [Remote Plugins Guide](../guides/remote-plugins.md) - Complete documentation for remote plugin usage
21
+ - Updated [Plugin System Guide](../guides/plugins.md) with remote plugin integration
22
+ - Enhanced [README-PLUGINS.md](../../README-PLUGINS.md) with remote repository references
23
23
 
24
24
  ### Changed
25
25
 
@@ -138,7 +138,7 @@ For enhanced security, use the `/security` command in chat mode to restrict acce
138
138
  ## Related Documentation
139
139
 
140
140
  - [Stock Market Guide](stock-market-guide.md) - Comprehensive guide to accessing financial data
141
- - [Public Sources](public-sources.md) - Government and institutional data sources
141
+ - [Public Sources](../public-sources.md) - Government and institutional data sources
142
142
  - [Using Tools](using_tools.md) - How to use Janito's data fetching capabilities
143
143
  - [CLI Options](../reference/cli-options.md) - Command-line options for data access
144
144
 
@@ -118,7 +118,7 @@ janito "Compare performance of AAPL, MSFT, GOOGL, and TSLA over the past month"
118
118
 
119
119
  ## Related Documentation
120
120
 
121
- - [Public Data Sources](public-sources.md) - Government and public financial data
121
+ - [Public Data Sources](../public-sources.md) - Government and public financial data
122
122
  - [Using Tools](using_tools.md) - How to use Janito's web scraping capabilities
123
123
  - [CLI Options](../reference/cli-options.md) - Command-line options for data fetching
124
124
 
@@ -6,7 +6,7 @@ This directory contains comprehensive documentation for the Janito plugin system
6
6
 
7
7
  - **[Plugin Development Guide](plugin-development.md)** - Complete guide for creating plugins
8
8
  - **[Remote Plugins](remote-plugins.md)** - Using plugins from remote repositories
9
- - **[Built-in Plugins](built-in-plugins.md)** - Documentation for included plugins
9
+ - **[Built-in Plugins](../built-in-plugins.md)** - Documentation for included plugins
10
10
  - **[API Reference](api-reference.md)** - Technical details and interfaces
11
11
  - **[Examples](examples/)** - Working plugin examples
12
12
 
@@ -68,9 +68,9 @@ Add to `janito.json`:
68
68
  - [Configuration](configuration.md) - Plugin configuration options
69
69
 
70
70
  ### Built-in Plugins
71
- - [Git Analyzer](built-in-plugins/git-analyzer.md) - Git repository analysis
72
- - [Code Navigator](built-in-plugins/code-navigator.md) - Code navigation tools
73
- - [Example Plugin](built-in-plugins/example.md) - Basic plugin example
71
+ - [Git Analyzer](../built-in-plugins/git-analyzer.md) - Git repository analysis
72
+ - [Code Navigator](../built-in-plugins/code-navigator.md) - Code navigation tools
73
+ - [Example Plugin](../built-in-plugins/example.md) - Basic plugin example
74
74
 
75
75
  ### Advanced Topics
76
76
  - [Plugin Architecture](architecture.md) - System design and internals
@@ -116,11 +116,11 @@ Janito includes powerful built-in tools for:
116
116
  - System commands
117
117
  - And more...
118
118
 
119
- ### Profiles and Roles
119
+ ### Profiles
120
120
  Use predefined system prompts:
121
121
  ```bash
122
- janito --profile developer "Create a REST API"
123
- janito --role python-expert "Optimize this algorithm"
122
+ janito --developer "Create a REST API" # Same as --profile developer
123
+ janito --market "Analyze market trends" # Same as --profile market-analyst
124
124
  ```
125
125
 
126
126
  ### Environment Variables
@@ -25,10 +25,14 @@ def _load_template_content(profile, templates_dir):
25
25
 
26
26
  Spaces in the profile name are converted to underscores to align with the file-naming convention (e.g. "Developer with Python Tools" ➜ "Developer_with_Python_Tools" (matches: system_prompt_template_Developer_with_Python_Tools.txt.j2)).
27
27
  """
28
- # Sanitize profile for filename resolution (convert whitespace to underscores)
29
- sanitized_profile = re.sub(r"\s+", "_", profile.strip()) if profile else profile
30
-
28
+ sanitized_profile = re.sub(r"\s+", "_", profile.strip())
31
29
  template_filename = f"system_prompt_template_{sanitized_profile}.txt.j2"
30
+
31
+ return _find_template_file(template_filename, templates_dir)
32
+
33
+
34
+ def _find_template_file(template_filename, templates_dir):
35
+ """Find and load template file from various locations."""
32
36
  template_path = templates_dir / template_filename
33
37
 
34
38
  # 1) Check local templates directory
@@ -96,39 +100,9 @@ def _load_template_content(profile, templates_dir):
96
100
  )
97
101
 
98
102
  raise FileNotFoundError(error_msg)
99
- # Replace spaces in profile name with underscores for filename resolution
100
- sanitized_profile = re.sub(r"\\s+", "_", profile.strip()) if profile else profile
101
- """
102
- Loads the template content for the given profile from the specified directory or package resources.
103
- If the profile template is not found in the default locations, tries to load from the user profiles directory ~/.janito/profiles.
104
- """
105
-
106
- # Sanitize profile name by replacing spaces with underscores to match filename conventions
107
- sanitized_profile = re.sub(r"\\s+", "_", profile.strip())
108
- template_filename = f"system_prompt_template_{sanitized_profile}.txt.j2"
109
- template_path = templates_dir / template_filename
110
- if template_path.exists():
111
- with open(template_path, "r", encoding="utf-8") as file:
112
- return file.read(), template_path
113
- # Try package import fallback
114
- try:
115
- with importlib.resources.files("janito.agent.templates.profiles").joinpath(
116
- template_filename
117
- ).open("r", encoding="utf-8") as file:
118
- return file.read(), template_path
119
- except (FileNotFoundError, ModuleNotFoundError, AttributeError):
120
- # Try user profiles directory
121
- user_profiles_dir = Path(os.path.expanduser("~/.janito/profiles"))
122
- user_template_path = user_profiles_dir / profile
123
- if user_template_path.exists():
124
- with open(user_template_path, "r", encoding="utf-8") as file:
125
- return file.read(), user_template_path
126
- raise FileNotFoundError(
127
- f"[janito] Could not find profile-specific template '{template_filename}' in {template_path} nor in janito.agent.templates.profiles package nor in user profiles directory {user_template_path}."
128
- )
129
103
 
130
104
 
131
- def _prepare_template_context(role, profile, allowed_permissions):
105
+ def _prepare_template_context(role, profile, allowed_permissions, args=None):
132
106
  """
133
107
  Prepares the context dictionary for Jinja2 template rendering.
134
108
  """
@@ -148,6 +122,11 @@ def _prepare_template_context(role, profile, allowed_permissions):
148
122
  perm_str += "x"
149
123
  allowed_permissions = perm_str or None
150
124
  context["allowed_permissions"] = allowed_permissions
125
+
126
+ # Add emoji flag for system prompt
127
+ context["emoji_enabled"] = (
128
+ getattr(args, "emoji", False) if "args" in locals() else False
129
+ )
151
130
  # Inject platform info if execute permission is present
152
131
  if allowed_permissions and "x" in allowed_permissions:
153
132
  pd = PlatformDiscovery()
@@ -171,6 +150,11 @@ def _prepare_template_context(role, profile, allowed_permissions):
171
150
  else:
172
151
  context["allowed_sites_info"] = f"Restricted to: {', '.join(allowed_sites)}"
173
152
 
153
+ # Add emoji flag for system prompt
154
+ context["emoji_enabled"] = (
155
+ getattr(args, "emoji", False) if "args" in locals() else False
156
+ )
157
+
174
158
  return context
175
159
 
176
160
 
@@ -267,7 +251,9 @@ def setup_agent(
267
251
  template_content, template_path = _load_template_content(profile, templates_dir)
268
252
 
269
253
  template = Template(template_content)
270
- context = _prepare_template_context(role, profile, allowed_permissions)
254
+ context = _prepare_template_context(
255
+ role, profile, allowed_permissions, locals().get("args")
256
+ )
271
257
 
272
258
  # Debug output if requested
273
259
  debug_flag = False
@@ -88,4 +88,10 @@ You are: {{ role | default('developer') }}
88
88
  {# Trying to prevent surrogates generation, found this frequently in gpt4.1/windows #}
89
89
  - While writing code, if you need an emoji or special Unicode character in a string, then insert the actual character (e.g., 📖) directly instead of using surrogate pairs or escape sequences.
90
90
  {% endif %}
91
+ {% if emoji_enabled %}
92
+ ## Emoji Usage
93
+ - Feel free to use emojis in your responses to make them more engaging and expressive 🎉
94
+ - Use appropriate emojis to enhance communication: ✅ for success, ⚠️ for warnings, 🔄 for progress, etc.
95
+ - Emojis should complement the message, not replace clear explanations
96
+ {% endif %}
91
97
 
@@ -78,4 +78,10 @@ You are: {{ role | default('software developer') }}
78
78
  {# Trying to prevent surrogates generation, found this frequently in gpt4.1/windows #}
79
79
  - While writing code, if you need an emoji or special Unicode character in a string, then insert the actual character (e.g., 📖) directly instead of using surrogate pairs or escape sequences.
80
80
  {% endif %}
81
+ {% if emoji_enabled %}
82
+ ## Emoji Usage
83
+ - Feel free to use emojis in your responses to make them more engaging and expressive 🎉
84
+ - Use appropriate emojis to enhance communication: ✅ for success, ⚠️ for warnings, 🔄 for progress, etc.
85
+ - Emojis should complement the message, not replace clear explanations
86
+ {% endif %}
81
87
 
@@ -107,4 +107,10 @@ When asked about specific stocks or market movements, provide detailed analysis
107
107
  {% endfor %}
108
108
  {% endif %}
109
109
 
110
- ## Guidelines
110
+ ## Guidelines
111
+ {% if emoji_enabled %}
112
+ ## Emoji Usage
113
+ - Feel free to use emojis in your responses to make them more engaging and expressive 📊
114
+ - Use appropriate emojis to enhance communication: 📈 for uptrends, 📉 for downtrends, 💰 for profits, ⚠️ for warnings, etc.
115
+ - Emojis should complement the message, not replace clear financial analysis
116
+ {% endif %}
@@ -50,4 +50,10 @@ You are: {{ role | default('helpful assistant') }}
50
50
  ## Guidelines
51
51
  - Provide helpful, accurate, and concise responses
52
52
  - Ask clarifying questions when needed
53
- - Maintain a friendly and professional tone
53
+ - Maintain a friendly and professional tone
54
+ {% if emoji_enabled %}
55
+ ## Emoji Usage
56
+ - Feel free to use emojis in your responses to make them more engaging and expressive 😊
57
+ - Use appropriate emojis to enhance communication: ✅ for confirmations, ❓ for questions, 💡 for ideas, etc.
58
+ - Emojis should complement the message, not replace clear communication
59
+ {% endif %}
@@ -119,9 +119,7 @@ class ChatSession:
119
119
  profile_system_prompt = None
120
120
  no_tools_mode = False
121
121
 
122
- profile = self._determine_profile(
123
- profile, role_arg, python_profile, market_profile
124
- )
122
+ profile = self._determine_profile(profile, python_profile, market_profile)
125
123
 
126
124
  if (
127
125
  profile is None
@@ -136,31 +134,8 @@ class ChatSession:
136
134
  if skip_profile_selection:
137
135
  profile = "Developer with Python Tools" # Default for non-interactive commands
138
136
  else:
139
- try:
140
- from janito.cli.chat_mode.session_profile_select import (
141
- select_profile,
142
- )
143
-
144
- result = select_profile()
145
- if isinstance(result, dict):
146
- profile = result.get("profile")
147
- profile_system_prompt = result.get("profile_system_prompt")
148
- no_tools_mode = result.get("no_tools_mode", False)
149
- elif isinstance(result, str) and result.startswith("role:"):
150
- role = result[len("role:") :].strip()
151
- profile = "Developer with Python Tools"
152
- else:
153
- profile = (
154
- "Developer with Python Tools"
155
- if result == "Developer"
156
- else result
157
- )
158
- except ImportError:
159
- profile = "Raw Model Session (no tools, no context)"
160
- if role_arg is not None:
161
- role = role_arg
162
- if profile is None:
163
137
  profile = "Developer with Python Tools"
138
+
164
139
  return profile, role, profile_system_prompt, no_tools_mode
165
140
 
166
141
  def _create_conversation_history(self):
@@ -308,25 +283,6 @@ class ChatSession:
308
283
  )
309
284
  )
310
285
 
311
- for candidate in candidates:
312
- try:
313
- if not candidate:
314
- continue
315
- parsed = urlparse(str(candidate))
316
- host = parsed.netloc or parsed.path
317
- if host:
318
- backend_hostname = host
319
- break
320
- except Exception:
321
- backend_hostname = str(candidate)
322
- break
323
-
324
- self.console.print(
325
- Rule(
326
- f"[bold blue]Model: {model_name} ({provider_name}) | Backend: {backend_hostname}[/bold blue]"
327
- )
328
- )
329
-
330
286
  self._prompt_handler.run_prompt(cmd_input)
331
287
  end_time = time.time()
332
288
  elapsed = end_time - start_time
@@ -337,6 +293,8 @@ class ChatSession:
337
293
  print_token_message_summary(
338
294
  self.console, self.msg_count, usage, elapsed=elapsed
339
295
  )
296
+ # Send terminal bell character to trigger TUI bell after printing token summary
297
+ print("\a", end="", flush=True)
340
298
  if final_event and hasattr(final_event, "metadata"):
341
299
  exit_reason = (
342
300
  final_event.metadata.get("exit_reason")
@@ -356,18 +314,18 @@ class ChatSession:
356
314
  def _extract_args(self, args):
357
315
  """Extract profile and role arguments from args."""
358
316
  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
317
+ role_arg = None
360
318
  python_profile = (
361
319
  getattr(args, "developer", False) if args is not None else False
362
320
  )
363
321
  market_profile = getattr(args, "market", False) if args is not None else False
364
322
  return profile, role_arg, python_profile, market_profile
365
323
 
366
- def _determine_profile(self, profile, role_arg, python_profile, market_profile):
324
+ def _determine_profile(self, profile, python_profile, market_profile):
367
325
  """Determine the profile based on flags and arguments."""
368
- if python_profile and profile is None and role_arg is None:
326
+ if python_profile and profile is None:
369
327
  return "Developer with Python Tools"
370
- if market_profile and profile is None and role_arg is None:
328
+ if market_profile and profile is None:
371
329
  return "Market Analyst"
372
330
  return profile
373
331
 
@@ -517,9 +475,19 @@ class ChatSession:
517
475
  else:
518
476
  duration_str = f"{session_duration/3600:.1f}h"
519
477
 
478
+ # Format tokens in k/m/t as appropriate
479
+ if total_tokens >= 1_000_000_000:
480
+ token_str = f"{total_tokens/1_000_000_000:.1f}t"
481
+ elif total_tokens >= 1_000_000:
482
+ token_str = f"{total_tokens/1_000_000:.1f}m"
483
+ elif total_tokens >= 1_000:
484
+ token_str = f"{total_tokens/1_000:.1f}k"
485
+ else:
486
+ token_str = f"{total_tokens}"
487
+
520
488
  self.console.print(f"[bold yellow]Session completed![/bold yellow]")
521
489
  self.console.print(
522
- f"[dim]Session time: {duration_str} | Total tokens: {total_tokens:,}[/dim]"
490
+ f"[dim]Session time: {duration_str} | Total tokens: {token_str}[/dim]"
523
491
  )
524
492
  self.console.print("[bold yellow]Goodbye![/bold yellow]")
525
493
 
@@ -0,0 +1,117 @@
1
+ """
2
+ CLI command to list available and loaded plugins.
3
+ """
4
+
5
+ import argparse
6
+ from typing import List, Dict, Any
7
+ from janito.plugins.discovery import list_available_plugins, discover_plugins
8
+ import os
9
+ from janito.plugins.manager import PluginManager
10
+ from janito.plugins.builtin import BuiltinPluginRegistry
11
+
12
+
13
+ def handle_list_plugins(args: argparse.Namespace) -> None:
14
+ """List plugins command handler."""
15
+
16
+ if getattr(args, "list_plugins_available", False):
17
+ _list_available_plugins()
18
+ elif getattr(args, "list_resources", False):
19
+ _list_plugin_resources()
20
+ else:
21
+ _list_loaded_plugins()
22
+
23
+
24
+ def _list_available_plugins():
25
+ """List available plugins."""
26
+ available = list_available_plugins()
27
+ builtin_plugins = BuiltinPluginRegistry.list_builtin_plugins()
28
+
29
+ if available or builtin_plugins:
30
+ print("Available plugins:")
31
+ _print_builtin_plugins(builtin_plugins)
32
+ _print_external_plugins(available, builtin_plugins)
33
+ else:
34
+ print("No plugins found in search paths")
35
+ print("Search paths:")
36
+ print(f" - {os.getcwd()}/plugins")
37
+ print(f" - {os.path.expanduser('~')}/.janito/plugins")
38
+
39
+
40
+ def _print_builtin_plugins(builtin_plugins):
41
+ """Print builtin plugins."""
42
+ if builtin_plugins:
43
+ print(" Builtin plugins:")
44
+ for plugin in builtin_plugins:
45
+ print(f" - {plugin} [BUILTIN]")
46
+
47
+
48
+ def _print_external_plugins(available, builtin_plugins):
49
+ """Print external plugins."""
50
+ other_plugins = [p for p in available if p not in builtin_plugins]
51
+ if other_plugins:
52
+ print(" External plugins:")
53
+ for plugin in other_plugins:
54
+ print(f" - {plugin}")
55
+
56
+
57
+ def _list_plugin_resources():
58
+ """List all resources from loaded plugins."""
59
+ manager = PluginManager()
60
+ all_resources = manager.list_all_resources()
61
+
62
+ if all_resources:
63
+ print("Plugin Resources:")
64
+ for plugin_name, resources in all_resources.items():
65
+ metadata = manager.get_plugin_metadata(plugin_name)
66
+ print(f"\n{plugin_name} v{metadata.version if metadata else 'unknown'}:")
67
+ _print_resources_by_type(resources)
68
+ else:
69
+ print("No plugins loaded")
70
+
71
+
72
+ def _print_resources_by_type(resources):
73
+ """Print resources grouped by type."""
74
+ tools = [r for r in resources if r["type"] == "tool"]
75
+ commands = [r for r in resources if r["type"] == "command"]
76
+ configs = [r for r in resources if r["type"] == "config"]
77
+
78
+ if tools:
79
+ print(" Tools:")
80
+ for tool in tools:
81
+ print(f" - {tool['name']}: {tool['description']}")
82
+
83
+ if commands:
84
+ print(" Commands:")
85
+ for cmd in commands:
86
+ print(f" - {cmd['name']}: {cmd['description']}")
87
+
88
+ if configs:
89
+ print(" Configuration:")
90
+ for config in configs:
91
+ print(f" - {config['name']}: {config['description']}")
92
+
93
+
94
+ def _list_loaded_plugins():
95
+ """List loaded plugins."""
96
+ manager = PluginManager()
97
+ loaded = manager.list_plugins()
98
+
99
+ if loaded:
100
+ print("Loaded plugins:")
101
+ for plugin_name in loaded:
102
+ _print_plugin_details(manager, plugin_name)
103
+ else:
104
+ print("No plugins loaded")
105
+
106
+
107
+ def _print_plugin_details(manager, plugin_name):
108
+ """Print details for a loaded plugin."""
109
+ metadata = manager.get_plugin_metadata(plugin_name)
110
+ is_builtin = BuiltinPluginRegistry.is_builtin(plugin_name)
111
+ if metadata:
112
+ builtin_tag = " [BUILTIN]" if is_builtin else ""
113
+ print(f" - {metadata.name} v{metadata.version}{builtin_tag}")
114
+ print(f" {metadata.description}")
115
+ if metadata.author:
116
+ print(f" Author: {metadata.author}")
117
+ print()