ayder-cli 2.2.9__tar.gz → 2.3.1__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.
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/.gitignore +0 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/PKG-INFO +120 -14
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/README.md +114 -8
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/PROJECT_STRUCTURE.md +2 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/config.toml.example +38 -19
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/pyproject.toml +29 -6
- ayder_cli-2.3.1/scripts/check_exception_handlers.py +269 -0
- ayder_cli-2.3.1/scripts/check_log_arguments.py +1518 -0
- ayder_cli-2.3.1/scripts/check_logging_imports.py +111 -0
- ayder_cli-2.3.1/scripts/find_percent_logging.py +108 -0
- ayder_cli-2.3.1/scripts/log_argument_baseline.txt +290 -0
- ayder_cli-2.3.1/scripts/logging_gates.py +510 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/callbacks.py +9 -9
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/config.py +13 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/registry.py +28 -11
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/runner.py +21 -16
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/tool.py +0 -3
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/worktree.py +7 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/application/execution_policy.py +5 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/application/runtime_factory.py +10 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/cli.py +84 -21
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/cli_runner.py +24 -8
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/cache_monitor.py +8 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/config.py +94 -38
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/config_migration.py +25 -2
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/default_context_manager.py +58 -7
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/ollama_context_manager.py +48 -19
- ayder_cli-2.3.1/src/ayder_cli/core/reasoning.py +66 -0
- ayder_cli-2.3.1/src/ayder_cli/diagnostics.py +197 -0
- ayder_cli-2.3.1/src/ayder_cli/log.py +44 -0
- ayder_cli-2.3.1/src/ayder_cli/logging_config.py +596 -0
- ayder_cli-2.3.1/src/ayder_cli/loops/chat_loop.py +888 -0
- ayder_cli-2.3.1/src/ayder_cli/masking.py +85 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/process_manager.py +9 -3
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/prompts.py +3 -3
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/claude.py +9 -7
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/gemini.py +10 -7
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama.py +61 -19
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/generic_xml.py +5 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/registry.py +11 -9
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_inspector.py +4 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/openai.py +23 -11
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/qwen.py +44 -20
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/retry.py +19 -14
- ayder_cli-2.3.1/src/ayder_cli/services/messaging_inbox.py +413 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/context.py +9 -6
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/filesystem.py +20 -7
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/filesystem_definitions.py +8 -3
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/notes.py +7 -5
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/search.py +6 -6
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/shell.py +4 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/skill.py +7 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/task_tool.py +4 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/tasks.py +15 -9
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/utils_tools.py +7 -5
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/web.py +4 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/definition.py +15 -11
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/execution.py +41 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/hooks.py +12 -9
- ayder_cli-2.3.1/src/ayder_cli/tools/mcp.py +113 -0
- ayder_cli-2.3.1/src/ayder_cli/tools/mcp_client.py +157 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/plugin_github.py +5 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/plugin_manager.py +22 -14
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/registry.py +15 -6
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/utils.py +12 -11
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/__init__.py +14 -2
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/app.py +223 -31
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/commands.py +154 -22
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/screens.py +29 -4
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/widgets.py +79 -9
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/ui.py +15 -3
- ayder_cli-2.3.1/tests/agents/test_agent_severity.py +106 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_runner.py +61 -3
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_worktree_helpers.py +29 -0
- ayder_cli-2.3.1/tests/application/test_execution_result_truthfulness.py +124 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/application/test_runtime_factory.py +27 -0
- ayder_cli-2.3.1/tests/client/test_main.py +132 -0
- ayder_cli-2.3.1/tests/conftest.py +103 -0
- ayder_cli-2.3.1/tests/core/test_asyncio_bridge.py +597 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_config_coverage.py +4 -4
- ayder_cli-2.3.1/tests/core/test_config_provider_logging.py +54 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_default_context_manager.py +107 -13
- ayder_cli-2.3.1/tests/core/test_event_emission.py +492 -0
- ayder_cli-2.3.1/tests/core/test_event_stream.py +62 -0
- ayder_cli-2.3.1/tests/core/test_exception_guarantee.py +26 -0
- ayder_cli-2.3.1/tests/core/test_exception_hooks.py +470 -0
- ayder_cli-2.3.1/tests/core/test_log_facade.py +63 -0
- ayder_cli-2.3.1/tests/core/test_logging_config_keys.py +70 -0
- ayder_cli-2.3.1/tests/core/test_logging_sinks.py +189 -0
- ayder_cli-2.3.1/tests/core/test_loguru_caplog.py +92 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_ollama_context_manager.py +5 -7
- ayder_cli-2.3.1/tests/core/test_reasoning_config.py +130 -0
- ayder_cli-2.3.1/tests/core/test_session_id_threading.py +300 -0
- ayder_cli-2.3.1/tests/core/test_sink_masking.py +821 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/loops/test_chat_loop_tool_truncation.py +112 -3
- ayder_cli-2.3.1/tests/loops/test_loop_severity.py +130 -0
- ayder_cli-2.3.1/tests/loops/test_required_args_aliases.py +75 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_fallback.py +16 -2
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_ollama_native.py +24 -0
- ayder_cli-2.3.1/tests/providers/test_ollama_parallel_tool_call_ids.py +92 -0
- ayder_cli-2.3.1/tests/providers/test_provider_channel_binding.py +42 -0
- ayder_cli-2.3.1/tests/providers/test_provider_severity.py +101 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_qwen_async.py +57 -0
- ayder_cli-2.3.1/tests/providers/test_reasoning_effort.py +139 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_retrying_provider.py +31 -4
- ayder_cli-2.3.1/tests/scripts/test_exception_gate.py +353 -0
- ayder_cli-2.3.1/tests/scripts/test_log_argument_gate.py +1747 -0
- ayder_cli-2.3.1/tests/scripts/test_logging_policy_gates.py +276 -0
- ayder_cli-2.3.1/tests/scripts/test_loguru_private_shape.py +304 -0
- ayder_cli-2.3.1/tests/services/test_messaging_inbox.py +289 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_cli.py +262 -15
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_context.py +49 -2
- ayder_cli-2.3.1/tests/test_logging_config.py +88 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_tasks.py +37 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_bash_tool.py +10 -6
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_definition_discovery.py +14 -3
- ayder_cli-2.3.1/tests/tools/test_file_editor_size_limit.py +62 -0
- ayder_cli-2.3.1/tests/tools/test_mcp.py +202 -0
- ayder_cli-2.3.1/tests/tools/test_mcp_client.py +158 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_plugin_manager.py +37 -6
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_search_codebase.py +21 -0
- ayder_cli-2.3.1/tests/tools/test_tool_severity.py +109 -0
- ayder_cli-2.3.1/tests/tools/test_unexpected_args.py +99 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_utils.py +56 -3
- ayder_cli-2.3.1/tests/tui/__init__.py +1 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_input_box.py +4 -1
- ayder_cli-2.3.1/tests/tui/test_peer_message_turn.py +202 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_widgets.py +103 -1
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_confirm_screen.py +4 -0
- ayder_cli-2.3.1/tests/ui/test_tui_commands_effort.py +136 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_commands_logging.py +37 -3
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_commands_provider.py +13 -0
- ayder_cli-2.3.1/uv.lock +2441 -0
- ayder_cli-2.2.9/src/ayder_cli/logging_config.py +0 -115
- ayder_cli-2.2.9/src/ayder_cli/loops/chat_loop.py +0 -740
- ayder_cli-2.2.9/tests/client/test_main.py +0 -56
- ayder_cli-2.2.9/tests/core/test_config_provider_logging.py +0 -46
- ayder_cli-2.2.9/tests/test_logging_config.py +0 -82
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/.github/workflows/ci.yml +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/.github/workflows/python-package.yml +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/.python-version +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/AGENTS.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/LICENSE +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/README_AGENT_WORKFLOW.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/README_OLLAMA.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/cc.png +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/superpowers/plans/2026-06-26-file-editor-improvements.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/superpowers/plans/2026-06-26-session-save-resume.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/superpowers/specs/2026-06-26-file-editor-improvements-design.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/docs/superpowers/specs/2026-06-26-session-save-resume-design.md +0 -0
- /ayder_cli-2.2.9/src/ayder_cli/providers/impl/ollama_drivers/__init__.py → /ayder_cli-2.3.1/scripts/exception_baseline.txt +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/__main__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/agents/run.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/application/README.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/application/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/application/message_contract.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/application/validation.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/cli_callbacks.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/console.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/context.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/context_manager.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/context_manager_factory.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/result.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/core/session.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/loops/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/parser.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/base.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/deepseek.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/glm.py +0 -0
- {ayder_cli-2.2.9/tests/providers → ayder_cli-2.3.1/src/ayder_cli/providers/impl}/ollama_drivers/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/_errors.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/base.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/deepseek.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/generic_native.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/matrix.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/minimax.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/impl/ollama_drivers/qwen3.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/providers/orchestrator.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/services/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/services/interactions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/themes/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/themes/ayder.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/themes/claude.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/background_process_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/context_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/note_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/notes_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/process_manager_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/search_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/shell_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/skill_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/task_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/utils_tools_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/builtins/web_definitions.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/normalization.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/plugin_api.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/plugin_status.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tools/schemas.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/adapter.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/helpers.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/keybindings.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/parser.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/rendering.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/theme_manager.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/tui/types.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/src/ayder_cli/version.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/COVERAGE.md +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_agent_consolidated.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_agent_tools.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_callbacks.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_config.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_integration.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_queue.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_registry.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_run.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_runner_provider_unavailable.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/agents/test_worktree_isolation.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/application/test_message_contract.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/convergence/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/convergence/test_execution_policy_parity.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/convergence/test_runtime_wiring.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/convergence/test_validation_path.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_cache_monitor.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_config.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_config_migration.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_config_retry.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_config_v2.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_context_manager_factory.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_default_context_manager_should_compact.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_ollama_context_manager_cache_monitor.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_ollama_context_manager_max_history.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_parameter_aliasing.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_parser.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/core/test_session.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/loops/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/loops/test_base.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/loops/test_chat_loop_hook.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/__init__.py +0 -0
- {ayder_cli-2.2.9/tests/tui → ayder_cli-2.3.1/tests/providers/ollama_drivers}/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_base.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_deepseek.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_errors.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_generic_native.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_generic_xml.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_matrix.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_minimax.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_provider_integration.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_qwen3.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/ollama_drivers/test_registry.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_glm_async.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_ollama_inspector.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_ollama_xml.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_ollama_xml_autoroute.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_ollama_xml_usage.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_orchestrator_capabilities.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_retry_classifier.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/providers/test_retry_integration.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/services/test_boundary.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/services/test_interaction_sink.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_cli_callbacks.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_env_manager.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_notes.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/test_process_manager.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/__init__.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_agent_notes.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_background_process_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_di_injection.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_file_editor_hardening.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_impl.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_impl_coverage.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_note_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_notes_api.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_path_security.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_plugin_api.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_plugin_github.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_plugin_loading.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_plugin_status.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_registry.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_registry_coverage.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_result.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_schemas.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_search_hardening.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_skill_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_task_tool.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tools/test_web.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_agent_list_screen.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_do_clear_coordination.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_follow_mode.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_help_screen.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_keybindings.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_multi_select_screen.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_multiline_input.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_paste.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_pending_compact_consumer.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_pull_delivery.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_resume.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_status_bar_badges.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_themes.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/tui/test_turn_consumer.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_diff_preview.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_plugin_autoenable.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_provider_switch.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_run_tui_startup.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_assistant_sanitization.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_chat_loop.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_commands_agent.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_commands_plugin.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_commands_skill.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_helpers.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_temporal_command.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_tui_widgets.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_ui.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_ui_coverage.py +0 -0
- {ayder_cli-2.2.9 → ayder_cli-2.3.1}/tests/ui/test_ui_verbose.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: ayder-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.1
|
|
4
4
|
Summary: AI agent for any LLMs
|
|
5
5
|
Project-URL: Homepage, https://github.com/ayder/ayder-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/ayder/ayder-cli.git
|
|
@@ -15,7 +15,8 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
16
|
Requires-Python: >=3.12
|
|
17
17
|
Requires-Dist: httpx
|
|
18
|
-
Requires-Dist: loguru
|
|
18
|
+
Requires-Dist: loguru<0.8,>=0.7
|
|
19
|
+
Requires-Dist: mcp<2,>=1.19
|
|
19
20
|
Requires-Dist: ollama>=0.6.2
|
|
20
21
|
Requires-Dist: openai
|
|
21
22
|
Requires-Dist: python-dotenv>=1.0.0
|
|
@@ -26,17 +27,16 @@ Provides-Extra: all
|
|
|
26
27
|
Requires-Dist: anthropic; extra == 'all'
|
|
27
28
|
Requires-Dist: dashscope; extra == 'all'
|
|
28
29
|
Requires-Dist: google-genai; extra == 'all'
|
|
29
|
-
Requires-Dist: zhipuai; extra == 'all'
|
|
30
|
+
Requires-Dist: zhipuai>=2; extra == 'all'
|
|
30
31
|
Provides-Extra: anthropic
|
|
31
32
|
Requires-Dist: anthropic; extra == 'anthropic'
|
|
32
33
|
Provides-Extra: glm
|
|
33
|
-
Requires-Dist: zhipuai; extra == 'glm'
|
|
34
|
+
Requires-Dist: zhipuai>=2; extra == 'glm'
|
|
34
35
|
Provides-Extra: google
|
|
35
36
|
Requires-Dist: google-genai; extra == 'google'
|
|
36
37
|
Provides-Extra: libcst
|
|
37
38
|
Requires-Dist: libcst>=1.0.0; extra == 'libcst'
|
|
38
39
|
Provides-Extra: mcp
|
|
39
|
-
Requires-Dist: mcp; extra == 'mcp'
|
|
40
40
|
Provides-Extra: qwen
|
|
41
41
|
Requires-Dist: dashscope; extra == 'qwen'
|
|
42
42
|
Description-Content-Type: text/markdown
|
|
@@ -209,10 +209,23 @@ tool_tags = ["core", "metadata"] # Enabled tool tags (see /plugin)
|
|
|
209
209
|
agent_timeout = 300 # Seconds before a background agent is cancelled
|
|
210
210
|
|
|
211
211
|
[logging]
|
|
212
|
-
file_enabled
|
|
213
|
-
file_path
|
|
214
|
-
|
|
215
|
-
|
|
212
|
+
file_enabled = true # master switch for ALL file logging
|
|
213
|
+
file_path = ".ayder/log/ayder.log"
|
|
214
|
+
error_path = ".ayder/log/errors.log" # always written unless file_enabled = false
|
|
215
|
+
trace_enabled = false
|
|
216
|
+
trace_path = ".ayder/log/trace.jsonl"
|
|
217
|
+
rotation = "10 MB"
|
|
218
|
+
retention = "7 days"
|
|
219
|
+
# level = "INFO" # optional; omitted entirely when unset, which means NONE.
|
|
220
|
+
# NONE, ERROR, WARNING, INFO, DEBUG, TRACE
|
|
221
|
+
|
|
222
|
+
[logging.channels]
|
|
223
|
+
# Per-channel level overrides. Unlisted channels inherit the global level.
|
|
224
|
+
# Channels: llm, tool, agent, context, plugin, ui, core, external
|
|
225
|
+
# llm = "TRACE" # verbose LLM traffic
|
|
226
|
+
# plugin = "WARNING" # quiet plugin discovery
|
|
227
|
+
# external = "ERROR" # throttle third-party libraries
|
|
228
|
+
# ui = "NONE" # disable this channel entirely
|
|
216
229
|
|
|
217
230
|
[context_manager]
|
|
218
231
|
enabled = true
|
|
@@ -253,6 +266,50 @@ num_ctx = 1000000
|
|
|
253
266
|
|
|
254
267
|
Please adjust `num_ctx` context size window according to your local computer RAM. If Ollama crashes, decrease the value.
|
|
255
268
|
|
|
269
|
+
### Reasoning Effort (`/effort`)
|
|
270
|
+
|
|
271
|
+
Use `/effort` to open a picker, or `/effort high` to change the active session.
|
|
272
|
+
Changes apply between turns and are inherited by future agents that use the
|
|
273
|
+
session's profile; explicit agent settings take precedence. They do not change
|
|
274
|
+
`config.toml`. `/effort default` restores the provider's default behavior
|
|
275
|
+
(omits OpenAI effort and Ollama's `think` parameter).
|
|
276
|
+
|
|
277
|
+
| Driver | Runtime values |
|
|
278
|
+
|--------|----------------|
|
|
279
|
+
| `openai` | `default`, `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
|
|
280
|
+
| `ollama` | `default`, `on`, `off`, `low`, `medium`, `high` (`true`/`false` and `none` are also accepted) |
|
|
281
|
+
|
|
282
|
+
Support varies by model. OpenAI values follow its
|
|
283
|
+
[Chat Completions API](https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create).
|
|
284
|
+
Ollama uses the installed Python SDK's boolean and three-level `think` options;
|
|
285
|
+
its SDK does not yet accept the server API's newer `max` value. GPT-OSS expects
|
|
286
|
+
`low`, `medium`, or `high`, and cannot disable thinking. See
|
|
287
|
+
[Ollama thinking](https://docs.ollama.com/capabilities/thinking).
|
|
288
|
+
|
|
289
|
+
Set persistent defaults per LLM profile and agent:
|
|
290
|
+
|
|
291
|
+
```toml
|
|
292
|
+
[llm.openai]
|
|
293
|
+
driver = "openai"
|
|
294
|
+
reasoning_effort = "medium"
|
|
295
|
+
|
|
296
|
+
[llm.ollama]
|
|
297
|
+
driver = "ollama"
|
|
298
|
+
reasoning_effort = "high"
|
|
299
|
+
|
|
300
|
+
[agents.reviewer]
|
|
301
|
+
provider = "openai"
|
|
302
|
+
reasoning_effort = "high"
|
|
303
|
+
system_prompt = "Review code and report findings."
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Omit an agent's `reasoning_effort` to inherit its profile, or set it to
|
|
307
|
+
`"default"` to clear an inherited effort. On Ollama, `"none"` maps to
|
|
308
|
+
`think = false`; an explicit effort overrides the legacy `think` setting.
|
|
309
|
+
Existing `think = true/false/"low"/"medium"/"high"` profile and agent settings
|
|
310
|
+
remain supported. OpenAI omits reasoning effort by default, preserving
|
|
311
|
+
compatibility with models and endpoints that do not support it.
|
|
312
|
+
|
|
256
313
|
### Changing Models on the Fly (`/model`)
|
|
257
314
|
|
|
258
315
|
You do **not** need a separate profile for every model. The profile defines the *connection* (driver, base URL, API key).
|
|
@@ -379,6 +436,7 @@ You can also manually manage context with the `context` tool and its slash-comma
|
|
|
379
436
|
| `/help` | Show available commands and keyboard shortcuts |
|
|
380
437
|
| `/provider` | Switch LLM provider (interactive selector or direct name) |
|
|
381
438
|
| `/model` | List available models or switch model (e.g., `/model qwen3-coder`) |
|
|
439
|
+
| `/effort` | Pick reasoning effort or set it directly (e.g., `/effort high`) |
|
|
382
440
|
| `/plugin` | Toggle tool plugins by tag (e.g., venv, http, background, python, dbs) |
|
|
383
441
|
| `/tools` | List currently enabled tools and descriptions |
|
|
384
442
|
| `/permission` | Toggle permission levels (r/w/x/http) interactively |
|
|
@@ -389,7 +447,7 @@ You can also manually manage context with the `context` tool and its slash-comma
|
|
|
389
447
|
| `/notes` | Browse and edit markdown notes |
|
|
390
448
|
| `/skill` | Activate a domain skill from `.ayder/skills/` via the shared `skill` tool backend |
|
|
391
449
|
| `/verbose` | Toggle verbose mode |
|
|
392
|
-
| `/logging` | Set log level for current session (NONE, ERROR, WARNING, INFO, DEBUG) |
|
|
450
|
+
| `/logging` | Set log level for current session (NONE, ERROR, WARNING, INFO, DEBUG, TRACE) |
|
|
393
451
|
| `/compact` | Summarize conversation, save a context snapshot, clear, and reload |
|
|
394
452
|
| `/save-context` | Summarize conversation and save it to a named context slot (no clear) |
|
|
395
453
|
| `/load-context` | Load a saved context slot and restore it |
|
|
@@ -406,9 +464,20 @@ You can also manually manage context with the `context` tool and its slash-comma
|
|
|
406
464
|
The LLM can also call `skill(action="list" | "load" | "unload")`
|
|
407
465
|
automatically when a request clearly matches an available project skill.
|
|
408
466
|
|
|
409
|
-
-
|
|
467
|
+
- Errors are always captured to `.ayder/log/errors.log`, even when
|
|
468
|
+
`logging_level` is `NONE`. Set `file_enabled = false` under `[logging]` to
|
|
469
|
+
turn off all file logging including errors.
|
|
470
|
+
- Unhandled exceptions, SIGTERM and SIGINT are captured to
|
|
471
|
+
`.ayder/log/errors.log`. Records in flight are lost on `SIGKILL` (`kill -9`),
|
|
472
|
+
which no process can intercept.
|
|
473
|
+
- Narrative logs go to `.ayder/log/ayder.log` when a level is set.
|
|
474
|
+
- `--trace` writes structured events to `.ayder/log/trace.jsonl`. It is not a
|
|
475
|
+
log level.
|
|
476
|
+
- `--log-channel llm,tool` limits console and narrative output to those
|
|
477
|
+
subsystems. It never filters the error log.
|
|
410
478
|
- TUI `/logging` changes are session-only and do not modify `config.toml`.
|
|
411
|
-
- CLI `--verbose
|
|
479
|
+
- CLI `--verbose` enables stdout logging for that run; it does not narrow
|
|
480
|
+
channels.
|
|
412
481
|
|
|
413
482
|
### Keyboard Shortcuts
|
|
414
483
|
|
|
@@ -646,9 +715,46 @@ RECOMMENDATIONS: Parameterize all DB queries; add Pydantic validators to all end
|
|
|
646
715
|
|
|
647
716
|
This summary is injected into the main LLM's context as a system message so the main agent can act on it, summarize it for you, or chain it to further work.
|
|
648
717
|
|
|
718
|
+
## MCP servers
|
|
719
|
+
|
|
720
|
+
MCP support is built in and installed with Ayder. Add `.ayder/mcp.json` in your
|
|
721
|
+
project root, then start Ayder:
|
|
722
|
+
|
|
723
|
+
```json
|
|
724
|
+
{
|
|
725
|
+
"mcpServers": {
|
|
726
|
+
"local-tools": {
|
|
727
|
+
"command": "python",
|
|
728
|
+
"args": ["server.py"],
|
|
729
|
+
"env": {"EXAMPLE_SETTING": "value"}
|
|
730
|
+
},
|
|
731
|
+
"remote-tools": {
|
|
732
|
+
"url": "http://localhost:8000/mcp"
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
Local servers use stdio and run from the project root; remote servers use
|
|
739
|
+
Streamable HTTP. Their tools automatically join the standard `core` toolset in
|
|
740
|
+
the CLI, TUI, and delegated agents. No plugin installation or `/plugin` toggle
|
|
741
|
+
is needed. Tool calls retain the usual permissions: `x` for stdio servers and
|
|
742
|
+
`http` for HTTP servers. Configure only servers you intend Ayder to connect to:
|
|
743
|
+
local server commands start during runtime initialization to discover tools.
|
|
744
|
+
|
|
745
|
+
Tools keep their server-provided names unless they conflict with an existing
|
|
746
|
+
tool; conflicting names receive a `server__` prefix (and a numeric suffix if
|
|
747
|
+
needed). Unreachable servers are skipped so other tools remain available.
|
|
748
|
+
Connections are shared by agents in the same project and closed on process
|
|
749
|
+
exit. Restart Ayder after changing `mcp.json`.
|
|
750
|
+
|
|
751
|
+
Existing `mcp-tool` plugin installations are automatically skipped in favor of
|
|
752
|
+
built-in support; your existing `.ayder/mcp.json` continues to work. The legacy
|
|
753
|
+
`ayder-cli[mcp]` installation extra is still accepted.
|
|
754
|
+
|
|
649
755
|
## Plugins
|
|
650
756
|
|
|
651
|
-
Official plugins (venv, python, dbs,
|
|
757
|
+
Official plugins (venv, python, dbs, temporal) are maintained in the **[ayder/ayder-plugins](https://github.com/ayder/ayder-plugins)** repository. Install any plugin directly from GitHub:
|
|
652
758
|
|
|
653
759
|
```bash
|
|
654
760
|
ayder install-plugin https://github.com/ayder/ayder-plugins/tree/main/venv-tools
|
|
@@ -166,10 +166,23 @@ tool_tags = ["core", "metadata"] # Enabled tool tags (see /plugin)
|
|
|
166
166
|
agent_timeout = 300 # Seconds before a background agent is cancelled
|
|
167
167
|
|
|
168
168
|
[logging]
|
|
169
|
-
file_enabled
|
|
170
|
-
file_path
|
|
171
|
-
|
|
172
|
-
|
|
169
|
+
file_enabled = true # master switch for ALL file logging
|
|
170
|
+
file_path = ".ayder/log/ayder.log"
|
|
171
|
+
error_path = ".ayder/log/errors.log" # always written unless file_enabled = false
|
|
172
|
+
trace_enabled = false
|
|
173
|
+
trace_path = ".ayder/log/trace.jsonl"
|
|
174
|
+
rotation = "10 MB"
|
|
175
|
+
retention = "7 days"
|
|
176
|
+
# level = "INFO" # optional; omitted entirely when unset, which means NONE.
|
|
177
|
+
# NONE, ERROR, WARNING, INFO, DEBUG, TRACE
|
|
178
|
+
|
|
179
|
+
[logging.channels]
|
|
180
|
+
# Per-channel level overrides. Unlisted channels inherit the global level.
|
|
181
|
+
# Channels: llm, tool, agent, context, plugin, ui, core, external
|
|
182
|
+
# llm = "TRACE" # verbose LLM traffic
|
|
183
|
+
# plugin = "WARNING" # quiet plugin discovery
|
|
184
|
+
# external = "ERROR" # throttle third-party libraries
|
|
185
|
+
# ui = "NONE" # disable this channel entirely
|
|
173
186
|
|
|
174
187
|
[context_manager]
|
|
175
188
|
enabled = true
|
|
@@ -210,6 +223,50 @@ num_ctx = 1000000
|
|
|
210
223
|
|
|
211
224
|
Please adjust `num_ctx` context size window according to your local computer RAM. If Ollama crashes, decrease the value.
|
|
212
225
|
|
|
226
|
+
### Reasoning Effort (`/effort`)
|
|
227
|
+
|
|
228
|
+
Use `/effort` to open a picker, or `/effort high` to change the active session.
|
|
229
|
+
Changes apply between turns and are inherited by future agents that use the
|
|
230
|
+
session's profile; explicit agent settings take precedence. They do not change
|
|
231
|
+
`config.toml`. `/effort default` restores the provider's default behavior
|
|
232
|
+
(omits OpenAI effort and Ollama's `think` parameter).
|
|
233
|
+
|
|
234
|
+
| Driver | Runtime values |
|
|
235
|
+
|--------|----------------|
|
|
236
|
+
| `openai` | `default`, `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
|
|
237
|
+
| `ollama` | `default`, `on`, `off`, `low`, `medium`, `high` (`true`/`false` and `none` are also accepted) |
|
|
238
|
+
|
|
239
|
+
Support varies by model. OpenAI values follow its
|
|
240
|
+
[Chat Completions API](https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create).
|
|
241
|
+
Ollama uses the installed Python SDK's boolean and three-level `think` options;
|
|
242
|
+
its SDK does not yet accept the server API's newer `max` value. GPT-OSS expects
|
|
243
|
+
`low`, `medium`, or `high`, and cannot disable thinking. See
|
|
244
|
+
[Ollama thinking](https://docs.ollama.com/capabilities/thinking).
|
|
245
|
+
|
|
246
|
+
Set persistent defaults per LLM profile and agent:
|
|
247
|
+
|
|
248
|
+
```toml
|
|
249
|
+
[llm.openai]
|
|
250
|
+
driver = "openai"
|
|
251
|
+
reasoning_effort = "medium"
|
|
252
|
+
|
|
253
|
+
[llm.ollama]
|
|
254
|
+
driver = "ollama"
|
|
255
|
+
reasoning_effort = "high"
|
|
256
|
+
|
|
257
|
+
[agents.reviewer]
|
|
258
|
+
provider = "openai"
|
|
259
|
+
reasoning_effort = "high"
|
|
260
|
+
system_prompt = "Review code and report findings."
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Omit an agent's `reasoning_effort` to inherit its profile, or set it to
|
|
264
|
+
`"default"` to clear an inherited effort. On Ollama, `"none"` maps to
|
|
265
|
+
`think = false`; an explicit effort overrides the legacy `think` setting.
|
|
266
|
+
Existing `think = true/false/"low"/"medium"/"high"` profile and agent settings
|
|
267
|
+
remain supported. OpenAI omits reasoning effort by default, preserving
|
|
268
|
+
compatibility with models and endpoints that do not support it.
|
|
269
|
+
|
|
213
270
|
### Changing Models on the Fly (`/model`)
|
|
214
271
|
|
|
215
272
|
You do **not** need a separate profile for every model. The profile defines the *connection* (driver, base URL, API key).
|
|
@@ -336,6 +393,7 @@ You can also manually manage context with the `context` tool and its slash-comma
|
|
|
336
393
|
| `/help` | Show available commands and keyboard shortcuts |
|
|
337
394
|
| `/provider` | Switch LLM provider (interactive selector or direct name) |
|
|
338
395
|
| `/model` | List available models or switch model (e.g., `/model qwen3-coder`) |
|
|
396
|
+
| `/effort` | Pick reasoning effort or set it directly (e.g., `/effort high`) |
|
|
339
397
|
| `/plugin` | Toggle tool plugins by tag (e.g., venv, http, background, python, dbs) |
|
|
340
398
|
| `/tools` | List currently enabled tools and descriptions |
|
|
341
399
|
| `/permission` | Toggle permission levels (r/w/x/http) interactively |
|
|
@@ -346,7 +404,7 @@ You can also manually manage context with the `context` tool and its slash-comma
|
|
|
346
404
|
| `/notes` | Browse and edit markdown notes |
|
|
347
405
|
| `/skill` | Activate a domain skill from `.ayder/skills/` via the shared `skill` tool backend |
|
|
348
406
|
| `/verbose` | Toggle verbose mode |
|
|
349
|
-
| `/logging` | Set log level for current session (NONE, ERROR, WARNING, INFO, DEBUG) |
|
|
407
|
+
| `/logging` | Set log level for current session (NONE, ERROR, WARNING, INFO, DEBUG, TRACE) |
|
|
350
408
|
| `/compact` | Summarize conversation, save a context snapshot, clear, and reload |
|
|
351
409
|
| `/save-context` | Summarize conversation and save it to a named context slot (no clear) |
|
|
352
410
|
| `/load-context` | Load a saved context slot and restore it |
|
|
@@ -363,9 +421,20 @@ You can also manually manage context with the `context` tool and its slash-comma
|
|
|
363
421
|
The LLM can also call `skill(action="list" | "load" | "unload")`
|
|
364
422
|
automatically when a request clearly matches an available project skill.
|
|
365
423
|
|
|
366
|
-
-
|
|
424
|
+
- Errors are always captured to `.ayder/log/errors.log`, even when
|
|
425
|
+
`logging_level` is `NONE`. Set `file_enabled = false` under `[logging]` to
|
|
426
|
+
turn off all file logging including errors.
|
|
427
|
+
- Unhandled exceptions, SIGTERM and SIGINT are captured to
|
|
428
|
+
`.ayder/log/errors.log`. Records in flight are lost on `SIGKILL` (`kill -9`),
|
|
429
|
+
which no process can intercept.
|
|
430
|
+
- Narrative logs go to `.ayder/log/ayder.log` when a level is set.
|
|
431
|
+
- `--trace` writes structured events to `.ayder/log/trace.jsonl`. It is not a
|
|
432
|
+
log level.
|
|
433
|
+
- `--log-channel llm,tool` limits console and narrative output to those
|
|
434
|
+
subsystems. It never filters the error log.
|
|
367
435
|
- TUI `/logging` changes are session-only and do not modify `config.toml`.
|
|
368
|
-
- CLI `--verbose
|
|
436
|
+
- CLI `--verbose` enables stdout logging for that run; it does not narrow
|
|
437
|
+
channels.
|
|
369
438
|
|
|
370
439
|
### Keyboard Shortcuts
|
|
371
440
|
|
|
@@ -603,9 +672,46 @@ RECOMMENDATIONS: Parameterize all DB queries; add Pydantic validators to all end
|
|
|
603
672
|
|
|
604
673
|
This summary is injected into the main LLM's context as a system message so the main agent can act on it, summarize it for you, or chain it to further work.
|
|
605
674
|
|
|
675
|
+
## MCP servers
|
|
676
|
+
|
|
677
|
+
MCP support is built in and installed with Ayder. Add `.ayder/mcp.json` in your
|
|
678
|
+
project root, then start Ayder:
|
|
679
|
+
|
|
680
|
+
```json
|
|
681
|
+
{
|
|
682
|
+
"mcpServers": {
|
|
683
|
+
"local-tools": {
|
|
684
|
+
"command": "python",
|
|
685
|
+
"args": ["server.py"],
|
|
686
|
+
"env": {"EXAMPLE_SETTING": "value"}
|
|
687
|
+
},
|
|
688
|
+
"remote-tools": {
|
|
689
|
+
"url": "http://localhost:8000/mcp"
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
Local servers use stdio and run from the project root; remote servers use
|
|
696
|
+
Streamable HTTP. Their tools automatically join the standard `core` toolset in
|
|
697
|
+
the CLI, TUI, and delegated agents. No plugin installation or `/plugin` toggle
|
|
698
|
+
is needed. Tool calls retain the usual permissions: `x` for stdio servers and
|
|
699
|
+
`http` for HTTP servers. Configure only servers you intend Ayder to connect to:
|
|
700
|
+
local server commands start during runtime initialization to discover tools.
|
|
701
|
+
|
|
702
|
+
Tools keep their server-provided names unless they conflict with an existing
|
|
703
|
+
tool; conflicting names receive a `server__` prefix (and a numeric suffix if
|
|
704
|
+
needed). Unreachable servers are skipped so other tools remain available.
|
|
705
|
+
Connections are shared by agents in the same project and closed on process
|
|
706
|
+
exit. Restart Ayder after changing `mcp.json`.
|
|
707
|
+
|
|
708
|
+
Existing `mcp-tool` plugin installations are automatically skipped in favor of
|
|
709
|
+
built-in support; your existing `.ayder/mcp.json` continues to work. The legacy
|
|
710
|
+
`ayder-cli[mcp]` installation extra is still accepted.
|
|
711
|
+
|
|
606
712
|
## Plugins
|
|
607
713
|
|
|
608
|
-
Official plugins (venv, python, dbs,
|
|
714
|
+
Official plugins (venv, python, dbs, temporal) are maintained in the **[ayder/ayder-plugins](https://github.com/ayder/ayder-plugins)** repository. Install any plugin directly from GitHub:
|
|
609
715
|
|
|
610
716
|
```bash
|
|
611
717
|
ayder install-plugin https://github.com/ayder/ayder-plugins/tree/main/venv-tools
|
|
@@ -160,7 +160,8 @@ cli.py:main()
|
|
|
160
160
|
| `core/context_manager_factory.py` | Registry-based factory (OCP) | `ContextManagerFactory`, `context_manager_factory` |
|
|
161
161
|
| `core/cache_monitor.py` | Timing-based KV-cache hit detection | `CacheMonitor`, `CacheStatus`, `CacheSample` |
|
|
162
162
|
| `console.py` | Rich console singleton | `console` |
|
|
163
|
-
| `
|
|
163
|
+
| `log.py` | Channel-scoped loguru facade; leaf module so `logging_config.py` and `core/config.py` can both depend on it | `get_logger()`, `LOG_LEVELS`, `CHANNELS`, `level_no()`, `flush()` |
|
|
164
|
+
| `logging_config.py` | Logger setup (loguru + stdlib bridge) | `setup_logging()`, `LoggingSettings` |
|
|
164
165
|
| `version.py` | Package version constant | `__version__` |
|
|
165
166
|
|
|
166
167
|
### Root-Level Application Modules
|
|
@@ -48,12 +48,15 @@
|
|
|
48
48
|
# `export OLLAMA_API_KEY="<key>"`. The api_key config field is INERT on the
|
|
49
49
|
# native path, so a missing env var ⇒ 401 Unauthorized.
|
|
50
50
|
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
51
|
+
# Reasoning defaults can be set in [llm.*] and overridden in [agents.*].
|
|
52
|
+
# reasoning_effort = "default" uses existing think behavior on Ollama and omits
|
|
53
|
+
# the effort parameter on OpenAI. Explicit effort overrides legacy `think`.
|
|
54
|
+
# OpenAI: none, minimal, low, medium, high, xhigh, max (model-dependent).
|
|
55
|
+
# Ollama SDK: none (= think=false), low, medium, high. To enable/disable
|
|
56
|
+
# boolean thinking explicitly, the legacy think = true/false still works.
|
|
57
|
+
# Use /effort in the TUI for a session-only override or interactive picker.
|
|
58
|
+
# Explicit unsupported efforts report a server error; only legacy `think`
|
|
59
|
+
# retains the automatic retry with think=false for non-thinking models.
|
|
57
60
|
#
|
|
58
61
|
# NOTE on tuning knobs — which actually take effect depends on the DRIVER. These
|
|
59
62
|
# agents run on the native `ollama` driver, which ignores most of them:
|
|
@@ -69,8 +72,8 @@
|
|
|
69
72
|
# path it sizes the context-manager budget.
|
|
70
73
|
# Default 65536.
|
|
71
74
|
# The per-agent temperature / max_output_tokens values below are largely
|
|
72
|
-
# INERT on this Ollama pipeline; per-agent
|
|
73
|
-
#
|
|
75
|
+
# INERT on this Ollama pipeline; per-agent reasoning_effort takes
|
|
76
|
+
# precedence over the selected profile.
|
|
74
77
|
# =============================================================================
|
|
75
78
|
|
|
76
79
|
config_version = "2.0"
|
|
@@ -117,10 +120,23 @@ theme = "ayder"
|
|
|
117
120
|
palette = "auto"
|
|
118
121
|
|
|
119
122
|
[logging]
|
|
120
|
-
file_enabled
|
|
121
|
-
file_path
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
file_enabled = true # master switch for ALL file logging
|
|
124
|
+
file_path = ".ayder/log/ayder.log"
|
|
125
|
+
error_path = ".ayder/log/errors.log" # always written unless file_enabled = false
|
|
126
|
+
trace_enabled = false
|
|
127
|
+
trace_path = ".ayder/log/trace.jsonl"
|
|
128
|
+
rotation = "10 MB"
|
|
129
|
+
retention = "7 days"
|
|
130
|
+
# level = "INFO" # optional; omitted entirely when unset, which means NONE.
|
|
131
|
+
# NONE, ERROR, WARNING, INFO, DEBUG, TRACE
|
|
132
|
+
|
|
133
|
+
[logging.channels]
|
|
134
|
+
# Per-channel level overrides. Unlisted channels inherit the global level.
|
|
135
|
+
# Channels: llm, tool, agent, context, plugin, ui, core, external
|
|
136
|
+
# llm = "TRACE" # verbose LLM traffic
|
|
137
|
+
# plugin = "WARNING" # quiet plugin discovery
|
|
138
|
+
# external = "ERROR" # throttle third-party libraries
|
|
139
|
+
# ui = "NONE" # disable this channel entirely
|
|
124
140
|
|
|
125
141
|
[context_manager]
|
|
126
142
|
enabled = true
|
|
@@ -154,6 +170,7 @@ driver = "ollama"
|
|
|
154
170
|
base_url = "http://localhost:11434" # route :cloud models through the LOCAL daemon (auth via ~/.ollama/id_ed25519, one-time `ollama signin`)
|
|
155
171
|
model = "deepseek-v4-pro:cloud" # orchestrator default; per-agent `model` overrides this
|
|
156
172
|
num_ctx = 131072
|
|
173
|
+
reasoning_effort = "default"
|
|
157
174
|
think = true # default; set false for known non-thinking models
|
|
158
175
|
# To hit ollama.com directly instead, swap the line above for:
|
|
159
176
|
# base_url = "https://ollama.com" # no /v1; then `export OLLAMA_API_KEY=<key>` (the api_key field is inert on this path)
|
|
@@ -163,6 +180,7 @@ driver = "ollama"
|
|
|
163
180
|
base_url = "http://localhost:11434"
|
|
164
181
|
model = "qwen3.6:35b-a3b-coding-nvfp4"
|
|
165
182
|
num_ctx = 32768 # keep modest: local VRAM is the constraint
|
|
183
|
+
reasoning_effort = "default"
|
|
166
184
|
think = true # default; set false if the selected model rejects thinking
|
|
167
185
|
|
|
168
186
|
# Budget/throughput alternative — swap any cloud agent's `provider` to this, or
|
|
@@ -185,7 +203,8 @@ think = true # default; set false if the selected model r
|
|
|
185
203
|
# num_ctx = 65536 # sizes the context-manager budget (default 65536); NOT sent to the API
|
|
186
204
|
# max_output_tokens = 8192 # -> max_tokens / max_completion_tokens (default 4096); keep WELL below num_ctx
|
|
187
205
|
# stop_sequences = [] # -> stop (default [])
|
|
188
|
-
#
|
|
206
|
+
# reasoning_effort = "medium" # choose a value supported by the selected model
|
|
207
|
+
# # temperature / think are NOT applied by the openai driver.
|
|
189
208
|
|
|
190
209
|
# =============================================================================
|
|
191
210
|
# Agents
|
|
@@ -198,7 +217,7 @@ provider = "ollama_cloud"
|
|
|
198
217
|
model = "glm-5.2:cloud"
|
|
199
218
|
temperature = 0.4
|
|
200
219
|
max_output_tokens = 8192
|
|
201
|
-
|
|
220
|
+
reasoning_effort = "high"
|
|
202
221
|
system_prompt = """
|
|
203
222
|
You are Project Manager #1 — the requirements analyst and spec author.
|
|
204
223
|
|
|
@@ -226,7 +245,7 @@ provider = "ollama_cloud"
|
|
|
226
245
|
model = "deepseek-v4-pro:cloud"
|
|
227
246
|
temperature = 0.2
|
|
228
247
|
max_output_tokens = 4096
|
|
229
|
-
|
|
248
|
+
reasoning_effort = "high"
|
|
230
249
|
system_prompt = """
|
|
231
250
|
You are Project Manager #2 — the independent spec reviewer.
|
|
232
251
|
|
|
@@ -255,7 +274,7 @@ provider = "ollama_cloud"
|
|
|
255
274
|
model = "deepseek-v4-pro:cloud"
|
|
256
275
|
temperature = 0.3
|
|
257
276
|
max_output_tokens = 8192
|
|
258
|
-
|
|
277
|
+
reasoning_effort = "high"
|
|
259
278
|
num_ctx = 262144 # long window: hold the whole spec while splitting it into tasks (delays compaction)
|
|
260
279
|
system_prompt = """
|
|
261
280
|
You are the Architect — you turn an APPROVED spec into an implementation plan.
|
|
@@ -283,7 +302,7 @@ provider = "ollama_cloud"
|
|
|
283
302
|
model = "kimi-k2.7-code:cloud"
|
|
284
303
|
temperature = 0.2
|
|
285
304
|
max_output_tokens = 8192
|
|
286
|
-
|
|
305
|
+
reasoning_effort = "high"
|
|
287
306
|
system_prompt = """
|
|
288
307
|
You are the Architecture Reviewer — independent of the Architect.
|
|
289
308
|
|
|
@@ -385,7 +404,7 @@ provider = "ollama_cloud"
|
|
|
385
404
|
model = "kimi-k2.7-code:cloud"
|
|
386
405
|
temperature = 0.1
|
|
387
406
|
max_output_tokens = 4096
|
|
388
|
-
|
|
407
|
+
reasoning_effort = "high"
|
|
389
408
|
system_prompt = """
|
|
390
409
|
You are the Code Reviewer. You review a diff for correctness and quality.
|
|
391
410
|
|
|
@@ -411,7 +430,7 @@ provider = "ollama_cloud"
|
|
|
411
430
|
model = "minimax-m3:cloud"
|
|
412
431
|
temperature = 0.1
|
|
413
432
|
max_output_tokens = 4096
|
|
414
|
-
|
|
433
|
+
reasoning_effort = "high"
|
|
415
434
|
num_ctx = 262144 # long window: holds spec + all criteria + diff + test output at once
|
|
416
435
|
system_prompt = """
|
|
417
436
|
You are the Acceptance Gate — the final, independent check before "done".
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ayder-cli"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.3.1"
|
|
8
8
|
description = "AI agent for any LLMs"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -22,8 +22,11 @@ classifiers = [
|
|
|
22
22
|
dependencies = [
|
|
23
23
|
"openai",
|
|
24
24
|
"ollama>=0.6.2",
|
|
25
|
-
|
|
25
|
+
# Bounded deliberately: the masking sinks wrap Loguru's private FileSink /
|
|
26
|
+
# Message / StreamSink shapes (§F5-R6), guarded by `_shape_guard()`.
|
|
27
|
+
"loguru>=0.7,<0.8",
|
|
26
28
|
"httpx",
|
|
29
|
+
"mcp>=1.19,<2",
|
|
27
30
|
"rich>=13.0.0",
|
|
28
31
|
# Pinned exactly to match the runtime: 8.2.5+ replaced the single
|
|
29
32
|
# "textual-ansi" builtin with per-theme `ansi` flags and ansi-dark/
|
|
@@ -37,9 +40,12 @@ dependencies = [
|
|
|
37
40
|
anthropic = ["anthropic"]
|
|
38
41
|
google = ["google-genai"]
|
|
39
42
|
qwen = ["dashscope"]
|
|
40
|
-
|
|
43
|
+
# The provider uses the v2 client; do not let MCP's shared PyJWT dependency
|
|
44
|
+
# make the resolver select the incompatible v1 SDK.
|
|
45
|
+
glm = ["zhipuai>=2"]
|
|
41
46
|
all = ["ayder-cli[anthropic,google,qwen,glm]"]
|
|
42
|
-
|
|
47
|
+
# Compatibility extra: MCP is now included in every installation.
|
|
48
|
+
mcp = []
|
|
43
49
|
# Optional: required only by plugins that do CST-based code transforms.
|
|
44
50
|
libcst = ["libcst>=1.0.0"]
|
|
45
51
|
|
|
@@ -69,7 +75,7 @@ dev = [
|
|
|
69
75
|
"anthropic",
|
|
70
76
|
"google-genai",
|
|
71
77
|
"dashscope",
|
|
72
|
-
"zhipuai",
|
|
78
|
+
"zhipuai>=2",
|
|
73
79
|
]
|
|
74
80
|
|
|
75
81
|
[tool.poe.tasks]
|
|
@@ -85,7 +91,16 @@ lint = "ruff check src/"
|
|
|
85
91
|
lint-fix = "ruff check src/ --fix"
|
|
86
92
|
typecheck = "mypy src/"
|
|
87
93
|
format = "ruff format src/"
|
|
88
|
-
check-all = ["lint", "typecheck", "test"]
|
|
94
|
+
check-all = ["lint", "typecheck", "gates", "test"]
|
|
95
|
+
|
|
96
|
+
[tool.poe.tasks.gates]
|
|
97
|
+
help = "Run the logging AST gates"
|
|
98
|
+
sequence = [
|
|
99
|
+
{ cmd = "python scripts/find_percent_logging.py" },
|
|
100
|
+
{ cmd = "python scripts/check_logging_imports.py" },
|
|
101
|
+
{ cmd = "python scripts/check_exception_handlers.py" },
|
|
102
|
+
{ cmd = "python scripts/check_log_arguments.py" },
|
|
103
|
+
]
|
|
89
104
|
|
|
90
105
|
[tool.poe.tasks.clean]
|
|
91
106
|
help = "Deep clean cache and build artifacts"
|
|
@@ -113,3 +128,11 @@ ignore_missing_imports = false
|
|
|
113
128
|
[[tool.mypy.overrides]]
|
|
114
129
|
module = ["zhipuai", "dashscope"]
|
|
115
130
|
ignore_missing_imports = true
|
|
131
|
+
|
|
132
|
+
[tool.ruff.lint]
|
|
133
|
+
# Explicit rule set: ruff 0.16 widened its defaults from 59 to 413 rules,
|
|
134
|
+
# so an implicit default + extend-select drifts with the installed version.
|
|
135
|
+
select = ["E4", "E7", "E9", "F", "TRY400", "TRY401", "BLE001", "LOG", "G"]
|
|
136
|
+
|
|
137
|
+
[tool.ruff.lint.per-file-ignores]
|
|
138
|
+
"tests/**/*.py" = ["BLE001", "G004"]
|