janito 2.27.1__tar.gz → 2.28.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 (478) hide show
  1. {janito-2.27.1 → janito-2.28.0}/PKG-INFO +1 -1
  2. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/CHANGELOG.md +4 -4
  3. {janito-2.27.1 → janito-2.28.0}/docs/index.md +2 -2
  4. janito-2.27.1/docs/moonshotai-setup.md → janito-2.28.0/docs/moonshot-setup.md +16 -16
  5. {janito-2.27.1 → janito-2.28.0}/docs/provider-platform-access.md +2 -2
  6. {janito-2.27.1 → janito-2.28.0}/docs/supported-providers-models.md +2 -2
  7. {janito-2.27.1 → janito-2.28.0}/examples/loop_protection_example.py +14 -14
  8. {janito-2.27.1 → janito-2.28.0}/examples/loop_protection_tool_example.py +26 -24
  9. janito-2.28.0/get_nasdaq_top.py +232 -0
  10. {janito-2.27.1 → janito-2.28.0}/janito/README.md +9 -9
  11. {janito-2.27.1 → janito-2.28.0}/janito/agent/setup_agent.py +29 -16
  12. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/script_runner.py +1 -1
  13. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/session.py +17 -5
  14. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/session_profile_select.py +8 -2
  15. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/execute.py +4 -2
  16. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/help.py +2 -0
  17. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/privileges.py +6 -2
  18. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/provider.py +7 -4
  19. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/read.py +4 -2
  20. janito-2.28.0/janito/cli/chat_mode/shell/commands/security/__init__.py +1 -0
  21. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +16 -13
  22. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/security_command.py +14 -10
  23. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/tools.py +4 -2
  24. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +17 -12
  25. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/write.py +4 -2
  26. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/toolbar.py +4 -4
  27. janito-2.28.0/janito/cli/cli_commands/enable_disable_plugin.py +87 -0
  28. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_models.py +2 -2
  29. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_plugins.py +18 -18
  30. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_profiles.py +6 -6
  31. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_providers.py +1 -1
  32. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/model_utils.py +45 -20
  33. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/ping_providers.py +10 -10
  34. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/set_api_key.py +5 -3
  35. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/show_config.py +13 -7
  36. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/show_system_prompt.py +13 -6
  37. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/getters.py +1 -0
  38. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/model_guesser.py +18 -15
  39. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/runner.py +15 -7
  40. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/setters.py +9 -6
  41. {janito-2.27.1 → janito-2.28.0}/janito/cli/main_cli.py +15 -12
  42. {janito-2.27.1 → janito-2.28.0}/janito/cli/prompt_core.py +2 -0
  43. {janito-2.27.1 → janito-2.28.0}/janito/cli/prompt_setup.py +4 -4
  44. {janito-2.27.1 → janito-2.28.0}/janito/cli/single_shot_mode/handler.py +2 -0
  45. {janito-2.27.1 → janito-2.28.0}/janito/config_manager.py +2 -0
  46. {janito-2.27.1 → janito-2.28.0}/janito/docs/GETTING_STARTED.md +9 -9
  47. janito-2.28.0/janito/drivers/cerebras/__init__.py +1 -0
  48. {janito-2.27.1 → janito-2.28.0}/janito/exceptions.py +6 -4
  49. {janito-2.27.1 → janito-2.28.0}/janito/plugins/__init__.py +2 -2
  50. {janito-2.27.1 → janito-2.28.0}/janito/plugins/base.py +48 -40
  51. {janito-2.27.1 → janito-2.28.0}/janito/plugins/builtin.py +13 -9
  52. {janito-2.27.1 → janito-2.28.0}/janito/plugins/config.py +16 -19
  53. {janito-2.27.1 → janito-2.28.0}/janito/plugins/discovery.py +73 -66
  54. {janito-2.27.1 → janito-2.28.0}/janito/plugins/manager.py +62 -60
  55. {janito-2.27.1 → janito-2.28.0}/janito/provider_registry.py +10 -10
  56. {janito-2.27.1 → janito-2.28.0}/janito/providers/__init__.py +1 -1
  57. {janito-2.27.1 → janito-2.28.0}/janito/providers/alibaba/model_info.py +3 -5
  58. {janito-2.27.1 → janito-2.28.0}/janito/providers/alibaba/provider.py +3 -1
  59. janito-2.28.0/janito/providers/cerebras/__init__.py +1 -0
  60. {janito-2.27.1 → janito-2.28.0}/janito/providers/cerebras/model_info.py +12 -27
  61. {janito-2.27.1 → janito-2.28.0}/janito/providers/cerebras/provider.py +11 -9
  62. janito-2.28.0/janito/providers/mistral/__init__.py +1 -0
  63. {janito-2.27.1 → janito-2.28.0}/janito/providers/mistral/model_info.py +1 -1
  64. {janito-2.27.1 → janito-2.28.0}/janito/providers/mistral/provider.py +1 -1
  65. janito-2.28.0/janito/providers/moonshot/__init__.py +1 -0
  66. {janito-2.27.1/janito/providers/moonshotai → janito-2.28.0/janito/providers/moonshot}/model_info.py +3 -3
  67. {janito-2.27.1/janito/providers/moonshotai → janito-2.28.0/janito/providers/moonshot}/provider.py +8 -8
  68. {janito-2.27.1 → janito-2.28.0}/janito/providers/openai/provider.py +3 -1
  69. {janito-2.27.1 → janito-2.28.0}/janito/report_events.py +0 -1
  70. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/create_file.py +1 -1
  71. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/fetch_url.py +45 -29
  72. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/python_command_run.py +2 -1
  73. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/python_file_run.py +1 -0
  74. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/run_powershell_command.py +1 -1
  75. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/search_text/core.py +1 -1
  76. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +14 -11
  77. {janito-2.27.1 → janito-2.28.0}/janito/tools/base.py +4 -3
  78. {janito-2.27.1 → janito-2.28.0}/janito/tools/loop_protection.py +24 -22
  79. {janito-2.27.1 → janito-2.28.0}/janito/tools/path_utils.py +7 -7
  80. {janito-2.27.1 → janito-2.28.0}/janito/tools/tool_base.py +0 -2
  81. {janito-2.27.1 → janito-2.28.0}/janito/tools/tools_adapter.py +15 -5
  82. {janito-2.27.1 → janito-2.28.0}/janito/tools/url_whitelist.py +27 -26
  83. {janito-2.27.1 → janito-2.28.0}/janito.egg-info/PKG-INFO +1 -1
  84. {janito-2.27.1 → janito-2.28.0}/janito.egg-info/SOURCES.txt +6 -6
  85. {janito-2.27.1 → janito-2.28.0}/market_prompt_fix.py +46 -35
  86. {janito-2.27.1 → janito-2.28.0}/market_test.py +31 -22
  87. {janito-2.27.1 → janito-2.28.0}/mkdocs.yml +1 -1
  88. {janito-2.27.1 → janito-2.28.0}/mkdocs_hooks.py +12 -12
  89. {janito-2.27.1 → janito-2.28.0}/plugins/__init__.py +10 -8
  90. {janito-2.27.1 → janito-2.28.0}/plugins/core/__init__.py +1 -1
  91. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/__init__.py +12 -3
  92. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/search_text/core.py +1 -1
  93. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/__init__.py +36 -8
  94. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/create_file.py +1 -1
  95. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +14 -11
  96. {janito-2.27.1 → janito-2.28.0}/plugins/core/system/__init__.py +6 -3
  97. {janito-2.27.1 → janito-2.28.0}/plugins/core/system/tools/run_powershell_command.py +1 -1
  98. {janito-2.27.1 → janito-2.28.0}/plugins/dev/__init__.py +1 -1
  99. {janito-2.27.1 → janito-2.28.0}/plugins/dev/pythondev/__init__.py +5 -1
  100. {janito-2.27.1 → janito-2.28.0}/plugins/dev/pythondev/tools/python_command_run.py +2 -1
  101. {janito-2.27.1 → janito-2.28.0}/plugins/dev/pythondev/tools/python_file_run.py +1 -0
  102. {janito-2.27.1 → janito-2.28.0}/plugins/dev/visualization/__init__.py +6 -3
  103. {janito-2.27.1 → janito-2.28.0}/plugins/example_plugin.py +21 -21
  104. {janito-2.27.1 → janito-2.28.0}/plugins/ui/__init__.py +1 -1
  105. {janito-2.27.1 → janito-2.28.0}/plugins/ui/userinterface/__init__.py +3 -1
  106. {janito-2.27.1 → janito-2.28.0}/plugins/web/__init__.py +1 -1
  107. {janito-2.27.1 → janito-2.28.0}/plugins/web/webtools/__init__.py +11 -3
  108. {janito-2.27.1 → janito-2.28.0}/plugins/web/webtools/tools/fetch_url.py +45 -29
  109. {janito-2.27.1 → janito-2.28.0}/test_market_analyst.py +38 -28
  110. janito-2.27.1/tests/test_cli_list_providers_moonshotai.py → janito-2.28.0/tests/test_cli_list_providers_moonshot.py +3 -3
  111. {janito-2.27.1 → janito-2.28.0}/tests/test_plugin_system.py +30 -32
  112. {janito-2.27.1 → janito-2.28.0}/tests/test_provider_cerebras.py +1 -1
  113. janito-2.28.0/tests/test_provider_moonshot.py +10 -0
  114. janito-2.27.1/get_nasdaq_top.py +0 -113
  115. janito-2.27.1/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -1
  116. janito-2.27.1/janito/cli/cli_commands/enable_disable_plugin.py +0 -64
  117. janito-2.27.1/janito/drivers/cerebras/__init__.py +0 -1
  118. janito-2.27.1/janito/providers/cerebras/__init__.py +0 -1
  119. janito-2.27.1/janito/providers/mistral/__init__.py +0 -1
  120. janito-2.27.1/janito/providers/moonshotai/__init__.py +0 -1
  121. janito-2.27.1/tests/test_provider_moonshotai.py +0 -10
  122. {janito-2.27.1 → janito-2.28.0}/.codespellrc +0 -0
  123. {janito-2.27.1 → janito-2.28.0}/.gitattributes +0 -0
  124. {janito-2.27.1 → janito-2.28.0}/.github/workflows/python-app.yml.disabled +0 -0
  125. {janito-2.27.1 → janito-2.28.0}/.gitignore +0 -0
  126. {janito-2.27.1 → janito-2.28.0}/.pre-commit-config.yaml +0 -0
  127. {janito-2.27.1 → janito-2.28.0}/.secrets.baseline +0 -0
  128. {janito-2.27.1 → janito-2.28.0}/.vscode/settings.json +0 -0
  129. {janito-2.27.1 → janito-2.28.0}/LICENSE +0 -0
  130. {janito-2.27.1 → janito-2.28.0}/MARKET_ANALYST_README.md +0 -0
  131. {janito-2.27.1 → janito-2.28.0}/README-dev.md +0 -0
  132. {janito-2.27.1 → janito-2.28.0}/README.md +0 -0
  133. {janito-2.27.1 → janito-2.28.0}/RELEASE_COMPARISON.md +0 -0
  134. {janito-2.27.1 → janito-2.28.0}/UPDATING_DOCS.md +0 -0
  135. {janito-2.27.1 → janito-2.28.0}/adding_mcp.txt +0 -0
  136. {janito-2.27.1 → janito-2.28.0}/docs/DIV.md +0 -0
  137. {janito-2.27.1 → janito-2.28.0}/docs/Interfaces.txt +0 -0
  138. {janito-2.27.1 → janito-2.28.0}/docs/TOOLBAR-STYLING.md +0 -0
  139. {janito-2.27.1 → janito-2.28.0}/docs/about/costs.md +0 -0
  140. {janito-2.27.1 → janito-2.28.0}/docs/about/vs-webchats.md +0 -0
  141. {janito-2.27.1 → janito-2.28.0}/docs/about/why.md +0 -0
  142. {janito-2.27.1 → janito-2.28.0}/docs/alibaba-setup.md +0 -0
  143. {janito-2.27.1 → janito-2.28.0}/docs/alternatives.md +0 -0
  144. {janito-2.27.1 → janito-2.28.0}/docs/cerebras-setup.md +0 -0
  145. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
  146. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
  147. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
  148. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
  149. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
  150. {janito-2.27.1 → janito-2.28.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
  151. {janito-2.27.1 → janito-2.28.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
  152. {janito-2.27.1 → janito-2.28.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
  153. {janito-2.27.1 → janito-2.28.0}/docs/code_intelligence/code-generation-observability.md +0 -0
  154. {janito-2.27.1 → janito-2.28.0}/docs/code_intelligence/our-approach.md +0 -0
  155. {janito-2.27.1 → janito-2.28.0}/docs/code_intelligence/why-string-replacement.md +0 -0
  156. {janito-2.27.1 → janito-2.28.0}/docs/concepts/analysis-style.md +0 -0
  157. {janito-2.27.1 → janito-2.28.0}/docs/concepts/human-guided-ai.md +0 -0
  158. {janito-2.27.1 → janito-2.28.0}/docs/concepts/index.md +0 -0
  159. {janito-2.27.1 → janito-2.28.0}/docs/concepts/language-model-clients.md +0 -0
  160. {janito-2.27.1 → janito-2.28.0}/docs/concepts/prompt-design-style.md +0 -0
  161. {janito-2.27.1 → janito-2.28.0}/docs/deepseek-setup.md +0 -0
  162. {janito-2.27.1 → janito-2.28.0}/docs/driver-flow.md +0 -0
  163. {janito-2.27.1 → janito-2.28.0}/docs/driver-request-cancellation.md +0 -0
  164. {janito-2.27.1 → janito-2.28.0}/docs/drivers/events.md +0 -0
  165. {janito-2.27.1 → janito-2.28.0}/docs/drivers.md +0 -0
  166. {janito-2.27.1 → janito-2.28.0}/docs/event-bus.md +0 -0
  167. {janito-2.27.1 → janito-2.28.0}/docs/guides/configuration.md +0 -0
  168. {janito-2.27.1 → janito-2.28.0}/docs/guides/developing.md +0 -0
  169. {janito-2.27.1 → janito-2.28.0}/docs/guides/disabled-tools.md +0 -0
  170. {janito-2.27.1 → janito-2.28.0}/docs/guides/installation.md +0 -0
  171. {janito-2.27.1 → janito-2.28.0}/docs/guides/market-data-sources.md +0 -0
  172. {janito-2.27.1 → janito-2.28.0}/docs/guides/profiles.md +0 -0
  173. {janito-2.27.1 → janito-2.28.0}/docs/guides/prompting/README.md +0 -0
  174. {janito-2.27.1 → janito-2.28.0}/docs/guides/read-chart-examples.md +0 -0
  175. {janito-2.27.1 → janito-2.28.0}/docs/guides/security-commands.md +0 -0
  176. {janito-2.27.1 → janito-2.28.0}/docs/guides/single-shot-terminal.md +0 -0
  177. {janito-2.27.1 → janito-2.28.0}/docs/guides/stock-market-guide.md +0 -0
  178. {janito-2.27.1 → janito-2.28.0}/docs/guides/terminal-shell.md +0 -0
  179. {janito-2.27.1 → janito-2.28.0}/docs/guides/tools-developer-guide.md +0 -0
  180. {janito-2.27.1 → janito-2.28.0}/docs/guides/url-whitelist.md +0 -0
  181. {janito-2.27.1 → janito-2.28.0}/docs/guides/using.md +0 -0
  182. {janito-2.27.1 → janito-2.28.0}/docs/guides/using_tools.md +0 -0
  183. {janito-2.27.1 → janito-2.28.0}/docs/ibm-setup.md +0 -0
  184. {janito-2.27.1 → janito-2.28.0}/docs/imgs/code-generation-observability.png +0 -0
  185. {janito-2.27.1 → janito-2.28.0}/docs/imgs/code_generation_observability.png +0 -0
  186. {janito-2.27.1 → janito-2.28.0}/docs/imgs/happy-programmer.png +0 -0
  187. {janito-2.27.1 → janito-2.28.0}/docs/imgs/happy-programmer.svg +0 -0
  188. {janito-2.27.1 → janito-2.28.0}/docs/imgs/terminal-one-shot.png +0 -0
  189. {janito-2.27.1 → janito-2.28.0}/docs/imgs/terminal-shell.png +0 -0
  190. {janito-2.27.1 → janito-2.28.0}/docs/imgs/terminal_one_shot.png +0 -0
  191. {janito-2.27.1 → janito-2.28.0}/docs/imgs/terminal_shell.png +0 -0
  192. {janito-2.27.1 → janito-2.28.0}/docs/llm-drivers-required-config.md +0 -0
  193. {janito-2.27.1 → janito-2.28.0}/docs/llm-drivers.md +0 -0
  194. {janito-2.27.1 → janito-2.28.0}/docs/meta/developer-toolchain.md +0 -0
  195. {janito-2.27.1 → janito-2.28.0}/docs/meta/quality-checks.txt +0 -0
  196. {janito-2.27.1 → janito-2.28.0}/docs/mistral-setup.md +0 -0
  197. {janito-2.27.1 → janito-2.28.0}/docs/openai-setup.md +0 -0
  198. {janito-2.27.1 → janito-2.28.0}/docs/overrides/partials/copyright.html +0 -0
  199. {janito-2.27.1 → janito-2.28.0}/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -0
  200. {janito-2.27.1 → janito-2.28.0}/docs/plugins/MIGRATION_COMPLETE.md +0 -0
  201. {janito-2.27.1 → janito-2.28.0}/docs/plugins/README.md +0 -0
  202. {janito-2.27.1 → janito-2.28.0}/docs/plugins/api-reference.md +0 -0
  203. {janito-2.27.1 → janito-2.28.0}/docs/plugins/architecture.md +0 -0
  204. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
  205. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
  206. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
  207. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/system.md +0 -0
  208. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
  209. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
  210. {janito-2.27.1 → janito-2.28.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
  211. {janito-2.27.1 → janito-2.28.0}/docs/plugins/configuration.md +0 -0
  212. {janito-2.27.1 → janito-2.28.0}/docs/plugins/examples/advanced.md +0 -0
  213. {janito-2.27.1 → janito-2.28.0}/docs/plugins/examples/basic.md +0 -0
  214. {janito-2.27.1 → janito-2.28.0}/docs/plugins/examples/intermediate.md +0 -0
  215. {janito-2.27.1 → janito-2.28.0}/docs/plugins/plugin-development.md +0 -0
  216. {janito-2.27.1 → janito-2.28.0}/docs/plugins/plugin-resources.md +0 -0
  217. {janito-2.27.1 → janito-2.28.0}/docs/plugins/publishing.md +0 -0
  218. {janito-2.27.1 → janito-2.28.0}/docs/plugins/remote-plugins.md +0 -0
  219. {janito-2.27.1 → janito-2.28.0}/docs/plugins/testing.md +0 -0
  220. {janito-2.27.1 → janito-2.28.0}/docs/pt/README-pt.md +0 -0
  221. {janito-2.27.1 → janito-2.28.0}/docs/pt/README.md +0 -0
  222. {janito-2.27.1 → janito-2.28.0}/docs/pt/configuracao.md +0 -0
  223. {janito-2.27.1 → janito-2.28.0}/docs/pt/exemplos.md +0 -0
  224. {janito-2.27.1 → janito-2.28.0}/docs/pt/faq-pt.md +0 -0
  225. {janito-2.27.1 → janito-2.28.0}/docs/pt/ferramentas.md +0 -0
  226. {janito-2.27.1 → janito-2.28.0}/docs/pt/guia-uso.md +0 -0
  227. {janito-2.27.1 → janito-2.28.0}/docs/pt/instalacao.md +0 -0
  228. {janito-2.27.1 → janito-2.28.0}/docs/pt/perfis.md +0 -0
  229. {janito-2.27.1 → janito-2.28.0}/docs/public-sources.md +0 -0
  230. {janito-2.27.1 → janito-2.28.0}/docs/reference/api.md +0 -0
  231. {janito-2.27.1 → janito-2.28.0}/docs/reference/azure-openai.md +0 -0
  232. {janito-2.27.1 → janito-2.28.0}/docs/reference/cli-options.md +0 -0
  233. {janito-2.27.1 → janito-2.28.0}/docs/reference/message-handler-model.md +0 -0
  234. {janito-2.27.1 → janito-2.28.0}/docs/reference/rich-message-handler.md +0 -0
  235. {janito-2.27.1 → janito-2.28.0}/docs/security.md +0 -0
  236. {janito-2.27.1 → janito-2.28.0}/docs/tools/search-text.md +0 -0
  237. {janito-2.27.1 → janito-2.28.0}/docs/tools-index.md +0 -0
  238. {janito-2.27.1 → janito-2.28.0}/docs/tools-natural-results.md +0 -0
  239. {janito-2.27.1 → janito-2.28.0}/docs/tools-precision.md +0 -0
  240. {janito-2.27.1 → janito-2.28.0}/docs/z-ai-setup.md +0 -0
  241. {janito-2.27.1 → janito-2.28.0}/ibm-logo.txt +0 -0
  242. {janito-2.27.1 → janito-2.28.0}/janito/__init__.py +0 -0
  243. {janito-2.27.1 → janito-2.28.0}/janito/__main__.py +0 -0
  244. {janito-2.27.1 → janito-2.28.0}/janito/_version.py +0 -0
  245. {janito-2.27.1 → janito-2.28.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
  246. {janito-2.27.1 → janito-2.28.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
  247. {janito-2.27.1 → janito-2.28.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
  248. {janito-2.27.1 → janito-2.28.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
  249. {janito-2.27.1 → janito-2.28.0}/janito/cli/__init__.py +0 -0
  250. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/bindings.py +0 -0
  251. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/chat_entry.py +0 -0
  252. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/prompt_style.py +0 -0
  253. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
  254. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
  255. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
  256. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
  257. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
  258. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
  259. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
  260. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
  261. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
  262. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
  263. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
  264. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
  265. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
  266. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
  267. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
  268. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
  269. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
  270. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
  271. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
  272. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
  273. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
  274. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
  275. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
  276. {janito-2.27.1 → janito-2.28.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
  277. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_config.py +0 -0
  278. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_drivers.py +0 -0
  279. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
  280. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/list_tools.py +0 -0
  281. {janito-2.27.1 → janito-2.28.0}/janito/cli/cli_commands/model_selection.py +0 -0
  282. {janito-2.27.1 → janito-2.28.0}/janito/cli/config.py +0 -0
  283. {janito-2.27.1 → janito-2.28.0}/janito/cli/console.py +0 -0
  284. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/__init__.py +0 -0
  285. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/event_logger.py +0 -0
  286. {janito-2.27.1 → janito-2.28.0}/janito/cli/core/unsetters.py +0 -0
  287. {janito-2.27.1 → janito-2.28.0}/janito/cli/main.py +0 -0
  288. {janito-2.27.1 → janito-2.28.0}/janito/cli/prompt_handler.py +0 -0
  289. {janito-2.27.1 → janito-2.28.0}/janito/cli/rich_terminal_reporter.py +0 -0
  290. {janito-2.27.1 → janito-2.28.0}/janito/cli/single_shot_mode/__init__.py +0 -0
  291. {janito-2.27.1 → janito-2.28.0}/janito/cli/utils.py +0 -0
  292. {janito-2.27.1 → janito-2.28.0}/janito/cli/verbose_output.py +0 -0
  293. {janito-2.27.1 → janito-2.28.0}/janito/config.py +0 -0
  294. {janito-2.27.1 → janito-2.28.0}/janito/conversation_history.py +0 -0
  295. {janito-2.27.1 → janito-2.28.0}/janito/dir_walk_utils.py +0 -0
  296. {janito-2.27.1 → janito-2.28.0}/janito/driver_events.py +0 -0
  297. {janito-2.27.1 → janito-2.28.0}/janito/drivers/azure_openai/driver.py +0 -0
  298. {janito-2.27.1 → janito-2.28.0}/janito/drivers/dashscope.bak.zip +0 -0
  299. {janito-2.27.1 → janito-2.28.0}/janito/drivers/openai/README.md +0 -0
  300. {janito-2.27.1 → janito-2.28.0}/janito/drivers/openai/driver.py +0 -0
  301. {janito-2.27.1 → janito-2.28.0}/janito/drivers/openai_responses.bak.zip +0 -0
  302. {janito-2.27.1 → janito-2.28.0}/janito/drivers/zai/__init__.py +0 -0
  303. {janito-2.27.1 → janito-2.28.0}/janito/drivers/zai/driver.py +0 -0
  304. {janito-2.27.1 → janito-2.28.0}/janito/event_bus/__init__.py +0 -0
  305. {janito-2.27.1 → janito-2.28.0}/janito/event_bus/bus.py +0 -0
  306. {janito-2.27.1 → janito-2.28.0}/janito/event_bus/event.py +0 -0
  307. {janito-2.27.1 → janito-2.28.0}/janito/event_bus/handler.py +0 -0
  308. {janito-2.27.1 → janito-2.28.0}/janito/event_bus/queue_bus.py +0 -0
  309. {janito-2.27.1 → janito-2.28.0}/janito/formatting.py +0 -0
  310. {janito-2.27.1 → janito-2.28.0}/janito/formatting_token.py +0 -0
  311. {janito-2.27.1 → janito-2.28.0}/janito/gitignore_utils.py +0 -0
  312. {janito-2.27.1 → janito-2.28.0}/janito/i18n/__init__.py +0 -0
  313. {janito-2.27.1 → janito-2.28.0}/janito/i18n/it.py +0 -0
  314. {janito-2.27.1 → janito-2.28.0}/janito/i18n/messages.py +0 -0
  315. {janito-2.27.1 → janito-2.28.0}/janito/i18n/pt.py +0 -0
  316. {janito-2.27.1 → janito-2.28.0}/janito/llm/README.md +0 -0
  317. {janito-2.27.1 → janito-2.28.0}/janito/llm/__init__.py +0 -0
  318. {janito-2.27.1 → janito-2.28.0}/janito/llm/agent.py +0 -0
  319. {janito-2.27.1 → janito-2.28.0}/janito/llm/auth.py +0 -0
  320. {janito-2.27.1 → janito-2.28.0}/janito/llm/auth_utils.py +0 -0
  321. {janito-2.27.1 → janito-2.28.0}/janito/llm/driver.py +0 -0
  322. {janito-2.27.1 → janito-2.28.0}/janito/llm/driver_config.py +0 -0
  323. {janito-2.27.1 → janito-2.28.0}/janito/llm/driver_config_builder.py +0 -0
  324. {janito-2.27.1 → janito-2.28.0}/janito/llm/driver_input.py +0 -0
  325. {janito-2.27.1 → janito-2.28.0}/janito/llm/message_parts.py +0 -0
  326. {janito-2.27.1 → janito-2.28.0}/janito/llm/model.py +0 -0
  327. {janito-2.27.1 → janito-2.28.0}/janito/llm/provider.py +0 -0
  328. {janito-2.27.1 → janito-2.28.0}/janito/mkdocs.yml +0 -0
  329. {janito-2.27.1 → janito-2.28.0}/janito/perf_singleton.py +0 -0
  330. {janito-2.27.1 → janito-2.28.0}/janito/performance_collector.py +0 -0
  331. {janito-2.27.1 → janito-2.28.0}/janito/platform_discovery.py +0 -0
  332. {janito-2.27.1 → janito-2.28.0}/janito/provider_config.py +0 -0
  333. {janito-2.27.1 → janito-2.28.0}/janito/providers/alibaba/__init__.py +0 -0
  334. {janito-2.27.1 → janito-2.28.0}/janito/providers/anthropic/model_info.py +0 -0
  335. {janito-2.27.1 → janito-2.28.0}/janito/providers/anthropic/provider.py +0 -0
  336. {janito-2.27.1 → janito-2.28.0}/janito/providers/azure_openai/model_info.py +0 -0
  337. {janito-2.27.1 → janito-2.28.0}/janito/providers/azure_openai/provider.py +0 -0
  338. {janito-2.27.1 → janito-2.28.0}/janito/providers/dashscope.bak.zip +0 -0
  339. {janito-2.27.1 → janito-2.28.0}/janito/providers/deepseek/__init__.py +0 -0
  340. {janito-2.27.1 → janito-2.28.0}/janito/providers/deepseek/model_info.py +0 -0
  341. {janito-2.27.1 → janito-2.28.0}/janito/providers/deepseek/provider.py +0 -0
  342. {janito-2.27.1 → janito-2.28.0}/janito/providers/google/__init__.py +0 -0
  343. {janito-2.27.1 → janito-2.28.0}/janito/providers/google/model_info.py +0 -0
  344. {janito-2.27.1 → janito-2.28.0}/janito/providers/google/provider.py +0 -0
  345. {janito-2.27.1 → janito-2.28.0}/janito/providers/ibm/README.md +0 -0
  346. {janito-2.27.1 → janito-2.28.0}/janito/providers/ibm/__init__.py +0 -0
  347. {janito-2.27.1 → janito-2.28.0}/janito/providers/ibm/model_info.py +0 -0
  348. {janito-2.27.1 → janito-2.28.0}/janito/providers/ibm/provider.py +0 -0
  349. {janito-2.27.1 → janito-2.28.0}/janito/providers/openai/__init__.py +0 -0
  350. {janito-2.27.1 → janito-2.28.0}/janito/providers/openai/model_info.py +0 -0
  351. {janito-2.27.1 → janito-2.28.0}/janito/providers/openai/schema_generator.py +0 -0
  352. {janito-2.27.1 → janito-2.28.0}/janito/providers/registry.py +0 -0
  353. {janito-2.27.1 → janito-2.28.0}/janito/providers/zai/__init__.py +0 -0
  354. {janito-2.27.1 → janito-2.28.0}/janito/providers/zai/model_info.py +0 -0
  355. {janito-2.27.1 → janito-2.28.0}/janito/providers/zai/provider.py +0 -0
  356. {janito-2.27.1 → janito-2.28.0}/janito/providers/zai/schema_generator.py +0 -0
  357. {janito-2.27.1 → janito-2.28.0}/janito/regions/__init__.py +0 -0
  358. {janito-2.27.1 → janito-2.28.0}/janito/regions/cli.py +0 -0
  359. {janito-2.27.1 → janito-2.28.0}/janito/regions/geo_utils.py +0 -0
  360. {janito-2.27.1 → janito-2.28.0}/janito/regions/provider_regions.py +0 -0
  361. {janito-2.27.1 → janito-2.28.0}/janito/shell.bak.zip +0 -0
  362. {janito-2.27.1 → janito-2.28.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
  363. {janito-2.27.1 → janito-2.28.0}/janito/tools/README.md +0 -0
  364. {janito-2.27.1 → janito-2.28.0}/janito/tools/__init__.py +0 -0
  365. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/__init__.py +0 -0
  366. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/__init__.py +0 -0
  367. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/adapter.py +0 -0
  368. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/ask_user.py +0 -0
  369. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/copy_file.py +0 -0
  370. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/create_directory.py +0 -0
  371. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
  372. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/find_files.py +0 -0
  373. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
  374. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
  375. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
  376. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
  377. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
  378. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
  379. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/move_file.py +0 -0
  380. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
  381. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/open_url.py +0 -0
  382. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/python_code_run.py +0 -0
  383. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/read_chart.py +0 -0
  384. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/read_files.py +0 -0
  385. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/remove_directory.py +0 -0
  386. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/remove_file.py +0 -0
  387. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
  388. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
  389. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
  390. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
  391. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
  392. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
  393. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
  394. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
  395. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
  396. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
  397. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
  398. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
  399. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
  400. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
  401. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
  402. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
  403. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
  404. {janito-2.27.1 → janito-2.28.0}/janito/tools/adapters/local/view_file.py +0 -0
  405. {janito-2.27.1 → janito-2.28.0}/janito/tools/disabled_tools.py +0 -0
  406. {janito-2.27.1 → janito-2.28.0}/janito/tools/inspect_registry.py +0 -0
  407. {janito-2.27.1 → janito-2.28.0}/janito/tools/loop_protection_decorator.py +0 -0
  408. {janito-2.27.1 → janito-2.28.0}/janito/tools/outline_file.bak.zip +0 -0
  409. {janito-2.27.1 → janito-2.28.0}/janito/tools/path_security.py +0 -0
  410. {janito-2.27.1 → janito-2.28.0}/janito/tools/permissions.py +0 -0
  411. {janito-2.27.1 → janito-2.28.0}/janito/tools/permissions_parse.py +0 -0
  412. {janito-2.27.1 → janito-2.28.0}/janito/tools/tool_events.py +0 -0
  413. {janito-2.27.1 → janito-2.28.0}/janito/tools/tool_run_exception.py +0 -0
  414. {janito-2.27.1 → janito-2.28.0}/janito/tools/tool_use_tracker.py +0 -0
  415. {janito-2.27.1 → janito-2.28.0}/janito/tools/tool_utils.py +0 -0
  416. {janito-2.27.1 → janito-2.28.0}/janito/tools/tools_schema.py +0 -0
  417. {janito-2.27.1 → janito-2.28.0}/janito/utils.py +0 -0
  418. {janito-2.27.1 → janito-2.28.0}/janito.egg-info/dependency_links.txt +0 -0
  419. {janito-2.27.1 → janito-2.28.0}/janito.egg-info/entry_points.txt +0 -0
  420. {janito-2.27.1 → janito-2.28.0}/janito.egg-info/requires.txt +0 -0
  421. {janito-2.27.1 → janito-2.28.0}/janito.egg-info/top_level.txt +0 -0
  422. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
  423. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
  424. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
  425. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
  426. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
  427. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
  428. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
  429. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
  430. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
  431. {janito-2.27.1 → janito-2.28.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
  432. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/copy_file.py +0 -0
  433. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/create_directory.py +0 -0
  434. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/delete_text_in_file.py +0 -0
  435. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/find_files.py +0 -0
  436. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/move_file.py +0 -0
  437. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/read_files.py +0 -0
  438. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/remove_directory.py +0 -0
  439. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/remove_file.py +0 -0
  440. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
  441. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
  442. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
  443. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
  444. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
  445. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
  446. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
  447. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
  448. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
  449. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
  450. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
  451. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
  452. {janito-2.27.1 → janito-2.28.0}/plugins/core/filemanager/tools/view_file.py +0 -0
  453. {janito-2.27.1 → janito-2.28.0}/plugins/core/system/tools/run_bash_command.py +0 -0
  454. {janito-2.27.1 → janito-2.28.0}/plugins/dev/pythondev/tools/python_code_run.py +0 -0
  455. {janito-2.27.1 → janito-2.28.0}/plugins/dev/visualization/tools/read_chart.py +0 -0
  456. {janito-2.27.1 → janito-2.28.0}/plugins/ui/userinterface/tools/ask_user.py +0 -0
  457. {janito-2.27.1 → janito-2.28.0}/plugins/web/webtools/tools/open_html_in_browser.py +0 -0
  458. {janito-2.27.1 → janito-2.28.0}/plugins/web/webtools/tools/open_url.py +0 -0
  459. {janito-2.27.1 → janito-2.28.0}/plugins.txt +0 -0
  460. {janito-2.27.1 → janito-2.28.0}/pyproject.toml +0 -0
  461. {janito-2.27.1 → janito-2.28.0}/pytest.ini +0 -0
  462. {janito-2.27.1 → janito-2.28.0}/requirements-dev.txt +0 -0
  463. {janito-2.27.1 → janito-2.28.0}/requirements.txt +0 -0
  464. {janito-2.27.1 → janito-2.28.0}/setup.cfg +0 -0
  465. {janito-2.27.1 → janito-2.28.0}/test_example.py +0 -0
  466. {janito-2.27.1 → janito-2.28.0}/test_key_field_behavior.py +0 -0
  467. {janito-2.27.1 → janito-2.28.0}/test_key_field_protection.py +0 -0
  468. {janito-2.27.1 → janito-2.28.0}/test_loop_protection_return.py +0 -0
  469. {janito-2.27.1 → janito-2.28.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
  470. {janito-2.27.1 → janito-2.28.0}/tests/adapters/local/test_read_files.py +0 -0
  471. {janito-2.27.1 → janito-2.28.0}/tests/test_cli_list_models.py +0 -0
  472. {janito-2.27.1 → janito-2.28.0}/tests/test_cli_list_providers.py +0 -0
  473. {janito-2.27.1 → janito-2.28.0}/tests/test_cli_list_providers_alibaba.py +0 -0
  474. {janito-2.27.1 → janito-2.28.0}/tests/test_cli_version.py +0 -0
  475. {janito-2.27.1 → janito-2.28.0}/tests/test_disabled_tools.py +0 -0
  476. {janito-2.27.1 → janito-2.28.0}/tests/test_provider_alibaba.py +0 -0
  477. {janito-2.27.1 → janito-2.28.0}/tools/release.py +0 -0
  478. {janito-2.27.1 → janito-2.28.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 2.27.1
3
+ Version: 2.28.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
@@ -311,12 +311,12 @@ For users upgrading from previous versions:
311
311
 
312
312
  ## [2.9.0] - 2025-07-16
313
313
  ### Added
314
- - Added new `kimi-k2-turbo-preview` model to MoonshotAI provider
314
+ - Added new `kimi-k2-turbo-preview` model to Moonshot provider
315
315
  - Added visual indicators for default models in provider registry with star icons
316
316
 
317
317
  ### Changed
318
- - Updated default MoonshotAI model from `kimi-k2-0711-preview` to `kimi-k2-turbo-preview`
319
- - Updated all documentation to reflect new MoonshotAI model names and recommendations
318
+ - Updated default Moonshot model from `kimi-k2-0711-preview` to `kimi-k2-turbo-preview`
319
+ - Updated all documentation to reflect new Moonshot model names and recommendations
320
320
  - Updated project URLs, author email, and documentation for migration to ikignosis organization
321
321
  - Updated repository links in documentation and configuration files to point to ikignosis GitHub organization
322
322
  - Changed maintainer email in provider modules to janito@ikignosis.org
@@ -344,7 +344,7 @@ For users upgrading from previous versions:
344
344
  - **Provider-specific settings**: Simplified configuration system.
345
345
 
346
346
  ### Documentation
347
- - Updated MoonshotAI setup guide with platform.moonshot.ai domain.
347
+ - Updated Moonshot setup guide with platform.moonshot.ai domain.
348
348
  - Improved CLI usage documentation and fixed syntax highlighting.
349
349
  - Removed broken references to model_info.py files in supported-providers-models.md.
350
350
  - Added comprehensive documentation updates across the project.
@@ -17,7 +17,7 @@ Janito is a powerful AI assistant designed for developers, providing intelligent
17
17
  - **Terminal Integration**: Seamless shell integration with intelligent command assistance
18
18
  - **Code Intelligence**: Advanced code analysis and generation capabilities
19
19
  - **Extensible Tools**: Custom tool development and integration
20
- - **Multi-Provider Support**: Works with OpenAI, DeepSeek, MoonshotAI, and more
20
+ - **Multi-Provider Support**: Works with OpenAI, DeepSeek, Moonshot, and more
21
21
  - **Human-Guided AI**: Collaborative AI that works with you, not instead of you
22
22
 
23
23
  ## Documentation Sections
@@ -47,7 +47,7 @@ Janito supports multiple AI providers:
47
47
 
48
48
  - [OpenAI](openai-setup.md)
49
49
  - [DeepSeek](deepseek-setup.md)
50
- - [MoonshotAI](moonshotai-setup.md)
50
+ - [Moonshot](moonshot-setup.md)
51
51
  - [Mistral](mistral-setup.md)
52
52
  - [Z.ai](z-ai-setup.md)
53
53
  - [Cerebras](cerebras-setup.md)
@@ -1,39 +1,39 @@
1
- # Configuring Janito for MoonshotAI
1
+ # Configuring Janito for Moonshot
2
2
 
3
- Janito supports MoonshotAI as an LLM provider. This guide explains how to configure Janito to use MoonshotAI models.
3
+ Janito supports Moonshot as an LLM provider. This guide explains how to configure Janito to use Moonshot models.
4
4
 
5
- ## 1. Obtain a MoonshotAI API Key
5
+ ## 1. Obtain a Moonshot API Key
6
6
 
7
7
  - Sign up or log in at [Moonshot AI Platform](https://platform.moonshot.ai) to get your API key.
8
8
  - Navigate to the API Keys section in your dashboard to create and manage your keys.
9
9
 
10
- ## 2. Set Your MoonshotAI API Key in Janito
10
+ ## 2. Set Your Moonshot API Key in Janito
11
11
 
12
- You must specify both the API key and the provider name when configuring Janito for MoonshotAI:
12
+ You must specify both the API key and the provider name when configuring Janito for Moonshot:
13
13
 
14
14
  ```bash
15
- janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshotai
15
+ janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshot
16
16
  ```
17
17
 
18
- Replace `YOUR_MOONSHOT_API_KEY` with your actual MoonshotAI API key.
18
+ Replace `YOUR_MOONSHOT_API_KEY` with your actual Moonshot API key.
19
19
 
20
- ## 3. Select MoonshotAI as the Provider
20
+ ## 3. Select Moonshot as the Provider
21
21
 
22
- You can set MoonshotAI as your default provider:
22
+ You can set Moonshot as your default provider:
23
23
 
24
24
  ```bash
25
- janito --set provider=moonshotai
25
+ janito --set provider=moonshot
26
26
  ```
27
27
 
28
28
  Or specify it per command:
29
29
 
30
30
  ```bash
31
- janito -p moonshotai "Your prompt here"
31
+ janito -p moonshot "Your prompt here"
32
32
  ```
33
33
 
34
- ## 4. Choose a MoonshotAI Model
34
+ ## 4. Choose a Moonshot Model
35
35
 
36
- Janito supports the following MoonshotAI models:
36
+ Janito supports the following Moonshot models:
37
37
 
38
38
  - `kimi-k2-turbo-preview` (default) - Advanced reasoning model with 128k context window
39
39
  - `kimi-k2-turbo-preview` - Turbo version of the advanced reasoning model with 128k context window
@@ -44,7 +44,7 @@ Janito supports the following MoonshotAI models:
44
44
  To select a model:
45
45
 
46
46
  ```bash
47
- janito -p moonshotai -m kimi-k1-32k "Your prompt here"
47
+ janito -p moonshot -m kimi-k1-32k "Your prompt here"
48
48
  ```
49
49
 
50
50
  ## 5. Verify Your Configuration
@@ -57,7 +57,7 @@ janito --show-config
57
57
 
58
58
  ## 6. API Endpoint Information
59
59
 
60
- MoonshotAI uses an OpenAI-compatible API endpoint:
60
+ Moonshot uses an OpenAI-compatible API endpoint:
61
61
 
62
62
  - **Base URL**: `https://api.moonshot.ai/v1`
63
63
  - **Authentication**: Bearer token (API key)
@@ -66,7 +66,7 @@ MoonshotAI uses an OpenAI-compatible API endpoint:
66
66
  ## 7. Troubleshooting
67
67
 
68
68
  - Ensure your API key is correct and has sufficient credits.
69
- - If you encounter issues, use `janito --list-providers` to verify MoonshotAI is available.
69
+ - If you encounter issues, use `janito --list-providers` to verify Moonshot is available.
70
70
  - Check your API key permissions and rate limits in the Moonshot AI Platform dashboard.
71
71
  - For more help, see the main [Configuration Guide](guides/configuration.md) or run `janito --help`.
72
72
 
@@ -29,7 +29,7 @@ Open-source/open-weight models with complete accessibility.
29
29
  |----------|-----------------|---------------|----------|---------------|-------|
30
30
  | **Alibaba** | [Alibaba Cloud Console](https://account.alibabacloud.com) | [Model Studio Help](https://www.alibabacloud.com/help/en/model-studio) | [API Reference](https://www.alibabacloud.com/help/en/model-studio/api-reference) | 🥇 High | Qwen3 235B - Leading open-source |
31
31
  | **Cerebras** | [API Dashboard](https://api.cerebras.ai) | [Inference Docs](https://cerebras.ai/inference) | [API Docs](https://cerebras.ai/inference) | 🥇 High | Qwen-3 32B - Fast inference |
32
- | **MoonshotAI** | [Platform](https://platform.moonshot.ai) | [API Docs](https://platform.moonshot.ai/docs) | [API Reference](https://platform.moonshot.ai/docs) | 🥈 Medium | Kimi K2 - Competitive open-source |
32
+ | **Moonshot** | [Platform](https://platform.moonshot.ai) | [API Docs](https://platform.moonshot.ai/docs) | [API Reference](https://platform.moonshot.ai/docs) | 🥈 Medium | Kimi K2 - Competitive open-source |
33
33
  | **Z.ai** | [API Management](https://z.ai/manage-apikey/apikey-list) | [Model API Docs](https://z.ai/model-api) | [API Reference](https://z.ai/model-api) | 🥈 Medium | GLM-4.5 - Solid performance |
34
34
 
35
35
  ## Specialized Models
@@ -63,7 +63,7 @@ Open-source/open-weight models with complete accessibility.
63
63
 
64
64
  1. **Alibaba Qwen3** - Best open-source performance
65
65
  2. **Cerebras** - Fast inference for Qwen-3 models
66
- 3. **MoonshotAI** or **Z.ai** - Good alternatives
66
+ 3. **Moonshot** or **Z.ai** - Good alternatives
67
67
 
68
68
  ### For Specialized Tasks
69
69
 
@@ -56,12 +56,12 @@ Mistral provides both general-purpose and specialized models, with Codestral spe
56
56
 
57
57
  For setup instructions, see the [Mistral Setup Guide](mistral-setup.md).
58
58
 
59
- ### MoonshotAI
59
+ ### Moonshot
60
60
 
61
61
  - **Kimi K2 Turbo Preview** (default) - Latest generation with enhanced performance
62
62
  - **Kimi K2 0711 Preview** - Previous preview version
63
63
 
64
- MoonshotAI provides open-source Kimi models with competitive performance.
64
+ Moonshot provides open-source Kimi models with competitive performance.
65
65
 
66
66
  ### Z.AI
67
67
 
@@ -12,31 +12,31 @@ from janito.tools.loop_protection import LoopProtection
12
12
 
13
13
  class ExampleFileReader:
14
14
  """Example tool that reads files with loop protection."""
15
-
15
+
16
16
  def __init__(self):
17
17
  self.last_result = None
18
-
18
+
19
19
  @protect_against_loops(max_calls=5, time_window=10.0)
20
20
  def read_file(self, path: str) -> str:
21
21
  """Read a single file with loop protection.
22
-
22
+
23
23
  Args:
24
24
  path (str): Path to the file to read
25
-
25
+
26
26
  Returns:
27
27
  str: Content of the file
28
28
  """
29
29
  print(f"Reading file: {path}")
30
30
  # Simulate reading a file
31
31
  return f"Content of {path}"
32
-
32
+
33
33
  @protect_against_loops(max_calls=5, time_window=10.0)
34
34
  def read_multiple_files(self, file_paths: list) -> dict:
35
35
  """Read multiple files with loop protection.
36
-
36
+
37
37
  Args:
38
38
  file_paths (list): List of file paths to read
39
-
39
+
40
40
  Returns:
41
41
  dict: Mapping of file paths to their contents
42
42
  """
@@ -51,13 +51,13 @@ class ExampleFileReader:
51
51
  def demonstrate_loop_protection():
52
52
  """Demonstrate the loop protection functionality."""
53
53
  print("=== Loop Protection Example ===\n")
54
-
54
+
55
55
  # Create an instance of our example tool
56
56
  reader = ExampleFileReader()
57
-
57
+
58
58
  # Reset any existing tracking
59
59
  LoopProtection.instance().reset_tracking()
60
-
60
+
61
61
  print("1. Normal operation (within limits):")
62
62
  try:
63
63
  # These should work fine
@@ -66,7 +66,7 @@ def demonstrate_loop_protection():
66
66
  print(f" Attempt {i+1}: {result}")
67
67
  except RuntimeError as e:
68
68
  print(f" Error: {e}")
69
-
69
+
70
70
  print("\n2. Exceeding the limit (5 operations in 10 seconds):")
71
71
  try:
72
72
  # This should trigger the loop protection
@@ -75,7 +75,7 @@ def demonstrate_loop_protection():
75
75
  print(f" Attempt {i+1}: {result}")
76
76
  except RuntimeError as e:
77
77
  print(f" Error: {e}")
78
-
78
+
79
79
  print("\n3. Multiple files with loop protection:")
80
80
  try:
81
81
  # This should work fine for different files
@@ -85,7 +85,7 @@ def demonstrate_loop_protection():
85
85
  print(f" {path}: {content}")
86
86
  except RuntimeError as e:
87
87
  print(f" Error: {e}")
88
-
88
+
89
89
  print("\n4. Multiple files exceeding limit:")
90
90
  try:
91
91
  # This should trigger loop protection
@@ -98,4 +98,4 @@ def demonstrate_loop_protection():
98
98
 
99
99
 
100
100
  if __name__ == "__main__":
101
- demonstrate_loop_protection()
101
+ demonstrate_loop_protection()
@@ -15,33 +15,33 @@ from janito.tools.adapters.local.adapter import register_local_tool
15
15
  class CustomFileAnalyzerTool(ToolBase):
16
16
  """
17
17
  Example custom tool that analyzes files with loop protection.
18
-
18
+
19
19
  This tool demonstrates how to use the @protect_against_loops decorator
20
20
  to prevent excessive operations on the same file.
21
21
  """
22
-
22
+
23
23
  permissions = ToolPermissions(read=True)
24
24
  tool_name = "custom_file_analyzer"
25
-
25
+
26
26
  @protect_against_loops(max_calls=5, time_window=10.0)
27
27
  def run(self, path: str, analysis_type: str = "basic") -> str:
28
28
  """
29
29
  Analyze a file with the specified analysis type.
30
-
30
+
31
31
  Args:
32
32
  path (str): Path to the file to analyze
33
33
  analysis_type (str): Type of analysis to perform ("basic" or "detailed")
34
-
34
+
35
35
  Returns:
36
36
  str: Analysis results
37
37
  """
38
38
  self.report_action(f"Analyzing '{path}' with {analysis_type} analysis")
39
-
39
+
40
40
  try:
41
41
  # Simulate file analysis
42
- with open(path, 'r', encoding='utf-8') as f:
42
+ with open(path, "r", encoding="utf-8") as f:
43
43
  content = f.read()
44
-
44
+
45
45
  # Perform analysis based on type
46
46
  if analysis_type == "basic":
47
47
  lines = len(content.splitlines())
@@ -55,10 +55,10 @@ class CustomFileAnalyzerTool(ToolBase):
55
55
  # Detailed analysis could include more metrics
56
56
  result = f"Detailed analysis of {path}:\n"
57
57
  result += f" Content preview: {content[:100]}...\n"
58
-
58
+
59
59
  self.report_success(f"Analysis of {path} completed")
60
60
  return result
61
-
61
+
62
62
  except FileNotFoundError:
63
63
  self.report_error(f"File not found: {path}")
64
64
  return f"Error: File '{path}' not found"
@@ -71,46 +71,48 @@ class CustomFileAnalyzerTool(ToolBase):
71
71
  class BatchFileProcessorTool(ToolBase):
72
72
  """
73
73
  Example tool that processes multiple files with loop protection.
74
-
74
+
75
75
  This tool demonstrates how to use the @protect_against_loops decorator
76
76
  with tools that operate on multiple files.
77
77
  """
78
-
78
+
79
79
  permissions = ToolPermissions(read=True)
80
80
  tool_name = "batch_file_processor"
81
-
81
+
82
82
  @protect_against_loops(max_calls=5, time_window=10.0)
83
83
  def run(self, file_paths: list, operation: str = "count") -> str:
84
84
  """
85
85
  Process multiple files with the specified operation.
86
-
86
+
87
87
  Args:
88
88
  file_paths (list): List of file paths to process
89
89
  operation (str): Operation to perform ("count", "uppercase", etc.)
90
-
90
+
91
91
  Returns:
92
92
  str: Processing results
93
93
  """
94
- self.report_action(f"Processing {len(file_paths)} files with {operation} operation")
95
-
94
+ self.report_action(
95
+ f"Processing {len(file_paths)} files with {operation} operation"
96
+ )
97
+
96
98
  results = []
97
99
  for path in file_paths:
98
100
  try:
99
- with open(path, 'r', encoding='utf-8') as f:
101
+ with open(path, "r", encoding="utf-8") as f:
100
102
  content = f.read()
101
-
103
+
102
104
  if operation == "count":
103
105
  lines = len(content.splitlines())
104
106
  words = len(content.split())
105
107
  results.append(f"{path}: {lines} lines, {words} words")
106
108
  elif operation == "uppercase":
107
109
  results.append(f"{path}: {content.upper()}")
108
-
110
+
109
111
  except FileNotFoundError:
110
112
  results.append(f"{path}: File not found")
111
113
  except Exception as e:
112
114
  results.append(f"{path}: Error - {e}")
113
-
115
+
114
116
  self.report_success(f"Processed {len(file_paths)} files")
115
117
  return "\n".join(results)
116
118
 
@@ -123,13 +125,13 @@ def usage_examples():
123
125
  print(" def run(self, path: str, analysis_type: str = 'basic') -> str:")
124
126
  print(" # Implementation here")
125
127
  print()
126
-
128
+
127
129
  print("Example 2: BatchFileProcessorTool")
128
130
  print(" @protect_against_loops('file_paths')")
129
131
  print(" def run(self, file_paths: list, operation: str = 'count') -> str:")
130
132
  print(" # Implementation here")
131
133
  print()
132
-
134
+
133
135
  print("To use these tools in your application:")
134
136
  print("1. Import the tool classes")
135
137
  print("2. Register them with the tools adapter")
@@ -142,4 +144,4 @@ def usage_examples():
142
144
 
143
145
 
144
146
  if __name__ == "__main__":
145
- usage_examples()
147
+ usage_examples()
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Get top NASDAQ stocks by market cap and trading volume
4
+ Uses yfinance library to fetch real-time market data
5
+ """
6
+
7
+ import yfinance as yf
8
+ import pandas as pd
9
+ from datetime import datetime
10
+
11
+
12
+ def get_top_nasdaq_stocks(limit=20):
13
+ """Get top NASDAQ stocks by market cap and volume"""
14
+
15
+ # Popular NASDAQ tickers (top companies by market cap)
16
+ nasdaq_tickers = [
17
+ "AAPL",
18
+ "MSFT",
19
+ "GOOGL",
20
+ "GOOG",
21
+ "AMZN",
22
+ "TSLA",
23
+ "NVDA",
24
+ "META",
25
+ "AVGO",
26
+ "COST",
27
+ "NFLX",
28
+ "ADBE",
29
+ "AMD",
30
+ "PEP",
31
+ "INTC",
32
+ "CSCO",
33
+ "TMUS",
34
+ "CMCSA",
35
+ "TXN",
36
+ "QCOM",
37
+ "AMGN",
38
+ "HON",
39
+ "INTU",
40
+ "AMAT",
41
+ "ADI",
42
+ "BKNG",
43
+ "MU",
44
+ "LRCX",
45
+ "ADP",
46
+ "MDLZ",
47
+ "ISRG",
48
+ "GILD",
49
+ "VRTX",
50
+ "REGN",
51
+ "FISV",
52
+ "CSX",
53
+ "ATVI",
54
+ "CHTR",
55
+ "MAR",
56
+ "ILMN",
57
+ "SBUX",
58
+ "PANW",
59
+ "ORLY",
60
+ "MNST",
61
+ "KLAC",
62
+ "SNPS",
63
+ "CDNS",
64
+ "FTNT",
65
+ "MELI",
66
+ "DXCM",
67
+ "KDP",
68
+ "NXPI",
69
+ "EXC",
70
+ "ASML",
71
+ "CTAS",
72
+ "MCHP",
73
+ "PAYX",
74
+ "AZN",
75
+ "BIIB",
76
+ "ROST",
77
+ "ODFL",
78
+ "LULU",
79
+ "WDAY",
80
+ "DLTR",
81
+ "IDXX",
82
+ "TTWO",
83
+ "CPRT",
84
+ "CSGP",
85
+ "FAST",
86
+ "MRNA",
87
+ "DDOG",
88
+ "TEAM",
89
+ "ZM",
90
+ "DOCU",
91
+ "OKTA",
92
+ "TWLO",
93
+ "SNOW",
94
+ "CRWD",
95
+ "NET",
96
+ "PLTR",
97
+ "SQ",
98
+ "ROKU",
99
+ "UBER",
100
+ "LYFT",
101
+ "ABNB",
102
+ "DASH",
103
+ "PINS",
104
+ "SNAP",
105
+ "SHOP",
106
+ "CRSR",
107
+ "NIO",
108
+ "XPEV",
109
+ "LI",
110
+ "LCID",
111
+ "RBLX",
112
+ "COIN",
113
+ "HOOD",
114
+ "RIVN",
115
+ "BYND",
116
+ "PTON",
117
+ "ZM",
118
+ "DOCU",
119
+ "OKTA",
120
+ "TWLO",
121
+ ]
122
+
123
+ print("🚀 Fetching NASDAQ market data...")
124
+
125
+ stocks_data = []
126
+
127
+ for ticker in nasdaq_tickers[:limit]:
128
+ try:
129
+ stock = yf.Ticker(ticker)
130
+ info = stock.info
131
+
132
+ # Get current price and volume
133
+ current_data = stock.history(period="1d", interval="1m")
134
+ if not current_data.empty:
135
+ current_price = current_data["Close"].iloc[-1]
136
+ volume = current_data["Volume"].iloc[-1]
137
+ else:
138
+ current_price = info.get(
139
+ "currentPrice", info.get("regularMarketPrice", 0)
140
+ )
141
+ volume = info.get("volume", 0)
142
+
143
+ stock_info = {
144
+ "Symbol": ticker,
145
+ "Company": info.get("longName", "N/A"),
146
+ "Current Price": f"${current_price:.2f}" if current_price else "N/A",
147
+ "Market Cap": (
148
+ f"${info.get('marketCap', 0):,.0f}"
149
+ if info.get("marketCap")
150
+ else "N/A"
151
+ ),
152
+ "Volume": f"{volume:,}" if volume else "N/A",
153
+ "Change %": (
154
+ f"{info.get('regularMarketChangePercent', 0):.2f}%"
155
+ if info.get("regularMarketChangePercent")
156
+ else "N/A"
157
+ ),
158
+ "Sector": info.get("sector", "N/A"),
159
+ "Industry": info.get("industry", "N/A"),
160
+ }
161
+
162
+ stocks_data.append(stock_info)
163
+ print(
164
+ f"✅ {ticker}: {stock_info['Current Price']} ({stock_info['Change %']})"
165
+ )
166
+
167
+ except Exception as e:
168
+ print(f"❌ Error fetching {ticker}: {e}")
169
+
170
+ return stocks_data
171
+
172
+
173
+ def display_top_stocks():
174
+ """Display top NASDAQ stocks in a formatted table"""
175
+
176
+ print("\n" + "=" * 80)
177
+ print("📈 TOP NASDAQ STOCKS - REAL-TIME DATA")
178
+ print("=" * 80)
179
+ print(f"Last Updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
180
+ print("-" * 80)
181
+
182
+ stocks = get_top_nasdaq_stocks(25)
183
+
184
+ if not stocks:
185
+ print("❌ No data available")
186
+ return
187
+
188
+ # Sort by market cap (descending)
189
+ try:
190
+ stocks_sorted = sorted(
191
+ stocks,
192
+ key=lambda x: (
193
+ float(x["Market Cap"].replace("$", "").replace(",", ""))
194
+ if x["Market Cap"] != "N/A"
195
+ else 0
196
+ ),
197
+ reverse=True,
198
+ )
199
+ except:
200
+ stocks_sorted = stocks
201
+
202
+ # Display as table
203
+ print(
204
+ f"{'Rank':<4} {'Symbol':<6} {'Company':<25} {'Price':<10} {'Change %':<10} {'Volume':<12} {'Market Cap':<15}"
205
+ )
206
+ print("-" * 90)
207
+
208
+ for i, stock in enumerate(stocks_sorted[:20], 1):
209
+ company_name = (
210
+ stock["Company"][:24] if len(stock["Company"]) > 24 else stock["Company"]
211
+ )
212
+ print(
213
+ f"{i:<4} {stock['Symbol']:<6} {company_name:<25} {stock['Current Price']:<10} "
214
+ f"{stock['Change %']:<10} {stock['Volume']:<12} {stock['Market Cap']:<15}"
215
+ )
216
+
217
+ print("-" * 90)
218
+ print("💡 Data provided by Yahoo Finance via yfinance")
219
+
220
+
221
+ if __name__ == "__main__":
222
+ try:
223
+ import yfinance as yf
224
+ except ImportError:
225
+ print("📦 Installing yfinance...")
226
+ import subprocess
227
+ import sys
228
+
229
+ subprocess.check_call([sys.executable, "-m", "pip", "install", "yfinance"])
230
+ import yfinance as yf
231
+
232
+ display_top_stocks()
@@ -15,17 +15,17 @@ pip install janito
15
15
  1. **Get your API key**: Sign up at [Moonshot AI](https://platform.moonshot.cn/) and get your API key
16
16
  2. **Set your API key**:
17
17
  ```bash
18
- janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshotai
18
+ janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshot
19
19
  ```
20
20
 
21
21
  ### Basic Usage
22
22
 
23
- **MoonshotAI (Recommended - Default Provider)**
23
+ **Moonshot (Recommended - Default Provider)**
24
24
  ```bash
25
- # Using the default provider (moonshotai) and model
25
+ # Using the default provider (moonshot) and model
26
26
  janito "Create a Python script that reads a CSV file"
27
27
 
28
- # Using a specific MoonshotAI model
28
+ # Using a specific Moonshot model
29
29
  janito -m kimi-k1-8k "Explain quantum computing"
30
30
  ```
31
31
 
@@ -71,13 +71,13 @@ In chat mode, you can:
71
71
 
72
72
  Set default provider and model:
73
73
  ```bash
74
- janito --set provider=moonshotai
74
+ janito --set provider=moonshot
75
75
  janito --set model=kimi-k1-8k
76
76
  ```
77
77
 
78
78
  ## Providers
79
79
 
80
- ### MoonshotAI (Recommended)
80
+ ### Moonshot (Recommended)
81
81
 
82
82
  - **Models**: kimi-k1-8k, kimi-k1-32k, kimi-k1-128k, kimi-k2-turbo-preview
83
83
  - **Strengths**: Excellent Chinese/English support, competitive pricing, fast responses
@@ -126,10 +126,10 @@ janito --role python-expert "Optimize this algorithm"
126
126
  ### Environment Variables
127
127
  You can also configure via environment variables:
128
128
 
129
- **MoonshotAI:**
129
+ **Moonshot:**
130
130
  ```bash
131
- export MOONSHOTAI_API_KEY=your_key_here
132
- export JANITO_PROVIDER=moonshotai
131
+ export MOONSHOT_API_KEY=your_key_here
132
+ export JANITO_PROVIDER=moonshot
133
133
  export JANITO_MODEL=kimi-k1-8k
134
134
  ```
135
135