janito 3.8.0__tar.gz → 3.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {janito-3.8.0 → janito-3.9.0}/PKG-INFO +14 -14
- janito-3.9.0/README.md +49 -0
- {janito-3.8.0 → janito-3.9.0}/docs/about/why.md +1 -1
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/CHANGELOG.md +1 -1
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/RELEASE_NOTES_2.22.0.md +1 -1
- {janito-3.8.0 → janito-3.9.0}/docs/guides/disabled-tools.md +2 -2
- {janito-3.8.0 → janito-3.9.0}/docs/guides/security-commands.md +2 -2
- {janito-3.8.0 → janito-3.9.0}/docs/guides/tools-developer-guide.md +2 -2
- {janito-3.8.0 → janito-3.9.0}/docs/guides/url-whitelist.md +3 -3
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/architecture.md +2 -2
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/testing.md +1 -1
- {janito-3.8.0 → janito-3.9.0}/docs/reference/cli-options.md +1 -1
- {janito-3.8.0 → janito-3.9.0}/examples/loop_protection_tool_example.py +1 -1
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_tools.py +1 -1
- {janito-3.8.0 → janito-3.9.0}/janito/cli/prompt_core.py +48 -3
- {janito-3.8.0 → janito-3.9.0}/janito/cli/rich_terminal_reporter.py +10 -2
- {janito-3.8.0 → janito-3.9.0}/janito/llm/agent.py +6 -0
- {janito-3.8.0 → janito-3.9.0/janito}/plugins/core/filemanager/tools/validate_file_syntax/core.py +7 -2
- janito-3.9.0/janito/plugins/core/filemanager/tools/validate_file_syntax/txt_validator.py +28 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/manager.py +1 -1
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/adapter.py +1 -1
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/ask_user.py +1 -1
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/copy_file.py +1 -1
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/create_directory.py +1 -1
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/create_file.py +10 -6
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/delete_text_in_file.py +2 -2
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/fetch_url.py +3 -3
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/find_files.py +1 -1
- {janito-3.8.0/plugins/core/codeanalyzer/tools → janito-3.9.0/janito/plugins/tools/local}/get_file_outline/core.py +2 -2
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/move_file.py +1 -1
- {janito-3.8.0/plugins/web/webtools/tools → janito-3.9.0/janito/plugins/tools/local}/open_html_in_browser.py +1 -1
- {janito-3.8.0/plugins/web/webtools/tools → janito-3.9.0/janito/plugins/tools/local}/open_url.py +1 -1
- {janito-3.8.0/plugins/dev/pythondev/tools → janito-3.9.0/janito/plugins/tools/local}/python_code_run.py +1 -1
- {janito-3.8.0/plugins/dev/pythondev/tools → janito-3.9.0/janito/plugins/tools/local}/python_command_run.py +1 -1
- {janito-3.8.0/plugins/dev/pythondev/tools → janito-3.9.0/janito/plugins/tools/local}/python_file_run.py +1 -1
- {janito-3.8.0/plugins/dev/visualization/tools → janito-3.9.0/janito/plugins/tools/local}/read_chart.py +1 -1
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/read_files.py +1 -1
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/remove_directory.py +1 -1
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/remove_file.py +1 -1
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/replace_text_in_file.py +2 -2
- {janito-3.8.0/plugins/core/system/tools → janito-3.9.0/janito/plugins/tools/local}/run_bash_command.py +1 -1
- {janito-3.8.0/plugins/core/system/tools → janito-3.9.0/janito/plugins/tools/local}/run_powershell_command.py +1 -1
- {janito-3.8.0/plugins/core/codeanalyzer/tools → janito-3.9.0/janito/plugins/tools/local}/search_text/core.py +2 -2
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/show_image.py +1 -1
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/show_image_grid.py +1 -1
- janito-3.9.0/janito/plugins/tools/local/validate_file_syntax/core.py +119 -0
- janito-3.9.0/janito/plugins/tools/local/validate_file_syntax/txt_validator.py +28 -0
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/view_file.py +1 -1
- {janito-3.8.0 → janito-3.9.0}/janito/tools/__init__.py +2 -2
- {janito-3.8.0 → janito-3.9.0}/janito/tools/inspect_registry.py +1 -1
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tool_base.py +8 -1
- {janito-3.8.0 → janito-3.9.0}/janito.egg-info/PKG-INFO +14 -14
- {janito-3.8.0 → janito-3.9.0}/janito.egg-info/SOURCES.txt +58 -63
- janito-3.9.0/plugins/core/filemanager/tools/validate_file_syntax/__init__.py +1 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/web/webtools/tools/fetch_url.py +2 -2
- janito-3.9.0/tests/local/test_read_file/__init__.py +1 -0
- janito-3.9.0/tests/local/test_read_file/read_file.py +69 -0
- janito-3.9.0/tests/local/test_read_file/test_read_file.py +83 -0
- janito-3.8.0/README.md +0 -49
- janito-3.8.0/docs/plugins/ACTUAL_TOOLS_LOCATION.md +0 -52
- janito-3.8.0/docs/plugins/MIGRATION_COMPLETE.md +0 -73
- janito-3.8.0/market_test.py +0 -108
- janito-3.8.0/pytest.ini +0 -3
- janito-3.8.0/test.txt +0 -1
- janito-3.8.0/test_example.py +0 -90
- janito-3.8.0/test_http_errors.py +0 -100
- janito-3.8.0/test_http_errors_direct.py +0 -53
- janito-3.8.0/test_key_field_behavior.py +0 -104
- janito-3.8.0/test_key_field_protection.py +0 -74
- janito-3.8.0/test_loop_protection_return.py +0 -67
- janito-3.8.0/test_market_analyst.py +0 -133
- {janito-3.8.0 → janito-3.9.0}/.codespellrc +0 -0
- {janito-3.8.0 → janito-3.9.0}/.gitattributes +0 -0
- {janito-3.8.0 → janito-3.9.0}/.github/workflows/python-app.yml.disabled +0 -0
- {janito-3.8.0 → janito-3.9.0}/.gitignore +0 -0
- {janito-3.8.0 → janito-3.9.0}/.pre-commit-config.yaml +0 -0
- {janito-3.8.0 → janito-3.9.0}/.secrets.baseline +0 -0
- {janito-3.8.0 → janito-3.9.0}/.vscode/settings.json +0 -0
- {janito-3.8.0 → janito-3.9.0}/LICENSE +0 -0
- {janito-3.8.0 → janito-3.9.0}/MARKET_ANALYST_README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/README-dev.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/RELEASE_COMPARISON.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/UPDATING_DOCS.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/adding_mcp.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/CHANGELOG.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/DIV.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/Interfaces.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/PROFILES.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/TOOLBAR-STYLING.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/about/costs.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/about/vs-webchats.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/alibaba-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/alternatives.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/cerebras-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.16.0.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.23.0.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.26.0.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/CHANGELOG_2.27.0.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/changelogs/RELEASE_NOTES_2.24.1.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/code_intelligence/agentic-frameworks-comparison.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/code_intelligence/code-generation-challenges.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/code_intelligence/code-generation-observability.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/code_intelligence/our-approach.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/code_intelligence/why-string-replacement.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/concepts/analysis-style.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/concepts/human-guided-ai.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/concepts/index.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/concepts/language-model-clients.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/concepts/prompt-design-style.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/deepseek-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/driver-flow.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/driver-request-cancellation.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/drivers/events.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/drivers.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/event-bus.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/configuration.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/developing.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/installation.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/market-data-sources.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/profiles.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/prompting/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/read-chart-examples.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/single-shot-terminal.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/stock-market-guide.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/terminal-shell.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/using.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/guides/using_tools.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/ibm-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/code-generation-observability.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/code_generation_observability.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/happy-programmer.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/happy-programmer.svg +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/terminal-one-shot.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/terminal-shell.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/terminal_one_shot.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/imgs/terminal_shell.png +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/index.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/llm-drivers-required-config.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/llm-drivers.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/meta/developer-toolchain.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/meta/quality-checks.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/mistral-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/moonshot-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/openai-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/overrides/partials/copyright.html +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/api-reference.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/codeanalyzer.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/filemanager.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/imagedisplay.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/pythondev.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/system.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/userinterface.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/visualization.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/built-in-plugins/webtools.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/configuration.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/examples/advanced.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/examples/basic.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/examples/intermediate.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/plugin-development.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/plugin-resources.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/publishing.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/plugins/remote-plugins.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/provider-platform-access.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/public-sources.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/reference/api.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/reference/azure-openai.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/reference/message-handler-model.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/reference/rich-message-handler.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/security.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/supported-providers-models.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/tools/search-text.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/tools/show-image-grid.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/tools/show-image.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/tools-index.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/tools-natural-results.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/tools-precision.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/docs/z-ai-setup.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/examples/loop_protection_example.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/get_nasdaq_top.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/ibm-logo.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/__main__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/_version.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/agent/setup_agent.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_Developer_with_Python_Tools.txt.j2 +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_developer.txt.j2 +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_market_analyst.txt.j2 +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/agent/templates/profiles/system_prompt_template_model_conversation_without_tools_or_context.txt.j2 +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/bindings.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/chat_entry.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/prompt_style.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/script_runner.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/session.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/autocomplete.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/_priv_check.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/_priv_status.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/bang.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/base.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/clear.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/conversation_restart.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/execute.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/help.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/history_view.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/lang.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/model.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/multi.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/privileges.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/prompt.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/read.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/role.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/security/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/security/allowed_sites.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/security_command.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/session.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/session_control.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/tools.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/unrestricted.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/utility.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/verbose.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands/write.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/commands.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/input_history.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session/history.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session/manager.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/shell/session.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/chat_mode/toolbar.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/enable_disable_plugin.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_config.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_drivers.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_models.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_plugins.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_profiles.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_providers.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/list_providers_region.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/model_selection.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/model_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/ping_providers.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/set_api_key.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/show_config.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/cli_commands/show_system_prompt.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/config.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/console.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/event_logger.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/getters.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/model_guesser.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/runner.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/setters.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/core/unsetters.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/main.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/main_cli.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/prompt_handler.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/prompt_setup.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/single_shot_mode/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/single_shot_mode/handler.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/cli/verbose_output.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/config.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/config_manager.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/conversation_history.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/dir_walk_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/docs/GETTING_STARTED.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/driver_events.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/azure_openai/driver.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/cerebras/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/dashscope.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/openai/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/openai/driver.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/openai_responses.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/zai/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/drivers/zai/driver.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/event_bus/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/event_bus/bus.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/event_bus/event.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/event_bus/handler.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/event_bus/queue_bus.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/exceptions.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/formatting.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/formatting_token.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/gitignore_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/hello.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/i18n/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/i18n/it.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/i18n/messages.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/i18n/pt.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/auth.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/auth_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/driver.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/driver_config.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/driver_config_builder.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/driver_input.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/message_parts.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/model.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/llm/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/mkdocs.yml +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/perf_singleton.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/performance_collector.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/platform_discovery.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/auto_loader.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/auto_loader_fixed.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/base.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/builtin.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/config.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/janito/plugins/core/filemanager/tools}/validate_file_syntax/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/core_adapter.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/core_loader.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/core_loader_fixed.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/discovery.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/plugins/discovery_core.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/java_outline.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/markdown_outline.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/python_outline.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/get_file_outline/search_outline.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/match_lines.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/pattern_utils.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/search_text/traverse_directory.py +0 -0
- {janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/validate_file_syntax/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/css_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/html_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/js_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/json_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/markdown_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/ps1_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/python_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/xml_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/validate_file_syntax/yaml_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/provider_config.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/provider_registry.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/alibaba/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/alibaba/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/alibaba/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/anthropic/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/anthropic/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/azure_openai/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/azure_openai/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/cerebras/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/cerebras/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/cerebras/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/dashscope.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/deepseek/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/deepseek/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/deepseek/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/google/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/google/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/google/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/ibm/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/ibm/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/ibm/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/ibm/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/mistral/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/mistral/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/mistral/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/moonshot/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/moonshot/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/moonshot/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/openai/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/openai/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/openai/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/openai/schema_generator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/registry.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/zai/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/zai/model_info.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/zai/provider.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/providers/zai/schema_generator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/regions/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/regions/cli.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/regions/geo_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/regions/provider_regions.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/report_events.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/shell.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/DOCSTRING_STANDARD.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/README.md +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/base.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/disabled_tools.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/function_adapter.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/loop_protection.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/loop_protection_decorator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/outline_file.bak.zip +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/path_security.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/path_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/permissions.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/permissions_parse.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tool_events.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tool_run_exception.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tool_use_tracker.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tool_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tools_adapter.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/tools_schema.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/tools/url_whitelist.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito/utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito.egg-info/dependency_links.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito.egg-info/entry_points.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito.egg-info/requires.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/janito.egg-info/top_level.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/market_prompt_fix.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/mkdocs.yml +0 -0
- {janito-3.8.0 → janito-3.9.0}/mkdocs_hooks.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/codeanalyzer/tools}/get_file_outline/core.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/java_outline.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/markdown_outline.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/python_outline.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/get_file_outline/search_outline.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/codeanalyzer/tools}/search_text/core.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/match_lines.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/pattern_utils.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/codeanalyzer/tools/search_text/traverse_directory.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/copy_file.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/create_directory.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/create_file.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/delete_text_in_file.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/find_files.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/move_file.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/read_files.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/remove_directory.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/remove_file.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/replace_text_in_file.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/validate_file_syntax/core.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/css_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/html_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/jinja2_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/js_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/json_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/markdown_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/ps1_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/python_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/xml_validator.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/filemanager/tools/validate_file_syntax/yaml_validator.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/filemanager/tools}/view_file.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/imagedisplay/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/imagedisplay/plugin.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/imagedisplay/tools/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/imagedisplay/tools/show_image.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/imagedisplay/tools/show_image_grid.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/core/system/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/system/tools}/run_bash_command.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/core/system/tools}/run_powershell_command.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/dev/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/dev/pythondev/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/pythondev/tools}/python_code_run.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/pythondev/tools}/python_command_run.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/pythondev/tools}/python_file_run.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/dev/visualization/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/dev/visualization/tools}/read_chart.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/example_plugin.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/ui/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/ui/userinterface/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/ui/userinterface/tools/ask_user.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/web/__init__.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins/web/webtools/__init__.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/web/webtools/tools}/open_html_in_browser.py +0 -0
- {janito-3.8.0/janito/tools/adapters/local → janito-3.9.0/plugins/web/webtools/tools}/open_url.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/plugins.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/pyproject.toml +0 -0
- {janito-3.8.0 → janito-3.9.0}/requirements-dev.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/requirements.txt +0 -0
- {janito-3.8.0 → janito-3.9.0}/setup.cfg +0 -0
- {janito-3.8.0/tests/adapters → janito-3.9.0/tests}/local/get_file_outline/test_core_outline.py +0 -0
- {janito-3.8.0/tests/adapters → janito-3.9.0/tests}/local/test_read_files.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_cli_list_models.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_cli_list_providers.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_cli_list_providers_alibaba.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_cli_list_providers_moonshot.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_cli_version.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_disabled_tools.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_plugin_system.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_provider_alibaba.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_provider_cerebras.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tests/test_provider_moonshot.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tools/release.py +0 -0
- {janito-3.8.0 → janito-3.9.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: janito
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.9.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
|
@@ -33,30 +33,30 @@ Provides-Extra: coder
|
|
33
33
|
Requires-Dist: janito-coder; extra == "coder"
|
34
34
|
Dynamic: license-file
|
35
35
|
|
36
|
-
#
|
36
|
+
# Janito
|
37
37
|
|
38
38
|
```bash
|
39
|
-
$
|
40
|
-
Usage:
|
39
|
+
$ janito --help
|
40
|
+
Usage: janito <command>
|
41
41
|
|
42
42
|
Interact with Nine API resources. See https://docs.nineapis.ch for the full API docs.
|
43
43
|
|
44
|
-
Run "
|
44
|
+
Run "janito <command> --help" for more information on a command.
|
45
45
|
```
|
46
46
|
|
47
47
|
## Setup
|
48
48
|
|
49
49
|
```bash
|
50
50
|
# If you have go already installed
|
51
|
-
go install github.com/ninech/
|
51
|
+
go install github.com/ninech/janito@latest
|
52
52
|
|
53
53
|
# Homebrew
|
54
|
-
brew install ninech/taps/
|
54
|
+
brew install ninech/taps/janito
|
55
55
|
|
56
56
|
# Debian/Ubuntu
|
57
57
|
echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
|
58
58
|
sudo apt-get update
|
59
|
-
sudo apt-get install
|
59
|
+
sudo apt-get install janito
|
60
60
|
|
61
61
|
# Fedora/RHEL
|
62
62
|
cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
|
@@ -66,19 +66,19 @@ baseurl=https://repo.nine.ch/yum/
|
|
66
66
|
enabled=1
|
67
67
|
gpgcheck=0
|
68
68
|
EOF
|
69
|
-
dnf install
|
69
|
+
dnf install janito
|
70
70
|
|
71
71
|
# Arch
|
72
72
|
# Install yay: https://github.com/Jguer/yay#binary
|
73
73
|
yay --version
|
74
|
-
yay -S
|
74
|
+
yay -S janito-bin
|
75
75
|
```
|
76
76
|
|
77
|
-
For Windows users,
|
78
|
-
latest exe file from the [releases](https://github.com/ninech/
|
77
|
+
For Windows users, janito is also built for arm64 and amd64. You can download the
|
78
|
+
latest exe file from the [releases](https://github.com/ninech/janito/releases) and
|
79
79
|
install it.
|
80
80
|
|
81
81
|
## Getting started
|
82
82
|
|
83
|
-
* login to the API using `
|
84
|
-
* run `
|
83
|
+
* login to the API using `janito auth login`
|
84
|
+
* run `janito --help` to get a list of all available commands
|
janito-3.9.0/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Janito
|
2
|
+
|
3
|
+
```bash
|
4
|
+
$ janito --help
|
5
|
+
Usage: janito <command>
|
6
|
+
|
7
|
+
Interact with Nine API resources. See https://docs.nineapis.ch for the full API docs.
|
8
|
+
|
9
|
+
Run "janito <command> --help" for more information on a command.
|
10
|
+
```
|
11
|
+
|
12
|
+
## Setup
|
13
|
+
|
14
|
+
```bash
|
15
|
+
# If you have go already installed
|
16
|
+
go install github.com/ninech/janito@latest
|
17
|
+
|
18
|
+
# Homebrew
|
19
|
+
brew install ninech/taps/janito
|
20
|
+
|
21
|
+
# Debian/Ubuntu
|
22
|
+
echo "deb [trusted=yes] https://repo.nine.ch/deb/ /" | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
|
23
|
+
sudo apt-get update
|
24
|
+
sudo apt-get install janito
|
25
|
+
|
26
|
+
# Fedora/RHEL
|
27
|
+
cat <<EOF > /etc/yum.repos.d/repo.nine.ch.repo
|
28
|
+
[repo.nine.ch]
|
29
|
+
name=Nine Repo
|
30
|
+
baseurl=https://repo.nine.ch/yum/
|
31
|
+
enabled=1
|
32
|
+
gpgcheck=0
|
33
|
+
EOF
|
34
|
+
dnf install janito
|
35
|
+
|
36
|
+
# Arch
|
37
|
+
# Install yay: https://github.com/Jguer/yay#binary
|
38
|
+
yay --version
|
39
|
+
yay -S janito-bin
|
40
|
+
```
|
41
|
+
|
42
|
+
For Windows users, janito is also built for arm64 and amd64. You can download the
|
43
|
+
latest exe file from the [releases](https://github.com/ninech/janito/releases) and
|
44
|
+
install it.
|
45
|
+
|
46
|
+
## Getting started
|
47
|
+
|
48
|
+
* login to the API using `janito auth login`
|
49
|
+
* run `janito --help` to get a list of all available commands
|
@@ -12,7 +12,7 @@ Janito is designed to give you maximum control over how AI assists you with your
|
|
12
12
|
|
13
13
|
- 💻 **Not Locked to an Editor:** Janito works in the terminal, scripts, or web—no need for a heavyweight IDE or plugin ecosystem.
|
14
14
|
- 🧰 **Composable and Extensible:** Tools can be enabled, disabled, or customized for each session, letting you experiment or automate workflows.
|
15
|
-
- 🕒 **Session-Scoped Adjustments:**
|
15
|
+
- 🕒 **Session-Scoped Adjustments:** Session-based overrides (via CLI options or prompt tweaks) let you try new approaches without changing your global setup.
|
16
16
|
|
17
17
|
## 🧑💻 Example: Prompt-Driven Focus
|
18
18
|
|
@@ -384,7 +384,7 @@ For users upgrading from previous versions:
|
|
384
384
|
- Refactored tool system to use latest git tag for version detection in release script.
|
385
385
|
- Refined release script to recommend creating a new git tag if version exists on PyPI.
|
386
386
|
- Removed termweb: web file viewer and related CLI/editor features, updated docs and config accordingly.
|
387
|
-
- Removed
|
387
|
+
- Removed test file x.txt.
|
388
388
|
- Restored tool permissions to CLI defaults on /restart; store and retrieve default tool permissions in AllowedPermissionsState. Runner now sets and saves default permissions for restoration. Updated conversation_restart to restore or fallback to all-off permissions.
|
389
389
|
- Updated disabled execution tools message for clarity.
|
390
390
|
- Docs and UX: clarified permissions (read/write/exec), added profiles doc links, and removed localhost references from UI/toolbar.
|
@@ -19,7 +19,7 @@
|
|
19
19
|
### Enhanced fetch_url Tool
|
20
20
|
- **Error Handling**: Added intelligent error caching for 403 (Forbidden) and 404 (Not Found) responses
|
21
21
|
- **Performance**: Reduced redundant network requests when URLs are known to be inaccessible
|
22
|
-
- **Reliability**: Better handling of rate limiting and
|
22
|
+
- **Reliability**: Better handling of rate limiting and session-based access restrictions
|
23
23
|
|
24
24
|
### Documentation Updates
|
25
25
|
- **IBM Setup Guide**: Complete step-by-step documentation for IBM WatsonX configuration
|
@@ -75,8 +75,8 @@ Disable tools you don't use to reduce clutter:
|
|
75
75
|
janito --set disabled_tools="open_url,open_html_in_browser"
|
76
76
|
```
|
77
77
|
|
78
|
-
###
|
79
|
-
|
78
|
+
### Session-Based Disabling
|
79
|
+
Disable tools for specific sessions:
|
80
80
|
```bash
|
81
81
|
janito --set disabled_tools=ask_user "Generate code without user interaction"
|
82
82
|
```
|
@@ -101,7 +101,7 @@ Fetch Apple's current stock price from tradingview.com
|
|
101
101
|
# List current restrictions
|
102
102
|
/security allowed-sites list
|
103
103
|
|
104
|
-
#
|
104
|
+
# Allow all sites for testing
|
105
105
|
/security allowed-sites clear
|
106
106
|
|
107
107
|
# Re-establish restrictions
|
@@ -174,7 +174,7 @@ Analyze Apple's financial performance
|
|
174
174
|
# Adding "tradingview.com" also allows "www.tradingview.com", "api.tradingview.com", etc.
|
175
175
|
```
|
176
176
|
|
177
|
-
**Problem**: Want to
|
177
|
+
**Problem**: Want to disable whitelist temporarily
|
178
178
|
```
|
179
179
|
# Clear all restrictions
|
180
180
|
/security allowed-sites clear
|
@@ -17,7 +17,7 @@ For a list of all built-in tools and their usage, see the [Tools Reference](../t
|
|
17
17
|
|
18
18
|
```python
|
19
19
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
20
|
-
from janito.
|
20
|
+
from janito.plugins.adapters.local.adapter import register_local_tool
|
21
21
|
|
22
22
|
@register_local_tool
|
23
23
|
class MyTool(ToolBase):
|
@@ -48,7 +48,7 @@ class MyTool(ToolBase):
|
|
48
48
|
2. **Add a class-level docstring** summarizing the tool's purpose (user-facing).
|
49
49
|
3. **Implement the `run` method** with type hints and a Google-style docstring, including an `Args:` section for every parameter.
|
50
50
|
4. **Set permissions** using `permissions = ToolPermissions(read=True, write=True, execute=True)` as needed.
|
51
|
-
5. **Register your tool** with `@register_local_tool` from `janito.
|
51
|
+
5. **Register your tool** with `@register_local_tool` from `janito.plugins.adapters.local.adapter`. Set a unique class attribute `tool_name = "your_tool_name"`.
|
52
52
|
6. **Document your tool:** Update `docs/tools-index.md` with a short description and usage for your new tool.
|
53
53
|
|
54
54
|
## Docstring Style
|
@@ -111,10 +111,10 @@ janito "Get Apple's 10-K filing" # ✅ Works (sec.gov)
|
|
111
111
|
janito "Get Apple's stock price" # ❌ Blocked (needs tradingview.com)
|
112
112
|
```
|
113
113
|
|
114
|
-
###
|
114
|
+
### Testing Access
|
115
115
|
|
116
116
|
```bash
|
117
|
-
# Add a site
|
117
|
+
# Add a site for testing
|
118
118
|
janito --add-allowed-site test-site.com
|
119
119
|
|
120
120
|
# Use it for testing
|
@@ -176,7 +176,7 @@ janito --add-allowed-site missing-site.com
|
|
176
176
|
# Adding "tradingview.com" also allows "www.tradingview.com", "api.tradingview.com", etc.
|
177
177
|
```
|
178
178
|
|
179
|
-
**Problem**: Want to
|
179
|
+
**Problem**: Want to disable whitelist temporarily
|
180
180
|
|
181
181
|
```bash
|
182
182
|
# Clear all restrictions
|
@@ -27,10 +27,10 @@ plugins/
|
|
27
27
|
|
28
28
|
### Implementation Layer
|
29
29
|
|
30
|
-
The actual tool implementations are located in `janito/tools/
|
30
|
+
The actual tool implementations are located in `janito/plugins/tools/local/`. This separation ensures that the core functionality remains stable while the plugin interfaces can be organized and extended.
|
31
31
|
|
32
32
|
```
|
33
|
-
janito/tools/
|
33
|
+
janito/plugins/tools/local/
|
34
34
|
├── create_file.py
|
35
35
|
├── read_files.py
|
36
36
|
├── view_file.py
|
@@ -124,7 +124,7 @@ def test_plugin_integration():
|
|
124
124
|
from janito.plugins.manager import PluginManager
|
125
125
|
from janito.config import Config
|
126
126
|
|
127
|
-
# Create a
|
127
|
+
# Create a test config
|
128
128
|
config = Config()
|
129
129
|
config.set("plugins.load.myplugin", True)
|
130
130
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# 🏁 Janito CLI Options
|
2
2
|
|
3
|
-
This page documents all command-line options for Janito, as shown by `janito --help`. These options
|
3
|
+
This page documents all command-line options for Janito, as shown by `janito --help`. These options override configuration for a single session and do not persist changes to config files unless you use `--set` or a custom config file with `-c`.
|
4
4
|
|
5
5
|
**Syntax:** `janito [options] [prompt]`
|
6
6
|
|
@@ -8,7 +8,7 @@ using the @protect_against_loops decorator.
|
|
8
8
|
|
9
9
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
10
10
|
from janito.tools.loop_protection_decorator import protect_against_loops
|
11
|
-
from janito.tools.
|
11
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
12
12
|
|
13
13
|
|
14
14
|
@register_local_tool
|
@@ -53,7 +53,7 @@ def _print_tools_table(console, title, tools_info):
|
|
53
53
|
|
54
54
|
|
55
55
|
def handle_list_tools(args=None):
|
56
|
-
from janito.tools.
|
56
|
+
from janito.plugins.tools.local.adapter import LocalToolsAdapter
|
57
57
|
import janito.tools # Ensure all tools are registered
|
58
58
|
from janito.tools.tool_base import ToolPermissions
|
59
59
|
|
@@ -14,7 +14,7 @@ from janito.driver_events import (
|
|
14
14
|
RequestStatus,
|
15
15
|
RateLimitRetry,
|
16
16
|
)
|
17
|
-
from janito.tools.tool_events import ToolCallError
|
17
|
+
from janito.tools.tool_events import ToolCallError, ToolCallStarted
|
18
18
|
import threading
|
19
19
|
from janito.cli.verbose_output import print_verbose_header
|
20
20
|
from janito.event_bus import event_bus as global_event_bus
|
@@ -52,8 +52,10 @@ class PromptHandler:
|
|
52
52
|
def _handle_inner_event(self, inner_event, on_event, status):
|
53
53
|
if on_event:
|
54
54
|
on_event(inner_event)
|
55
|
-
from janito.tools.tool_events import ToolCallFinished
|
55
|
+
from janito.tools.tool_events import ToolCallFinished, ToolCallStarted
|
56
56
|
|
57
|
+
if isinstance(inner_event, ToolCallStarted):
|
58
|
+
return self._handle_tool_call_started(inner_event, status)
|
57
59
|
if isinstance(inner_event, ToolCallFinished):
|
58
60
|
return self._handle_tool_call_finished(inner_event)
|
59
61
|
if isinstance(inner_event, RateLimitRetry):
|
@@ -76,6 +78,14 @@ class PromptHandler:
|
|
76
78
|
)
|
77
79
|
return None
|
78
80
|
|
81
|
+
def _handle_tool_call_started(self, inner_event, status):
|
82
|
+
"""Handle ToolCallStarted event - pause the timer when ask_user tool is called."""
|
83
|
+
if hasattr(inner_event, 'tool_name') and inner_event.tool_name == 'ask_user':
|
84
|
+
# Pause the status timer by clearing the status
|
85
|
+
if status:
|
86
|
+
status.update("")
|
87
|
+
return None
|
88
|
+
|
79
89
|
def _handle_tool_call_finished(self, inner_event):
|
80
90
|
if hasattr(self.args, "verbose_tools") and self.args.verbose_tools:
|
81
91
|
self.console.print(
|
@@ -207,7 +217,42 @@ class PromptHandler:
|
|
207
217
|
"""
|
208
218
|
try:
|
209
219
|
self._print_verbose_debug("Calling agent.chat()...")
|
210
|
-
|
220
|
+
|
221
|
+
# Show waiting status with elapsed time
|
222
|
+
start_time = time.time()
|
223
|
+
|
224
|
+
# Get provider and model info for status display
|
225
|
+
provider_name = self.agent.get_provider_name() if hasattr(self.agent, 'get_provider_name') else 'LLM'
|
226
|
+
model_name = self.agent.get_model_name() if hasattr(self.agent, 'get_model_name') else 'unknown'
|
227
|
+
|
228
|
+
status = Status(f"[bold blue]Waiting for {provider_name} (model: {model_name})...[/bold blue]")
|
229
|
+
|
230
|
+
# Thread coordination event
|
231
|
+
stop_updater = threading.Event()
|
232
|
+
|
233
|
+
def update_status():
|
234
|
+
elapsed = time.time() - start_time
|
235
|
+
status.update(f"[bold blue]Waiting for {provider_name} (model: {model_name})... ({elapsed:.1f}s)[/bold blue]")
|
236
|
+
|
237
|
+
# Start status display and update timer
|
238
|
+
with status:
|
239
|
+
# Update status every second in a separate thread
|
240
|
+
def status_updater():
|
241
|
+
while not stop_updater.is_set():
|
242
|
+
update_status()
|
243
|
+
stop_updater.wait(1.0) # Wait for 1 second or until stopped
|
244
|
+
|
245
|
+
updater_thread = threading.Thread(target=status_updater, daemon=True)
|
246
|
+
updater_thread.start()
|
247
|
+
|
248
|
+
try:
|
249
|
+
final_event = self.agent.chat(prompt=user_prompt)
|
250
|
+
finally:
|
251
|
+
# Signal the updater thread to stop
|
252
|
+
stop_updater.set()
|
253
|
+
# Wait a bit for the thread to clean up
|
254
|
+
updater_thread.join(timeout=0.1)
|
255
|
+
|
211
256
|
if hasattr(self.agent, "set_latest_event"):
|
212
257
|
self.agent.set_latest_event(final_event)
|
213
258
|
self.agent.last_event = final_event
|
@@ -74,8 +74,16 @@ class RichTerminalReporter(EventHandlerBase):
|
|
74
74
|
"""
|
75
75
|
Clears the entire current line in the terminal and returns the cursor to column 1.
|
76
76
|
"""
|
77
|
-
|
78
|
-
|
77
|
+
# Use raw ANSI escape sequences but write directly to the underlying file
|
78
|
+
# to bypass Rich's escaping/interpretation
|
79
|
+
if hasattr(self.console, 'file') and hasattr(self.console.file, 'write'):
|
80
|
+
self.console.file.write("\r\033[2K")
|
81
|
+
self.console.file.flush()
|
82
|
+
else:
|
83
|
+
# Fallback to sys.stdout if console.file is not available
|
84
|
+
import sys
|
85
|
+
sys.stdout.write("\r\033[2K")
|
86
|
+
sys.stdout.flush()
|
79
87
|
|
80
88
|
def on_RequestFinished(self, event):
|
81
89
|
self.delete_current_line()
|
@@ -183,6 +183,9 @@ class LLMAgent:
|
|
183
183
|
elapsed = 0.0
|
184
184
|
if getattr(self, "verbose_agent", False):
|
185
185
|
print("[agent] [DEBUG] Waiting for event from output_queue...")
|
186
|
+
# Show initial wait message
|
187
|
+
if getattr(self, "verbose_agent", False):
|
188
|
+
print(f"[agent] [DEBUG] Starting to wait for LLM response... (timeout: {max_wait_time}s)")
|
186
189
|
# Let KeyboardInterrupt propagate to caller
|
187
190
|
return self._poll_for_event(poll_timeout, max_wait_time)
|
188
191
|
|
@@ -197,6 +200,9 @@ class LLMAgent:
|
|
197
200
|
print(error_msg)
|
198
201
|
print("[DEBUG] Exiting _process_next_response due to timeout")
|
199
202
|
return None, False
|
203
|
+
# Show elapsed time info while waiting
|
204
|
+
if getattr(self, "verbose_agent", False):
|
205
|
+
print(f"[agent] [DEBUG] Waiting for LLM response... ({elapsed:.1f}s elapsed)")
|
200
206
|
continue
|
201
207
|
if getattr(self, "verbose_agent", False):
|
202
208
|
print(f"[agent] [DEBUG] Received event from output_queue: {event}")
|
{janito-3.8.0 → janito-3.9.0/janito}/plugins/core/filemanager/tools/validate_file_syntax/core.py
RENAMED
@@ -3,9 +3,9 @@ from janito.tools.path_utils import expand_path
|
|
3
3
|
from janito.i18n import tr
|
4
4
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
5
5
|
from janito.report_events import ReportAction
|
6
|
-
from janito.tools.
|
6
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
7
7
|
from janito.tools.tool_utils import display_path
|
8
|
-
from janito.tools.
|
8
|
+
from janito.plugins.tools.local.adapter import register_local_tool as register_tool
|
9
9
|
|
10
10
|
from .python_validator import validate_python
|
11
11
|
from .json_validator import validate_json
|
@@ -17,6 +17,7 @@ from .markdown_validator import validate_markdown
|
|
17
17
|
from .js_validator import validate_js
|
18
18
|
from .css_validator import validate_css
|
19
19
|
from .jinja2_validator import validate_jinja2
|
20
|
+
from .txt_validator import validate_txt
|
20
21
|
from janito.tools.loop_protection_decorator import protect_against_loops
|
21
22
|
|
22
23
|
|
@@ -37,6 +38,8 @@ def _get_validator(ext):
|
|
37
38
|
".css": validate_css,
|
38
39
|
".j2": validate_jinja2,
|
39
40
|
".jinja2": validate_jinja2,
|
41
|
+
".txt": validate_txt,
|
42
|
+
".text": validate_txt,
|
40
43
|
}
|
41
44
|
return mapping.get(ext)
|
42
45
|
|
@@ -79,6 +82,7 @@ class ValidateFileSyntaxTool(ToolBase):
|
|
79
82
|
- Markdown (.md)
|
80
83
|
- JavaScript (.js)
|
81
84
|
- Jinja2 templates (.j2, .jinja2)
|
85
|
+
- Text files (.txt, .text) [UTF-8 validation]
|
82
86
|
|
83
87
|
Args:
|
84
88
|
path (str): Path to the file to validate.
|
@@ -86,6 +90,7 @@ class ValidateFileSyntaxTool(ToolBase):
|
|
86
90
|
str: Validation status message. Example:
|
87
91
|
- "✅ Syntax OK"
|
88
92
|
- "⚠️ Warning: Syntax error: <error message>"
|
93
|
+
- "⚠️ Warning: UTF-8 decoding error: <error details>"
|
89
94
|
- "⚠️ Warning: Unsupported file extension: <ext>"
|
90
95
|
"""
|
91
96
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"""Text file validator for UTF-8 encoding validation."""
|
2
|
+
|
3
|
+
import codecs
|
4
|
+
from pathlib import Path
|
5
|
+
|
6
|
+
|
7
|
+
def validate_txt(path: str) -> str:
|
8
|
+
"""
|
9
|
+
Validate a text file for UTF-8 encoding issues.
|
10
|
+
|
11
|
+
Args:
|
12
|
+
path (str): Path to the text file to validate
|
13
|
+
|
14
|
+
Returns:
|
15
|
+
str: Validation status message
|
16
|
+
- "✅ Syntax OK" if file is valid UTF-8
|
17
|
+
- "⚠️ Warning: UTF-8 decoding error: <error details>" if invalid
|
18
|
+
"""
|
19
|
+
try:
|
20
|
+
# Try to read the file with UTF-8 encoding
|
21
|
+
with codecs.open(path, 'r', encoding='utf-8') as f:
|
22
|
+
# Read the entire file to trigger any decoding errors
|
23
|
+
f.read()
|
24
|
+
return "✅ Syntax OK"
|
25
|
+
except UnicodeDecodeError as e:
|
26
|
+
return f"⚠️ Warning: UTF-8 decoding error: {e}"
|
27
|
+
except Exception as e:
|
28
|
+
return f"⚠️ Warning: File read error: {e}"
|
@@ -14,7 +14,7 @@ from .base import Plugin, PluginMetadata
|
|
14
14
|
from .discovery import discover_plugins
|
15
15
|
from .config import load_plugins_config, get_user_plugins_dir
|
16
16
|
from .builtin import BuiltinPluginRegistry, load_builtin_plugin
|
17
|
-
from janito.tools.
|
17
|
+
from janito.plugins.tools.local import LocalToolsAdapter
|
18
18
|
|
19
19
|
logger = logging.getLogger(__name__)
|
20
20
|
|
@@ -207,7 +207,7 @@ def register_local_tool(tool=None):
|
|
207
207
|
# Register the tool on a *fresh* adapter instance to avoid circular
|
208
208
|
# import issues during package initialisation. This keeps behaviour
|
209
209
|
# identical to the original implementation while still allowing
|
210
|
-
# immediate use via the singleton in janito.tools.
|
210
|
+
# immediate use via the singleton in janito.plugins.tools.local.
|
211
211
|
LocalToolsAdapter().register_tool(cls)
|
212
212
|
return cls
|
213
213
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
2
|
-
from janito.tools.
|
2
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
3
3
|
from janito.tools.loop_protection_decorator import protect_against_loops
|
4
4
|
|
5
5
|
from rich import print as rich_print
|
{janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/copy_file.py
RENAMED
@@ -2,7 +2,7 @@ import os
|
|
2
2
|
from janito.tools.path_utils import expand_path
|
3
3
|
import shutil
|
4
4
|
from typing import List, Union
|
5
|
-
from janito.tools.
|
5
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
6
6
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
7
7
|
from janito.tools.tool_utils import display_path
|
8
8
|
from janito.report_events import ReportAction
|
{janito-3.8.0/janito/tools/adapters → janito-3.9.0/janito/plugins/tools}/local/create_file.py
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
from janito.tools.path_utils import expand_path
|
3
|
-
from janito.tools.
|
3
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
4
4
|
|
5
5
|
from janito.tools.tool_utils import display_path
|
6
6
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
@@ -8,7 +8,7 @@ from janito.report_events import ReportAction
|
|
8
8
|
from janito.i18n import tr
|
9
9
|
from janito.tools.loop_protection_decorator import protect_against_loops
|
10
10
|
|
11
|
-
from janito.tools.
|
11
|
+
from janito.plugins.tools.local.validate_file_syntax.core import validate_file_syntax
|
12
12
|
|
13
13
|
|
14
14
|
@register_local_tool
|
@@ -30,12 +30,12 @@ class CreateFileTool(ToolBase):
|
|
30
30
|
- Cross-platform path handling (Windows, macOS, Linux)
|
31
31
|
|
32
32
|
Args:
|
33
|
-
path (str): Target file path. Supports relative and absolute paths, with automatic
|
33
|
+
path (str, required): Target file path. Supports relative and absolute paths, with automatic
|
34
34
|
expansion of user home directory (~) and environment variables.
|
35
35
|
Examples: "src/main.py", "~/Documents/config.json", "$HOME/.env"
|
36
|
-
content (str): File content to write. Empty string creates empty file.
|
36
|
+
content (str, optional): File content to write. Empty string creates empty file.
|
37
37
|
Supports any text content including Unicode characters, newlines,
|
38
|
-
and binary-safe text representation.
|
38
|
+
and binary-safe text representation. Default: "" (empty file)
|
39
39
|
overwrite (bool, optional): If True, allows overwriting existing files. Default: False.
|
40
40
|
When False, prevents accidental overwrites by checking
|
41
41
|
file existence and showing current content. Always review
|
@@ -71,6 +71,10 @@ class CreateFileTool(ToolBase):
|
|
71
71
|
✅ Created file 2 lines.
|
72
72
|
✅ Syntax OK
|
73
73
|
|
74
|
+
Creating empty file:
|
75
|
+
>>> create_file("empty.txt", "")
|
76
|
+
✅ Created file 0 lines.
|
77
|
+
|
74
78
|
Overwrite protection:
|
75
79
|
>>> create_file("existing.txt", "new content")
|
76
80
|
❗ Cannot create file: file already exists at 'existing.txt'.
|
@@ -85,7 +89,7 @@ class CreateFileTool(ToolBase):
|
|
85
89
|
tool_name = "create_file"
|
86
90
|
|
87
91
|
@protect_against_loops(max_calls=5, time_window=10.0, key_field="path")
|
88
|
-
def run(self, path: str, content: str, overwrite: bool = False) -> str:
|
92
|
+
def run(self, path: str, content: str = "", overwrite: bool = False) -> str:
|
89
93
|
path = expand_path(path)
|
90
94
|
disp_path = display_path(path)
|
91
95
|
if os.path.exists(path) and not overwrite:
|
@@ -1,9 +1,9 @@
|
|
1
1
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
2
2
|
from janito.report_events import ReportAction
|
3
|
-
from janito.tools.
|
3
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
4
4
|
from janito.i18n import tr
|
5
5
|
import shutil
|
6
|
-
from janito.tools.
|
6
|
+
from janito.plugins.tools.local.validate_file_syntax.core import validate_file_syntax
|
7
7
|
|
8
8
|
|
9
9
|
@register_local_tool
|
@@ -5,7 +5,7 @@ import json
|
|
5
5
|
from pathlib import Path
|
6
6
|
from bs4 import BeautifulSoup
|
7
7
|
from typing import Dict, Any, Optional
|
8
|
-
from janito.tools.
|
8
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
9
9
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
10
10
|
from janito.report_events import ReportAction
|
11
11
|
from janito.i18n import tr
|
@@ -33,7 +33,7 @@ class FetchUrlTool(ToolBase):
|
|
33
33
|
|
34
34
|
**Error Cache Behavior:**
|
35
35
|
- HTTP 403 errors: Cached for 24 hours (more permanent)
|
36
|
-
- HTTP 404 errors: Cached for 1 hour (
|
36
|
+
- HTTP 404 errors: Cached for 1 hour (shorter duration)
|
37
37
|
- Other 4xx errors: Cached for 30 minutes
|
38
38
|
- 5xx errors: Not cached (retried on each request)
|
39
39
|
|
@@ -151,7 +151,7 @@ class FetchUrlTool(ToolBase):
|
|
151
151
|
# Cache 403 errors for 24 hours (more permanent)
|
152
152
|
expiration_time = 24 * 3600
|
153
153
|
elif entry["status_code"] == 404:
|
154
|
-
# Cache 404 errors for 1 hour (
|
154
|
+
# Cache 404 errors for 1 hour (shorter duration)
|
155
155
|
expiration_time = 3600
|
156
156
|
else:
|
157
157
|
# Cache other 4xx errors for 30 minutes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
2
2
|
from janito.report_events import ReportAction
|
3
|
-
from janito.tools.
|
3
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
4
4
|
from janito.tools.tool_utils import pluralize, display_path
|
5
5
|
from janito.dir_walk_utils import walk_dir_with_gitignore
|
6
6
|
from janito.i18n import tr
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from janito.tools.
|
1
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
2
2
|
from .python_outline import parse_python_outline
|
3
3
|
from .markdown_outline import parse_markdown_outline
|
4
4
|
from janito.formatting import OutlineFormatter
|
@@ -10,7 +10,7 @@ from janito.report_events import ReportAction
|
|
10
10
|
from janito.tools.tool_utils import display_path, pluralize
|
11
11
|
from janito.i18n import tr
|
12
12
|
|
13
|
-
from janito.tools.
|
13
|
+
from janito.plugins.tools.local.adapter import register_local_tool as register_tool
|
14
14
|
from janito.tools.loop_protection_decorator import protect_against_loops
|
15
15
|
|
16
16
|
|
{janito-3.8.0/plugins/core/filemanager/tools → janito-3.9.0/janito/plugins/tools/local}/move_file.py
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
import os
|
2
2
|
from janito.tools.path_utils import expand_path
|
3
3
|
import shutil
|
4
|
-
from janito.tools.
|
4
|
+
from janito.plugins.tools.local.adapter import register_local_tool
|
5
5
|
from janito.tools.tool_utils import display_path
|
6
6
|
from janito.tools.tool_base import ToolBase, ToolPermissions
|
7
7
|
from janito.report_events import ReportAction
|