janito 3.14.1__tar.gz → 3.15.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-3.14.1/janito.egg-info → janito-3.15.0}/PKG-INFO +9 -32
- janito-3.15.0/README.md +26 -0
- {janito-3.14.1 → janito-3.15.0}/docs/deepseek-setup.md +62 -69
- janito-3.15.0/docs/guides/releasing.md +87 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/terminal-shell.md +1 -1
- {janito-3.14.1 → janito-3.15.0}/docs/index.md +1 -0
- {janito-3.14.1 → janito-3.15.0}/docs/models/supported_models.md +2 -5
- {janito-3.14.1 → janito-3.15.0}/docs/supported-providers-models.md +2 -5
- {janito-3.14.1 → janito-3.15.0}/examples/loop_protection_tool_example.py +145 -147
- {janito-3.14.1 → janito-3.15.0}/janito/platform_discovery.py +1 -8
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/adapter.py +3 -2
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/ask_user.py +111 -112
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/copy_file.py +86 -87
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/create_directory.py +111 -112
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/create_file.py +0 -1
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/delete_text_in_file.py +133 -134
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/fetch_url.py +465 -466
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/find_files.py +142 -143
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/markdown_view.py +0 -1
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/move_file.py +130 -131
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/open_html_in_browser.py +50 -51
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/open_url.py +36 -37
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/python_code_run.py +171 -172
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/python_command_run.py +170 -171
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/python_file_run.py +171 -172
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/read_chart.py +258 -259
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/read_files.py +57 -58
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/remove_directory.py +54 -55
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/remove_file.py +57 -58
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/replace_text_in_file.py +275 -276
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/run_bash_command.py +182 -183
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/run_powershell_command.py +217 -218
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/show_image.py +0 -1
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/show_image_grid.py +0 -1
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/view_file.py +0 -1
- {janito-3.14.1 → janito-3.15.0}/janito/providers/alibaba/provider.py +1 -1
- janito-3.15.0/janito/providers/deepseek/model_info.py +16 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/deepseek/provider.py +4 -3
- janito-3.15.0/janito/tools/base.py +19 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_base.py +122 -121
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tools_schema.py +104 -104
- {janito-3.14.1 → janito-3.15.0/janito.egg-info}/PKG-INFO +9 -32
- {janito-3.14.1 → janito-3.15.0}/janito.egg-info/SOURCES.txt +1 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/copy_file.py +86 -87
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/create_file.py +86 -87
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/delete_text_in_file.py +133 -134
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/find_files.py +142 -143
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/move_file.py +130 -131
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/read_files.py +57 -58
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/remove_directory.py +54 -55
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/remove_file.py +57 -58
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/replace_text_in_file.py +269 -270
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/view_file.py +171 -172
- {janito-3.14.1 → janito-3.15.0}/plugins/core/system/tools/run_bash_command.py +182 -183
- {janito-3.14.1 → janito-3.15.0}/plugins/core/system/tools/run_powershell_command.py +217 -218
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/tools/python_code_run.py +171 -172
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/tools/python_command_run.py +170 -171
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/tools/python_file_run.py +171 -172
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/visualization/tools/read_chart.py +258 -259
- {janito-3.14.1 → janito-3.15.0}/plugins/ui/userinterface/tools/ask_user.py +109 -110
- {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/tools/fetch_url.py +0 -1
- {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/tools/open_html_in_browser.py +50 -51
- {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/tools/open_url.py +36 -37
- {janito-3.14.1 → janito-3.15.0}/tools/release.py +246 -187
- janito-3.14.1/README.md +0 -49
- janito-3.14.1/janito/providers/deepseek/model_info.py +0 -37
- janito-3.14.1/janito/tools/base.py +0 -12
- {janito-3.14.1 → janito-3.15.0}/.codespellrc +0 -0
- {janito-3.14.1 → janito-3.15.0}/.gitattributes +0 -0
- {janito-3.14.1 → janito-3.15.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-3.14.1 → janito-3.15.0}/.gitignore +0 -0
- {janito-3.14.1 → janito-3.15.0}/.pre-commit-config.yaml +0 -0
- {janito-3.14.1 → janito-3.15.0}/.secrets.baseline +0 -0
- {janito-3.14.1 → janito-3.15.0}/.vscode/settings.json +0 -0
- {janito-3.14.1 → janito-3.15.0}/LICENSE +0 -0
- {janito-3.14.1 → janito-3.15.0}/MARKET_ANALYST_README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/README-dev.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/RELEASE_COMPARISON.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/UPDATING_DOCS.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/adding_mcp.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/alibaba-qwen3.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/cow.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/detailed_cow.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/CHANGELOG.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/DIV.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/Interfaces.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/PROFILES.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/about/costs.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/about/vs-webchats.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/about/why.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/agent/agent-lifecycle.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/agent/tools-workflow-lifecycle.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/alibaba-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/alternatives.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/anthropic-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/cerebras-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/cli.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/concepts/analysis-style.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/concepts/index.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/configuration.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/driver-flow.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/driver-request-cancellation.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/drivers/events.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/drivers.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/event-bus.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/google-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/configuration.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/developing.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/disabled-tools.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/installation.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/market-data-sources.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/profiles.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/prompting/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/security-commands.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/stock-market-guide.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/url-whitelist.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/using.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/guides/using_tools.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/ibm-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/llm-drivers.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/meta/quality-checks.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/mistral-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/moonshot-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/openai-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/overrides/partials/copyright.html +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/api-reference.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/architecture.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/system.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/configuration.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/examples/advanced.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/examples/basic.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/examples/intermediate.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/plugin-development.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/plugin-resources.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/publishing.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/remote-plugins.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/plugins/testing.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/provider-platform-access.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/providers.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/public-sources.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/reference/api.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/reference/azure-openai.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/reference/cli-options.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/reference/message-handler-model.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/security.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools/search-text.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools/show-image-grid.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools/show-image.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools-index.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools-natural-results.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools-precision.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/tools.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/docs/z-ai-setup.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/examples/loop_protection_example.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/get_nasdaq_top.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/ibm-logo.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/__main__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/_version.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/agent/setup_agent.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/agent_events.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/session.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/clear_context.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/interactive.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_plugins.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/ping_providers.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/console.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/event_logger.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/getters.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/runner.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/setters.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/core/unsetters.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/main.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/main_cli.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/prompt_core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/prompt_handler.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/prompt_setup.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/cli/verbose_output.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/config_manager.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/conversation_history.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/dir_walk_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/driver_events.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/cerebras/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/openai/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/openai/driver.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/drivers/zai/driver.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/event_bus/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/event_bus/bus.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/event_bus/event.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/event_bus/handler.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/exceptions.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/formatting.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/formatting_token.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/gitignore_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/hello.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/i18n/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/i18n/it.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/i18n/messages.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/i18n/pt.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/agent.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/auth.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/auth_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/driver.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/driver_config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/driver_input.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/message_parts.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/model.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/llm/response_cache.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/perf_singleton.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/performance_collector.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/auto_loader.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/auto_loader_fixed.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/base.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/builtin.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/core/filemanager/tools/validate_file_syntax/txt_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/core_adapter.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/core_loader.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/core_loader_fixed.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/discovery.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/discovery_core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/manager.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/clear_context.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/java_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/markdown_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/python_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/get_file_outline/search_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/match_lines.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/pattern_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/search_text/traverse_directory.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/css_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/html_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/js_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/json_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/python_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/txt_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/plugins/tools/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/provider_config.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/provider_registry.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/cerebras/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/cerebras/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/cerebras/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/google/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/google/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/google/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/ibm/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/mistral/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/mistral/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/mistral/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/moonshot/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/moonshot/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/moonshot/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/registry.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/model_info.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/provider.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/regions/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/regions/cli.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/regions/geo_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/regions/provider_regions.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/report_events.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/shell.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tests/test_tool_adapter_case_insensitive.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/README.md +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/disabled_tools.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/function_adapter.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/inspect_registry.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/loop_protection.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/loop_protection_decorator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/path_security.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/path_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/permissions.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/permissions_parse.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_events.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tool_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/tools_adapter.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/tools/url_whitelist.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito/utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito.egg-info/requires.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/janito.egg-info/top_level.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/market_prompt_fix.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/mkdocs.log +0 -0
- {janito-3.14.1 → janito-3.15.0}/mkdocs.yml +0 -0
- {janito-3.14.1 → janito-3.15.0}/mkdocs_hooks.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/penguin_ascii.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/core.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/plugin.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/tools/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/tools/show_image.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/imagedisplay/tools/show_image_grid.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/core/system/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/pythondev/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/dev/visualization/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/example_plugin.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/ui/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/ui/userinterface/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/web/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/plugins/web/webtools/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/pyproject.toml +0 -0
- {janito-3.14.1 → janito-3.15.0}/requirements-dev.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/requirements.txt +0 -0
- {janito-3.14.1 → janito-3.15.0}/setup.cfg +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/local/get_file_outline/test_core_outline.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_file/__init__.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_file/read_file.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_file/test_read_file.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/local/test_read_files.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_models.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_providers.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_cli_list_providers_moonshot.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_cli_version.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_disabled_tools.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_plugin_system.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_provider_alibaba.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_provider_cerebras.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tests/test_provider_moonshot.py +0 -0
- {janito-3.14.1 → janito-3.15.0}/tox.ini +0 -0
- {janito-3.14.1 → janito-3.15.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: janito
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.15.0
|
4
4
|
Summary: A new Python package called janito.
|
5
5
|
Author-email: João Pinto <janito@ikignosis.org>
|
6
6
|
Project-URL: Homepage, https://github.com/ikignosis/janito
|
@@ -40,7 +40,7 @@ Dynamic: license-file
|
|
40
40
|
$ janito --help
|
41
41
|
Usage: janito <command>
|
42
42
|
|
43
|
-
|
43
|
+
A command-line tool for managing your projects.
|
44
44
|
|
45
45
|
Run "janito <command> --help" for more information on a command.
|
46
46
|
```
|
@@ -48,38 +48,15 @@ Run "janito <command> --help" for more information on a command.
|
|
48
48
|
## Setup
|
49
49
|
|
50
50
|
```bash
|
51
|
-
#
|
52
|
-
|
51
|
+
# Install using pip
|
52
|
+
pip install janito
|
53
53
|
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
|
59
|
-
sudo apt-get update
|
60
|
-
sudo apt-get install janito
|
61
|
-
|
62
|
-
# Fedora/RHEL
|
63
|
-
cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
|
64
|
-
[repo.nine.ch]
|
65
|
-
name=Nine Repo
|
66
|
-
baseurl=https://repo.nine.ch/yum/
|
67
|
-
enabled=1
|
68
|
-
gpgcheck=0
|
69
|
-
EOF
|
70
|
-
dnf install janito
|
71
|
-
|
72
|
-
# Arch
|
73
|
-
# Install yay: https://github.com/Jguer/yay#binary
|
74
|
-
yay --version
|
75
|
-
yay -S janito-bin
|
54
|
+
# Or install from source
|
55
|
+
git clone https://github.com/yourusername/janito.git
|
56
|
+
cd janito
|
57
|
+
pip install -e .
|
76
58
|
```
|
77
59
|
|
78
|
-
For Windows users, janito is also built for arm64 and amd64. You can download the
|
79
|
-
latest exe file from the [releases](https://github.com/ninech/janito/releases) and
|
80
|
-
install it.
|
81
|
-
|
82
60
|
## Getting started
|
83
61
|
|
84
|
-
*
|
85
|
-
* run `janito --help` to get a list of all available commands
|
62
|
+
* Run `janito --help` to get a list of all available commands
|
janito-3.15.0/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Janito
|
2
|
+
|
3
|
+
```bash
|
4
|
+
$ janito --help
|
5
|
+
Usage: janito <command>
|
6
|
+
|
7
|
+
A command-line tool for managing your projects.
|
8
|
+
|
9
|
+
Run "janito <command> --help" for more information on a command.
|
10
|
+
```
|
11
|
+
|
12
|
+
## Setup
|
13
|
+
|
14
|
+
```bash
|
15
|
+
# Install using pip
|
16
|
+
pip install janito
|
17
|
+
|
18
|
+
# Or install from source
|
19
|
+
git clone https://github.com/yourusername/janito.git
|
20
|
+
cd janito
|
21
|
+
pip install -e .
|
22
|
+
```
|
23
|
+
|
24
|
+
## Getting started
|
25
|
+
|
26
|
+
* Run `janito --help` to get a list of all available commands
|
@@ -1,69 +1,62 @@
|
|
1
|
-
# Configuring Janito for DeepSeek
|
2
|
-
|
3
|
-
Janito supports DeepSeek as an LLM provider. This guide explains how to configure Janito to use DeepSeek models.
|
4
|
-
|
5
|
-
## 1. Obtain a DeepSeek API Key
|
6
|
-
|
7
|
-
- Sign up or log in at [DeepSeek](https://deepseek.com/) to get your API key.
|
8
|
-
|
9
|
-
## 2. Set Your DeepSeek API Key in Janito
|
10
|
-
|
11
|
-
You must specify both the API key and the provider name when configuring Janito for DeepSeek:
|
12
|
-
|
13
|
-
```bash
|
14
|
-
janito --set-api-key YOUR_DEEPSEEK_API_KEY -p deepseek
|
15
|
-
```
|
16
|
-
|
17
|
-
Replace `YOUR_DEEPSEEK_API_KEY` with your actual DeepSeek API key.
|
18
|
-
|
19
|
-
## 3. Select DeepSeek as the Provider
|
20
|
-
|
21
|
-
You can set DeepSeek as your default provider:
|
22
|
-
|
23
|
-
```bash
|
24
|
-
janito --set provider=deepseek
|
25
|
-
```
|
26
|
-
|
27
|
-
Or specify it per command:
|
28
|
-
|
29
|
-
```bash
|
30
|
-
janito -p deepseek "Your prompt here"
|
31
|
-
```
|
32
|
-
|
33
|
-
## 4. Choose a DeepSeek Model
|
34
|
-
|
35
|
-
Janito supports the following DeepSeek models:
|
36
|
-
|
37
|
-
- `deepseek-chat` (default) - General purpose chat model (
|
38
|
-
- `deepseek-reasoner` - Specialized for complex reasoning tasks (
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
janito --
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
- Ensure your API key is correct and active.
|
64
|
-
- If you encounter issues, use `janito --list-providers` to verify DeepSeek is available.
|
65
|
-
- For more help, see the main [Configuration Guide](guides/configuration.md) or run `janito --help`.
|
66
|
-
|
67
|
-
---
|
68
|
-
|
69
|
-
For more details on supported models and features, see [Supported Providers & Models](supported-providers-models.md).
|
1
|
+
# Configuring Janito for DeepSeek
|
2
|
+
|
3
|
+
Janito supports DeepSeek as an LLM provider. This guide explains how to configure Janito to use DeepSeek models.
|
4
|
+
|
5
|
+
## 1. Obtain a DeepSeek API Key
|
6
|
+
|
7
|
+
- Sign up or log in at [DeepSeek](https://deepseek.com/) to get your API key.
|
8
|
+
|
9
|
+
## 2. Set Your DeepSeek API Key in Janito
|
10
|
+
|
11
|
+
You must specify both the API key and the provider name when configuring Janito for DeepSeek:
|
12
|
+
|
13
|
+
```bash
|
14
|
+
janito --set-api-key YOUR_DEEPSEEK_API_KEY -p deepseek
|
15
|
+
```
|
16
|
+
|
17
|
+
Replace `YOUR_DEEPSEEK_API_KEY` with your actual DeepSeek API key.
|
18
|
+
|
19
|
+
## 3. Select DeepSeek as the Provider
|
20
|
+
|
21
|
+
You can set DeepSeek as your default provider:
|
22
|
+
|
23
|
+
```bash
|
24
|
+
janito --set provider=deepseek
|
25
|
+
```
|
26
|
+
|
27
|
+
Or specify it per command:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
janito -p deepseek "Your prompt here"
|
31
|
+
```
|
32
|
+
|
33
|
+
## 4. Choose a DeepSeek Model
|
34
|
+
|
35
|
+
Janito supports the following DeepSeek models:
|
36
|
+
|
37
|
+
- `deepseek-chat` (default) - General purpose chat model (128K context)
|
38
|
+
- `deepseek-reasoner` - Specialized for complex reasoning tasks (128K context)
|
39
|
+
|
40
|
+
To select a model:
|
41
|
+
|
42
|
+
```bash
|
43
|
+
janito -p deepseek -m deepseek-reasoner "Your prompt here"
|
44
|
+
```
|
45
|
+
|
46
|
+
## 5. Verify Your Configuration
|
47
|
+
|
48
|
+
Show your current configuration (the config file path will be shown at the top):
|
49
|
+
|
50
|
+
```bash
|
51
|
+
janito --show-config
|
52
|
+
```
|
53
|
+
|
54
|
+
## 6. Troubleshooting
|
55
|
+
|
56
|
+
- Ensure your API key is correct and active.
|
57
|
+
- If you encounter issues, use `janito --list-providers` to verify DeepSeek is available.
|
58
|
+
- For more help, see the main [Configuration Guide](guides/configuration.md) or run `janito --help`.
|
59
|
+
|
60
|
+
---
|
61
|
+
|
62
|
+
For more details on supported models and features, see [Supported Providers & Models](supported-providers-models.md).
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Releasing Janito
|
2
|
+
|
3
|
+
This guide explains the release process for Janito, including how to create new releases and what the automated release script does.
|
4
|
+
|
5
|
+
## Prerequisites
|
6
|
+
|
7
|
+
Before you can create a release, you need to:
|
8
|
+
|
9
|
+
1. Set up a GitHub Personal Access Token (PAT):
|
10
|
+
|
11
|
+
- Go to GitHub Settings → Developer settings → Personal access tokens
|
12
|
+
- Generate a new token with `repo` scope
|
13
|
+
- Store it securely
|
14
|
+
|
15
|
+
2. Set the GITHUB_TOKEN environment variable:
|
16
|
+
```bash
|
17
|
+
export GITHUB_TOKEN="your-token-here"
|
18
|
+
```
|
19
|
+
|
20
|
+
3. Install required Python packages:
|
21
|
+
```bash
|
22
|
+
pip install requests twine build
|
23
|
+
```
|
24
|
+
|
25
|
+
## Release Process
|
26
|
+
|
27
|
+
The release process is automated through the `tools/release.py` script. Here's how it works:
|
28
|
+
|
29
|
+
### 1. Create a Git Tag
|
30
|
+
|
31
|
+
First, create a new git tag following semantic versioning (vX.Y.Z):
|
32
|
+
|
33
|
+
```bash
|
34
|
+
# Check current latest tag
|
35
|
+
git tag -l "v*" --sort=-v:refname | head -n 1
|
36
|
+
|
37
|
+
# Create new tag (increment patch version)
|
38
|
+
git tag vX.Y.Z
|
39
|
+
|
40
|
+
# Push the tag to remote
|
41
|
+
git push origin vX.Y.Z
|
42
|
+
```
|
43
|
+
|
44
|
+
### 2. Run the Release Script
|
45
|
+
|
46
|
+
Execute the release script:
|
47
|
+
|
48
|
+
```bash
|
49
|
+
python tools/release.py
|
50
|
+
```
|
51
|
+
|
52
|
+
The script will:
|
53
|
+
|
54
|
+
- Verify you have the required tools installed
|
55
|
+
- Check that there are no uncommitted changes
|
56
|
+
- Get the version from the latest git tag
|
57
|
+
- Verify the tag points to the current commit
|
58
|
+
- Build the package
|
59
|
+
- Upload to PyPI
|
60
|
+
- Create a GitHub release
|
61
|
+
|
62
|
+
### 3. What the GitHub Release Includes
|
63
|
+
|
64
|
+
The automated GitHub release will:
|
65
|
+
|
66
|
+
- Use the tag name as the release title
|
67
|
+
- Include a basic changelog message linking to CHANGELOG.md
|
68
|
+
- Be marked as a production release (not draft or prerelease)
|
69
|
+
|
70
|
+
## Build Only Mode
|
71
|
+
|
72
|
+
If you want to build the package without uploading it, use:
|
73
|
+
|
74
|
+
```bash
|
75
|
+
python tools/release.py --build-only
|
76
|
+
```
|
77
|
+
|
78
|
+
This is useful for testing the build process locally.
|
79
|
+
|
80
|
+
## Troubleshooting
|
81
|
+
|
82
|
+
Common issues and solutions:
|
83
|
+
|
84
|
+
- **GITHUB_TOKEN not set**: Make sure you've exported the environment variable
|
85
|
+
- **Tag doesn't point to current commit**: Make sure you're on the correct commit before tagging
|
86
|
+
- **Version already exists on PyPI**: Increment the version number in your tag
|
87
|
+
- **Uncommitted changes**: Commit or stash your changes before releasing
|
@@ -10,7 +10,7 @@ Janito works best with modern Unicode-capable terminals. **Windows Terminal is t
|
|
10
10
|
|
11
11
|
Janito includes built-in support for executing shell commands across platforms:
|
12
12
|
|
13
|
-
- **Bash commands** (`run_bash_command`) - Execute bash shell commands on Linux, macOS, and Windows (via
|
13
|
+
- **Bash commands** (`run_bash_command`) - Execute bash shell commands on Linux, macOS, and Windows (via Git Bash)
|
14
14
|
- **PowerShell commands** (`run_powershell_command`) - Execute PowerShell commands on Windows and cross-platform (requires PowerShell Core)
|
15
15
|
|
16
16
|
These tools can be enabled/disabled via configuration and provide live output streaming, timeout handling, and security controls.
|
@@ -59,5 +59,6 @@ Explore our comprehensive documentation:
|
|
59
59
|
- [Supported Models](models/supported_models.md)
|
60
60
|
- [Tools & Plugins](tools.md)
|
61
61
|
- [Developer Guide](guides/developing.md)
|
62
|
+
- [Releasing Guide](guides/releasing.md)
|
62
63
|
|
63
64
|
> **Note**: The list of supported models is automatically generated from the codebase. When new models are added, this documentation updates automatically.*
|
@@ -92,11 +92,8 @@ This document lists all supported large language models (LLMs) across providers,
|
|
92
92
|
|
93
93
|
| Model Name | Context Window | Max Tokens | Description |
|
94
94
|
|------------|----------------|------------|-------------|
|
95
|
-
| `deepseek-chat` |
|
96
|
-
| `deepseek-reasoner` |
|
97
|
-
| `deepseek-v3.1` | 131,072 | 4,096 | DeepSeek V3.1 Model (128K context, OpenAI-compatible) |
|
98
|
-
| `deepseek-v3.1-base` | 131,072 | 4,096 | DeepSeek V3.1 Base Model (128K context, OpenAI-compatible) |
|
99
|
-
| `deepseek-r1` | 131,072 | 4,096 | DeepSeek R1 Model (128K context, OpenAI-compatible) |
|
95
|
+
| `deepseek-chat` | 131,072 | 4,096 | DeepSeek Chat Model (OpenAI-compatible) |
|
96
|
+
| `deepseek-reasoner` | 131,072 | 32,768 | DeepSeek Reasoner Model (OpenAI-compatible) |
|
100
97
|
|
101
98
|
## Moonshot
|
102
99
|
|
@@ -41,11 +41,8 @@ This page lists the supported providers and their available models, organized by
|
|
41
41
|
|
42
42
|
### DeepSeek
|
43
43
|
|
44
|
-
- **DeepSeek Chat** (default) - General purpose chat model (
|
45
|
-
- **DeepSeek Reasoner** - Specialized for complex reasoning tasks (
|
46
|
-
- **DeepSeek V3.1** - Latest V3.1 model with 128K context window
|
47
|
-
- **DeepSeek V3.1 Base** - Base V3.1 model with 128K context window
|
48
|
-
- **DeepSeek R1** - R1 model with 128K context window (reasoning-focused)
|
44
|
+
- **DeepSeek Chat** (default) - General purpose chat model (128K context)
|
45
|
+
- **DeepSeek Reasoner** - Specialized for complex reasoning tasks (128K context)
|
49
46
|
|
50
47
|
### Mistral
|
51
48
|
|
@@ -1,147 +1,145 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
Example showing how to add loop protection to a custom tool.
|
4
|
-
|
5
|
-
This example demonstrates how to create a custom tool with loop protection
|
6
|
-
using the @protect_against_loops decorator.
|
7
|
-
"""
|
8
|
-
|
9
|
-
from janito.tools.tool_base import ToolBase, ToolPermissions
|
10
|
-
from janito.tools.loop_protection_decorator import protect_against_loops
|
11
|
-
from janito.plugins.tools.local.adapter import register_local_tool
|
12
|
-
|
13
|
-
|
14
|
-
@register_local_tool
|
15
|
-
class CustomFileAnalyzerTool(ToolBase):
|
16
|
-
"""
|
17
|
-
Example custom tool that analyzes files with loop protection.
|
18
|
-
|
19
|
-
This tool demonstrates how to use the @protect_against_loops decorator
|
20
|
-
to prevent excessive operations on the same file.
|
21
|
-
"""
|
22
|
-
|
23
|
-
permissions = ToolPermissions(read=True)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
""
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
result
|
51
|
-
result += f"
|
52
|
-
result += f"
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
result
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
lines
|
106
|
-
|
107
|
-
results.append(f"{path}: {
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
except
|
112
|
-
results.append(f"{path}:
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
"
|
122
|
-
print("
|
123
|
-
print("
|
124
|
-
print("
|
125
|
-
print(
|
126
|
-
|
127
|
-
print()
|
128
|
-
|
129
|
-
print("
|
130
|
-
print("
|
131
|
-
print(
|
132
|
-
|
133
|
-
print()
|
134
|
-
|
135
|
-
print("
|
136
|
-
print("
|
137
|
-
print(
|
138
|
-
print("
|
139
|
-
print()
|
140
|
-
print("
|
141
|
-
print("-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
if __name__ == "__main__":
|
147
|
-
usage_examples()
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Example showing how to add loop protection to a custom tool.
|
4
|
+
|
5
|
+
This example demonstrates how to create a custom tool with loop protection
|
6
|
+
using the @protect_against_loops decorator.
|
7
|
+
"""
|
8
|
+
|
9
|
+
from janito.tools.tool_base import ToolBase, ToolPermissions
|
10
|
+
from janito.tools.loop_protection_decorator import protect_against_loops
|
11
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
12
|
+
|
13
|
+
|
14
|
+
@register_local_tool
|
15
|
+
class CustomFileAnalyzerTool(ToolBase):
|
16
|
+
"""
|
17
|
+
Example custom tool that analyzes files with loop protection.
|
18
|
+
|
19
|
+
This tool demonstrates how to use the @protect_against_loops decorator
|
20
|
+
to prevent excessive operations on the same file.
|
21
|
+
"""
|
22
|
+
|
23
|
+
permissions = ToolPermissions(read=True)
|
24
|
+
|
25
|
+
@protect_against_loops(max_calls=5, time_window=10.0)
|
26
|
+
def run(self, path: str, analysis_type: str = "basic") -> str:
|
27
|
+
"""
|
28
|
+
Analyze a file with the specified analysis type.
|
29
|
+
|
30
|
+
Args:
|
31
|
+
path (str): Path to the file to analyze
|
32
|
+
analysis_type (str): Type of analysis to perform ("basic" or "detailed")
|
33
|
+
|
34
|
+
Returns:
|
35
|
+
str: Analysis results
|
36
|
+
"""
|
37
|
+
self.report_action(f"Analyzing '{path}' with {analysis_type} analysis")
|
38
|
+
|
39
|
+
try:
|
40
|
+
# Simulate file analysis
|
41
|
+
with open(path, "r", encoding="utf-8") as f:
|
42
|
+
content = f.read()
|
43
|
+
|
44
|
+
# Perform analysis based on type
|
45
|
+
if analysis_type == "basic":
|
46
|
+
lines = len(content.splitlines())
|
47
|
+
words = len(content.split())
|
48
|
+
chars = len(content)
|
49
|
+
result = f"Basic analysis of {path}:\n"
|
50
|
+
result += f" Lines: {lines}\n"
|
51
|
+
result += f" Words: {words}\n"
|
52
|
+
result += f" Characters: {chars}\n"
|
53
|
+
else:
|
54
|
+
# Detailed analysis could include more metrics
|
55
|
+
result = f"Detailed analysis of {path}:\n"
|
56
|
+
result += f" Content preview: {content[:100]}...\n"
|
57
|
+
|
58
|
+
self.report_success(f"Analysis of {path} completed")
|
59
|
+
return result
|
60
|
+
|
61
|
+
except FileNotFoundError:
|
62
|
+
self.report_error(f"File not found: {path}")
|
63
|
+
return f"Error: File '{path}' not found"
|
64
|
+
except Exception as e:
|
65
|
+
self.report_error(f"Error analyzing {path}: {e}")
|
66
|
+
return f"Error analyzing file: {e}"
|
67
|
+
|
68
|
+
|
69
|
+
@register_local_tool
|
70
|
+
class BatchFileProcessorTool(ToolBase):
|
71
|
+
"""
|
72
|
+
Example tool that processes multiple files with loop protection.
|
73
|
+
|
74
|
+
This tool demonstrates how to use the @protect_against_loops decorator
|
75
|
+
with tools that operate on multiple files.
|
76
|
+
"""
|
77
|
+
|
78
|
+
permissions = ToolPermissions(read=True)
|
79
|
+
|
80
|
+
@protect_against_loops(max_calls=5, time_window=10.0)
|
81
|
+
def run(self, file_paths: list, operation: str = "count") -> str:
|
82
|
+
"""
|
83
|
+
Process multiple files with the specified operation.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
file_paths (list): List of file paths to process
|
87
|
+
operation (str): Operation to perform ("count", "uppercase", etc.)
|
88
|
+
|
89
|
+
Returns:
|
90
|
+
str: Processing results
|
91
|
+
"""
|
92
|
+
self.report_action(
|
93
|
+
f"Processing {len(file_paths)} files with {operation} operation"
|
94
|
+
)
|
95
|
+
|
96
|
+
results = []
|
97
|
+
for path in file_paths:
|
98
|
+
try:
|
99
|
+
with open(path, "r", encoding="utf-8") as f:
|
100
|
+
content = f.read()
|
101
|
+
|
102
|
+
if operation == "count":
|
103
|
+
lines = len(content.splitlines())
|
104
|
+
words = len(content.split())
|
105
|
+
results.append(f"{path}: {lines} lines, {words} words")
|
106
|
+
elif operation == "uppercase":
|
107
|
+
results.append(f"{path}: {content.upper()}")
|
108
|
+
|
109
|
+
except FileNotFoundError:
|
110
|
+
results.append(f"{path}: File not found")
|
111
|
+
except Exception as e:
|
112
|
+
results.append(f"{path}: Error - {e}")
|
113
|
+
|
114
|
+
self.report_success(f"Processed {len(file_paths)} files")
|
115
|
+
return "\n".join(results)
|
116
|
+
|
117
|
+
|
118
|
+
def usage_examples():
|
119
|
+
"""Show how to use the custom tools with loop protection."""
|
120
|
+
print("=== Custom Tool with Loop Protection Examples ===\n")
|
121
|
+
print("Example 1: CustomFileAnalyzerTool")
|
122
|
+
print(" @protect_against_loops()")
|
123
|
+
print(" def run(self, path: str, analysis_type: str = 'basic') -> str:")
|
124
|
+
print(" # Implementation here")
|
125
|
+
print()
|
126
|
+
|
127
|
+
print("Example 2: BatchFileProcessorTool")
|
128
|
+
print(" @protect_against_loops('file_paths')")
|
129
|
+
print(" def run(self, file_paths: list, operation: str = 'count') -> str:")
|
130
|
+
print(" # Implementation here")
|
131
|
+
print()
|
132
|
+
|
133
|
+
print("To use these tools in your application:")
|
134
|
+
print("1. Import the tool classes")
|
135
|
+
print("2. Register them with the tools adapter")
|
136
|
+
print("3. Call them like any other tool")
|
137
|
+
print()
|
138
|
+
print("The loop protection will automatically prevent:")
|
139
|
+
print("- More than 5 operations on the same file within 10 seconds")
|
140
|
+
print("- Excessive resource consumption from repeated file access")
|
141
|
+
print("- Potential infinite loops in tool execution")
|
142
|
+
|
143
|
+
|
144
|
+
if __name__ == "__main__":
|
145
|
+
usage_examples()
|