janito 2.31.1__tar.gz → 2.33.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.31.1 → janito-2.33.0}/PKG-INFO +1 -1
- {janito-2.31.1 → janito-2.33.0}/docs/deepseek-setup.md +9 -2
- {janito-2.31.1 → janito-2.33.0}/docs/index.md +1 -1
- {janito-2.31.1 → janito-2.33.0}/docs/supported-providers-models.md +5 -2
- {janito-2.31.1 → janito-2.33.0}/janito/agent/setup_agent.py +26 -0
- {janito-2.31.1 → janito-2.33.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +2 -0
- {janito-2.31.1 → janito-2.33.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +2 -0
- {janito-2.31.1 → janito-2.33.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +2 -0
- {janito-2.31.1 → janito-2.33.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +2 -0
- janito-2.33.0/janito/providers/deepseek/model_info.py +37 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/deepseek/provider.py +1 -1
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/fetch_url.py +45 -27
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/show_image.py +7 -3
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/show_image_grid.py +5 -4
- {janito-2.31.1 → janito-2.33.0}/janito.egg-info/PKG-INFO +1 -1
- {janito-2.31.1 → janito-2.33.0}/janito.egg-info/SOURCES.txt +2 -3
- {janito-2.31.1 → janito-2.33.0}/plugins/core/imagedisplay/tools/show_image.py +7 -3
- {janito-2.31.1 → janito-2.33.0}/plugins/core/imagedisplay/tools/show_image_grid.py +5 -4
- {janito-2.31.1 → janito-2.33.0}/plugins/web/webtools/tools/fetch_url.py +37 -27
- janito-2.33.0/test_http_errors.py +100 -0
- janito-2.33.0/test_http_errors_direct.py +53 -0
- {janito-2.31.1 → janito-2.33.0}/tools/release.py +12 -1
- janito-2.31.1/img/tux.png +0 -0
- janito-2.31.1/img/tux_display.png +0 -0
- janito-2.31.1/janito/providers/deepseek/model_info.py +0 -16
- janito-2.31.1/tux.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/.codespellrc +0 -0
- {janito-2.31.1 → janito-2.33.0}/.gitattributes +0 -0
- {janito-2.31.1 → janito-2.33.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-2.31.1 → janito-2.33.0}/.gitignore +0 -0
- {janito-2.31.1 → janito-2.33.0}/.pre-commit-config.yaml +0 -0
- {janito-2.31.1 → janito-2.33.0}/.secrets.baseline +0 -0
- {janito-2.31.1 → janito-2.33.0}/.vscode/settings.json +0 -0
- {janito-2.31.1 → janito-2.33.0}/LICENSE +0 -0
- {janito-2.31.1 → janito-2.33.0}/MARKET_ANALYST_README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/README-dev.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/RELEASE_COMPARISON.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/UPDATING_DOCS.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/adding_mcp.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/CHANGELOG.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/DIV.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/Interfaces.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/PROFILES.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/about/costs.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/about/why.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/alibaba-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/alternatives.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/cerebras-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/CHANGELOG.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/concepts/index.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/driver-flow.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/drivers/events.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/drivers.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/event-bus.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/configuration.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/developing.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/installation.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/market-data-sources.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/profiles.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/read-chart-examples.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/security-commands.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/stock-market-guide.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/url-whitelist.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/using.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/guides/using_tools.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/ibm-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/llm-drivers.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/mistral-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/moonshot-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/openai-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/overrides/partials/copyright.html +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/MIGRATION_COMPLETE.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/api-reference.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/architecture.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/system.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/configuration.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/examples/advanced.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/examples/basic.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/examples/intermediate.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/plugin-development.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/plugin-resources.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/publishing.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/remote-plugins.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/plugins/testing.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/provider-platform-access.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/public-sources.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/reference/api.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/reference/cli-options.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/security.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/tools/search-text.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/tools/show-image-grid.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/tools/show-image.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/tools-index.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/tools-natural-results.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/tools-precision.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/docs/z-ai-setup.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/examples/loop_protection_example.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/examples/loop_protection_tool_example.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/get_nasdaq_top.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/ibm-logo.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/__main__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/_version.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/session.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_plugins.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/ping_providers.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/console.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/getters.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/runner.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/setters.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/main.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/main_cli.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/prompt_setup.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/config_manager.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/conversation_history.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/driver_events.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/cerebras/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/openai/driver.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/drivers/zai/driver.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/event_bus/bus.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/event_bus/event.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/event_bus/handler.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/exceptions.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/formatting.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/formatting_token.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/gitignore_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/i18n/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/i18n/it.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/i18n/messages.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/i18n/pt.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/agent.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/auth.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/auth_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/driver.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/driver_config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/driver_input.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/message_parts.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/model.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/llm/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/mkdocs.yml +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/perf_singleton.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/performance_collector.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/platform_discovery.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/auto_loader.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/auto_loader_fixed.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/base.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/builtin.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/core_adapter.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/core_loader.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/core_loader_fixed.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/discovery.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/discovery_core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/plugins/manager.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/provider_config.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/provider_registry.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/alibaba/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/cerebras/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/cerebras/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/cerebras/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/google/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/ibm/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/ibm/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/ibm/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/ibm/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/mistral/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/mistral/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/mistral/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/moonshot/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/moonshot/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/moonshot/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/openai/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/openai/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/registry.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/zai/model_info.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/zai/provider.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/regions/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/regions/cli.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/regions/geo_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/regions/provider_regions.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/report_events.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/shell.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/README.md +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/create_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/python_command_run.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/python_file_run.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/read_chart.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/base.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/function_adapter.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/loop_protection.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/loop_protection_decorator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/path_security.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/path_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/permissions.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tool_base.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tool_events.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tools_adapter.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/tools/url_whitelist.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito/utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/janito.egg-info/top_level.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/market_prompt_fix.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/market_test.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/mkdocs.yml +0 -0
- {janito-2.31.1 → janito-2.33.0}/mkdocs_hooks.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/search_text/core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/copy_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/create_directory.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/create_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/delete_text_in_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/find_files.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/move_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/read_files.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/remove_directory.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/remove_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/filemanager/tools/view_file.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/imagedisplay/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/imagedisplay/plugin.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/imagedisplay/tools/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/system/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/system/tools/run_bash_command.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/core/system/tools/run_powershell_command.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/pythondev/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/pythondev/tools/python_code_run.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/pythondev/tools/python_command_run.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/pythondev/tools/python_file_run.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/visualization/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/dev/visualization/tools/read_chart.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/example_plugin.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/ui/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/ui/userinterface/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/ui/userinterface/tools/ask_user.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/web/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/web/webtools/__init__.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/web/webtools/tools/open_html_in_browser.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins/web/webtools/tools/open_url.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/plugins.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/pyproject.toml +0 -0
- {janito-2.31.1 → janito-2.33.0}/pytest.ini +0 -0
- {janito-2.31.1 → janito-2.33.0}/requirements-dev.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/requirements.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/setup.cfg +0 -0
- {janito-2.31.1 → janito-2.33.0}/test.txt +0 -0
- {janito-2.31.1 → janito-2.33.0}/test_example.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/test_key_field_behavior.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/test_key_field_protection.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/test_loop_protection_return.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/test_market_analyst.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_cli_list_providers_moonshot.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_cli_version.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_plugin_system.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_provider_cerebras.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tests/test_provider_moonshot.py +0 -0
- {janito-2.31.1 → janito-2.33.0}/tox.ini +0 -0
@@ -34,13 +34,20 @@ janito -p deepseek "Your prompt here"
|
|
34
34
|
|
35
35
|
Janito supports the following DeepSeek models:
|
36
36
|
|
37
|
-
- `deepseek-chat` (default)
|
38
|
-
- `deepseek-reasoner`
|
37
|
+
- `deepseek-chat` (default) - General purpose chat model (8K context)
|
38
|
+
- `deepseek-reasoner` - Specialized for complex reasoning tasks (8K context)
|
39
|
+
- `deepseek-v3.1` - Latest V3.1 model with 128K context window
|
40
|
+
- `deepseek-v3.1-base` - Base V3.1 model with 128K context window
|
41
|
+
- `deepseek-r1` - R1 model with 128K context window
|
39
42
|
|
40
43
|
To select a model:
|
41
44
|
|
42
45
|
```bash
|
43
46
|
janito -p deepseek -m deepseek-reasoner "Your prompt here"
|
47
|
+
|
48
|
+
# Or use the latest models:
|
49
|
+
janito -p deepseek -m deepseek-v3.1 "Your prompt here"
|
50
|
+
janito -p deepseek -m deepseek-r1 "Your prompt here"
|
44
51
|
```
|
45
52
|
|
46
53
|
## 5. Verify Your Configuration
|
@@ -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, Moonshot, and more
|
20
|
+
- **Multi-Provider Support**: Works with OpenAI, DeepSeek (including V3.1 and R1), Moonshot, and more
|
21
21
|
- **Human-Guided AI**: Collaborative AI that works with you, not instead of you
|
22
22
|
|
23
23
|
## Documentation Sections
|
@@ -39,8 +39,11 @@ This page lists the supported providers and their available models, organized by
|
|
39
39
|
|
40
40
|
### DeepSeek
|
41
41
|
|
42
|
-
- **DeepSeek Chat** (default) - General purpose chat model
|
43
|
-
- **DeepSeek Reasoner** - Specialized for complex reasoning tasks
|
42
|
+
- **DeepSeek Chat** (default) - General purpose chat model (8K context)
|
43
|
+
- **DeepSeek Reasoner** - Specialized for complex reasoning tasks (8K context)
|
44
|
+
- **DeepSeek V3.1** - Latest V3.1 model with 128K context window
|
45
|
+
- **DeepSeek V3.1 Base** - Base V3.1 model with 128K context window
|
46
|
+
- **DeepSeek R1** - R1 model with 128K context window (reasoning-focused)
|
44
47
|
|
45
48
|
### Mistral
|
46
49
|
|
@@ -155,6 +155,32 @@ def _prepare_template_context(role, profile, allowed_permissions, args=None):
|
|
155
155
|
getattr(args, "emoji", False) if "args" in locals() else False
|
156
156
|
)
|
157
157
|
|
158
|
+
# Add current date/time with timezone using standard library
|
159
|
+
from datetime import datetime, timezone
|
160
|
+
import time
|
161
|
+
|
162
|
+
# Get local time with timezone info
|
163
|
+
local_time = datetime.now()
|
164
|
+
|
165
|
+
# Get timezone offset
|
166
|
+
if time.daylight:
|
167
|
+
offset = time.altzone
|
168
|
+
else:
|
169
|
+
offset = time.timezone
|
170
|
+
|
171
|
+
# Format offset as +HHMM or -HHMM
|
172
|
+
offset_hours = -offset // 3600
|
173
|
+
offset_minutes = abs(offset) % 3600 // 60
|
174
|
+
offset_str = f"{offset_hours:+03d}{offset_minutes:02d}"
|
175
|
+
|
176
|
+
# Get timezone name
|
177
|
+
tz_name = time.tzname[time.daylight and time.daylight or 0]
|
178
|
+
|
179
|
+
context["current_datetime"] = local_time.strftime(
|
180
|
+
f"%Y-%m-%d %H:%M:%S {tz_name}{offset_str}"
|
181
|
+
)
|
182
|
+
context["timezone"] = f"{tz_name} (UTC{offset_str})"
|
183
|
+
|
158
184
|
return context
|
159
185
|
|
160
186
|
|
@@ -4,6 +4,8 @@
|
|
4
4
|
{% if description %}Description: {{ description }}{% endif %}
|
5
5
|
{% if author %}Author: {{ author }}{% endif %}
|
6
6
|
{% if tags %}Tags: {{ tags | join(', ') }}{% endif %}
|
7
|
+
{% if current_datetime %}Current Date/Time: {{ current_datetime }}{% endif %}
|
8
|
+
{% if timezone %}Timezone: {{ timezone }}{% endif %}
|
7
9
|
|
8
10
|
{# General role setup
|
9
11
|
ex. "Search in code" -> Python Developer -> find(*.py) | Java Developer -> find(*.java)
|
@@ -4,6 +4,8 @@
|
|
4
4
|
{% if description %}Description: {{ description }}{% endif %}
|
5
5
|
{% if author %}Author: {{ author }}{% endif %}
|
6
6
|
{% if tags %}Tags: {{ tags | join(', ') }}{% endif %}
|
7
|
+
{% if current_datetime %}Current Date/Time: {{ current_datetime }}{% endif %}
|
8
|
+
{% if timezone %}Timezone: {{ timezone }}{% endif %}
|
7
9
|
|
8
10
|
You are: {{ role | default('software developer') }}
|
9
11
|
|
@@ -4,6 +4,8 @@
|
|
4
4
|
{% if description %}Description: {{ description }}{% endif %}
|
5
5
|
{% if author %}Author: {{ author }}{% endif %}
|
6
6
|
{% if tags %}Tags: {{ tags | join(', ') }}{% endif %}
|
7
|
+
{% if current_datetime %}Current Date/Time: {{ current_datetime }}{% endif %}
|
8
|
+
{% if timezone %}Timezone: {{ timezone }}{% endif %}
|
7
9
|
|
8
10
|
You are: {{ role | default('market analyst specializing in financial markets, business intelligence, and economic research') }}
|
9
11
|
|
@@ -4,6 +4,8 @@
|
|
4
4
|
{% if description %}Description: {{ description }}{% endif %}
|
5
5
|
{% if author %}Author: {{ author }}{% endif %}
|
6
6
|
{% if tags %}Tags: {{ tags | join(', ') }}{% endif %}
|
7
|
+
{% if current_datetime %}Current Date/Time: {{ current_datetime }}{% endif %}
|
8
|
+
{% if timezone %}Timezone: {{ timezone }}{% endif %}
|
7
9
|
|
8
10
|
You are: {{ role | default('helpful assistant') }}
|
9
11
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
MODEL_SPECS = {
|
2
|
+
"deepseek-chat": {
|
3
|
+
"description": "DeepSeek Chat Model (OpenAI-compatible)",
|
4
|
+
"context_window": 8192,
|
5
|
+
"max_tokens": 4096,
|
6
|
+
"family": "deepseek",
|
7
|
+
"default": True,
|
8
|
+
},
|
9
|
+
"deepseek-reasoner": {
|
10
|
+
"description": "DeepSeek Reasoner Model (OpenAI-compatible)",
|
11
|
+
"context_window": 8192,
|
12
|
+
"max_tokens": 4096,
|
13
|
+
"family": "deepseek",
|
14
|
+
"default": False,
|
15
|
+
},
|
16
|
+
"deepseek-v3.1": {
|
17
|
+
"description": "DeepSeek V3.1 Model (128K context, OpenAI-compatible)",
|
18
|
+
"context_window": 131072,
|
19
|
+
"max_tokens": 4096,
|
20
|
+
"family": "deepseek",
|
21
|
+
"default": False,
|
22
|
+
},
|
23
|
+
"deepseek-v3.1-base": {
|
24
|
+
"description": "DeepSeek V3.1 Base Model (128K context, OpenAI-compatible)",
|
25
|
+
"context_window": 131072,
|
26
|
+
"max_tokens": 4096,
|
27
|
+
"family": "deepseek",
|
28
|
+
"default": False,
|
29
|
+
},
|
30
|
+
"deepseek-r1": {
|
31
|
+
"description": "DeepSeek R1 Model (128K context, OpenAI-compatible)",
|
32
|
+
"context_window": 131072,
|
33
|
+
"max_tokens": 4096,
|
34
|
+
"family": "deepseek",
|
35
|
+
"default": False,
|
36
|
+
},
|
37
|
+
}
|
@@ -17,7 +17,7 @@ class DeepSeekProvider(LLMProvider):
|
|
17
17
|
NAME = "deepseek"
|
18
18
|
MAINTAINER = "João Pinto <janito@ikignosis.org>"
|
19
19
|
MODEL_SPECS = MODEL_SPECS
|
20
|
-
DEFAULT_MODEL = "deepseek-chat" # Options: deepseek-chat, deepseek-reasoner
|
20
|
+
DEFAULT_MODEL = "deepseek-chat" # Options: deepseek-chat, deepseek-reasoner, deepseek-v3.1, deepseek-v3.1-base, deepseek-r1
|
21
21
|
|
22
22
|
def __init__(
|
23
23
|
self, auth_manager: LLMAuthManager = None, config: LLMDriverConfig = None
|
@@ -246,11 +246,11 @@ class FetchUrlTool(ToolBase):
|
|
246
246
|
return content
|
247
247
|
except requests.exceptions.HTTPError as http_err:
|
248
248
|
status_code = http_err.response.status_code if http_err.response else None
|
249
|
-
|
249
|
+
|
250
250
|
# Map status codes to descriptions
|
251
251
|
status_descriptions = {
|
252
252
|
400: "Bad Request",
|
253
|
-
401: "Unauthorized",
|
253
|
+
401: "Unauthorized",
|
254
254
|
403: "Forbidden",
|
255
255
|
404: "Not Found",
|
256
256
|
405: "Method Not Allowed",
|
@@ -266,50 +266,68 @@ class FetchUrlTool(ToolBase):
|
|
266
266
|
502: "Bad Gateway",
|
267
267
|
503: "Service Unavailable",
|
268
268
|
504: "Gateway Timeout",
|
269
|
-
505: "HTTP Version Not Supported"
|
269
|
+
505: "HTTP Version Not Supported",
|
270
270
|
}
|
271
|
-
|
271
|
+
|
272
272
|
if status_code and 400 <= status_code < 500:
|
273
273
|
description = status_descriptions.get(status_code, "Client Error")
|
274
|
-
error_message =
|
275
|
-
"HTTP Error {status_code} {description}",
|
276
|
-
status_code=status_code,
|
277
|
-
description=description,
|
278
|
-
)
|
274
|
+
error_message = f"HTTP {status_code} {description}"
|
279
275
|
# Cache 403 and 404 errors
|
280
276
|
if status_code in [403, 404]:
|
281
277
|
self._cache_error(url, status_code, error_message)
|
282
278
|
|
283
279
|
self.report_error(
|
284
|
-
|
285
|
-
"❗ HTTP Error {status_code} {description}",
|
286
|
-
status_code=status_code,
|
287
|
-
description=description,
|
288
|
-
),
|
280
|
+
f"❗ HTTP {status_code} {description}",
|
289
281
|
ReportAction.READ,
|
290
282
|
)
|
291
283
|
return error_message
|
292
|
-
|
293
|
-
description = status_descriptions.get(status_code, "Server Error")
|
284
|
+
elif status_code and 500 <= status_code < 600:
|
285
|
+
description = status_descriptions.get(status_code, "Server Error")
|
286
|
+
error_message = f"HTTP {status_code} {description}"
|
294
287
|
self.report_error(
|
295
|
-
|
296
|
-
"❗ HTTP Error {status_code} {description}",
|
297
|
-
status_code=status_code or "Error",
|
298
|
-
description=description,
|
299
|
-
),
|
288
|
+
f"❗ HTTP {status_code} {description}",
|
300
289
|
ReportAction.READ,
|
301
290
|
)
|
302
|
-
return
|
303
|
-
|
304
|
-
|
305
|
-
|
291
|
+
return error_message
|
292
|
+
else:
|
293
|
+
status_code_str = str(status_code) if status_code else "Error"
|
294
|
+
description = status_descriptions.get(
|
295
|
+
status_code,
|
296
|
+
(
|
297
|
+
"Server Error"
|
298
|
+
if status_code and status_code >= 500
|
299
|
+
else "Client Error"
|
300
|
+
),
|
306
301
|
)
|
302
|
+
self.report_error(
|
303
|
+
f"❗ HTTP {status_code_str} {description}",
|
304
|
+
ReportAction.READ,
|
305
|
+
)
|
306
|
+
return f"HTTP {status_code_str} {description}"
|
307
|
+
except requests.exceptions.ConnectionError as conn_err:
|
308
|
+
self.report_error(
|
309
|
+
"❗ Network Error",
|
310
|
+
ReportAction.READ,
|
311
|
+
)
|
312
|
+
return f"Network Error: Failed to connect to {url}"
|
313
|
+
except requests.exceptions.Timeout as timeout_err:
|
314
|
+
self.report_error(
|
315
|
+
"❗ Timeout Error",
|
316
|
+
ReportAction.READ,
|
317
|
+
)
|
318
|
+
return f"Timeout Error: Request timed out after {timeout} seconds"
|
319
|
+
except requests.exceptions.RequestException as req_err:
|
320
|
+
self.report_error(
|
321
|
+
"❗ Request Error",
|
322
|
+
ReportAction.READ,
|
323
|
+
)
|
324
|
+
return f"Request Error: {str(req_err)}"
|
307
325
|
except Exception as err:
|
308
326
|
self.report_error(
|
309
|
-
|
327
|
+
"❗ Error fetching URL",
|
310
328
|
ReportAction.READ,
|
311
329
|
)
|
312
|
-
return
|
330
|
+
return f"Error: {str(err)}"
|
313
331
|
|
314
332
|
def _extract_and_clean_text(self, html_content: str) -> str:
|
315
333
|
"""Extract and clean text from HTML content."""
|
@@ -36,9 +36,9 @@ class ShowImageTool(ToolBase):
|
|
36
36
|
|
37
37
|
try:
|
38
38
|
from rich.console import Console
|
39
|
-
from
|
39
|
+
from PIL import Image as PILImage
|
40
40
|
except Exception as e:
|
41
|
-
msg = tr("⚠️ Missing dependency:
|
41
|
+
msg = tr("⚠️ Missing dependency: PIL/Pillow ({error})", error=e)
|
42
42
|
self.report_error(msg)
|
43
43
|
return msg
|
44
44
|
|
@@ -53,7 +53,11 @@ class ShowImageTool(ToolBase):
|
|
53
53
|
|
54
54
|
try:
|
55
55
|
console = Console()
|
56
|
-
|
56
|
+
from rich.console import Console
|
57
|
+
from rich.text import Text
|
58
|
+
console = Console()
|
59
|
+
img = PILImage.open(path)
|
60
|
+
console.print(Text(f"Image: {disp_path} ({img.width}x{img.height})", style="bold green"))
|
57
61
|
console.print(img)
|
58
62
|
self.report_success(tr("✅ Displayed"))
|
59
63
|
details = []
|
@@ -40,10 +40,10 @@ class ShowImageGridTool(ToolBase):
|
|
40
40
|
try:
|
41
41
|
from rich.console import Console
|
42
42
|
from rich.columns import Columns
|
43
|
-
from
|
43
|
+
from PIL import Image as PILImage
|
44
44
|
from rich.panel import Panel
|
45
45
|
except Exception as e:
|
46
|
-
msg = tr("⚠️ Missing dependency:
|
46
|
+
msg = tr("⚠️ Missing dependency: PIL/Pillow ({error})", error=e)
|
47
47
|
self.report_error(msg)
|
48
48
|
return msg
|
49
49
|
|
@@ -61,8 +61,9 @@ class ShowImageGridTool(ToolBase):
|
|
61
61
|
self.report_warning(tr("❗ not found: {p}", p=display_path(fp)))
|
62
62
|
continue
|
63
63
|
try:
|
64
|
-
img =
|
65
|
-
|
64
|
+
img = PILImage.open(fp)
|
65
|
+
title = f"{display_path(fp)} ({img.width}x{img.height})"
|
66
|
+
images.append(Panel.fit(title, title=display_path(fp), border_style="dim"))
|
66
67
|
shown += 1
|
67
68
|
except Exception as e:
|
68
69
|
self.report_warning(tr("⚠️ Skipped {p}: {e}", p=display_path(fp), e=e))
|
@@ -23,12 +23,13 @@ requirements-dev.txt
|
|
23
23
|
requirements.txt
|
24
24
|
test.txt
|
25
25
|
test_example.py
|
26
|
+
test_http_errors.py
|
27
|
+
test_http_errors_direct.py
|
26
28
|
test_key_field_behavior.py
|
27
29
|
test_key_field_protection.py
|
28
30
|
test_loop_protection_return.py
|
29
31
|
test_market_analyst.py
|
30
32
|
tox.ini
|
31
|
-
tux.png
|
32
33
|
.github/workflows/python-app.yml.disabled
|
33
34
|
.vscode/settings.json
|
34
35
|
docs/CHANGELOG.md
|
@@ -139,8 +140,6 @@ docs/tools/show-image-grid.md
|
|
139
140
|
docs/tools/show-image.md
|
140
141
|
examples/loop_protection_example.py
|
141
142
|
examples/loop_protection_tool_example.py
|
142
|
-
img/tux.png
|
143
|
-
img/tux_display.png
|
144
143
|
janito/README.md
|
145
144
|
janito/__init__.py
|
146
145
|
janito/__main__.py
|
@@ -35,9 +35,9 @@ class ShowImageTool(ToolBase):
|
|
35
35
|
# Defer heavy imports to runtime
|
36
36
|
try:
|
37
37
|
from rich.console import Console
|
38
|
-
from
|
38
|
+
from PIL import Image as PILImage
|
39
39
|
except Exception as e:
|
40
|
-
msg = tr("⚠️ Missing dependency:
|
40
|
+
msg = tr("⚠️ Missing dependency: PIL/Pillow ({error})", error=e)
|
41
41
|
self.report_error(msg)
|
42
42
|
return msg
|
43
43
|
|
@@ -53,7 +53,11 @@ class ShowImageTool(ToolBase):
|
|
53
53
|
try:
|
54
54
|
console = Console()
|
55
55
|
# rich.image.Image handles inline terminal display of common formats
|
56
|
-
|
56
|
+
from rich.console import Console
|
57
|
+
from rich.text import Text
|
58
|
+
console = Console()
|
59
|
+
img = PILImage.open(path)
|
60
|
+
console.print(Text(f"Image: {disp_path} ({img.width}x{img.height})", style="bold green"))
|
57
61
|
console.print(img)
|
58
62
|
self.report_success(tr("✅ Displayed"))
|
59
63
|
details = []
|
@@ -38,10 +38,10 @@ class ShowImageGridTool(ToolBase):
|
|
38
38
|
try:
|
39
39
|
from rich.console import Console
|
40
40
|
from rich.columns import Columns
|
41
|
-
from
|
41
|
+
from PIL import Image as PILImage
|
42
42
|
from rich.panel import Panel
|
43
43
|
except Exception as e:
|
44
|
-
msg = tr("⚠️ Missing dependency:
|
44
|
+
msg = tr("⚠️ Missing dependency: PIL/Pillow ({error})", error=e)
|
45
45
|
self.report_error(msg)
|
46
46
|
return msg
|
47
47
|
|
@@ -59,8 +59,9 @@ class ShowImageGridTool(ToolBase):
|
|
59
59
|
self.report_warning(tr("❗ not found: {p}", p=display_path(fp)))
|
60
60
|
continue
|
61
61
|
try:
|
62
|
-
img =
|
63
|
-
|
62
|
+
img = PILImage.open(fp)
|
63
|
+
title = f"{display_path(fp)} ({img.width}x{img.height})"
|
64
|
+
images.append(Panel.fit(title, title=display_path(fp), border_style="dim"))
|
64
65
|
shown += 1
|
65
66
|
except Exception as e:
|
66
67
|
self.report_warning(tr("⚠️ Skipped {p}: {e}", p=display_path(fp), e=e))
|
@@ -246,11 +246,11 @@ class FetchUrlTool(ToolBase):
|
|
246
246
|
return content
|
247
247
|
except requests.exceptions.HTTPError as http_err:
|
248
248
|
status_code = http_err.response.status_code if http_err.response else None
|
249
|
-
|
249
|
+
|
250
250
|
# Map status codes to descriptions
|
251
251
|
status_descriptions = {
|
252
252
|
400: "Bad Request",
|
253
|
-
401: "Unauthorized",
|
253
|
+
401: "Unauthorized",
|
254
254
|
403: "Forbidden",
|
255
255
|
404: "Not Found",
|
256
256
|
405: "Method Not Allowed",
|
@@ -266,50 +266,60 @@ class FetchUrlTool(ToolBase):
|
|
266
266
|
502: "Bad Gateway",
|
267
267
|
503: "Service Unavailable",
|
268
268
|
504: "Gateway Timeout",
|
269
|
-
505: "HTTP Version Not Supported"
|
269
|
+
505: "HTTP Version Not Supported",
|
270
270
|
}
|
271
|
-
|
271
|
+
|
272
272
|
if status_code and 400 <= status_code < 500:
|
273
273
|
description = status_descriptions.get(status_code, "Client Error")
|
274
|
-
error_message =
|
275
|
-
"HTTP Error {status_code} {description}",
|
276
|
-
status_code=status_code,
|
277
|
-
description=description,
|
278
|
-
)
|
274
|
+
error_message = f"HTTP {status_code} {description}"
|
279
275
|
# Cache 403 and 404 errors
|
280
276
|
if status_code in [403, 404]:
|
281
277
|
self._cache_error(url, status_code, error_message)
|
282
278
|
|
283
279
|
self.report_error(
|
284
|
-
|
285
|
-
"❗ HTTP Error {status_code} {description}",
|
286
|
-
status_code=status_code,
|
287
|
-
description=description,
|
288
|
-
),
|
280
|
+
f"❗ HTTP {status_code} {description}",
|
289
281
|
ReportAction.READ,
|
290
282
|
)
|
291
283
|
return error_message
|
292
284
|
else:
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
285
|
+
status_code_str = str(status_code) if status_code else "Error"
|
286
|
+
description = status_descriptions.get(
|
287
|
+
status_code,
|
288
|
+
(
|
289
|
+
"Server Error"
|
290
|
+
if status_code and status_code >= 500
|
291
|
+
else "Client Error"
|
299
292
|
),
|
300
|
-
ReportAction.READ,
|
301
293
|
)
|
302
|
-
|
303
|
-
"HTTP
|
304
|
-
|
305
|
-
description=description,
|
294
|
+
self.report_error(
|
295
|
+
f"❗ HTTP {status_code_str} {description}",
|
296
|
+
ReportAction.READ,
|
306
297
|
)
|
298
|
+
return f"HTTP {status_code_str} {description}"
|
299
|
+
except requests.exceptions.ConnectionError as conn_err:
|
300
|
+
self.report_error(
|
301
|
+
"❗ Network Error",
|
302
|
+
ReportAction.READ,
|
303
|
+
)
|
304
|
+
return f"Network Error: Failed to connect to {url}"
|
305
|
+
except requests.exceptions.Timeout as timeout_err:
|
306
|
+
self.report_error(
|
307
|
+
"❗ Timeout Error",
|
308
|
+
ReportAction.READ,
|
309
|
+
)
|
310
|
+
return f"Timeout Error: Request timed out after {timeout} seconds"
|
311
|
+
except requests.exceptions.RequestException as req_err:
|
312
|
+
self.report_error(
|
313
|
+
"❗ Request Error",
|
314
|
+
ReportAction.READ,
|
315
|
+
)
|
316
|
+
return f"Request Error: {str(req_err)}"
|
307
317
|
except Exception as err:
|
308
318
|
self.report_error(
|
309
|
-
|
319
|
+
"❗ Error fetching URL",
|
310
320
|
ReportAction.READ,
|
311
321
|
)
|
312
|
-
return
|
322
|
+
return f"Error: {str(err)}"
|
313
323
|
|
314
324
|
def _extract_and_clean_text(self, html_content: str) -> str:
|
315
325
|
"""Extract and clean text from HTML content."""
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Test file to check HTTP error handling in janito's fetch_url functionality.
|
4
|
+
This test will attempt to fetch URLs that should return various HTTP errors.
|
5
|
+
"""
|
6
|
+
|
7
|
+
import pytest
|
8
|
+
import sys
|
9
|
+
import os
|
10
|
+
|
11
|
+
# Add the janito package to the path
|
12
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "."))
|
13
|
+
|
14
|
+
from janito.tools.adapters.local.fetch_url import FetchUrlTool
|
15
|
+
|
16
|
+
|
17
|
+
class TestHttpErrors:
|
18
|
+
"""Test HTTP error handling in fetch_url functionality."""
|
19
|
+
|
20
|
+
def test_404_error(self):
|
21
|
+
"""Test handling of 404 Not Found errors."""
|
22
|
+
fetcher = FetchUrlTool()
|
23
|
+
|
24
|
+
# Use a URL that should return 404
|
25
|
+
result = fetcher.run("https://httpstat.us/404")
|
26
|
+
|
27
|
+
# Should contain error information
|
28
|
+
assert "HTTP Error" in result or "404" in result or "Not Found" in result
|
29
|
+
print(f"404 test result: {result}")
|
30
|
+
|
31
|
+
def test_403_error(self):
|
32
|
+
"""Test handling of 403 Forbidden errors."""
|
33
|
+
fetcher = FetchUrlTool()
|
34
|
+
|
35
|
+
# Use a URL that should return 403
|
36
|
+
result = fetcher.run("https://httpstat.us/403")
|
37
|
+
|
38
|
+
# Should contain error information
|
39
|
+
assert "HTTP Error" in result or "403" in result or "Forbidden" in result
|
40
|
+
print(f"403 test result: {result}")
|
41
|
+
|
42
|
+
def test_500_error(self):
|
43
|
+
"""Test handling of 500 Internal Server Error."""
|
44
|
+
fetcher = FetchUrlTool()
|
45
|
+
|
46
|
+
# Use a URL that should return 500
|
47
|
+
result = fetcher.run("https://httpstat.us/500")
|
48
|
+
|
49
|
+
# Should contain error information
|
50
|
+
assert "HTTP Error" in result or "500" in result or "Server Error" in result
|
51
|
+
print(f"500 test result: {result}")
|
52
|
+
|
53
|
+
def test_timeout_error(self):
|
54
|
+
"""Test handling of timeout errors."""
|
55
|
+
fetcher = FetchUrlTool()
|
56
|
+
|
57
|
+
# Use a URL that delays response and set short timeout
|
58
|
+
result = fetcher.run("https://httpstat.us/200?sleep=5000", timeout=1)
|
59
|
+
|
60
|
+
# Should contain timeout or error information
|
61
|
+
assert "timeout" in result.lower() or "error" in result.lower()
|
62
|
+
print(f"Timeout test result: {result}")
|
63
|
+
|
64
|
+
def test_invalid_url_error(self):
|
65
|
+
"""Test handling of invalid URLs."""
|
66
|
+
fetcher = FetchUrlTool()
|
67
|
+
|
68
|
+
# Use an invalid URL
|
69
|
+
result = fetcher.run("https://this-domain-does-not-exist-12345.com")
|
70
|
+
|
71
|
+
# Should contain error information
|
72
|
+
assert "error" in result.lower() or "failed" in result.lower()
|
73
|
+
print(f"Invalid URL test result: {result}")
|
74
|
+
|
75
|
+
def test_blocked_url(self):
|
76
|
+
"""Test handling of blocked URLs (whitelist functionality)."""
|
77
|
+
fetcher = FetchUrlTool()
|
78
|
+
|
79
|
+
# Try to fetch a URL that might be blocked
|
80
|
+
# Note: This depends on the current whitelist configuration
|
81
|
+
result = fetcher.run("http://malware-testing.com")
|
82
|
+
|
83
|
+
# Should contain blocked information or proceed normally
|
84
|
+
print(f"Blocked URL test result: {result}")
|
85
|
+
|
86
|
+
def test_successful_request(self):
|
87
|
+
"""Test that successful requests still work."""
|
88
|
+
fetcher = FetchUrlTool()
|
89
|
+
|
90
|
+
# Use a URL that should return 200
|
91
|
+
result = fetcher.run("https://httpstat.us/200")
|
92
|
+
|
93
|
+
# Should contain the expected content
|
94
|
+
assert "200" in result or "OK" in result
|
95
|
+
print(f"Successful request test result: {result[:100]}...")
|
96
|
+
|
97
|
+
|
98
|
+
if __name__ == "__main__":
|
99
|
+
# Run tests when executed directly
|
100
|
+
pytest.main([__file__, "-v", "-s"])
|