janito 2.27.1__tar.gz → 2.29.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {janito-2.27.1 → janito-2.29.0}/PKG-INFO +1 -1
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/CHANGELOG.md +4 -4
- {janito-2.27.1 → janito-2.29.0}/docs/index.md +2 -2
- janito-2.27.1/docs/moonshotai-setup.md → janito-2.29.0/docs/moonshot-setup.md +16 -16
- {janito-2.27.1 → janito-2.29.0}/docs/provider-platform-access.md +2 -2
- {janito-2.27.1 → janito-2.29.0}/docs/supported-providers-models.md +2 -2
- {janito-2.27.1 → janito-2.29.0}/examples/loop_protection_example.py +14 -14
- {janito-2.27.1 → janito-2.29.0}/examples/loop_protection_tool_example.py +26 -24
- janito-2.29.0/get_nasdaq_top.py +232 -0
- {janito-2.27.1 → janito-2.29.0}/janito/README.md +9 -9
- {janito-2.27.1 → janito-2.29.0}/janito/agent/setup_agent.py +29 -16
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/script_runner.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/session.py +160 -56
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/session_profile_select.py +8 -2
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/execute.py +4 -2
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/help.py +2 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/privileges.py +6 -2
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/provider.py +7 -4
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/read.py +4 -2
- janito-2.29.0/janito/cli/chat_mode/shell/commands/security/__init__.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +16 -13
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/security_command.py +14 -10
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/tools.py +4 -2
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +17 -12
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/write.py +4 -2
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/toolbar.py +4 -4
- janito-2.29.0/janito/cli/cli_commands/enable_disable_plugin.py +87 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_models.py +2 -2
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_plugins.py +18 -18
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_profiles.py +6 -6
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_providers.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/model_utils.py +45 -20
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/ping_providers.py +10 -10
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/set_api_key.py +5 -3
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/show_config.py +13 -7
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/show_system_prompt.py +13 -6
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/getters.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/model_guesser.py +18 -15
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/runner.py +15 -7
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/setters.py +9 -6
- {janito-2.27.1 → janito-2.29.0}/janito/cli/main_cli.py +15 -12
- {janito-2.27.1 → janito-2.29.0}/janito/cli/prompt_setup.py +4 -4
- {janito-2.27.1 → janito-2.29.0}/janito/cli/rich_terminal_reporter.py +2 -1
- {janito-2.27.1 → janito-2.29.0}/janito/config_manager.py +2 -0
- {janito-2.27.1 → janito-2.29.0}/janito/docs/GETTING_STARTED.md +9 -9
- janito-2.29.0/janito/drivers/cerebras/__init__.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/janito/exceptions.py +6 -4
- {janito-2.27.1 → janito-2.29.0}/janito/plugins/__init__.py +2 -2
- {janito-2.27.1 → janito-2.29.0}/janito/plugins/base.py +48 -40
- {janito-2.27.1 → janito-2.29.0}/janito/plugins/builtin.py +13 -9
- {janito-2.27.1 → janito-2.29.0}/janito/plugins/config.py +16 -19
- {janito-2.27.1 → janito-2.29.0}/janito/plugins/discovery.py +73 -66
- {janito-2.27.1 → janito-2.29.0}/janito/plugins/manager.py +62 -60
- {janito-2.27.1 → janito-2.29.0}/janito/provider_registry.py +10 -10
- {janito-2.27.1 → janito-2.29.0}/janito/providers/__init__.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito/providers/alibaba/model_info.py +3 -5
- {janito-2.27.1 → janito-2.29.0}/janito/providers/alibaba/provider.py +3 -1
- janito-2.29.0/janito/providers/cerebras/__init__.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/cerebras/model_info.py +12 -27
- {janito-2.27.1 → janito-2.29.0}/janito/providers/cerebras/provider.py +11 -9
- janito-2.29.0/janito/providers/mistral/__init__.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/mistral/model_info.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito/providers/mistral/provider.py +1 -1
- janito-2.29.0/janito/providers/moonshot/__init__.py +1 -0
- {janito-2.27.1/janito/providers/moonshotai → janito-2.29.0/janito/providers/moonshot}/model_info.py +3 -3
- {janito-2.27.1/janito/providers/moonshotai → janito-2.29.0/janito/providers/moonshot}/provider.py +8 -8
- {janito-2.27.1 → janito-2.29.0}/janito/providers/openai/provider.py +3 -1
- {janito-2.27.1 → janito-2.29.0}/janito/report_events.py +0 -1
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/create_file.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/fetch_url.py +45 -29
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/python_command_run.py +2 -1
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/python_file_run.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/run_powershell_command.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +14 -11
- {janito-2.27.1 → janito-2.29.0}/janito/tools/base.py +4 -3
- {janito-2.27.1 → janito-2.29.0}/janito/tools/loop_protection.py +24 -22
- {janito-2.27.1 → janito-2.29.0}/janito/tools/path_utils.py +7 -7
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tool_base.py +0 -2
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tools_adapter.py +15 -5
- {janito-2.27.1 → janito-2.29.0}/janito/tools/url_whitelist.py +27 -26
- {janito-2.27.1 → janito-2.29.0}/janito.egg-info/PKG-INFO +1 -1
- {janito-2.27.1 → janito-2.29.0}/janito.egg-info/SOURCES.txt +6 -15
- janito-2.29.0/janito.egg-info/top_level.txt +2 -0
- {janito-2.27.1 → janito-2.29.0}/market_prompt_fix.py +46 -35
- {janito-2.27.1 → janito-2.29.0}/market_test.py +31 -22
- {janito-2.27.1 → janito-2.29.0}/mkdocs.yml +1 -1
- {janito-2.27.1 → janito-2.29.0}/mkdocs_hooks.py +12 -12
- {janito-2.27.1 → janito-2.29.0}/plugins/__init__.py +10 -8
- {janito-2.27.1 → janito-2.29.0}/plugins/core/__init__.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/__init__.py +12 -3
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/__init__.py +36 -8
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/create_file.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +14 -11
- {janito-2.27.1 → janito-2.29.0}/plugins/core/system/__init__.py +6 -3
- {janito-2.27.1 → janito-2.29.0}/plugins/core/system/tools/run_powershell_command.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/__init__.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/pythondev/__init__.py +5 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/pythondev/tools/python_command_run.py +2 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/pythondev/tools/python_file_run.py +1 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/visualization/__init__.py +6 -3
- {janito-2.27.1 → janito-2.29.0}/plugins/example_plugin.py +21 -21
- {janito-2.27.1 → janito-2.29.0}/plugins/ui/__init__.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/ui/userinterface/__init__.py +3 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/web/__init__.py +1 -1
- {janito-2.27.1 → janito-2.29.0}/plugins/web/webtools/__init__.py +11 -3
- {janito-2.27.1 → janito-2.29.0}/plugins/web/webtools/tools/fetch_url.py +45 -29
- {janito-2.27.1 → janito-2.29.0}/test_market_analyst.py +38 -28
- janito-2.27.1/tests/test_cli_list_providers_moonshotai.py → janito-2.29.0/tests/test_cli_list_providers_moonshot.py +3 -3
- {janito-2.27.1 → janito-2.29.0}/tests/test_plugin_system.py +30 -32
- {janito-2.27.1 → janito-2.29.0}/tests/test_provider_cerebras.py +1 -1
- janito-2.29.0/tests/test_provider_moonshot.py +10 -0
- janito-2.27.1/docs/pt/README-pt.md +0 -371
- janito-2.27.1/docs/pt/README.md +0 -38
- janito-2.27.1/docs/pt/configuracao.md +0 -304
- janito-2.27.1/docs/pt/exemplos.md +0 -489
- janito-2.27.1/docs/pt/faq-pt.md +0 -317
- janito-2.27.1/docs/pt/ferramentas.md +0 -447
- janito-2.27.1/docs/pt/guia-uso.md +0 -265
- janito-2.27.1/docs/pt/instalacao.md +0 -155
- janito-2.27.1/docs/pt/perfis.md +0 -361
- janito-2.27.1/get_nasdaq_top.py +0 -113
- janito-2.27.1/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -1
- janito-2.27.1/janito/cli/cli_commands/enable_disable_plugin.py +0 -64
- janito-2.27.1/janito/drivers/cerebras/__init__.py +0 -1
- janito-2.27.1/janito/providers/cerebras/__init__.py +0 -1
- janito-2.27.1/janito/providers/mistral/__init__.py +0 -1
- janito-2.27.1/janito/providers/moonshotai/__init__.py +0 -1
- janito-2.27.1/janito.egg-info/top_level.txt +0 -1
- janito-2.27.1/tests/test_provider_moonshotai.py +0 -10
- {janito-2.27.1 → janito-2.29.0}/.codespellrc +0 -0
- {janito-2.27.1 → janito-2.29.0}/.gitattributes +0 -0
- {janito-2.27.1 → janito-2.29.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-2.27.1 → janito-2.29.0}/.gitignore +0 -0
- {janito-2.27.1 → janito-2.29.0}/.pre-commit-config.yaml +0 -0
- {janito-2.27.1 → janito-2.29.0}/.secrets.baseline +0 -0
- {janito-2.27.1 → janito-2.29.0}/.vscode/settings.json +0 -0
- {janito-2.27.1 → janito-2.29.0}/LICENSE +0 -0
- {janito-2.27.1 → janito-2.29.0}/MARKET_ANALYST_README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/README-dev.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/RELEASE_COMPARISON.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/UPDATING_DOCS.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/adding_mcp.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/DIV.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/Interfaces.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/about/costs.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/about/why.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/alibaba-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/alternatives.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/cerebras-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/concepts/index.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/deepseek-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/driver-flow.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/drivers/events.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/drivers.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/event-bus.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/configuration.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/developing.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/installation.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/market-data-sources.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/profiles.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/read-chart-examples.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/security-commands.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/stock-market-guide.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/url-whitelist.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/using.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/guides/using_tools.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/ibm-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/llm-drivers.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/mistral-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/openai-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/overrides/partials/copyright.html +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/MIGRATION_COMPLETE.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/api-reference.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/architecture.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/system.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/configuration.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/examples/advanced.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/examples/basic.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/examples/intermediate.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/plugin-development.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/plugin-resources.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/publishing.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/remote-plugins.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/plugins/testing.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/public-sources.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/reference/api.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/reference/cli-options.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/security.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/tools/search-text.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/tools-index.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/tools-natural-results.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/tools-precision.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/docs/z-ai-setup.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/ibm-logo.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/__main__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/_version.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/config.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/console.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/main.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/config.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/conversation_history.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/driver_events.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/openai/driver.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/drivers/zai/driver.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/event_bus/bus.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/event_bus/event.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/event_bus/handler.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/formatting.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/formatting_token.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/gitignore_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/i18n/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/i18n/it.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/i18n/messages.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/i18n/pt.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/agent.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/auth.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/auth_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/driver.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/driver_config.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/driver_input.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/message_parts.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/model.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/llm/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/mkdocs.yml +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/perf_singleton.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/performance_collector.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/platform_discovery.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/provider_config.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/deepseek/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/google/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/ibm/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/ibm/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/ibm/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/ibm/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/openai/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/registry.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/zai/model_info.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/zai/provider.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/regions/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/regions/cli.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/regions/geo_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/regions/provider_regions.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/shell.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/README.md +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/read_chart.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/loop_protection_decorator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/path_security.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/permissions.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tool_events.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito/utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/copy_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/create_directory.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/delete_text_in_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/find_files.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/move_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/read_files.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/remove_directory.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/remove_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/filemanager/tools/view_file.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/core/system/tools/run_bash_command.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/pythondev/tools/python_code_run.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/dev/visualization/tools/read_chart.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/ui/userinterface/tools/ask_user.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/web/webtools/tools/open_html_in_browser.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins/web/webtools/tools/open_url.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/plugins.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/pyproject.toml +0 -0
- {janito-2.27.1 → janito-2.29.0}/pytest.ini +0 -0
- {janito-2.27.1 → janito-2.29.0}/requirements-dev.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/requirements.txt +0 -0
- {janito-2.27.1 → janito-2.29.0}/setup.cfg +0 -0
- {janito-2.27.1 → janito-2.29.0}/test_example.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/test_key_field_behavior.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/test_key_field_protection.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/test_loop_protection_return.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/test_cli_version.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tools/release.py +0 -0
- {janito-2.27.1 → janito-2.29.0}/tox.ini +0 -0
@@ -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
|
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
|
319
|
-
- Updated all documentation to reflect new
|
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
|
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,
|
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
|
-
- [
|
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
|
1
|
+
# Configuring Janito for Moonshot
|
2
2
|
|
3
|
-
Janito supports
|
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
|
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
|
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
|
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
|
15
|
+
janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshot
|
16
16
|
```
|
17
17
|
|
18
|
-
Replace `YOUR_MOONSHOT_API_KEY` with your actual
|
18
|
+
Replace `YOUR_MOONSHOT_API_KEY` with your actual Moonshot API key.
|
19
19
|
|
20
|
-
## 3. Select
|
20
|
+
## 3. Select Moonshot as the Provider
|
21
21
|
|
22
|
-
You can set
|
22
|
+
You can set Moonshot as your default provider:
|
23
23
|
|
24
24
|
```bash
|
25
|
-
janito --set provider=
|
25
|
+
janito --set provider=moonshot
|
26
26
|
```
|
27
27
|
|
28
28
|
Or specify it per command:
|
29
29
|
|
30
30
|
```bash
|
31
|
-
janito -p
|
31
|
+
janito -p moonshot "Your prompt here"
|
32
32
|
```
|
33
33
|
|
34
|
-
## 4. Choose a
|
34
|
+
## 4. Choose a Moonshot Model
|
35
35
|
|
36
|
-
Janito supports the following
|
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
|
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
|
-
|
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
|
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
|
-
| **
|
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. **
|
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
|
-
###
|
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
|
-
|
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,
|
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(
|
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,
|
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
|
18
|
+
janito --set-api-key YOUR_MOONSHOT_API_KEY -p moonshot
|
19
19
|
```
|
20
20
|
|
21
21
|
### Basic Usage
|
22
22
|
|
23
|
-
**
|
23
|
+
**Moonshot (Recommended - Default Provider)**
|
24
24
|
```bash
|
25
|
-
# Using the default provider (
|
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
|
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=
|
74
|
+
janito --set provider=moonshot
|
75
75
|
janito --set model=kimi-k1-8k
|
76
76
|
```
|
77
77
|
|
78
78
|
## Providers
|
79
79
|
|
80
|
-
###
|
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
|
-
**
|
129
|
+
**Moonshot:**
|
130
130
|
```bash
|
131
|
-
export
|
132
|
-
export JANITO_PROVIDER=
|
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
|
|