janito 2.26.0__tar.gz → 2.27.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.26.0 → janito-2.27.0}/PKG-INFO +19 -1
- {janito-2.26.0 → janito-2.27.0}/README-dev.md +26 -0
- {janito-2.26.0 → janito-2.27.0}/README.md +18 -0
- {janito-2.26.0 → janito-2.27.0}/docs/changelogs/CHANGELOG.md +30 -0
- janito-2.27.0/docs/changelogs/CHANGELOG_2.27.0.md +64 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/single-shot-terminal.md +12 -0
- {janito-2.26.0 → janito-2.27.0}/docs/reference/cli-options.md +23 -3
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/show_config.py +24 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/main_cli.py +13 -1
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/fetch_url.py +80 -5
- {janito-2.26.0 → janito-2.27.0}/janito.egg-info/PKG-INFO +19 -1
- {janito-2.26.0 → janito-2.27.0}/janito.egg-info/SOURCES.txt +1 -0
- {janito-2.26.0 → janito-2.27.0}/.codespellrc +0 -0
- {janito-2.26.0 → janito-2.27.0}/.gitattributes +0 -0
- {janito-2.26.0 → janito-2.27.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-2.26.0 → janito-2.27.0}/.gitignore +0 -0
- {janito-2.26.0 → janito-2.27.0}/.pre-commit-config.yaml +0 -0
- {janito-2.26.0 → janito-2.27.0}/.secrets.baseline +0 -0
- {janito-2.26.0 → janito-2.27.0}/.vscode/settings.json +0 -0
- {janito-2.26.0 → janito-2.27.0}/LICENSE +0 -0
- {janito-2.26.0 → janito-2.27.0}/MARKET_ANALYST_README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/README-PLUGINS.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/RELEASE_COMPARISON.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/UPDATING_DOCS.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/adding_mcp.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/DIV.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/Interfaces.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/about/costs.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/about/vs-webchats.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/about/why.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/alibaba-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/alternatives.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/cerebras-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/concepts/analysis-style.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/concepts/index.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/deepseek-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/driver-flow.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/driver-request-cancellation.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/drivers/events.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/drivers.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/event-bus.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/configuration.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/developing.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/disabled-tools.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/installation.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/market-data-sources.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/plugins.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/profiles.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/prompting/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/read-chart-examples.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/remote-plugins.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/security-commands.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/stock-market-guide.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/terminal-shell.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/tools-developer-guide.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/url-whitelist.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/using.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/guides/using_tools.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/ibm-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/index.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/llm-drivers.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/meta/quality-checks.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/mistral-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/moonshotai-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/openai-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/overrides/partials/copyright.html +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/plugins/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/provider-platform-access.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/README-pt.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/configuracao.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/exemplos.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/faq-pt.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/ferramentas.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/guia-uso.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/instalacao.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/pt/perfis.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/public-sources.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/reference/api.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/reference/azure-openai.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/reference/message-handler-model.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/security.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/supported-providers-models.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/tools/search-text.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/tools-index.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/tools-natural-results.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/tools-precision.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/docs/z-ai-setup.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/examples/loop_protection_example.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/examples/loop_protection_tool_example.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/get_nasdaq_top.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/ibm-logo.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/__main__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/_version.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/agent/setup_agent.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/session.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/session_profile_select.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_plugins.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/list_tools.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/ping_providers.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/config.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/console.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/event_logger.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/getters.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/runner.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/setters.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/core/unsetters.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/main.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/prompt_core.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/prompt_handler.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/prompt_setup.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/rich_terminal_reporter.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/cli/verbose_output.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/config.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/config_manager.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/conversation_history.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/dir_walk_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/driver_events.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/cerebras/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/openai/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/openai/driver.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/drivers/zai/driver.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/event_bus/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/event_bus/bus.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/event_bus/event.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/event_bus/handler.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/exceptions.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/formatting.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/formatting_token.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/gitignore_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/i18n/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/i18n/it.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/i18n/messages.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/i18n/pt.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/agent.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/auth.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/auth_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/driver.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/driver_config.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/driver_input.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/message_parts.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/model.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/llm/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/mkdocs.yml +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/perf_singleton.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/performance_collector.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/platform_discovery.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/plugins/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/plugins/base.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/plugins/config.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/plugins/discovery.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/plugins/manager.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/provider_config.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/provider_registry.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/alibaba/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/cerebras/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/cerebras/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/cerebras/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/deepseek/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/google/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/google/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/google/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/ibm/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/ibm/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/ibm/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/ibm/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/mistral/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/mistral/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/mistral/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/moonshotai/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/moonshotai/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/moonshotai/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/openai/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/openai/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/openai/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/registry.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/zai/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/zai/model_info.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/zai/provider.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/regions/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/regions/cli.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/regions/geo_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/regions/provider_regions.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/report_events.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/shell.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/README.md +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/adapter.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/ask_user.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/copy_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/create_directory.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/create_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/delete_text_in_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/find_files.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/core.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/java_outline.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/markdown_outline.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/python_outline.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/get_file_outline/search_outline.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/move_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/open_html_in_browser.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/open_url.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/python_code_run.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/python_command_run.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/python_file_run.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/read_chart.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/read_files.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/remove_directory.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/remove_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/replace_text_in_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/run_bash_command.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/run_powershell_command.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/core.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/match_lines.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/pattern_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/search_text/traverse_directory.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/core.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/css_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/html_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/js_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/json_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/python_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/adapters/local/view_file.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/disabled_tools.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/inspect_registry.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/loop_protection.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/loop_protection_decorator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/path_security.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/path_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/permissions.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/permissions_parse.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tool_base.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tool_events.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tool_utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tools_adapter.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/tools_schema.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/tools/url_whitelist.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito/utils.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito-coder/janito_coder/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito-coder/janito_coder/plugins/__init__.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito-coder/janito_coder/plugins/code_navigator.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito-coder/janito_coder/plugins/git_analyzer.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito-coder/pyproject.toml +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito.egg-info/requires.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/janito.egg-info/top_level.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/market_prompt_fix.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/market_test.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/mkdocs.yml +0 -0
- {janito-2.26.0 → janito-2.27.0}/mkdocs_hooks.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/plugins/example_plugin.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/pyproject.toml +0 -0
- {janito-2.26.0 → janito-2.27.0}/pytest.ini +0 -0
- {janito-2.26.0 → janito-2.27.0}/requirements-dev.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/requirements.txt +0 -0
- {janito-2.26.0 → janito-2.27.0}/setup.cfg +0 -0
- {janito-2.26.0 → janito-2.27.0}/test_example.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/test_key_field_behavior.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/test_key_field_protection.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/test_loop_protection_return.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/test_market_analyst.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/adapters/local/get_file_outline/test_core_outline.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/adapters/local/test_read_files.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_cli_list_models.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_cli_list_providers.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_cli_list_providers_moonshotai.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_cli_version.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_disabled_tools.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_plugin_system.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_provider_alibaba.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_provider_cerebras.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tests/test_provider_moonshotai.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tools/release.py +0 -0
- {janito-2.26.0 → janito-2.27.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: janito
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.27.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
|
@@ -187,7 +187,25 @@ janito -r -w "Read and update this file: ..."
|
|
187
187
|
To enable all permissions (read, write, execute):
|
188
188
|
|
189
189
|
```bash
|
190
|
+
# Using individual flags
|
190
191
|
janito -r -w -x "Run this code: print('Hello, world!')"
|
192
|
+
|
193
|
+
# Using the convenient /rwx prefix (single-shot mode)
|
194
|
+
janito /rwx "Run this code: print('Hello, world!')"
|
195
|
+
```
|
196
|
+
|
197
|
+
#### One-Shot Mode
|
198
|
+
For quick tasks without entering interactive mode, provide your prompt directly:
|
199
|
+
|
200
|
+
```bash
|
201
|
+
# Basic one-shot
|
202
|
+
janito "What are the key classes in this project?"
|
203
|
+
|
204
|
+
# One-shot with all permissions enabled
|
205
|
+
janito /rwx "Create a Python script and run it"
|
206
|
+
|
207
|
+
# One-shot with specific permissions
|
208
|
+
janito -r -w "Read this file and create a summary"
|
191
209
|
```
|
192
210
|
|
193
211
|
> **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
|
@@ -36,6 +36,32 @@ This document provides guidelines and instructions for developers contributing t
|
|
36
36
|
pip install -e .
|
37
37
|
```
|
38
38
|
|
39
|
+
## Release Process
|
40
|
+
|
41
|
+
The project includes an automated release script at `tools/release.py` that handles the complete release process:
|
42
|
+
|
43
|
+
- **Full release** (build + upload to PyPI):
|
44
|
+
```sh
|
45
|
+
python tools/release.py
|
46
|
+
```
|
47
|
+
|
48
|
+
- **Build only** (skip PyPI upload):
|
49
|
+
```sh
|
50
|
+
python tools/release.py --build-only
|
51
|
+
```
|
52
|
+
|
53
|
+
The release script will:
|
54
|
+
1. Check for uncommitted changes
|
55
|
+
2. Verify the latest git tag version
|
56
|
+
3. Check PyPI for existing versions
|
57
|
+
4. Build the package using `python -m build`
|
58
|
+
5. Upload to PyPI using `twine upload`
|
59
|
+
|
60
|
+
**Requirements**: Make sure you have `build` and `twine` installed:
|
61
|
+
```sh
|
62
|
+
pip install build twine
|
63
|
+
```
|
64
|
+
|
39
65
|
## Running Tests
|
40
66
|
|
41
67
|
- (Add test instructions here if/when tests are present)
|
@@ -155,7 +155,25 @@ janito -r -w "Read and update this file: ..."
|
|
155
155
|
To enable all permissions (read, write, execute):
|
156
156
|
|
157
157
|
```bash
|
158
|
+
# Using individual flags
|
158
159
|
janito -r -w -x "Run this code: print('Hello, world!')"
|
160
|
+
|
161
|
+
# Using the convenient /rwx prefix (single-shot mode)
|
162
|
+
janito /rwx "Run this code: print('Hello, world!')"
|
163
|
+
```
|
164
|
+
|
165
|
+
#### One-Shot Mode
|
166
|
+
For quick tasks without entering interactive mode, provide your prompt directly:
|
167
|
+
|
168
|
+
```bash
|
169
|
+
# Basic one-shot
|
170
|
+
janito "What are the key classes in this project?"
|
171
|
+
|
172
|
+
# One-shot with all permissions enabled
|
173
|
+
janito /rwx "Create a Python script and run it"
|
174
|
+
|
175
|
+
# One-shot with specific permissions
|
176
|
+
janito -r -w "Read this file and create a summary"
|
159
177
|
```
|
160
178
|
|
161
179
|
> **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
|
@@ -2,6 +2,36 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
+
## [2.27.0] - 2025-08-16
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- **Enhanced CLI Experience**:
|
10
|
+
- **One-Shot Mode Prefix Support**: Added `/rwx` prefix support to enable all tool permissions in a single command
|
11
|
+
- Use `/rwx "your prompt here"` to enable read, write, and execute permissions in one-shot mode
|
12
|
+
- Equivalent to using `-r -w -x` flags but more convenient for quick tasks
|
13
|
+
- Maintains security by requiring explicit user action for each command
|
14
|
+
|
15
|
+
- **Enhanced Web Fetching**:
|
16
|
+
- **Browser-like Session Support**: Enhanced `fetch_url` tool with browser-like session capabilities
|
17
|
+
- Persistent session management for improved reliability
|
18
|
+
- Better handling of cookies and session state
|
19
|
+
- Enhanced user-agent and header management
|
20
|
+
- Improved error handling for network requests
|
21
|
+
|
22
|
+
### Changed
|
23
|
+
|
24
|
+
- **Improved Documentation**:
|
25
|
+
- Updated CLI documentation to reflect new `/rwx` prefix and one-shot mode features
|
26
|
+
- Enhanced fetch_url tool documentation with new session parameters
|
27
|
+
- Improved parameter descriptions and usage examples
|
28
|
+
|
29
|
+
### Fixed
|
30
|
+
|
31
|
+
- **Documentation Fixes**:
|
32
|
+
- Added missing docstring parameters for fetch_url tool
|
33
|
+
- Fixed parameter documentation inconsistencies
|
34
|
+
|
5
35
|
## [2.26.0] - 2025-08-16
|
6
36
|
|
7
37
|
### Added
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Changelog v2.27.0
|
2
|
+
|
3
|
+
## [2.27.0] - 2025-08-16
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- **Enhanced CLI Experience**:
|
8
|
+
- **One-Shot Mode Prefix Support**: Added `/rwx` prefix support to enable all tool permissions in a single command
|
9
|
+
- Use `/rwx "your prompt here"` to enable read, write, and execute permissions in one-shot mode
|
10
|
+
- Equivalent to using `-r -w -x` flags but more convenient for quick tasks
|
11
|
+
- Maintains security by requiring explicit user action for each command
|
12
|
+
|
13
|
+
- **Enhanced Web Fetching**:
|
14
|
+
- **Browser-like Session Support**: Enhanced `fetch_url` tool with browser-like session capabilities
|
15
|
+
- Persistent session management for improved reliability
|
16
|
+
- Better handling of cookies and session state
|
17
|
+
- Enhanced user-agent and header management
|
18
|
+
- Improved error handling for network requests
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
|
22
|
+
- **Improved Documentation**:
|
23
|
+
- Updated CLI documentation to reflect new `/rwx` prefix and one-shot mode features
|
24
|
+
- Enhanced fetch_url tool documentation with new session parameters
|
25
|
+
- Improved parameter descriptions and usage examples
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
|
29
|
+
- **Documentation Fixes**:
|
30
|
+
- Added missing docstring parameters for fetch_url tool
|
31
|
+
- Fixed parameter documentation inconsistencies
|
32
|
+
|
33
|
+
### Developer Experience
|
34
|
+
|
35
|
+
- **CLI Usability**:
|
36
|
+
- Streamlined one-shot mode with convenient prefix commands
|
37
|
+
- Consistent behavior between interactive and non-interactive modes
|
38
|
+
- Clear documentation for new features
|
39
|
+
|
40
|
+
### Technical Details
|
41
|
+
|
42
|
+
- **Implementation**: Enhanced CLI argument parsing to support `/rwx` prefix
|
43
|
+
- **Integration**: Full integration with existing permission system
|
44
|
+
- **Compatibility**: Backward compatible with existing CLI flags and commands
|
45
|
+
|
46
|
+
### Migration Guide
|
47
|
+
|
48
|
+
For users upgrading from v2.26.0:
|
49
|
+
|
50
|
+
1. **No Breaking Changes**: All existing functionality remains unchanged
|
51
|
+
2. **New Prefix**: Use `/rwx "prompt"` for one-shot mode with all permissions
|
52
|
+
3. **Existing Flags**: `-r -w -x` flags continue to work as before
|
53
|
+
4. **fetch_url Tool**: Enhanced session support is automatic, no configuration needed
|
54
|
+
|
55
|
+
### Contributors
|
56
|
+
|
57
|
+
- Added convenient one-shot mode prefix for improved CLI experience
|
58
|
+
- Enhanced web fetching capabilities with browser-like session support
|
59
|
+
- Improved documentation and parameter descriptions
|
60
|
+
- Fixed documentation inconsistencies
|
61
|
+
|
62
|
+
---
|
63
|
+
|
64
|
+
**Full Changelog**: https://github.com/ikignosis/janito/compare/v2.26.0...v2.27.0
|
@@ -10,6 +10,18 @@ janito "what are the key classes of this project?"
|
|
10
10
|
|
11
11
|
Janito will process your request and exit after displaying the result.
|
12
12
|
|
13
|
+
### Quick Permission Setup
|
14
|
+
|
15
|
+
For one-shot mode, you can quickly enable all tool permissions using the `/rwx` prefix:
|
16
|
+
|
17
|
+
```bash
|
18
|
+
# Enable read, write, and execute permissions
|
19
|
+
janito /rwx "create a python script and run it"
|
20
|
+
|
21
|
+
# Or use individual flags
|
22
|
+
janito -r -w -x "create a python script and run it"
|
23
|
+
```
|
24
|
+
|
13
25
|
> ⚠️ **Warning:** Some models may not complete all required steps in a single-shot (one-off) run. If the model does not act as expected, try appending "; just do it" to your command-line prompt to encourage direct action.
|
14
26
|
|
15
27
|

|
@@ -55,14 +55,34 @@ janito --multi # Start chat mode with multiline input as default
|
|
55
55
|
janito -u -x --read --write "Run a tool with unrestricted paths (DANGEROUS)"
|
56
56
|
```
|
57
57
|
|
58
|
-
### ⚠️ Enabling
|
58
|
+
### ⚠️ Enabling Tool Permissions
|
59
59
|
|
60
|
-
By default, tools that can
|
60
|
+
By default, tools that can read, write, or execute code are **disabled** for safety. You can enable these permissions using individual flags or a convenient shortcut:
|
61
61
|
|
62
|
+
#### Individual Permission Flags
|
63
|
+
- `-r`, `--read`: Enable tools that require read permissions
|
64
|
+
- `-w`, `--write`: Enable tools that require write permissions
|
65
|
+
- `-x`, `--exec`: Enable execution/run tools (code execution, shell commands)
|
66
|
+
|
67
|
+
#### Quick Permission Shortcut
|
68
|
+
Use `/rwx` prefix to enable all permissions at once:
|
69
|
+
```sh
|
70
|
+
janito /rwx "Create a Python script and run it"
|
71
|
+
```
|
72
|
+
|
73
|
+
#### Examples
|
62
74
|
```sh
|
75
|
+
# Enable all permissions individually
|
76
|
+
janito -r -w -x "Create and run a Python script"
|
77
|
+
|
78
|
+
# Enable only execution tools
|
63
79
|
janito -x "Run this code: print('Hello, world!')"
|
80
|
+
|
81
|
+
# Enable read and write tools
|
82
|
+
janito -r -w "Read a file and create a new one"
|
64
83
|
```
|
65
|
-
|
84
|
+
|
85
|
+
> **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use these options if you trust your prompt and environment.
|
66
86
|
|
67
87
|
### ⚠️ Disabling Path Security
|
68
88
|
|
@@ -42,6 +42,30 @@ def handle_show_config(args):
|
|
42
42
|
console.print(f"[bold yellow]Current provider:[/bold yellow] {provider!r}\n")
|
43
43
|
if model is not None:
|
44
44
|
console.print(f"[bold yellow]Global model:[/bold yellow] {model!r}\n")
|
45
|
+
|
46
|
+
# Show all configuration values
|
47
|
+
console.print("[bold green]Configuration values:[/bold green]")
|
48
|
+
all_config = config.all()
|
49
|
+
if all_config:
|
50
|
+
for key, value in sorted(all_config.items()):
|
51
|
+
# Hide sensitive values like API keys
|
52
|
+
if 'api_key' in key.lower() and value:
|
53
|
+
masked_value = value[:8] + '***' + value[-4:] if len(value) > 12 else '***'
|
54
|
+
console.print(f" {key}: {masked_value!r}")
|
55
|
+
elif key == 'providers' and isinstance(value, dict):
|
56
|
+
# Handle nested provider configs with API keys
|
57
|
+
masked_providers = {}
|
58
|
+
for provider_name, provider_config in value.items():
|
59
|
+
masked_config = dict(provider_config)
|
60
|
+
if 'api_key' in masked_config and masked_config['api_key']:
|
61
|
+
api_key = masked_config['api_key']
|
62
|
+
masked_config['api_key'] = api_key[:8] + '***' + api_key[-4:] if len(api_key) > 12 else '***'
|
63
|
+
masked_providers[provider_name] = masked_config
|
64
|
+
console.print(f" {key}: {masked_providers!r}")
|
65
|
+
else:
|
66
|
+
console.print(f" {key}: {value!r}")
|
67
|
+
else:
|
68
|
+
console.print(" (no configuration values set)")
|
45
69
|
|
46
70
|
# Show disabled tools
|
47
71
|
from janito.tools.disabled_tools import load_disabled_tools_from_config
|
@@ -293,7 +293,8 @@ class JanitoCLI:
|
|
293
293
|
self.parser = argparse.ArgumentParser(
|
294
294
|
description="Janito CLI - A tool for running LLM-powered workflows from the command line."
|
295
295
|
"\n\nExample usage: janito -p moonshotai -m kimi-k1-8k 'Your prompt here'\n\n"
|
296
|
-
"Use -m or --model to set the model for the session."
|
296
|
+
"Use -m or --model to set the model for the session.",
|
297
|
+
|
297
298
|
)
|
298
299
|
self._define_args()
|
299
300
|
self.args = self.parser.parse_args()
|
@@ -409,6 +410,17 @@ class JanitoCLI:
|
|
409
410
|
self._maybe_print_verbose_provider_model()
|
410
411
|
handle_getter(self.args)
|
411
412
|
return
|
413
|
+
# Handle /rwx prefix for enabling all permissions
|
414
|
+
if self.args.user_prompt and self.args.user_prompt[0] == '/rwx':
|
415
|
+
self.args.read = True
|
416
|
+
self.args.write = True
|
417
|
+
self.args.exec = True
|
418
|
+
# Remove the /rwx prefix from the prompt
|
419
|
+
self.args.user_prompt = self.args.user_prompt[1:]
|
420
|
+
elif self.args.user_prompt and self.args.user_prompt[0].startswith('/'):
|
421
|
+
# Skip LLM processing for other commands that start with /
|
422
|
+
return
|
423
|
+
|
412
424
|
# If running in single shot mode and --profile is not provided, default to 'developer' profile
|
413
425
|
if get_prompt_mode(self.args) == "single_shot" and not getattr(
|
414
426
|
self.args, "profile", None
|
@@ -4,6 +4,7 @@ import os
|
|
4
4
|
import json
|
5
5
|
from pathlib import Path
|
6
6
|
from bs4 import BeautifulSoup
|
7
|
+
from typing import Dict, Any, Optional
|
7
8
|
from janito.tools.adapters.local.adapter import register_local_tool
|
8
9
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
9
10
|
from janito.report_events import ReportAction
|
@@ -45,6 +46,9 @@ class FetchUrlTool(ToolBase):
|
|
45
46
|
timeout (int, optional): Timeout in seconds for the HTTP request. Defaults to 10.
|
46
47
|
save_to_file (str, optional): File path to save the full resource content. If provided,
|
47
48
|
the complete response will be saved to this file instead of being processed.
|
49
|
+
headers (Dict[str, str], optional): Custom HTTP headers to send with the request.
|
50
|
+
cookies (Dict[str, str], optional): Custom cookies to send with the request.
|
51
|
+
follow_redirects (bool, optional): Whether to follow HTTP redirects. Defaults to True.
|
48
52
|
Returns:
|
49
53
|
str: Extracted text content from the web page, or a warning message. Example:
|
50
54
|
- "<main text content...>"
|
@@ -64,6 +68,22 @@ class FetchUrlTool(ToolBase):
|
|
64
68
|
{}
|
65
69
|
) # In-memory session cache - lifetime matches tool instance
|
66
70
|
self._load_cache()
|
71
|
+
|
72
|
+
# Browser-like session with cookies and headers
|
73
|
+
self.session = requests.Session()
|
74
|
+
self.session.headers.update({
|
75
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
76
|
+
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
77
|
+
'Accept-Language': 'en-US,en;q=0.5',
|
78
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
79
|
+
'DNT': '1',
|
80
|
+
'Connection': 'keep-alive',
|
81
|
+
'Upgrade-Insecure-Requests': '1',
|
82
|
+
})
|
83
|
+
|
84
|
+
# Load cookies from disk if they exist
|
85
|
+
self.cookies_file = self.cache_dir / "cookies.json"
|
86
|
+
self._load_cookies()
|
67
87
|
|
68
88
|
def _load_cache(self):
|
69
89
|
"""Load error cache from disk."""
|
@@ -84,6 +104,33 @@ class FetchUrlTool(ToolBase):
|
|
84
104
|
except IOError:
|
85
105
|
pass # Silently fail if we can't write cache
|
86
106
|
|
107
|
+
def _load_cookies(self):
|
108
|
+
"""Load cookies from disk into session."""
|
109
|
+
if self.cookies_file.exists():
|
110
|
+
try:
|
111
|
+
with open(self.cookies_file, "r", encoding="utf-8") as f:
|
112
|
+
cookies_data = json.load(f)
|
113
|
+
for cookie in cookies_data:
|
114
|
+
self.session.cookies.set(**cookie)
|
115
|
+
except (json.JSONDecodeError, IOError):
|
116
|
+
pass # Silently fail if we can't load cookies
|
117
|
+
|
118
|
+
def _save_cookies(self):
|
119
|
+
"""Save session cookies to disk."""
|
120
|
+
try:
|
121
|
+
cookies_data = []
|
122
|
+
for cookie in self.session.cookies:
|
123
|
+
cookies_data.append({
|
124
|
+
'name': cookie.name,
|
125
|
+
'value': cookie.value,
|
126
|
+
'domain': cookie.domain,
|
127
|
+
'path': cookie.path
|
128
|
+
})
|
129
|
+
with open(self.cookies_file, "w", encoding="utf-8") as f:
|
130
|
+
json.dump(cookies_data, f, indent=2)
|
131
|
+
except IOError:
|
132
|
+
pass # Silently fail if we can't write cookies
|
133
|
+
|
87
134
|
def _get_cached_error(self, url: str) -> tuple[str, bool]:
|
88
135
|
"""
|
89
136
|
Check if we have a cached error for this URL.
|
@@ -123,14 +170,15 @@ class FetchUrlTool(ToolBase):
|
|
123
170
|
}
|
124
171
|
self._save_cache()
|
125
172
|
|
126
|
-
def _fetch_url_content(self, url: str, timeout: int = 10
|
173
|
+
def _fetch_url_content(self, url: str, timeout: int = 10, headers: Optional[Dict[str, str]] = None,
|
174
|
+
cookies: Optional[Dict[str, str]] = None, follow_redirects: bool = True) -> str:
|
127
175
|
"""Fetch URL content and handle HTTP errors.
|
128
176
|
|
129
177
|
Implements two-tier caching:
|
130
178
|
1. Session cache: In-memory cache for successful responses (lifetime = tool instance)
|
131
179
|
2. Error cache: Persistent disk cache for HTTP errors with different expiration times
|
132
180
|
|
133
|
-
Also implements URL whitelist checking.
|
181
|
+
Also implements URL whitelist checking and browser-like behavior.
|
134
182
|
"""
|
135
183
|
# Check URL whitelist
|
136
184
|
from janito.tools.url_whitelist import get_url_whitelist_manager
|
@@ -172,9 +220,27 @@ class FetchUrlTool(ToolBase):
|
|
172
220
|
return cached_error
|
173
221
|
|
174
222
|
try:
|
175
|
-
|
223
|
+
# Merge custom headers with default ones
|
224
|
+
request_headers = self.session.headers.copy()
|
225
|
+
if headers:
|
226
|
+
request_headers.update(headers)
|
227
|
+
|
228
|
+
# Merge custom cookies
|
229
|
+
if cookies:
|
230
|
+
self.session.cookies.update(cookies)
|
231
|
+
|
232
|
+
response = self.session.get(
|
233
|
+
url,
|
234
|
+
timeout=timeout,
|
235
|
+
headers=request_headers,
|
236
|
+
allow_redirects=follow_redirects
|
237
|
+
)
|
176
238
|
response.raise_for_status()
|
177
239
|
content = response.text
|
240
|
+
|
241
|
+
# Save cookies after successful request
|
242
|
+
self._save_cookies()
|
243
|
+
|
178
244
|
# Cache successful responses in session cache
|
179
245
|
self.session_cache[url] = content
|
180
246
|
return content
|
@@ -275,6 +341,9 @@ class FetchUrlTool(ToolBase):
|
|
275
341
|
context_chars: int = 400,
|
276
342
|
timeout: int = 10,
|
277
343
|
save_to_file: str = None,
|
344
|
+
headers: Dict[str, str] = None,
|
345
|
+
cookies: Dict[str, str] = None,
|
346
|
+
follow_redirects: bool = True,
|
278
347
|
) -> str:
|
279
348
|
if not url.strip():
|
280
349
|
self.report_warning(tr("ℹ️ Empty URL provided."), ReportAction.READ)
|
@@ -284,7 +353,10 @@ class FetchUrlTool(ToolBase):
|
|
284
353
|
|
285
354
|
# Check if we should save to file
|
286
355
|
if save_to_file:
|
287
|
-
html_content = self._fetch_url_content(
|
356
|
+
html_content = self._fetch_url_content(
|
357
|
+
url, timeout=timeout, headers=headers, cookies=cookies,
|
358
|
+
follow_redirects=follow_redirects
|
359
|
+
)
|
288
360
|
if html_content.startswith("Warning:"):
|
289
361
|
return html_content
|
290
362
|
|
@@ -307,7 +379,10 @@ class FetchUrlTool(ToolBase):
|
|
307
379
|
return error_msg
|
308
380
|
|
309
381
|
# Normal processing path
|
310
|
-
html_content = self._fetch_url_content(
|
382
|
+
html_content = self._fetch_url_content(
|
383
|
+
url, timeout=timeout, headers=headers, cookies=cookies,
|
384
|
+
follow_redirects=follow_redirects
|
385
|
+
)
|
311
386
|
if html_content.startswith("Warning:"):
|
312
387
|
return html_content
|
313
388
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: janito
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.27.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
|
@@ -187,7 +187,25 @@ janito -r -w "Read and update this file: ..."
|
|
187
187
|
To enable all permissions (read, write, execute):
|
188
188
|
|
189
189
|
```bash
|
190
|
+
# Using individual flags
|
190
191
|
janito -r -w -x "Run this code: print('Hello, world!')"
|
192
|
+
|
193
|
+
# Using the convenient /rwx prefix (single-shot mode)
|
194
|
+
janito /rwx "Run this code: print('Hello, world!')"
|
195
|
+
```
|
196
|
+
|
197
|
+
#### One-Shot Mode
|
198
|
+
For quick tasks without entering interactive mode, provide your prompt directly:
|
199
|
+
|
200
|
+
```bash
|
201
|
+
# Basic one-shot
|
202
|
+
janito "What are the key classes in this project?"
|
203
|
+
|
204
|
+
# One-shot with all permissions enabled
|
205
|
+
janito /rwx "Create a Python script and run it"
|
206
|
+
|
207
|
+
# One-shot with specific permissions
|
208
|
+
janito -r -w "Read this file and create a summary"
|
191
209
|
```
|
192
210
|
|
193
211
|
> **Warning:** Enabling execution tools allows running arbitrary code or shell commands. Only use `--exec` if you trust your prompt and environment.
|
@@ -62,6 +62,7 @@ docs/changelogs/CHANGELOG.md
|
|
62
62
|
docs/changelogs/CHANGELOG_2.16.0.md
|
63
63
|
docs/changelogs/CHANGELOG_2.23.0.md
|
64
64
|
docs/changelogs/CHANGELOG_2.26.0.md
|
65
|
+
docs/changelogs/CHANGELOG_2.27.0.md
|
65
66
|
docs/changelogs/RELEASE_NOTES_2.22.0.md
|
66
67
|
docs/changelogs/RELEASE_NOTES_2.24.1.md
|
67
68
|
docs/code_intelligence/agentic-frameworks-comparison.md
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|