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